### Viterbi Convolutional Error-Correcting Coder- Decoder

#### Abstract

I digital communications systems, it is common to use error-correcting codes to maintain reliable data reception. Error correction coding adds redundancy to the input, and at the receiver, this redundancy is used to correct errors. There are two types of error-correcting codes, block codes and convolutional codes.

Convolutional codes are preferred over block codes in error-correction due to better reliability. Although somewhat more complex when implemented, it is easier to decode. Convolutional encoders are implemented using shift-registers and modulo-2 summers. An (n, k, K) convolutional encoder accepts k bits input, and encodes it into n bits using K previous inputs and the present inputs.

However, regardless of whether the coding is block or convolutional, the majority of the effort lies on the decoder, which needs to find the sequence which best corresponds with the noisy received sequence. A well known decoder is the Viterbi algorithm, which produces a maximum-likelihood estimate and is optimal in minimizing the probability of error, given equally likely occurring information sequences.

The Viterbi Algorithm performs a search of all the paths in the trellis diagram, and selects the most likely path traversed, which is then decoded as the original data.

An optimally designed VHDL implementation VLSI architecture of a (3, 2, 3) convolutional encoder and error-correcting Viterbi decoder is aimed in this project.