MATH 567: Coding Theory 20 April 2009
University of Michigan Andrey Goder
Decoding Reed-Solomon Codes
1 Introduction
First, recall the definition of Reed-Solomon codes.
Definition 1. Let p be a prime, and q = pr. Let α be a generator of Fq{0}. Then
S(k) = f (1) , f (α) , f α2
, ..., f αq−2
: f(x) ∈ Fp[x], deg f < k
is a Reed-Solomon code.
This gives a [q − 1, k, q − k] code.
2 Encoding
Let S(k) be a Reed-Solomon code. How can we use S(k) to encode a message? There are qk
polynomials of deg < k, so for each of qk different messages, we can send the corresponding
codeword.
Example 1. One common choice is q = 28 = 256 and k = 223. This gives a [255, 223, 33] code.
Each symbol of F256 can be conveniently represented by a byte. So to send the 223-byte message,
we simply read each byte as the coefficient of a degree 222 polynomial, and then evaluate that
polynomial at the 255 points of F255{0}. As we will see, this code can correct up to 16 errors.
3 Decoding
Let’s say we receive a message encoded by a Reed-Solomon code S(k). How many errors can we
correct? In general, there is an upper bound for all codes.
Proposition 3.1. Let C be a code with a minimum distance of d. Then it is impossible to (uniquely)
correct more than e = d−1
2 errors.
Proof. Let x, y be codewords with d(x, y) = d. Assume, without loss of generality, that they differ
in the first d positions. Let z be the codeword x, but with the first e positions changed to match
y. Then if we have at least e+1 errors and we receive z, either x or y could have been the original
codeword. So unique decoding is impossible.
Our goal is therefore to find an efficient way of decoding given that there are at most e errors.
For Reed-Solomon codes the Welch-Berlekamp algorithm achieves this.
When we receive a message encoded by S(k), we assume that we have α ∈ Fq{0} available, as
well as the received string (a0, a1, ..., aq−2).
1
Definition 2. Let S(k) be a Reed-Solomon code and (a0, a1, ..., aq−2) a received message. Let
f(x) ∈ Fq[x] with deg f < k. Then define the error set as
E(f) = i : f αi
= ai .
Our goal is to find some f such that |E(f)| ≤ e. To that end, we introduce the error polynomial.
Definition 3. The error polynomial for a message (a0, a1, ..., aq−2) is defined by
Ef (x) =
i∈E(f)
x − αi
.
Set Nf (x) = Ef (x)f(x).
Proposition 3.2.
∀i, Nf (αi
) = Ef (αi
)ai.
Proof. We have Nf (αi) = Ef (αi)f(αi), so if f(αi) = ai then we are done. Otherwise, Ef (αi) = 0,
so both sides are 0.
2

Decoding algorithms

  • 1.
    MATH 567: CodingTheory 20 April 2009 University of Michigan Andrey Goder Decoding Reed-Solomon Codes 1 Introduction First, recall the definition of Reed-Solomon codes. Definition 1. Let p be a prime, and q = pr. Let α be a generator of Fq{0}. Then S(k) = f (1) , f (α) , f α2 , ..., f αq−2 : f(x) ∈ Fp[x], deg f < k is a Reed-Solomon code. This gives a [q − 1, k, q − k] code. 2 Encoding Let S(k) be a Reed-Solomon code. How can we use S(k) to encode a message? There are qk polynomials of deg < k, so for each of qk different messages, we can send the corresponding codeword. Example 1. One common choice is q = 28 = 256 and k = 223. This gives a [255, 223, 33] code. Each symbol of F256 can be conveniently represented by a byte. So to send the 223-byte message, we simply read each byte as the coefficient of a degree 222 polynomial, and then evaluate that polynomial at the 255 points of F255{0}. As we will see, this code can correct up to 16 errors. 3 Decoding Let’s say we receive a message encoded by a Reed-Solomon code S(k). How many errors can we correct? In general, there is an upper bound for all codes. Proposition 3.1. Let C be a code with a minimum distance of d. Then it is impossible to (uniquely) correct more than e = d−1 2 errors. Proof. Let x, y be codewords with d(x, y) = d. Assume, without loss of generality, that they differ in the first d positions. Let z be the codeword x, but with the first e positions changed to match y. Then if we have at least e+1 errors and we receive z, either x or y could have been the original codeword. So unique decoding is impossible. Our goal is therefore to find an efficient way of decoding given that there are at most e errors. For Reed-Solomon codes the Welch-Berlekamp algorithm achieves this. When we receive a message encoded by S(k), we assume that we have α ∈ Fq{0} available, as well as the received string (a0, a1, ..., aq−2). 1
  • 2.
    Definition 2. LetS(k) be a Reed-Solomon code and (a0, a1, ..., aq−2) a received message. Let f(x) ∈ Fq[x] with deg f < k. Then define the error set as E(f) = i : f αi = ai . Our goal is to find some f such that |E(f)| ≤ e. To that end, we introduce the error polynomial. Definition 3. The error polynomial for a message (a0, a1, ..., aq−2) is defined by Ef (x) = i∈E(f) x − αi . Set Nf (x) = Ef (x)f(x). Proposition 3.2. ∀i, Nf (αi ) = Ef (αi )ai. Proof. We have Nf (αi) = Ef (αi)f(αi), so if f(αi) = ai then we are done. Otherwise, Ef (αi) = 0, so both sides are 0. 2