Reed-Solomon codecs (coder/decoders) are all about error correction. The maths
behind RS codes was developed by Irving Reed and Gus Solomon back in 1959, hence
the name. In recent years this type of coding has been used in many applications
where data is transmitted and received. Examples include cellphones, digital TV
broadcast, space communications and CD players. In fact any application where
data is likely to be corrupted by noise or other error sources. Users are
likely to be any company involved in wireless communications, communications or
data transmission. RS codes are specified in many data transmission standards,
e.g. the ATSC digital TV standard.
RS codes provide extremely good error correction. It is one of the most
effective forms of coding for errors that occur in a burst. For this reason
they are often coupled with Viterbi codecs in a system. Viterbi
(or convolution) coding is another type of error correction that is very good
at random errors.
RS is a block-code, i.e. data is processed a block at a time. Each block
contains n words (or symbols). Of the n symbols, k are the original
information symbols to be transmitted and (n-k) are extra check symbols added
by the RS Encoder. The RS Decoder is able to correct (n-k)/2 wrong symbols,
no matter where they are in the block.
The core can report how many errors were found and also attempts to determine
if it failed to correct the block, due to too many errors.
Erasures are an optional extra that double the number of errors that can be
corrected at the expense of a much bigger circuit. An erased symbol is one
that is coming in and the system already knows it has an error. An extra input
to the Decoder tells it the symbol is erased. This sort of information can
come from a threshold detector in a demodulator for example. Therefore the
system designer has to add extra hardware to his board. For this reason
erasure decoding isn't that common.
The coding is based on Galois Field arithmetic and this is where terms like
"primitive polynomial" come from. The user doesn't actually need to know
anything about this.