
INFORMATlW THEORY AND CODING
25-15
Block
Codes
An
(n,
k)
block code for error control encodes a block
of
k
information symbols into a block of
n
codeword
symbols. Each symbol is an m-bit byte. The rate,
R,
of
the code is equal to
kln.
The rules for constructing good block codes for error
control make use of the arithmetic of Galois fields. A
Galois field with 2m elements, denoted GF(2m), is an
arithmetic system containing the operations of addition,
subtraction, multiplication, and division defined in such
a way that most arithmetic and algebraic procedures are
valid. The arithmetic operations themselves are uncon-
ventional but have the enormous advantage that there is
no overflow nor round-off error. Since the error control
code is used to process bit packages but not to do real
computations, it does not matter that the arithmetic
rules are unconventional. Chart
1
shows addition and
multiplication tables for several simple Galois fields.
Notice that GF(2) and GF(3) are modulo 2 and modulo
3 arithmetic, respectively, but GF(4) is
not
modulo 4
arithmetic. Modulo 4 arithmetic cannot form a field
because 2
~ 1
=
2
.
3(mod 4),
so
division by
2
does not
behave properly. Large fields such as GF(2.56) are very
important in practice, but the multiplication tables are
too large to show here.
Chart 2 shows the set of codewords of the Hamming
(7,
4) code, a binary code-symbols in GF(2)-that
can correct a single bit error. This simple code has
sixteen codewords.
Chart 2 also shows some of the
codewords of the Reed-Solomon
(7,
5)
code, an octal
code-symbols are in GF(8)-that can correct a single
octal symbol in error. This code has 8’, or 32 768,
codewords. This second example is actually a very
small code although the number of codewords is already
CHART 1. EXAMPLES
OF
FINITE FIELDS
GF(2)
~*
*
GF(3)
*
2201
2021
y;
.~0123
00000
1032 10123
2301 20231
3210 30312
too great to enumerate. This is why it is important
to
use the computational structure of a Galois field to
construct the encoders and decoders.
Reed-Solomon
codes as large as a (256 224) code over GF(28) are now
quite practical. This code consists of 224 information
symbols followed by 32 parity symbols and can correct
16 symbol errors; a symbol error is a symbol that is
wrong in any possible way. A symbol in GF(2*) may be
used to represent eight bits by the user, yet on the
channel may be represented by a 256-ary symbol.
The most important block codes in practice are those
known as the
BCH codes
and the
Reed-Solomon codes.
They are important because efficient decoding algo-
rithms exist for them. These decoders are based either
on the
Berlekamp-Massey algorithm
or on the
Euclidean
algorithm,
and they have a hardware cost proportional
to
nt
where
n
is the blocklength and
t
is the number of
errors to be corrected.
Convolutional Codes
A convolutional code encodes a stream of informa-
tion symbols into a stream of codeword symbols. The
duration of the stream is
so
long that it is effectively
infinite and does not enter into the design of the encoder
and decoder. An information sequence is shifted into
the encoder beginning at time zero and continuing
indefinitely into the future. The stream of incoming
information symbols is broken into segments
of
k,
symbols called information frames, which often may be
as short
as
one symbol in practice. The encoder can
store
m
frames. During each frame time, a new
information frame is shifted into the encoder, and the
oldest information frame is shifted out and discarded.
At the end of any frame time, the encoder has stored the
most recent
m
frames, a total of
mk,
information
symbols. At the beginning of a frame, from the new
incoming information frame and the
rn
previously
stored information frames, the encoder computes a
single codeword frame of length
no
symbols. This
codeword frame is shifted out of the encoder as the next
information frame is shifted in. Hence, the channel
must transmit
no
codeword symbols for each
ko
infor-
mation symbols. The rate,
R,
of the convolutional code
is defined as
R
=
ko/no.
The
constraint length,
v,
of a convolutional code is
defined as the number of memory stages in a minimum
encoder. The complexity of a decoder is often
4’.
Binary convolutional codes used in practice may have a
constraint length in the range
of
about seven
to
forty.
Fig. 16 shows an encoder for a much simpler convolu-
tional code, one of constraint length 2 with
ko
=
1
and
no
=
2. A trellis description of the code is shown in Fig.
17.
The convolutional code
is
the set of all semi-infinite
binary words that may be read off any path through the
trellis. A “zero” information bit entering the encoder at
any node is encoded into the upward path out of that
node, and a “one” information bit is encoded into the
lower path. This convolutional code is able to correct
any number of error events each containing two bit