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:

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:

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)

Nicely
written, greatly
improved version of the program above. It now lets the user create
multiple
encoders at run time with specified parameters You can get the latest
package here.
Check
also Phil's home page.
(Phil Karn, 2006).

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).

Encoding/Decoding
of a (1024,654,75) Goppa code (originally written with a public key
cryptographic scheme in mind). This program is a compact implementation
of Goppa codes with parameters m=10, t=37 for 32-bit machines. Decoding
method due to N. Patterson, ``Algebraic Decoding of Goppa Codes,'' IEEE
Trans. Info.Theory, 21 (1975), 203-207.
(Anonymous, as far as I know)

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! (remkor@win.tue.nl, 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)

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)