BCH code

This is an old revision of this page, as edited by Photonique (talk | contribs) at 20:31, 9 December 2005 (Peterson Gorenstein Zierler=). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

A BCH (Bose, Ray-Chaudhuri, Hocquenghem) code is a much studied code within the study of coding theory. In technical terms it is multilevel, cyclic, error-correcting, variable-length digital code used to correct errors up to approximately 25% of the total number of digits.

BCH codes are not limited to binary codes, but may be used with multilevel phase-shift keying whenever the number of levels is a prime number or a power of a prime number. A BCH code in 11 levels has been used to represent the 10 decimal digits plus a sign digit.

BCH codes make use of field theory and polynomials over that field. The way the check polynomial is constructed provides the key to indicating that an error has occurred.

If we wish to construct a BCH code to detect and correct 2 errors we use the finite field GF(16) or Z2[x]/<x4+x+1>

Now if we have α a root of x4+x+1, m1(x)=x4+x+1. Now m1 is minimal for α since

m1(x)=(x-α)(x2)(x4)(x8)=x4+x+1.

If we wish to construct a code to correct 1 error we use m1(x). Our codewords will be

C(x)≡0 (mod m1(x))

which has roots α, α2, α4, α8.

This does not allow us to choose many codewords - so we look for the minimal polynomial for the missing power of α from above - α3, and then the minimal polynomial for this is

m3(x)=x4+x3+x2+x+1.

which has roots α3, α6, α12, α249.

We take codewords having all of these as roots, so we form the polynomial

m1,3(x)=m1(x)m3(x)=x8+x7+x6+x4+1

and take codewords corresponding to polynomials of degree 14 such that

C(x)≡0 (mod m1,3(x))

So now C(α)=C2)=...=C8)=0. (*)

Now in GF(16) we have 15 nonzero elements, and thus our polynomial will be of degree 14 with 8 check and 7 information bits - we have 8 check bits since we have (*).

Encoding

Construct our information codeword as

(c14, c13, ..., c8)

so our polynomial will be

c14+c13+...+c8

Call this CI.

We then want to find a CR such that CR=CI (mod m1,3(x))=c7+c6+...+c0

So we have the following codeword to send C(x) = CI+CR (mod m1,3(x)) = 0

For example, if we are to encode (1,1,0,0,1,1,0)

CI=x14+x13+x10+x9

and using polynomial long division of m1,3(x) and CI to get CR(x), in Z2 we obtain CR to be

x3+1

So then the codeword to send is

(1,1,1,0,0,1,1,0, 0,0,0,0,1,0,0,1)

Decoding

BCH decoding is split into the following 4 steps

  1. Calculate the 2t syndrome values, for the received vector R
  2. Calculate the error locator polynomials
  3. Calculate the roots of this polynomial, to get error ___location positions.
  4. If non-binary BCH, Calculate the error values at these error locations.


The following steps are illustrated below. Suppose we receive a codeword vector r (the polynomial R(x)).

If there is no error R(α)=R(α3)=0

If there is one error, ie r=c+ei where ei represents the ith basis vector for R14

So then

S1=R(α)=C(α)+αii
S3=R3)=C(α3)+(α3)i
=(αi)3=S13

so we can recognize one error. A change in the bit position shown by α's power will aid us correct that error.

If there are two errors

r=c+ei+ej

then

S1=R(α)=C(α)+αij
S3=R3)=C(α3)+(α3)i+(α3)j
= (α3)i+(α3)j

which is not the same as S13 so we can recognize two errors. Further algebra can aid us in correcting these two errors.

Original source (first two paragraphs) from Federal Standard 1037C


Popular decoding algorithms are,

  1. Peterson Gorenstein Zierler algorithm

Peterson Gorenstein Zierler Algorithm

Petersons 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, for a given   BCH code designed to correct

  

errors, is

  • First generate the Matrix of   syndromes,
  • Next generate the   matrix with the elements, Syndrome values,

 

  • Generate a   matrix with, elements,

 

  • Let   denote the unknown polynomial coefficients, which are given,using,

 

  • Form the matrix equation

 


  • If the determinant of matrix   exists, then we can actually, find an inverse of this matrix, and solve for the values of unknown   values.
  • If  ,
 then
       if  
       then
             declare a empty error locator polynomial
             stop peterson procedure.
       end
       set  
       continue from the beginning of petersons decoding
 end
  • After you have values of   you have with you the error locator polynomial.
  • Stop peterson procedure.