Convolutional Codes
Convolutional codes derive their name from the fact that in a linear system, the output (as
a function of time) is formed by convolving the input (as a function of time) with the impulse
response of the system.
In the case of convolutional codes however, one usually has more output
than inputs and time is discrete.
Furthermore, for binary convolutional codes, the input (inputs)
is a (are) binary sequences, the same is true for the outputs and linear means using arithmetic
modulo 2.
A convolutional
code
is the collection of output sequences produced by the linear
system for all possible input sequences.
There are many linear systems that can produce the collection of output sequences
corresponding to a particular convolutional code.
It is customary, however to choose a specific
linear system (or encoder) and characterize a particular convolutional code by that specific
encoder.
We will begin our study using this approach.
We will then show that the given
convolutional code could have been produced by other encoders.
We begin by looking in some detail at the code produced by the encoder shown in Figure
4, below.
Figure 4.
An encoder for a rate 1/2 convolutional code.
The code is said to have rate 1/2 (in terms of our previous notation, R
c
= 1/2) since each input u
i
produces two outputs (V
i
(1)
and V
i
(2)
.
The inputs u
i
, i=0, 1, 2, … are binary digits (i.e., u
i
E (0,1))
and the outputs are given by the equation:
v
i
(1)
=
u
i
,
i = 0, 1, 2,…
v
i
(2)
=
u
i
⊕
u
i-1
⊕
u
i-2
i = 0, 1, 2,…
where we assume that u
-1
= u
-2
= 0.
(This can alternatively be stated by saying that the encoder
starts in the all-zero state
.)
The addition operator “
⊕
” indicates modulo 2 addition (0
⊕
0 = 0,
0
⊕
1 = 1
⊕
0 = 1, 1
⊕
1 = 0).
Modulo 2 addition can be implemented by an exclusive or gate.
In what follows we will use
⊕
and + interchangeably.
Usually the output is multiplexed into one serial stream, v
0
(1)
, v
0
(2)
, v
1
(1)
, v
1
(2)
, v
2
(1)
,
v
2
(2)
,… but this does not have to be the case. The set of all possible output sequences
(corresponding to all possible input sequences) is the set of code words of the code. If the outputs