Chapter 6 Reed-Solomon Codes
1. Introduction
The Reed-Solomon codes (RS codes) are nonbinary cyclic codes with code symbols from a Galois field. They were discovered in 1960 by I. Reed and G. Solomon. The work was done when they were at MIT Laboratory.
In the decades since their discovery, RS codes have enjoyed countless applications from compact discs and digital TV in living room to spacecraft and satellite in outer space.
The most important RS codes are codes with symbols from GF( 2m ).
One of the most important features of RS codes is that the minimum distance of an (n, k) RS code is nk+1. Codes of this kind are called maximum-distance-separable codes.
2. RS Codes with Symbols from GF( 2m )
Let be a primitive element in GF( 2m ).
For
any
positive
integer
t 2m 1 ,
there
exists
t-symbol-error-correcting RS code with symbols from GF( 2m ) and the following parameters:
n = 2m 1 n k = 2t k = 2 m 1 2t d min = 2t + 1 = n k + 1
(6- 1)
The generator polynomial is
g ( x ) = ( x + )( x + 2 ) L ( x + 2 t ) = g 0 + g 1 x + g 2 x 2 + L + g 2 t 1 x 2 t 1 + x 2 t
2)
m Where g i GF( 2 )
2 2t Note that g(x) has , , L , as roots.
(6-
Example:
m = 8, t = 16 n = 255 k = n 2t = 223 d min = 33
It is a (255, 223) RS code. This code is NASA standard code for satellite and space communications.
3. Encoding of RS Codes
Let
m ( x ) = m 0 + m1 x + L + m k 1 x k 1
be
the
message
polynomial to be encoded
m Where m i GF( 2 ) and k = n - 2t.
2t Dividing x m( x ) by g(x), we have
x 2 t m ( x ) = a( x ) g ( x ) + b ( x )
2 t 1 where b( x ) = b0 + b1 x + L + b2 t 1 x
(6- 3) (6- 4)
is the remainder.
2t Then b( x ) + x m( x ) is the codeword polynomial for the
message m(x).
The encoding circuit is shown below:
(Lin / Costello p.172)
L
X 2 t a( X )
Encoding circuit for a nonbinary cyclic code.
4. RS Codes for Binary Data
Every element in GF( 2m ) can be represented uniquely by a binary m-tuple, called a m-bit byte.
Suppose an (n, k) RS code with symbols from GF( 2m ) is used for encoding binary data. A message of km bits is first divided into k m-bit bytes. Each m-bit byte is regarded as a symbol in GF( 2m ). The k-byte message is then encoded into n-byte codeword based on the RS encoding rule.
By doing this, we actually expand a RS code with symbols from GF( 2m ) into a binary (nm, km) linear code, called a binary RS code.
Binary RS codes are very effective in correcting bursts of bit errors as long as no more than t bytes are affected.
5. Decoding of RS Codes
RS codes are actually a special class of nonbinary BCH codes.
Decoding of a RS code is similar to the decoding of a BCH code except an additional step is needed.
n 1 m Let c ( x ) = c 0 + c1 x + L + c n1 x , c i GF( 2 ) n 1 m and r ( x ) = r0 + r1 x + L + rn1 x , ri GF( 2 )
Then the error polynomial is
e( x ) = r( x ) c( x ) = e 0 + e 1 x + e 2 x 2 L + e n 1 x n 1
Where e i = ri c i is a symbol in GF( 2m ).
(6- 5)
j j j Suppose e(x) has errors at the locations x 1 , x 2 , L , x , then
e ( x ) = e j1 x j1 + e j2 x j2 + L + e j x j
The error-location numbers are
(6- 6)
Z j1 = j1 , Z j2 = j2 , L , Z j = j
The error values are
e j1 , e j2 , L , e j
Thus, in decoding a RS code, we not only have to determine the error-locations but also have to evaluate the error values.
If there are s erasure symbols and v errors in the received polynomial r(x), then the (n, k) RS decoder and correct these erasure symbols and errors if 2v + s d 1 = n k The received polynomial is represented by
r ( x ) = c ( x ) + e ( x ) + e * ( x ) = c ( x ) + u( x )
Where e(x) and are e*(x) are the error and erasure polynomials, respectively.
6. Errors-only Decoding of RS Codes
For errors-only decoding the received polynomial r(x) has the simply form, r(x)=c(x)+e(x)
2 n 1 m where e ( x ) = e0 + e1 x + e 2 x L + e n1 x , e i GF( 2 )
For e i 0 , let e i denote the error value at the i-th position.
Suppose there are errors, where 2 n k at positions iw for w = 1, 2, L , . The objective of the RS decoder is to find the number of errors, their positions and then their values.
7. Syndrome Computation
n1 Let r ( x ) = r0 + r1 x + L + rn1 x
(6-
7)
2 2t The generator polynomial has , , L , as roots. i i i Since c ( ) = m( ) g ( ), i = 1, 2, L, 2t
We have the relations
r ( ) = c ( ) + e ( ) = e ( ) = e j ij
i i i i j =0
n 1
(6- 8)
The syndrome of the received polynomial is
S = ( S1 , S 2 , L, S 2 t )
i where S i = r ( )
The syndrome can be obtained by using the relationship
r ( x ) = a( x )( x + i ) + bi
m where bi = GF( 2 ) i Thus, S i = r ( ) = bi
The syndrome computation circuit is shown below. (Lin /Costello p. 174)
r( X )
L
i
Figure 6.14 Syndrome computation circuits for Reed-Solomon codes: (a) over GF(2m); (b) in binary form.