All published worksheets from http://sagenb.org
Image: ubuntu2004
Bose, Ray-Chaudhuri, Hocquenghem (BCH) Codes
We study in this worksheet a familiar and large family of cyclic codes. These codes are constructed with a specific minimal distance and error-correction ability in mind. They were developed independently by C. Bose and Ray-Chaudhuri (1960), and Hocquenghem (1959). There are primitive and non-primitive codes depending on the polynomial generator, and also there are binary and non-binary codes depending on the alphabet used to construct the generator polynomial.
1. Constructing a generator polynomial
Assume we want to construct a -error correcting -ary code of length .
Choose such that and divides .
Construct using an irreducible polynomila of degree .
Let with order (meaning is the smallest integer such that ) and
be the minimal polynomials of over . Let , and be an integer.
is the generator polynomial.
The number is called the designed distance, and .
2. Creating the Code
The polynomial above is the generator polynomial for a code of lenth equal to the order of . Since must divide (the order of an element of a field must divide the size of the field)
we can always choose the smallest posiive integer such that divides in the above construction.
Since is the order of , then is a root of the polynomial for each .
Hence divides and thus is the generator polynomial for a cyclic code of length . Codes created in this manner are called BCH codes.
If we choose to be a primitive element of we will have necessarily .
In this case the code is called primitive.
The code is called narrow sense if .
is called the seed.
3. Primitive Single Error Correcting, Narrow Sense Binary BCH Codes
For single error correcting codes, , designed distance , , .
Choose primitive polynomial of degree .
Let be a primitive element of . Thus order .
.
Thus , .
Using the Hamming Bound, we can show .
Thus the primitive single error correcting narrow-sense, binary BCH codes are the binary Hamming Codes.
Example 1
To construct a single error correcting binary code of length 7,
, , 7 divides so .
We will use , a primitive polynomial, to construct .
Let be a root of . Then is a primitive element and so order .
. Since , .
We recognize the code generated by to be .
Example 2
Let's use SAGE to consturct a double error correcting BCH code of length .
, .
15 divides So we need to construct . In the Cyclic Codes worksheet, we learned how to construct polynomial rings over finite fields.
Recall we learned how to find minimal polynomials in the Finite Fields and Minimum Polynomials worksheet. There is actually a command that will find them for you.
If we construct the field using , then is a primitive element of the field.
Since is a primitive element of , so order.
To contruct the genenerator polynomial for a narrow sense code, taking to be 1, .
Since ,
is a [15,7,5] binary 5.
If we let and follow the same procedure, we will construct a different BCH code of the same length ability which is not narrow sense.
So then .
4. Parameters for BCH codes
For primitive codes,
For non-primitive codes, divides (choose the least such integer, i.e. oerder of modulo ).
The dimension .
where is the -cyclotomic coset of .
deg.
Theorem
.
For narrow-sense, primitive codes, .
For narrow-sense, primitive binary codes, .
5. Characterization of Codewords
be an BCH code, with designed distance and seed .
are roots of in
are also roots of in .
Conversely, if has roots in ,
then divides for each and so divides . Thus .
Theorem
A polynomial if and only if are roots of in .
6. Parity Check Matrices For BCH Codes
Let be an BCH code with designed distance and seed of order .
Let be the distinct generating roots (powers of ) of in . Thus .
H= 1
1
. . . .
. . . .
. . . .
1
By the theorem above, if and only if for all .
Example
, , a root of over .
expressing powers of as vectors over .
So
H= 1 0 0 1 0 1 1
0 1 0 1 1 1 0
0 0 1 0 1 1 1
Example
for , , as above
H= 1
1
is a 6 X 7 matrix over .
Just to check the dimensions using SAGE...
Homework #8
Problem 1.
a) Construct a ternary double error correcting BCH code of length 13.
b) Using a different seed, construct another ternary double error correcting code of length 13.
Problem 2.
Construct a binary narrow-sense double error correcting BCH code with seed of order 23.
What is the redundancy of the code?
Problem 3.
Construct a generator polynomial and a parity-check matrix for a binary double-error correcting BCH code of length 15.
Problem 4.
Exercise 8.5 from the text
Problem 5.
Exercise 8.15 from the text
Problem 6.
Exercise 8.7 from the text
Problem 7.
Exercise 8.8 from the text