ReedSolomon error correction

ReedSolomon error correction is a coding scheme which works by first constructing a polynomial from the data symbols to be transmitted and then sending an oversampled plot of the polynomial instead of the original symbols themselves. Because of the redundant information contained in the oversampled data, it is possible to reconstruct the original polynomial and thus the data symbols even in the face of transmission errors, up to a certain degree of error.
Contents 
Overview of the method
The data points are sent as an encoded block. The total number of mbit symbols in the encoded block is n=2^{m}−1. Thus a ReedSolomon code operating on 8bit symbols has n=2^{8}−1 = 255 symbols per block. (This is a very popular value because of the prevalence of 8bit byteoriented computer systems.) The number k, k < n, of data symbols in the block is a design parameter. A commonly used code encodes k = 223 8bit data symbols plus 32 8bit parity symbols in a n = 255symbol block; this is denoted as a (n, k) = (255,223) code. This particular code is capable of correcting up to 16 symbol errors per block.
The scheme encodes the block's message as points in a polynomial plotted over a finite field. The coefficients of the polynomial are the data symbols of the block. The plot overdetermines the coefficients, which can be recovered from subsets of the plotted points. In the same sense that one can correct a curve by interpolating past a gap, a ReedSolomon code can bridge a series of errors in a block of data to recover the coefficients of the polynomial that drew the original curve.
Properties of ReedSolomon codes
The errorcorrecting ability of any ReedSolomon code is determined by n−k, the measure of redundancy in the block. If the locations of the errored symbols are not known in advance, then a ReedSolomon code can correct up to (n−k)/2 errored symbols, i.e., it can correct half as many errors as there are redundant symbols added to the block. Sometimes error locations are known in advance (e.g. "side information" in demodulator signaltonoise ratios)—these are called erasures. A ReedSolomon code is twice as powerful at erasure correction than at error correction, and any combination of errors and erasures can be corrected as long as the equation 2E + S ≤ (n−k) is satisfied, where E is the number of errors and S is the number of erasures in the block.
The properties of ReedSolomon codes make them especially wellsuited to applications where errors occur in bursts. This is because it does not matter to the code how many bits in a symbol are in error—if multiple bits in a symbol are corrupted it only counts as a single error. Alternatively, if a data stream is not characterized by error bursts or dropouts but by random single bit errors, a ReedSolomon code is usually a poor choice. More effective codes are available for this case. A Viterbidecoded convolutional code is an especially good (and popular) choice when softdecision information is available from the demodulator.
Designers are not required to use the "natural" sizes of ReedSolomon code blocks. A technique known as "shortening" can produce a smaller code of any desired size from a larger code. For example, the widely used (255,223) code can be converted to a (160,128) code by padding the unused portion of the block (usually the beginning) with 95 binary zeroes and not transmitting them. At the decoder, the same portion of the block is loaded locally with binary zeroes. The compact disc is an example of an application of shortened ReedSolomon codes.
Use of ReedSolomon codes in optical and magnetic storage
ReedSolomon coding is very widely used in mass storage systems to correct the burst errors associated with media defects.
ReedSolomon coding is a key component of the compact disc (CD). It was the first use of strong error correction coding in a massproduced consumer product, and DAT and DVD use similar schemes. In the CD, two layers of ReedSolomon coding separated by a 28way convolutional interleaver yields a scheme called CrossInterleaved Reed Solomon Coding (CIRC). The first element of a CIRC decoder is a relatively weak inner (32,28) ReedSolomon code, shortened from a (255,251) code with 8bit symbols. This code can correct up to 2 byte errors per 32byte block. More importantly, it flags as erasures any uncorrectable blocks, i.e., blocks with more than 2 byte errors. The decoded 28byte blocks, with erasure indications, are then spread by the deinterleaver to different blocks of the (28,24) outer code. Thanks to the deinterleaving, an erased 28byte block from the inner code becomes a single erased byte in each of 28 outer code blocks. The outer code easily corrects this, since it can handle up to 4 such erasures per block.
The result is a CIRC that can completely correct error bursts up to 4000 bits, or about 2.5 mm on the disc surface. This code is so strong that most CD playback errors are almost certainly caused by tracking errors that cause the laser to jump track, not by uncorrectable error bursts.
Timeline of ReedSolomon development
The code was invented in 1960 by Irving S. Reed and Gustave Solomon, who were then members of MIT Lincoln Laboratory. Their seminal article was "Polynomial Codes over Certain Finite Fields." When it was written, digital technology was not advanced enough to implement the concept. The key to application of ReedSolomon codes was the invention of an efficient decoding algorithm by Elwyn Berlekamp, a professor of electrical engineering at the University of California, Berkeley. Today they are used in disk drives, CDs, telecommunication and digital broadcast protocols.
Satellite technique: ReedSolomon + Viterbi coding
One significant application of ReedSolomon coding was to encode the digital pictures sent back by the Voyager space probe at Uranus. Voyager introduced ReedSolomon coding in conjunction with Viterbidecoded convolutional codes, a practice that has since become very widespread in deep space and satellite (e.g., direct digital broadcasting) communications.
Viterbi decoders tend to produce errors in short bursts. Correcting these burst errors is a job best done by short or simplified ReedSolomon codes.
Modern versions of concatenated ReedSolomon/Viterbidecoded convolutional coding were and are used on the Mars Pathfinder, Galileo, Mars Exploration Rover and Cassini missions, where they perform within about 1–1.5 dB of the ultimate limit imposed by the Shannon capacity.
These concatenated codes are now being replaced by more powerful turbo codes where the transmitted data does not need to be decoded immediately.
See also
External links
 An application note from 4i2i on some specific implementations (http://www.4i2i.com/reed_solomon_codes.htm)
 a presentation (http://www.cs.cornell.edu/Courses/cs722/2000sp/ReedSolomon.pdf) on Reed & Solomon's paper
 Phil Karn's FEC page (includes GPL source for various ReedSolomon codecs) [1] (http://www.ka9q.net/code/fec/)
 A collection of links to books, online articles and source code [2] (http://www.radionetworkprocessor.com/reedsolomon.html)de:ReedSolomonCode