The Error Correcting Codes (ECC) Page: Welcome!
The Error Correcting Codes (ECC) Page: Welcome!
Welcome!
This page contains several computer programs, written in C/C++ language (and some Matlab
scripts), that implement encoding and decoding routines of popular error correcting codes (ECC),
such as Reed-Solomon codes, BCH codes, the binary Golay code, a binary Goppa code, a Viterbi
decoder and more. Note that no effort has been made to `optimize' most of the algorithms used
in the programs below. The algorithms work well, but by no means should be used as a basis for
an implementation. All these programs are free to use for academic and personal purposes only.
Use them at your own discretion. Enjoy!
If you have an interest in digital communication or storage system design and implementation
that involves (and believe me, it will!) error control coding, drop me a line, I will be happy to
learn more about novel applications of ECC and also to offer my advice.
I still recommend the following best textbooks to learn more about the fascinating topic of error
correcting codes:
1. S. Lin and D. J. Costello, Jr., Error Control Coding: Fundamentals and Applications,
second edition, Prentice Hall: Englewood Cliffs, NJ, 2004.
2. W.W. Peterson and E.J. Weldon, Jr., Error-Correcting Codes, 2nd edition, MIT Press:
Cambridge, Mass., 1972.
3. F.J. MacWilliams and N.J.A. Sloane, The Theory of Error-Correcting Codes, North-
Holland: New York, NY, 1977.
My textbook, now in its second edition, offers a gentle and hands-on (with a companion website
containing more C and Matlab programs) introduction to the basic principles and applications of
error correcting codes:
Copyright (c) 1996-2008. Robert Morelos-Zaragoza. All rights reserved.
by Barry A. Cipra, Reprinted from SIAM News, Volume 26-1, January 1993
Based on the above program to handle errors and erasures, plus other features. Note: The
program does not work with shortened codes and codes over GF(2^m), m<8 ... it gives
good ideas though.
(Thirumoorthy, 1995)
5. BCH codes
Enter only the length and error correcting capability. The program computes the
generator polynomial of any binary BCH code, plus encoding and decoding using the BM
algorithm.
(Morelos-Zaragoza, 1994).
This BCH code is used in control channels for cellular TDMA in the U.S. Since this code
has only two-error correcting capability, fast decoding is done by pre-solving a system of
two equations (the syndromes) in two unknowns (the error positions), see MacWilliams
and Slone's book, chapter 3. NOTE: There was a "bug" in this program, fixed on 8/27/97.
(Morelos-Zaragoza, 1994).
This BCH code is used in the POCSAG protocol specification for pagers. The program is
identical to the one above, except for the parameters. NOTE: There was a "bug" in this
program. It was fixed 8/27/97.
(Morelos-Zaragoza, 1997).
Fast encoding and decoding by software with look-up tables. The program uses a 16K-
by-16 bit encoding table and an 8K-by-32 bit decoding table.
(Morelos-Zaragoza, 1994).
9. A Goppa code
10. CRC-32
Computes the CRC value of a file, as used in ZMODEM or PKZIP.
(Craig Bruce, 1994)
15. galois.tar
16. A block coded QPSK modulation for unequal error protection (UEP)
This program was used to simulate the performance of a coding scheme proposed in my
Ph.D. thesis for UEP over an AWGN channel. For more details, see R.H. Morelos-
Zaragoza and S. Lin, ``QPSK Block Modulation Codes for Unequal Error Protection,''
IEEE Transactions on Information Theory, Vol. 41, No. 2, pp. 576-581, March 1995.
(Morelos-Zaragoza, 1993)
How good is a code? What are the lower and upper bounds on the minimum distance of a
linear block code given its length and dimension? The answer to this question may be
found on-line! ([email protected], 1995). Also try: http://www.codetables.de/
maintained by Markus Grassl (Thanks to Axel Kohnert for the pointer).
This is a C++ program (compiled for Sparcs) that computes properties of binary codes,
from more basic items such as minimum distance and dimension to more complicated
properties such as trellis decoding complexity and whether the Tanner graph of the code
is cycle-free.
(Ari Trachtenberg, 1998)
The purpose of this tutorial is to introduce the reader to a forward error correction
technique known as convolutional coding with Viterbi decoding. More particularly, this
tutorial will focus primarily on the Viterbi decoding algorithm itself. The intended
audience is anyone interested in designing or understanding wireless digital
communications systems.
(Chip Fleming, 1999)
24. David MacKay's Gallager low density parity-check (LDPC) code resources.
An excellent reference for iterative decoding. Papers on Gallager codes. Matrices for
codes. Source code for decoding.
(David MacKay, 1997)
A few MATLAB routines for encoding/decoding low density parity check codes.
(Igor Kozintsev, 1999)
26. Perl script for a type-C2 algebraic interleaver.
Generates a sequence of distinct numbers such that the length of the sequence can be any
power of 2. A particular characteristic of the generated sequence is that it is symmetric in
the sense that an entry j in row i implies that the entry in row j is i. (Interleaver and
deinterleaver are identical!)
(Oscar Takeshita, 1997)
This site contains some examples of Forward Error Correction (FEC) software and
hardware. You will find software and hardware examples for free download, which are
available as 'C' source code, VHDL source code or as 'VHDL' code generators for
SUN/Solaris.
(Christian Schuler, 1998. Updated 2001)
28. A fast and accurate degree distribution optimizer for ldpc code ensembles
The tool ldpcopt was developed in Switzerland, to search for optimized LDPC degree
distributions for various channels.
(Abdelaziz AMRAOUI, 2001.)
29. Tc_Ds_Analysis.exe
Windows program to compute the distance spectrum of a turbo code and the union bound
on the BER. See the read_me file
(Seokhyun Yoon, 2002.)