Release Notes for LDPC-codes Software

These notes describe all the stable public releases of this software. Old and future releases can be obtained via
The current development version is now maintained at

Version of 2012-02-11.

This version has a few bug fixes and some minor new features. The major change is that a source repository for the software is now hosted at, making it easier for people to create and release their own versions of this software.
  1. Changed the copyright notice (in the file COPYRIGHT, and elsewhere) to remove the requirement that my web site be referenced. (Nowadays, I think users should have no problem finding the sources using a search engine.)
  2. Included a copy of the nrand48 routine from the GNU C library in the rand.c module, to ensure that it is always available and always the same. (This isn't so on some versions of cygwin.)
  3. Added a -f option to encode and decode that forces flushing after writing each block. Useful for allowing encode or decode to be used as a server, reading and writing blocks from named pipes.
  4. Added a -z option for pchk-to-alist to suppress output of 0 row and column indexes that pad up to the maximum number used.
  5. Documented the previously undocumented -t options for pchk-to-alist and alist-to-pchk.
  6. Changed alist-to-pchk so that it no longer requires zero indexes that pad out to the maximum needed for a row or column (thanks to Monica Kolb for suggesting this).
  7. Changed mod2word type in mod2dense.c to uint32_t, to avoid wasted space when long is 64 bits (thanks to Mathieu Cunche and Vincent Roca for suggesting this).
  8. Fixed bug in distrib.c affecting distributions with a single number (thanks to Mike Vicuna for pointing it out).
  9. Fixed bug in -t option for pchk-to-alist (thanks to Andrea Fontana for reporting this).
  10. Fixed references in the documentation to mod2sparse_multvec that should be to mod2sparse_mulvec (thanks to Andrea Fontana for reporting this).

Version of 2006-02-08.

The copyright notice has been changed in this release to no longer restrict use to purposes of research or education. The new copyright notice can be read here. It is now possible to create LDPC codes with varying numbers of checks per bit (an extension based on work by Peter Junteng Liu). New programs for converting to and from the alist format for parity check matrices, used by David MacKay and others, have also been added.

The following new features have been added:

  1. The make-ldpc program can new create LDPC codes with varying numbers of checks per bit. The examples now include a code of this sort.
  2. New programs pchk-to-alist and alist-to-pchk have been added, which convert to and from alist format.
  3. A run-examples script has been added, which runs all the examples and compares with the saved output that I obtained.

Version of 2001-11-18.

This is a minor release, whose main purpose is fixing bug (1) below. Also, this release has been tested and found to work with the cygwin Unix environment that runs under Microsoft Windows.

The following new feature has been added:

  1. A new -t option has been added to print-pchk, which causes it to print the transpose of the parity check matrix.
The following program module change was made:
  1. The behaviour of mod2dense_invert_selected has been changed when the matrix has dependent rows. The result returned contains the inverse of a sub-matrix in its initial columns. The contents of the remaining columns up to the number of rows was previously undefined, but these columns are now set to contain zeros. This was done to fix bug (1) below.
The following bugs were fixed:
  1. A bug has been fixed in make-gen which sometimes produced invalid `dense' or `mixed' generator matrices when the parity check matrix had redundant rows. The `sparse' generator matrices were not affected. The output of the ex-dep example has changed slightly as a result.
  2. The open mode for reading the file of random numbers has been changed from "r" to "rb", for compatibility with non-Unix systems.
  3. mod2sparse_copy has been fixed so that it copies the lr and pr fields of entries.
  4. The "set -v -e" in the command files for the examples has been replaced by two commands, "set -e" and "set -v", since some shells can't set two options at once.
A few minor fixes to the documentation have also been made.

Version of 2001-05-04.

Changes and new features regarding programs and associated documentation and examples:
  1. Warnings have been added to the documentation about the dangers of using zero codewords for testing (due to the possibility of the decoder accidently being non-symmetric). The examples have been changed to not use zero codewords, except for ex-ham7a, which still demonstrates this facility.
  2. Decoding by probability propagation has been changed so that if a probability ratio gets set to NaN ("not a number", the result of infinite but conflicting evidence from different sources), the probability ratio is changed to 1, in hopes that something sensible may result.
  3. The decoding procedures have been changed to decode a bit to a 1 if there is a tie, so that any resulting asymmetry in decoding will make zero decoding less, rather than more, likely. See point (1) above.
  4. All programs now allow a file name argument to be "-", which specifies standard input or standard output, as appropriate. The ex-ldpc36-5000a example has been changed to use this facility in order to avoid creating lots of files.
  5. Channels with noise from a logistic distribution (AWLN) have been implemented. For details, see the channel documentation.
  6. The make-gen program for "dense" or "mixed" options was modified so that when some parity checks are redundant, others are not declared redundant when they aren't. This makes the result compatible with what is obtained with the "sparse" option. The example in the discussion of linear dependence in parity check matrices has changed slightly as a result.
  7. The messages displayed by the decode program have changed slightly: The block size is no longer displayed, and the percentage of bits changed is now shown. The data output when the -t option is specified now includes the number of bits changed in each block.
  8. A new -T option to decode for displaying detailed information on decoding has been added.
  9. Doing a make clean will now remove the files created by running the examples.
  10. The files created by the examples now start with "ex-" and contain a ".", to make them easier to identify for cleanup, and the saved output file now ends in "-out" rather than ".out".
  11. The scripts for the examples now use the -v option of set rather than -x, so that the command lines are echoed faithfully as they are read.
  12. Two new examples have been added: ex-dep demonstrates what happens when parity check matrices have redundant row, and ex-wrong-model investigates what happens when the wrong model is used to decode.
Changes and new features regarding program modules and other internals:
  1. Instructions have been added on how to modify the programs, and some code has been reorganized to facilitate modifications.
  2. The makefile has been made trivial, simply recompiling everything from scratch every time. This is simpler and less error prone than putting in dependencies. Compiling all the programs takes only about five seconds on a modern PC.
  3. The mod2dense_invert_selected procedure has been changed to take an additional argument in which a permutation of rows is returned. This extension is needed in order for the result when the matrix is not of full rank to include as many rows as possible, as needed for the above modification of make-gen.
  4. New routines mod2dense_copyrows and mod2sparse_copyrows have been added, analogous to the previous routines for copying columns.
  5. The decoding procedures have been changed to always return the bit probabilities (previously, one could pass a null pointer to suppress this). This makes things simpler, and facilitates the production of detailed trace output when the -T option is used.
The following bugs were fixed:
  1. A problem with print-gen prevented the -d option from working in most cases. The documentation was also fixed to note what the L and U matrices printed will look like.
  2. The documentation for mod2sparse_copycols and mod2dense_copycols was ambiguous. It has been clarified. The dense and sparse implementations were inconsistent. The sparse version has been changed to match the dense version, which was and is the only version actually used in the LDPC software.
  3. In decode.c, a variable declared to be float was printed using "%f", which strangely didn't work with one compiler. It's now declared as double.
There were also numerous minor cleanups of program code and documentation.

Version of 2000-03-19.

This was the first public release.
Back to index for LDPC software