Reed-Solomon codes

Reed-Solomon codes is an old and widely used class of error-correcting codes. They are prominently used in consumer electronics such as CDs, DVDs, Blu-ray Discs, in data transmission technologies such as DSL & WiMAX, in broadcast systems such as DVB and ATSC, and in computer applications such as RAID 6 systems There was a significant progress in recent years in their understanding and decoding. However, they are getting replaced by other codes (like LDPC and Turbo), which offer better performance and sometimes simpler soft-decision decoding.

Reed-Solomon codes as BCH codes
Primitive $(n,k,n-k+1)$ Reed-Solomon code over $GF(q)$ is defined as a BCH code of length $n=q-1$. Its generator polynomial is given by $g(x)=(x-\alpha^b)(x-\alpha^{b+1})\cdots(x-\alpha^{b-1+n-k})$, where $\alpha$ is a primitive element of $GF(q)$, and $b$ is some non-negative integer ($b=1$ corresponds to the narrow-sense Reed-Solomon codes). Non-primitive Reed-Solomon codes can be defined in a similar way by taking $\alpha$ as an element of order $n$, provided that $n$ is a divisor of $GF(q)$. The BCH bound implies that the minimum distance of the RS code is at least $n-k+1$, while the Singleton bound implies that it is at most $n-k+1$. Hence, they are maximum distance separable (MDS) codes.

Reed-Solomon codes as evaluation codes
$(n,k,n-k+1)$ Reed-Solomon code over $GF(q)$ is defined as a set of vectors $(f(x_1),f(x_2),\ldots,f(x_n)),$ where $f(x)=\sum_{i=0}^{k-1}f_ix^i, f_i\in GF(q)$, and $x_i\in GF(q)$ are some distinct values.

This definition is equivalent to the first one for the case of narrow-sense BCH codes and if $x_i=\alpha^{i-1}$, where $\alpha$ is a primitive element of $GF(q)$. To show this, consider a polynomial corresponding to the codeword obtained according to the second definition, i.e. $c(x)=\sum_{j=0}^{n-1}f(\alpha^j)x^j$. Observe that $c(\alpha^i)=\sum_{j=0}^{n-1}\sum_{l=0}^{n-1}f_l\alpha^{jl+ij}=\sum_{l=0}^{n-1}f_{-l\bmod n}\sum_{i=0}^{n-1}\alpha^{(j-l)i}=f_{-j\bmod n},$ where $f_j=0, j\geq k$, and the last equality follows since $\alpha^r, r\neq 0\bmod n,$ is a root of the second multiple in the right-hand side of $0=\alpha^{rn}-1=(\alpha^r-1)(\alpha^{r(n-1)}+\alpha^{r(n-2)}+\ldots+1).$ This implies that $c(\alpha^j)=0, 1\leq j\leq n-k.$

Decoding algorithms
All decoding algorithms applicable to BCH codes can be used for Reed-Solomon codes as well. However, some special algorithms, which appear to be much easier to understand, can be developed using their representation as evaluation codes.

Consider first decoding Reed-Solomon codes up to half of minimum distance. Let $y_i=f(x_i)+e_i, 1\leq i\leq n,$ be the received noisy symbols. One should identify a polynomial $f(x),$ such that $\deg f(x)<k$, and it agrees with the sequence $y$ in $\tau$ positions, where $\tau \geq n-\lfloor (d-1)/2\rfloor$. That is, for non-erroneous symbols one should obtain $f(x_i)=y_i$. Let us introduce the error polynomial $\sigma(x),$ so that $\sigma(x_i)=0$ iff $e_i\neq 0$. Then the equation $f(x_i)\sigma(x_i)=y_i\sigma(x_i)$ holds for all $i$.