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 :) .
Shaikh Faisal Zaheer (2020). LDPC Code Simulation (https://www.mathworks.com/matlabcentral/fileexchange/8977-ldpc-code-simulation), MATLAB Central File Exchange. Retrieved .
Sir I have installed compiler and when I am using the command ''mex decode_ldpc.cpp" (or mex decode_ldpc_new.cpp") many errors are coming for example "warning C4273: 'atanh' : inconsistent dll linkage" and "error C2065: 'iteration' : undeclared identifier" and "'pow' : ambiguous call to overloaded function" like wise many errors are coming what I have to do. please help me
Not working for random data
Has anyone tried to change the encoder and decoder to send a code word made by random data instead of the all zeros one? Thank you!
Hi Mr. Shaikh,
I want to know the value of vhat after every single iteration, given any value of max_iter. Thanks for your help in advance.
very nice.u did a great job.
how to load Load a H (parity-check) matrix? please email the detail step firstname.lastname@example.org. tq.
Can anybody plz tell me how to do the same using simulink
thank you so much
I would like to know how you convert m-file function of the decoder to be in mex format. Please verify in steps to be able to convert mine.
thanks great work and nice work by author
congrats to get good review from all persons
best of luck for ur future work
Has anyone tried to modify the (encoder and decoder) code and use random data generator rather than all zero code word?
Please could anyone tell me the meaning of the inputs in decode_ldpc_matlab.m file.
I know that:
rx_waveform - received vector
No - noise
h - parity check matrix
rows - rows of the parity check matrix(correct me if I am wrong!!)
cols - columns of the parity check matrix(again correct me if I am wrong!!)
max_iter - Maiximum iteartion
BUT I AM NOT SURE WHAT ind,r,c input should be? Anyone, can you tell me?
Thanks in advance.
very good thanks you !!
how the LLR is computed in this code , i cudn't get it please somebody put comments on this
very good ,thank you
lovely code sir its awesome
its nice ...but i have one problem regarding c simulation .files mex.h and matrix.h is not included in zip file so please send these files to my mail
I had problem in simulation of LDPC codes of lengths larger than 10000.My PC is showing insufficient memory.
i am using system with 2GB RAM.
can any one suggest me the solution .If I increase the RAM size will it sort out.If so to what extent do I need to extend? Please mail me on email@example.com
First thank u provide this program.but i have some problem need to understand.first!H matrix's row and column maximum one's numbers are not equal (3,6)??Second!What is the decoder algorithm in accordance with??
great algorithms you are making my name bright brother keep it up
good worl but quite complicated
i appreciate your effort
God Bless You ..Thnx
what decoding algorithms do you use?
how to use this in Matlab for Linux ?
This will work with out any doubt, not only for detecting errors& to plot.For passing image and to detect it also(But he did not mention which decoding algorithem is used)when i am searching i do not know which one i have to kept for this one.
The simulator is easy to read and to make it work, and surely helps to understand ho LDPC decoding works. I would like to know if it works even with block up to 20 000, I tried to use it on matrices proposed by MacKay but it seems not to work...it takes to much to do an iteration and at zero SNR cannot find any biterrror, that is strange.
It works perfectly, I really needed a simulator for ldpc to start with...you are saving me a lot of time. I would like to know if this simulator only works for regular ldpc, when are you using the assumption that h is regular?
My Graduation practice is about LDPC code.
You have given me very big help.Thanks a lot.
I would like to know the method you used for encoding of bits using the H matrix. Did you use the method, where the G matrix is contructed from the H matrix by using gauss-jordan elimination????? Pleas let me know .
Prepares a milestone step for a student who needs to work on LDPC coding.
I want to know....which paper have u followed for this simulation....cause different authors have different design perspectives for the H matrix
nice work , the codes similar to the LDPC i.e.Turbo codes,i want implementation for this codes for image transmission.
Firstly, excellent job.
Now some doubts, the cpp files (decode C++ routines) needs some header files (mex.h & matrix.h) which r not provided in the zip file, if u can mail me those header files plz.
And when i try to simulate codes of around length 4k, and about 2dB, then Matlab stops responding after sometime (while it runs properly upto value of around 1.6dB).
Is there any problem at BERs of the order of 10e-8 in the code? I mean some underflow errors?
Excellent work!! This is one of the best implementations of LDPC decoding i've seen.
This program can simulate LDPC decoding, but there are following two problems.
One problem of the program is the LDPC codes, I find that there are Girth-4s in the H matrix, so the BER of the program is not good as many reported results.
Another problem is the decoding algorithm is still complicated, it is difficult to realize the algorithm by DSP hardware.
Thanks in advance!
why is the parity check matrix H in the file 128x256regular.mat not a regular LDPC code? I thought regular LDPC code means that there are equal number of 1's in each rows and equal number of 1's in each column. Please clearify!!!
First of all, this is a great program!
It doesn't matter if the transmitted codeword is the all-zero, since the code is linear and the channel is symmetric. If you want a more realistic simmulation, you can modify the routine to encode and transmit random bits. Just remember that the encoding will not be so easy and the performance will not be improved.
this program is not practical because of the codeword is all zero without encoding, could you explain for that?
Great effort and well written code
Ok thank for your simulation, but may i ask?, why ur generate random data with zeros data in ur codeword??
You did a great job!
Thank you Faisal for the great contribution.
The Matrix H may be a regular and low density binary matrix with parity check
nice work by author
congrats to get good review from all persons
best of luck for ur future work
The update contains a bug fix: the program part for finding 1's in the H matrix for input to the new C-based decoder used the 'hist' function, which sometimes caused an error This problem has now been fixed.
The code for LDPC code simulation has now been enhanced. The C-Mex based LDPC decoder is now at least twice as fast as before (the old code is still included).