24.9 Reed-Solomon Codes – Introduction to Cryptography with Coding Theory, 3rd Edition

24.9 Reed-Solomon Codes

The Reed-Solomon codes, constructed in 1960, are an example of BCH codes. Because they work well for certain types of errors, they have been used in spacecraft communications and in compact discs.

Let F be a finite field with q elements and let n=q1. A basic fact from the theory of finite fields is that F contains a primitive nth root of unity α. Choose d with 1d<n and let

g(X)=(Xα)(Xα2)(Xαd1).

This is a polynomial with coefficients in F. It generates a BCH code C over F of length n, called a Reed-Solomon code.

Since g(α)==g(αd1)=0, the BCH bound implies that the minimum distance for C is at least d. Since g(X) is a polynomial of degree d1, it has at most d nonzero coefficients. Therefore, the codeword corresponding to the coefficients of g(X) is a codeword of weight at most d. It follows that the minimum weight for C is exactly d. The dimension of C is ndeg(g)=n+1d. Therefore, a Reed-Solomon code is a cyclic [n, n+1d, d] code.

The codewords in C correspond to the polynomials

g(X)f(X) with deg(f)nd.

There are qnd+1 such polynomials f(X) since there are q choices for each of the nd+1 coefficients of f(X), and thus there are qnd+1 codewords in C. Therefore, a Reed-Solomon code is a MDS code, namely, one that makes the Singleton bound (Section 24.3) an equality.

Example

Let F=Z7={0, 1, 2, , 6}, the integers mod 7. Then q=7 and n=q1=6. A primitive sixth root of unity α in F is the same as a primitive root mod 7 (see Section 3.7). We may take α=3. Choose d=4. Then

g(X)=(X3)(X32)(X33)=X3+3X2+X+6.

The code has generating matrix

G=613100061310006131.

There are 73=343 codewords in the code, obtained by taking all linear combinations mod 7 of the three rows of G. The minimum weight of the code is 4.

Example

Let F=GF(4)={0, 1, ω, ω2}, which was introduced in Section 3.11. Then F has 4 elements, n=q1=3, and α=ω. Choose d=2, so

g(X)=(Xω).

The matrix

G=ω100ω1

is a generating matrix for the code. The code contains all 16 linear combinations of the two rows of G, for example,

ω(ω, 1, 0)+1(0, ω, 1)=(ω2, 0, 1).

The minimum weight of the code is 2.

In many applications, errors are not randomly distributed. Instead, they occur in bursts. For example, in a CD, a scratch introduces errors in many adjacent bits. A burst of solar energy could have a similar effect on communications from a spacecraft. Reed-Solomon codes are useful in such situations.

For example, suppose we take F=GF(28). The elements of F are represented as bytes of eight bits each, as in Section 3.11. We have n=281=255. Let d=33. The codewords are then vectors consisting of 255 bytes. There are 222 information bytes and 33 check bytes. These codewords are sent as strings of 8×255=2040 binary bits. Disturbances in the transmission will corrupt some of these bits. However, in the case of bursts, these bits will often be in a small region of the transmitted string. If, for example, the corrupted bits all lie within a string of 121 (=15×8+1) consecutive bits, there can be errors in at most 16 bytes. Therefore, these errors can be corrected (because 16<d/2). On the other hand, if there were 121 bit errors randomly distributed through the string of 2040 bits, numerous bytes would be corrupted, and correct decoding would not be possible. Therefore, the choice of code depends on the type of errors that are expected.