1.
1 SOME BASIC BLOCK CODES:
In this section, I will introduce some specific codes which have block codes properties,
and some with similar properties with block codes. Because this is not a mathematical
project, I will not focus on the mathematic formulas, I just want to give students basic
information and an overall view about some types of code.
1.1.1 Hamming code:
Hamming codes are a popular family of binary block codes, which are used in many
applications nowadays. Hamming codes were introduced by Richard Hamming in 1950, and
they are still popular at the moment because of their simplicity and effectiveness.
In general, Hamming codes are still block codes, so we can denote them in the form
Hamming (n, k) codes, where n-bit code word will be used to encode k-bit information
block. Hamming (n, k) codes always have the following properties:
- n = 2
m
1
- k = 2
m
m 1
- The minimum Hamming distance is d
min
= 3
where m is the number of parity bits, and m .
For example, we can take m = 3. Hence,
- n = 2
3
1 = 7 and k = 2
3
3 1 = 4
Therefore, we get the Hamming (7, 4) code which I described in section 1.2.1.
Hamming codes can be used to detect up to 2 errors (but not correct), and it has an ability
to correct 1 error. Hamming codes have many applications, such as real communication
system (teletext systems, radio and digital TV), information systems (logical circuits,
semiconductor memories) or in audio and video system (data compression in CD, DVD).
Hamming codes are the basic family of block codes, which are simple, but used widely.
Hamming codes have all the important properties as well as it can be encoded and
decoded using generator matrix G and parity check matrix H which students should study
in the university. Therefore, in my thesis, I will choose this kind of code to introduce to
students.
1.1.2 Cyclic Codes:
Cyclic code is not exactly block code; it is just a sub part of block error of correcting
code. A linear block code will be a cyclic code if each code word in that code is a cyclic shift
of another code word in the code. A cyclic code word can be generated by using shift
registers (Figure 1.3.1).
Figure 1.3.1: Simple shift registers used to generate Cyclic Codes
Cyclic Codes use shift registers to shift the bit sequences of a code word to the right to
form a new code word. In general, we will call a code word v in a cyclic code C (n, k) will
have the form: v = (v
o
v
1
v
n-1
), so when it is shifted 1 bit to the right, it will become a
new code word v
(1)
= (v
n-1
v
0
v
n-2
), which is also belong to C.
For example, we have a block code C with generator matrix G:
[
]
So we will have the following block codes: c
1
= [0 0 1 0 1 1 1]; c
2
= [0 1 0 1 1 1 0]; we
find that c
1
is exactly c
2
shifted 1 bit to the right. If we go on writing all the rest codes of
this block code, we will find that any code word will be a shifted code word of another.
Moreover, each combination between two code words will be a new code word which also
belongs to this code. For instance, we have:
c
1
+ c
2
= [0 0 1 0 1 1 1] + [0 1 0 1 1 1 0] = [0 1 1 1 0 0 1] = c
3
is also a code word belong
to C.
Another simple example of a cyclic code is the code C = {000 011 101 110}, which also
meet all the properties of a cyclic code.
One way to generate cyclic code is using generator polynomial and parity check
polynomial instead of using the matrices as we use in block codes. In this project, I will
discuss about BCH Code, a specific cyclic code, which will be described in the next section.
1.1.3 BCH Code:
A briefly overview about Cyclic codes was described in the last part of this project. In
this section, we will discuss a large group in the family of cyclic codes: BCH Codes. BCH
V
0
V
1
V
2
V
n-1
codes are used widely nowadays, because of their big advantage in decoding process, via
an algorithm called syndrome decoding. While the binary Hamming codes can only detect
up to 2 errors and correct only 1 error, binary BCH codes can correct multiple bit errors.
Another advantage of BCH Codes is about the simplicity in designing the decoder.
All the knowledge studied in this project is the basic background for a further thesis
research in digital communication design, so in this section we only discuss about binary
BCH Codes, while the non-binary BCH codes named Reed Solomon will be introduced
shortly in the next section.
Firstly, we will take a look at the design of BCH Codes. A binary cyclic code which has
code length of n = 2
m
1 ( ), parity check bits n k mt and the minimum Hamming
distance d
min
2t + 1 will be a BCH Code. The symbol t will represent to the correctable bits
in a BCH code. Therefore, we can design a BCH Code with the desired number of correcting
bits, as long as t 2
m-1
. To encode a k-bit polynomial code to an n-bit code word, we can
use the generator polynomial. The parameters and generator polynomials of some popular
BCH Codes will be shown in Table 1.3.3:
m n k t Generator Polynomial
4 15 7 2 1 + X
4
+ X
6
+ X
7
+ X
8
4 15 5 3 1 + X + X
2
+ X
4
+ X
5
+ X
8
+ X
10
5 31 21 2 1 + X
3
+ X
5
+ X
6
+ X
8
+ X
9
+ X
10
5 31 16 3 1 + X + X
2
+ X
3
+ X
5
+ X
7
+ X
8
+ X
9
+ X
10
+ X
11
+ X
15
6 63 51 2 1 + X
3
+ X
4
+ X
5
+ X
8
+ X
10
+ X
12
6 63 45 3 1 + X + X
2
+ X
3
+ X
6
+ X
7
+ X
9
+ X
15
+ X
16
+ X
17
+ X
18
Table 1.3.3: Some example parameters and Generator polynomial of some BCH Codes
To find a code word relating a BCH code (n, k), we just need to take the remainder
after dividing our information polynomial by a generator polynomial. Therefore, like the
generator matrix in linear block codes, the generator polynomial will give the code its
characteristics: all code words which relate to a BCH code are multiples of its generator
polynomial. However, how can we construct a generator polynomial? First of all, we need
to study about some abstract algebra, especially about finite field, or we can call, Galois
Field (GF).
Galois field (or finite field) is a field with a finite number of elements, while a field is a set of
elements with some basic operations (addition, multiplication) which can be operated
without leaving the set, and the addition and multiplication are associative, communicative,
and distributive. A Galois field of order q is denoted by GF(q).