BCH code
In coding theory the BCH codes form a class of cyclic error-correcting codes that are constructed using finite fields. BCH codes were invented in 1959 by Hocquenghem, and independently in 1960 by Bose and Ray-Chaudhuri.[1] The abbreviation BCH comprises the initials of these inventors' names.
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.
BCH codes are used in applications like satellite communications,[2] compact disc players, DVDs, disk drives, solid-state drives[3] and two-dimensional bar codes.
Contents
|
Definition and Illustration [edit]
Primitive narrow-sense BCH codes [edit]
Given a prime q and positive integers m and d with d ≤ qm - 1, a primitive narrow-sense BCH code over the finite 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 of αi. The generator polynomial of the BCH code is defined as the least common multiple g(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.
Example [edit]
Let q=2 and m=4 (therefore n=15). We will consider different values of d. There is a primitive root α in GF(16) satisfying
-

(
its minimal polynomial over GF(2) is
The minimal polynomials of the first seven powers of α are
The BCH code with
has generator polynomial

It has minimal Hamming distance at least 3 and corrects up to 1 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 2 errors. Since the generator polynomial is of degree 8, this code has 7 data bits and 8 checksum bits.
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.
General BCH codes [edit]
General BCH codes differ from primitive narrow-sense BCH codes in two respects.
First, the requirement that
be a primitive element of
can be relaxed. By relaxing this requirement, the code length changes from
to
the order of the element 
Second, the consecutive roots of the generator polynomial may run from
instead of 
Definition. Fix a finite field
where
is a prime power. Choose positive integers
such that
and
is the multiplicative order of
modulo 
As before, let
be a primitive
th root of unity in
and let
be the minimal polynomial over
of
for all
The generator polynomial of the BCH code is defined as the least common multiple 
Note: if
as in the simplified definition, then
is automatically 1, and the order of
modulo
is automatically
Therefore, the simplified definition is indeed a special case of the general one.
Special cases [edit]
- 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
with
as the generator polynomial is called a Reed-Solomon code. In other words, a Reed-Solomon code is a BCH code where the decoder alphabet is the same as the channel alphabet.[4]
Properties [edit]
1. The generator polynomial of a BCH code has degree at most
Moreover, if
and
the generator polynomial has degree at most 
- Proof: 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 
2. A BCH code has minimal Hamming distance at least
Proof: 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 
In matrix form, we have
The determinant of this matrix equals
The matrix
is seen to be a Vandermonde matrix, and its determinant is
which is non-zero. It therefore follows that
hence 
3. A BCH code is cyclic.
Proof: 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.
Encoding [edit]
| This section is empty. You can help by adding to it. (March 2013) |
Decoding [edit]
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.
Calculate the syndromes [edit]
The received vector
is the sum of the correct codeword
and an unknown error vector
The syndrome values are formed by considering
as a polynomial and evaluating it at
Thus the syndromes are[5]
for
to
Since
are the zeros of
of which
is a multiple,
Examining the syndrome values thus isolates the error vector so we can begin to solve for it.
If there is no error,
for all
If the syndromes are all zero, then the decoding is done.
Calculate the error location polynomial [edit]
If there are nonzero syndromes, then there are errors. The decoder needs to figure out how many errors and the location of those errors.
If there is a single error, write this as
where
is the location of the error and
is its magnitude. Then the first two syndromes are
so together they allow us to calculate
and provide some information about
(completely determining it in the case of Reed-Solomon codes).
If there are two or more errors,
It is not immediately obvious how to begin solving the resulting syndromes for the unknowns
and
First step is finding locator polynomial
compatible with computed syndroms and with minimal possible 
Two popular algorithms for this task are:
Peterson–Gorenstein–Zierler algorithm [edit]
Peterson's algorithm is the step 2 of the generalized BCH decoding procedure. We use Peterson's algorithm to calculate the error locator polynomial coefficients
of a polynomial
Now the procedure of the Peterson–Gorenstein–Zierler algorithm.[6] Expect we have at least 2t syndromes sc,...,sc+2t-1. Let v=t.
- Start by generating the
matrix with elements that are syndrome values
- Generate a
vector with elements
- Let
denote the unknown polynomial coefficients, which are given by
- Form the matrix equation
- If the determinant of matrix
is nonzero, then we can actually find an inverse of this matrix and solve for the values of unknown
values.
- If
then follow
if
then
declare an empty error locator polynomial
stop Peterson procedure.
end
set
continue from the beginning of Peterson's decoding by making smaller
- After you have values of
you have with you the error locator polynomial. - Stop Peterson procedure.
Factor error locator polynomial [edit]
Now that you have the
polynomial, you can find its roots 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.
The zeros of Λ(x) are α-i1, ..., α-iv.
Calculate error values [edit]
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


- . . .
Forney algorithm [edit]
However, there is a more efficient method known as the Forney algorithm.
Let 
Let
and 
Let
be the error evaluator polynomial[7]
Let
where
denotes here
rather than multiplying in the field.
Than if syndroms could be explained by an error word, which could be nonzero only on positions
, then error values are
For narrow-sense BCH codes, c = 1, so the expression simplifies to:
Explanation of Forney algorithm computation [edit]
It is based on Lagrange interpolation and techniques of generating functions.
Look at
Let for simplicity
for
and
for 
Then 
We could gain form of polynomial:
We want to compute unknowns
and we could simplify the context by removing the
terms. This leads to the error evaluator polynomial
Thanks to
we have
Look at
Thanks to
(the Lagrange interpolation trick) the sum degenerates to only one summand
To get
we just should get rid of the product. We could compute the product directly from already computed roots
of
but we could use simpler form.
As formal derivative
we get again only one summand in
So finally
This formula is advantageous when we compute formal derivative of
form it's
form, gaining
where
denotes here
rather than multiplying in the field.
Decoding based on extended Euclidean algorithm [edit]
Whole process of finding both polynom Λ and error values could be based on Extended Euclidean algorithm. Correction of unreadable characters could be incorporated to the algorithm easily as well.
Let
are positions of unreadable characters. We create polynomial localising these positions
Let us set values on unreadable positions to 0 and compute the syndroms.
As we have already defined for the Forney formula let 
Let us run extended Euclidean algorithm for locating least common divisor of polynomials
and
Our 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.
Explanation of the decoding process [edit]
Our goal is to find a codeword which differs from the received word minimally as possible on readable positions. When expressing received word as a sum of nearest codeword and error word, we are trying to find error word with minimal number of nonzeros on readable positions. Syndrom
restricts error word by condition
We could write these conditions separately or we could create polynomial
and compare koeficients near powers
to

Suppose there is unreadable letter on position
we could replace set of syndroms
by set of syndroms
defined by equation
Suppose for an error word all restrictions by original set
of syndroms hold, than
New set of syndroms restricts error vector
the same way the original set of syndroms restricted the error vector
Note, that except the coordinate
where
an
is zero, iff
is zero. For the goal of locating error positions we could change the set of syndroms in the simillar way to reflect all unreadable characters. This shortens the set of syndroms by 
In polynomial formulation the replacement of syndroms set
by syndroms set
leads to
Therefore 
After replacement of
by
we would require equation for koeficients near powers 
We 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 syndroms 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 koeficients near powers starting from 
In Forney formula
could be multiplied by a scalar giving the same result.
It could happen the Euclidean algorithm finds
of degree higher than
having number of different roots equal to it's degree, where Fourney formula would be able to correct errors in all it's roots, anyways 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 it's degree. Fail could be detected as well by Forney formula returning error outside the transmited alphabet.
Correct the errors [edit]
Using the error values and error location correct the errors and form a corrected code vector by subtracting error values at error locations.
Decoding examples [edit]
Decoding of binary code without unreadable characters [edit]
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.
Decoding with unreadable characters [edit]
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 syndroms
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 syndrom polynomial
compute 
Run Extended Euclidean algorithm: 





We have reached polynomial of degree at most 3, and as
we get 
Therefore 
Let
Don't worry that
Find by brute force a root of
The roots are
and
(after finding for example
we can divide
by correspondnig monom
and the root of resulting monom could be found easily).
Let
and let
Let us look for error values using formula
where
are roots of
We get
Fact, that
should not be surprising.
Corrected code is therefore [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0].
Decoding with unreadable characters with small number of errors [edit]
Let us show the algorithm behaviour for the case with small number of errors. Let the received word is [ 1 0 0 ? 1 1 ? 0 0 0 1 0 1 0 0 ].
Again let us replace the unreadable characters by zeros while creating the polynom reflecting their positions
We compute the syndroms
and
Create syndrom polynommial
and
Let us run Extended Euclidean algorithm:

We have reached polynomial of degree at most 3, and as
we get 
Therefore 
Let
Don't worry that
The root of
is 
Let
and
Let us look for error values using formula
where
are roots of polynomial
We get
Fact, that
should not be surprising.
Corrected code is therefore [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0].
Citations [edit]
- ^ Reed & Chen 1999, p. 189
- ^ "Phobos Lander Coding System: Software and Analysis". Retrieved 25 February 2012.
- ^ "Sandforce SF-2500/2600 Product Brief". Retrieved 25 February 2012.
- ^ Gill unknown, p. 3
- ^ Lidl & Pilz 1999, p. 229
- ^ Gorenstein, Peterson & Zierler 1960
- ^ Gill unknown, p. 47
References [edit]
Primary sources [edit]
- Hocquenghem, A. (September 1959), "Codes correcteurs d'erreurs", Chiffres (in French) (Paris) 2: 147–156
- Bose, R. C.; Ray-Chaudhuri, D. K. (March 1960), "On A Class of Error Correcting Binary Group Codes", Information and Control 3 (1): 68–79, ISSN 0890-5401
Secondary sources [edit]
- Gilbert, W. J.; Nicholson, W. K. (2004), Modern Algebra with Applications (2nd ed.), John Wiley
- Gill, John (unknown), EE387 Notes #7, Handout #28, Stanford University, pp. 42–45, retrieved April 21, 2010[dead link] Course notes are apparently being redone for 2012: http://www.stanford.edu/class/ee387/
- Gorenstein, Daniel; Peterson, W. Wesley; Zierler, Neal (1960), "Two-Error Correcting Bose-Chaudhuri Codes are Quasi-Perfect", Information and Control 3 (3): 291–294
- Lidl, Rudolf; Pilz, Günter (1999), Applied Abstract Algebra (2nd ed.), John Wiley
- Lin, S.; Costello, D. (2004), Error Control Coding: Fundamentals and Applications, Englewood Cliffs, NJ: Prentice-Hall
- MacWilliams, F. J.; Sloane, N. J. A. (1977), The Theory of Error-Correcting Codes, New York, NY: North-Holland Publishing Company
- Reed, Irving S.; Chen, Xuemin (1999), Error-Control Coding for Data Networks, Boston, MA: Kluwer Academic Publishers, ISBN 0-7923-8528-4
- Rudra, Atri, CSE 545, Error Correcting Codes: Combinatorics, Algorithms and Applications, University at Buffalo, retrieved April 21, 2010






is called a narrow-sense BCH code.








compatible with computed syndroms and with minimal possible 

matrix with elements that are syndrome values
vector with elements


then follow
then
declare an empty error locator polynomial
stop Peterson procedure.
end
set
continue from the beginning of Peterson's decoding by making smaller 











![\left [ S_{3 \times 3} | C_{3 \times 1} \right ] =
\begin{bmatrix}s_1&s_2&s_3&s_4\\
s_2&s_3&s_4&s_5\\
s_3&s_4&s_5&s_6\end{bmatrix} =
\begin{bmatrix}1011&1001&1011&1101\\
1001&1011&1101&0001\\
1011&1101&0001&1001\end{bmatrix} \Rightarrow
\begin{bmatrix}0001&0000&1000&0111\\
0000&0001&1011&0001\\
0000&0000&0000&0000\end{bmatrix}](http://upload.wikimedia.org/math/d/a/3/da3e42dcac8419e6b07afa7ec1dbd6ec.png)