Convolutional Codes
Mohammad Hanaysheh
Mahdi Barhoush

* A convolutional code is generated by passing the information sequence to be transmitted through a linear finite shift register.
* 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 sequence is n bits.
R = k / n.

>>> Initially, the shift register is assumed to be in the all-zero state. suppose the first input is a 1.then the output sequence of three bits is 111.suppose the second bit is 0.the output sequence will be 001.if the third bit is 1,the output will be 100,and so on.
>>> There are three alternative methods that are often used to describe a convolutional code:
1. Tree diagram.
2. Trellis diagram.
3.State diagram.

Decoding
A message m is encoded into the code sequence c.
Each code sequence represents a path in the trellis diagram.
Minimum Distance Decoding
Upon receiving the received sequence r, search for the path that is closest ( in Hamming distance) to r .

The Viterbi Algorithm:
* The viterbi algorithm is used to decode convolutional codes and any structure or system that can be described by a trellis.
* It is a maximum likelihood decoding algorithm that selects the most probable path that maximizes the likelihood function.
* The algorithm is based on add-compare-select the best path each time at each state.