One of the key features of BCH codes is that during code design, there is a precise control over the number of symbol errors correctable by the code. In particular, it is possible to design binary BCH codes that can correct multiple bit errors. Another advantage of BCH codes is the ease with which they can be decoded, namely, via an algebraic method known as syndrome decoding. This simplifies the design of the decoder for these codes, using small low-power electronic hardware.
Given a prime numberq and prime powerqm with positive integers m and d such that d ≤ qm − 1, a primitive narrow-sense BCH code over the finite field (or Galois field) GF(q) with code length n = qm − 1 and distance at least d is constructed by the following method.
Let α be a primitive element of GF(qm).
For any positive integer i, let mi(x) be the minimal polynomial with coefficients in GF(q) of αi.
The generator polynomial of the BCH code is defined as the least common multipleg(x) = lcm(m1(x),…,md − 1(x)).
It can be seen that g(x) is a polynomial with coefficients in GF(q) and divides xn − 1.
Therefore, the polynomial code defined by g(x) is a cyclic code.
Let q=2 and m=4 (therefore n=15). We will consider different values of d. For GF(16) = GF(24) based on the polynomial x4+x+1 with primitive root α=x+0 there are minimum polynomials mi(x) with coefficients in GF(2) satisfying
The minimal polynomials of the fourteen powers of α are
The BCH code with has generator polynomial
It has minimal Hamming distance at least 3 and corrects up to one error. Since the generator polynomial is of degree 4, this code has 11 data bits and 4 checksum bits.
The BCH code with has generator polynomial
It has minimal Hamming distance at least 5 and corrects up to two errors. Since the generator polynomial is of degree 8, this code has 7 data bits and 8 checksum bits.
The BCH code with has generator polynomial
It has minimal Hamming distance at least 7 and corrects up to three errors. Since the generator polynomial is of degree 10, this code has 5 data bits and 10 checksum bits. (This particular generator polynomial has a real-world application, in the format patterns of the QR code.)
The BCH code with and higher has generator polynomial
This code has minimal Hamming distance 15 and corrects 7 errors. It has 1 data bit and 14 checksum bits. In fact, this code has only two codewords: 000000000000000 and 111111111111111.
A BCH code with is called a narrow-sense BCH code.
A BCH code with is called primitive.
The generator polynomial of a BCH code has coefficients from
In general, a cyclic code over with as the generator polynomial is called a BCH code over
The BCH code over and generator polynomial with successive powers of as roots is one type of Reed–Solomon code where the decoder (syndromes) alphabet is the same as the channel (data and generator polynomial) alphabet, all elements of . The other type of Reed Solomon code is an original view Reed Solomon code which is not a BCH code.
The generator polynomial of a BCH code has degree at most . Moreover, if and , the generator polynomial has degree at most .
Each minimal polynomial has degree at most .
Therefore, the least common multiple of of them has degree at most .
Moreover, if then for all .
Therefore, is the least common multiple of at most minimal polynomials for odd indices each of degree at most .
A BCH code has minimal Hamming distance at least .
Suppose that is a code word with fewer than non-zero terms. Then
Recall that are roots of hence of .
This implies that satisfy the following equations, for each :
which is non-zero. It therefore follows that hence
A BCH code is cyclic.
A polynomial code of length is cyclic if and only if its generator polynomial divides
Since is the minimal polynomial with roots it suffices to check that each of is a root of
This follows immediately from the fact that is, by definition, an th root of unity.
There are many algorithms for decoding BCH codes. The most common ones follow this general outline:
Calculate the syndromes sj for the received vector
Determine the number of errors t and the error locator polynomial Λ(x) from the syndromes
Calculate the roots of the error location polynomial to find the error locations Xi
Calculate the error values Yi at those error locations
Correct the errors
During some of these steps, the decoding algorithm may determine that the received vector has too many errors and cannot be corrected. For example, if an appropriate value of t is not found, then the correction would fail. In a truncated (not primitive) code, an error location may be out of range. If the received vector has more errors than the code can correct, the decoder may unknowingly produce an apparently valid message that is not the one that was sent.
Now that you have the polynomial, its roots can be found in the form by brute force for example using the Chien search algorithm. The exponential
powers of the primitive element will yield the positions where errors occur in the received word; hence the name 'error locator' polynomial.
Once the error locations are known, the next step is to determine the error values at those locations. The error values are then used to correct the received values at those locations to recover the original codeword.
For the case of binary BCH, (with all characters readable) this is trivial; just flip the bits for the received word at these positions, and we have the corrected code word. In the more general case, the error weights can be determined by solving the linear system
This formula is advantageous when one computes the formal derivative of form
Decoding based on extended Euclidean algorithmEdit
An alternate process of finding both the polynomial Λ and the error locator polynomial is based on Yasuo Sugiyama's adaptation of the Extended Euclidean algorithm. Correction of unreadable characters could be incorporated to the algorithm easily as well.
Let be positions of unreadable characters. One creates polynomial localising these positions
Set values on unreadable positions to 0 and compute the syndromes.
As we have already defined for the Forney formula let
Let us run extended Euclidean algorithm for locating least common divisor of polynomials and
The goal is not to find the least common divisor, but a polynomial of degree at most and polynomials such that
Low degree of guarantees, that would satisfy extended (by ) defining conditions for
Defining and using on the place of in the Fourney formula will give us error values.
The main advantage of the algorithm is that it meanwhile computes required in the Forney formula.
The goal is to find a codeword which differs from the received word minimally as possible on readable positions. When expressing the received word as a sum of nearest codeword and error word, we are trying to find error word with minimal number of non-zeros on readable positions. Syndrom restricts error word by condition
We could write these conditions separately or we could create polynomial
and compare coefficients near powers to
Suppose there is unreadable letter on position we could replace set of syndromes by set of syndromes defined by equation Suppose for an error word all restrictions by original set of syndromes hold,
New set of syndromes restricts error vector
the same way the original set of syndromes restricted the error vector Note, that except the coordinate where we have an is zero, if For the goal of locating error positions we could change the set of syndromes in the similar way to reflect all unreadable characters. This shortens the set of syndromes by
In polynomial formulation, the replacement of syndromes set by syndromes set leads to
After replacement of by , one would require equation for coefficients near powers
One could consider looking for error positions from the point of view of eliminating influence of given positions similarly as for unreadable characters. If we found positions such that eliminating their influence leads to obtaining set of syndromes consisting of all zeros, than there exists error vector with errors only on these coordinates.
If denotes the polynomial eliminating the influence of these coordinates, we obtain
In Euclidean algorithm, we try to correct at most errors (on readable positions), because with bigger error count there could be more codewords in the same distance from the received word. Therefore, for we are looking for, the equation must hold for coefficients near powers starting from
In Forney formula, could be multiplied by a scalar giving the same result.
It could happen that the Euclidean algorithm finds of degree higher than having number of different roots equal to its degree, where the Fourney formula would be able to correct errors in all its roots, anyway correcting such many errors could be risky (especially with no other restrictions on received word). Usually after getting of higher degree, we decide not to correct the errors. Correction could fail in the case has roots with higher multiplicity or the number of roots is smaller than its degree. Fail could be detected as well by Forney formula returning error outside the transmitted alphabet.
Decoding of binary code without unreadable charactersEdit
Consider a BCH code in GF(24) with and . (This is used in QR codes.) Let the message to be transmitted be [1 1 0 1 1], or in polynomial notation,
The "checksum" symbols are calculated by dividing by and taking the remainder, resulting in or [ 1 0 0 0 0 1 0 1 0 0 ]. These are appended to the message, so the transmitted codeword is [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0 ].
Now, imagine that there are two bit-errors in the transmission, so the received codeword is [ 1 0 0 1 1 1 0 0 0 1 1 0 1 0 0 ]. In polynomial notation:
In order to correct the errors, first calculate the syndromes. Taking we have and
Next, apply the Peterson procedure by row-reducing the following augmented matrix.
Due to the zero row, S3×3 is singular, which is no surprise since only two errors were introduced into the codeword.
However, the upper-left corner of the matrix is identical to [S2×2 | C2×1], which gives rise to the solution
The resulting error locator polynomial is which has zeros at and
The exponents of correspond to the error locations.
There is no need to calculate the error values in this example, as the only possible value is 1.
Suppose the same scenario, but the received word has two unreadable characters [ 1 0 0 ? 1 1 ? 0 0 1 1 0 1 0 0 ]. We replace the unreadable characters by zeros while creating the polynom reflecting their positions We compute the syndromes and (Using log notation which is independent on GF(24) isomorphisms. For computation checking we can use the same representation for addition as was used in previous example. Hexadecimal description of the powers of are consecutively 1,2,4,8,3,6,C,B,5,A,7,E,F,D,9 with the addition based on bitwise xor.)
Let us make syndrome polynomial
Run the extended Euclidean algorithm:
We have reached polynomial of degree at most 3, and as
Let Don't worry that Find by brute force a root of The roots are and (after finding for example we can divide by corresponding monom and the root of resulting monom could be found easily).