The zip file contains
1. A 128x256 Regular (3,6) H matrix (if you need to simulate other codes, need to write your own code for generating those parity check matrices). The file '128x256regular_v6.mat' is for those using Matlab 6.5.
2. Files for LDPC code simulation over the AWGN channel.
3. Matlab-based and C-based (C-mex file)implementation of the LDPC decoder. The main simulation script contains the commands for the use of both decoders (there are 2 C-based decoders and one Matlab based). The commands for the decoder that are going to be used need to "uncommented", and those for the other decoder need to be "commented".
3a. To compile the C-mex file, need to install a C compiler (I have used Miscosoft Visual C++ 6.0). Then have to go to the Matlab command window and do
">>mex -setup" (then go through the steps of selecting the desired compiler).
">>mex decode_ldpc.cpp" (or ">>mex decode_ldpc_new.cpp"). This will produce a "dll" file by the name of "decode_ldpc.dll" (or "decode_ldpc_new.dll"), and this can then be used by the main script for simulation. I am including already compiled "dll" files which work with Maltab 7.0 (and Matlab 6.5). However if the included "dll" files do not work for you then you have to compile the "*.cpp" files using the method explained above.
3b. The Matlab code uses "Sparse" implementation for the various matrices, and is therefore makes efficient use of memory (this makes some difference if you -like me- use a standard PC for simulation and are using large H matrices that have block length greater than 3000). However if memory and CPU power and not your limitations then the C-based decoder is much faster.
4. The bit errors are counted over the entire code word. The main script needs to be modified for counting bit errors if a systematic matrix is being used.
5. The modulation used is BPSK.
To run a simulation
1. Open the script file by the name of
2. Load a H (parity-check) matrix
3. Set the SNR range
4. Set maximum number of decoder iteration, and maximum number of errored codewords to count for each SNR point (must be at least 30 for reliable estimate, the papers show results for 100-200 codeword errors. OUCH!!!).
5. Select the C-based OR Matlab-based LDPC decoder.
5A. The decoder "decode_ldpc_new" is much faster than "decode_ldpc" (the difference in speed increases with block length).
6. Run the script and wait for the results :) .