Errors in data occur when bits get corrupted in the data. When bits are transmitted over the computer network, they are subject to get corrupted due to interference and network problems, leading to errors.
Error-correcting codes (ECC) are a sequence of numbers generated by specific algorithms for detecting and removing errors in data that has been transmitted over noisy channels. Error correcting codes ascertain the exact number of bits that has been corrupted as well as the location of the corrupted bits, within the limitations in algorithm.
ECCs can be broadly categorized into two types, block codes and convolution codes. Reed - Solomon Code is a type of block code.
Reed - Solomon error correcting codes are one of the oldest codes that were introduced in 1960s by Irving S. Reed and Gustave Solomon. It is a subclass of non - binary BCH codes. BCH codes (Bose-Chaudhuri-Hocquenghem codes) are cyclic ECCs that are constructed using polynomials over data blocks.
A Reed - Solomon encoder accepts a block of data and adds redundant bits (parity bits) before transmitting it over noisy channels. On receiving the data, a decoder corrects the error depending upon the code characteristics.
The prominent application areas are −
Storage areas like CDs, DVDs, Blu-ray Discs
High speed data transmission technologies such as DSL and WiMAX
High speed modems
Broadcast systems such as satellite communications
Storage systems such as RAID 6
A Reed-Solomon code is specified as RS(n,k).
Here, n is the block length which is recognizable by symbols, holding the relation, n = 2m - 1.
The message size is of k bits.
So the parity check size is (n - k) bits
The code can correct up to (t) errors in a codeword, where (2t = n - k).
The following diagram shows a Reed-Solomon codeword −
In coding systems with block codes, valid code words consists of polynomials that are divisible by another fixed polynomial of short length. This fixed polynomial is called generator polynomial.
In Reed Solomon code, generator polynomial with factors is constructed where each root is a consecutive element in the Galois field. The polynomial is of the form −
g(x) = (x - α) (x - α2) (x - α3) ......(x - α2t)where α is a primitive element.
The method of encoding in Reed Solomon code has the following steps −
The message is represented as a polynomial p(x), and then multiplied with the generator polynomial g(x).
The message vector [x1,x2,x3.....xk] is mapped to a polynomial of degree less than k such that px(αi) = xi for all i = 1,...k
The polynomial is evaluated using interpolation methods like Lagrange Interpolation.
Using this polynomial, the other points αk + 1....αn, are evaluated.
The encoded message is calculated as s(x) = p(x) * g(x). The sender sends this encoded message along with the generator polynomial g(x).
At the receiving end, the following decoding procedure done −
The receiver receives the message r(x) and divides it by the generator polynomial g(x).
If r(x)/g(x)=0, then it implies no error.
If r(x)/g(x)≠0, then the error polynomial is evaluated using the expression: r(x) = p(x) * g(x) + e(x)
The error polynomial gives the error positions.