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 github.com, making it easier for people to create and release
their own versions of this software.
- 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
- 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.)
- 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.
- 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.
- Documented the previously undocumented -t options for pchk-to-alist
- 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).
- 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).
- Fixed bug in distrib.c affecting distributions with a single
number (thanks to Mike Vicuna for pointing it out).
- Fixed bug in -t option for pchk-to-alist (thanks to Andrea Fontana
for reporting this).
- 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:
- 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.
- New programs pchk-to-alist
and alist-to-pchk have
been added, which convert to and from alist
- 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:
The following program module change was made:
- A new -t option has been added to
causes it to print the transpose of the parity check matrix.
The following bugs were fixed:
- 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.
A few minor fixes to the documentation have also been made.
- A bug has been fixed in
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
- The open mode for reading the file of random numbers has been changed from
"r" to "rb", for compatibility with non-Unix systems.
- mod2sparse_copy has
been fixed so that it copies the lr and pr fields
- 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.
Version of 2001-05-04.
Changes and new features regarding programs and associated
documentation and examples:
Changes and new features regarding program modules and other internals:
- 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.
- 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.
- 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.
- 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.
- Channels with noise from a logistic distribution (AWLN) have been
implemented. For details,
see the channel documentation.
- 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.
- 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.
- A new -T option to decode
detailed information on decoding
has been added.
- Doing a make clean will now remove the files created
by running the examples.
- 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".
- 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.
- 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.
The following bugs were fixed:
- Instructions have been added on
how to modify the programs, and some
code has been reorganized to facilitate modifications.
- 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
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.
- New routines
been added, analogous to the previous routines for copying columns.
- 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.
There were also numerous minor cleanups of program code and documentation.
- 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.
- The documentation for
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.
- 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.
Version of 2000-03-19.
This was the first public release.
Back to index for LDPC software