### Reed Solomon codes

#### What is a reed solomon code

Lets assume we have k values out of which we want to build a reed solomon code, to do this we imagine that our k values specify the height (=y) of k points with x from 0 to k-1. Now we really have just made a silly graph of our data. Next we find a order k-1 polynomial which goes exactly through these points, this polynomial is unique, no other polynomial of order k-1 will go through these points. And last we just evaluate this polynomial on the points 0 … n-1, these n values are a reed solomon code, simple isnt it? Note the first k values are just our input data values which we already know.

#### Correcting erasures with RS codes

We now can make RS codes, but how can we correct erasures? Lets assume there are t erasures (erasures are errors where the location of the error is known). That means we know n-t values of our polynomial, and if t≤n-k then we can just find the remaining values by finding the (unique) polynomial which goes through the n-t values. Its also easy to show (just think that you have k-1 of your k data values) that if t>n-k then no code can correct the erasures, so RS codes are optimal in that sense

#### Correcting errors with RS codes

But what if we dont know where the errors are? Well just try all possible error locations of 0, 1,…,t errors, yes this is not practical but its nice to proof the error correcting capability. Now if we have t actual errors and we guess their locations correctly then we will find our correct polynomial and can correct the errors if we have at least k values left. The only thing now we need to find out is how large t can be so that we cant find a wrong polynomial before we find the correct one. The awnser is trivial actually, a polynomial of order k-1 is uniquely defined by k points so if we have t errors and guess all t error locations wrong then we effectively kill 2t points, and if there are less than k left then we could end up with a wrong polynomial. So we can correct (n-k)/2 errors. More generally reed solomon codes can correct 2*errors + erasures as long as thats ≤ n-k

#### Hamming distance

n-k+1 proof is trivial (smaller would contradict error correcting capability)

#### Practice

The above is true if our data and code values are real, rational or integer numbers (and others) but these are quite difficult to handle in reality as they arent bounded. Luckily all the above also works with finite fields so we can just work with polynomials over GF(256) or similar, which has the nice property that you can store such values in bytes while integers and reals can be quite hard to store in finite storage space

First time I read about error-correcting codes in book called “Exploitation and repairing of computers. Organization of data center work.” printed in 1988. There were section dedicated to error detecting and recovering with the mathematical background (mostly for inside computer operations).

But why did you miss the word ‘CD’ here?

Comment by Kostya — 2007-07-08 @ 06:33

> But why did you miss the word â€˜CDâ€™ here?

well RS codes are used for many things, CD, DVD, DVB, most of NASAs missions use RS codes together with a convolutional code to correct errors, they have been used to send large binaries over (crappy message loosing) usenet, …

Comment by Michael — 2007-07-08 @ 14:25

hi could we utilize RS Codes in long range wireless communication?

Comment by m.yasir — 2013-10-08 @ 17:40