BCH (Bose, Chaudhuri, Hocquenghem ) codes are a class of linear and cyclic block codes that can be considered as a generalization of the Hamming codes, as they can be designed for any value of the error-correction capability t. These codes are defined in the binary field GF(2), and also in their non-binary version, over the Galois field GF(q).
BCH codes are a generalization of Hamming codes, and they can be designed to be able to correct any error pattern of size t or less [1, 2, 4]. In this sense the generalization of the Hamming codes extends the design of codes for t = 1 (Hamming codes) to codes for any desired higher value of t (BCH codes). The design method is based on taking an LCM of appropriate minimal polynomials, as described in the previous section for a particular example.
For any positive integer m ≥ 3 and t < 2m−1, there exists a binary BCH code CBCH(n, k) with the following properties:
Code length n = 2m − 1
Number of parity bits n − k ≤ mt
Minimum Hamming distance dmin ≥ 2t + 1
Error-correction capability t errors in a code vector
These codes are able to correct any error pattern of size t or less, in a code vector of length n, n = 2m − 1.
The generator polynomial of a BCH code is described in terms of its roots, taken from the Galois field GF(2m). If α is a primitive element in GF(2maxi), the generator polynomial g(X) of a BCH code for correcting t errors in a code vector of length n = 2m − 1 is the minimum-degree polynomial over GF(2) that has α, α2, . . . , α2t as its roots:
g(αi ) = 0, i = 1, 2, . . . , 2t
It also true that g(X) has αi and its conjugate as its roots (see Appendix B). On the other hand, if Φi (X) is the minimal polynomial of αi then the LCM of Φ1(X), Φ2(X), . . . , Φ2t (X) is the generator polynomial g(X):
g(X) = LCM{Φ1(X),Φ2(X), . . . Φ2t (X)}
As a result of the definition of a linear binary block BCH code CBCH(n, k) for correcting error patterns of size t or less, and with code length n = 2m − 1, it is possible to affirm that any code polynomial of such a code will have α, α2, . . . , α2t and their conjugates as its roots. This is so because any code polynomial is a multiple of the corresponding generator polynomial g(X), and also of all the minimal polynomials Φ1(X), Φ2(X), . . . , Φ2t (X).
Any code polynomial c(X) = c0 + c1X + . . . + cn−1Xn−1 of CBCH(n, k) has primitive element αi as a root:
c(αi ) = c0 + c1αi + •• •+cn−1αi (n−1) = 0