Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork4
My implementation of LDPC codes. For details visit:https://yairmz.github.io/LDPC/
License
YairMZ/LDPC
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
My implementation of LDPC codes.My notes regarding theory and implementation appears on GitHub Pages:https://yairmz.github.io/LDPC/
To install:
pip install sim-ldpc
To run tests simply clone, cd into the cloned repo, and run:
python -m pytest
or
python -m pytest --cov-report=html
to run also coverage tests, or
python -m pytest -n auto --cov-report=html
to run tests in parallel (with number of CPU's dictated by machine) to speed up tests.
Verify static typing with
mypy --strict --config-file .mypy.ini.
- Utilities: implementing various utility operations to assist with encoding, decoding andsimulations.
- Encoder: implementing a generator based encoder, and encoders for IEEE802.11 (WiFi) LDPC codes.
- Decoder: implementing several decoders
- Log-SPA based BP decoder
- MS decodcer
- Gallager bit filpping decoder
- Weighted bit flipping decoders, several variants
- Parallel probabilistic bit flipping decoder (PPBF)
importnumpyasnpfrombitstringimportBitArray,Bitsfromldpc.decoderimportDecoderWiFi,bsc_llrfromldpc.encoderimportEncoderWiFifromldpc.wifi_spec_codesimportWiFiSpecCodefromldpc.utilsimportQCFile# create information bearing bitsrng=np.random.default_rng()info_bits=np.array(Bits(bytes=rng.bytes(41))[:648//2],dtype=np.int_)# create encoder with frame of 648 bits, and rate 1/2. Possible rates and frame sizes are per the ieee802.11n spec.enc=EncoderWiFi(WiFiSpecCode.N648_R12)# encode bitsencoded=enc.encode(info_bits)# verify validity of codewordh=enc.hnp.dot(h,np.array(encoded))%2# creates an all zero vector as required.# create a decoder which assumes a probability of p=0.05 for bit flips by the channel# allow up to 20 iterations for the bp decoder.p=0.05decoder=DecoderWiFi(spec=WiFiSpecCode.N648_R12,max_iter=20,channel_model=bsc_llr(p=p))# create a corrupted version of encoded codeword with error rate pcorrupted=BitArray(encoded)no_errors=int(len(corrupted)*p)error_idx=rng.choice(len(corrupted),size=no_errors,replace=False)foridxinerror_idx:corrupted[idx]=notcorrupted[idx]decoded,llr,decode_success,num_of_iterations,syndrome,vnode_validity=decoder.decode(corrupted)# Verify correct decodingprint(Bits(decoded)==Bits(encoded))# trueinfo=decoder.info_bits(decoded)# a decoder can also be instantiated without a channel model, in which case llr is expected to be sent for decoding instead of# hard channel outputs.channel=bsc_llr(p=p)channel_llr=channel(np.array(corrupted,dtype=np.int_))decoder=DecoderWiFi(spec=WiFiSpecCode.N648_R12,max_iter=20)decoded,llr2,decode_success,num_of_iterations,syndrome,vnode_validity=decoder.decode(channel_llr)print(Bits(decoded)==Bits(encoded))# trueinfo=decoder.info_bits(decoded)
The example is also included as a jupyter notebook. Note however, that you need to launch the notebook from the correctpath for it to be able to access installed packages. To run the notebook:
- create a new virtualenv
python3 -m venv~/.virtualenv/LDPC_env
- activate it and install
sim-ldpc
, andnotebook
:
source~/.virtualenv/LDPC_env/bin/activatepip install sim-ldpcpip install notebook
- run jupyter from within the virtual env for it to have access to all requirements:
~/.virtualenv/LDPC_env/bin/jupyter-notebook
- run the notebook
- Cai Z., Hao J., Tan P.H., Sun S., Chin P.S., Efficient encoding of IEEE 802.11n LDPC codes. Electronics Letters 25,1471--1472 (2006).
- IEEE802.11 encoder tested against the implementation inhttps://github.com/tavildar/LDPC
- Channel codes : classical and modernby William E. Ryan, 2009.
About
My implementation of LDPC codes. For details visit:https://yairmz.github.io/LDPC/
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.