Introduction to Convolutional codes
Convolutional codes were introduced in 1955 by Elias as an alternative to Block codes. Convolutional codes are different from block codes by the existence of memory in the encoding scheme. Though convolutional codes can detect errors, they are good for error correction. These codes can be used for correcting random errors, burst errors or both. Convolutional codes are also known as recurrent codes.
The fundamental hardware unit for convolutional encoder is a tapped shift register with (L+1) stages as shown below. L is the constraint length of the convolutional encoder and will be discussed later.
Here g0, g1, g2,…… etc are tap gains which are nothing but binary digits 0 or 1. 0 represents no connection and 1 represents connection. So, each tap gain is a binary digit representing a short circuit or open circuit connection. The message bits enter one by one into the tapped shift register, which are then combined by mod-2 summers to generate the encoded output.
Consider below (2, 1, 2) convolutional encoder. msg box represents place for current input bit. Combination of m1m2 represents state of the encoder.
Note that g(1) and g(2) are called generator sequences of the encoder. Generator sequences are nothing but impulse response of the encoder. The encoder output is obtained by the convolution of the input sequence with the impulse response of the encoder, hence the name convolutional code. Impulse response of the encoder is the response of the encoder to a single “1” bit that moves through it.
Numerous convolutional codes
Numerous other convolutional codes are obtained by modifying the encoder shown in figure. If we just change the connections to the mod-2 summers, then the encoded output will change.
The message bits in the register are combined by mod-2 addition to form the encoded output. The input data to the encoder, which is assumed to be binary, is shifted into and along the shift register k-bits at a time. The number of output bits for each k-bit input sequence is n bits. The switch samples the all mod-2 adders in sequence, once during each bit interval.
This encoder generates non-systematic codes. Unlike block codes, the use of non-systematic codes is usually preferred over systematic codes in convolutional coding. In systematic codes, message information can be seen and directly extracted from the encoded information.