Convolutional codes Rajnish singh ROLL NO-66 01115007319 ECE-1(MORNING) A convolutional code is a type of error-correcting code that generates parity symbols via the sliding application of a boolean polynomial function to a data stream. The sliding application represents the 'convolution' of the encoder over the data, which gives rise to the term 'convolutional coding'. Binary Convolutional Codes In convolutional codes, the message comprises of data streams of arbitrary length and a sequence of output bits are generated by the sliding application of Boolean functions to the data stream. In block codes, the data comprises of a block of data of a definite length. However, in convolutional codes, the input data bits are not divided into block but are instead fed as streams of data bits, which convolve to output bits based upon the logic function of the encoder. Also, unlike block codes, where the output codeword is dependent only on the present inputs, in convolutional codes, output stream depends not only the present input bits but also only previous input bits stored in memory. Convolutional codes were first introduced in 1955, by Elias. After that, there were many interim researches by many mathematicians. In 1973, Viterbi developed an algorithm for maximum likelihood decoding scheme, called Viterbi scheme that lead to modern convolutional codes. Encoding by Convolutional Codes For generating a convolutional code, the information is passed sequentially through a linear finite-state shift register. The shift register comprises of (-bit) stages and Boolean function generators. A convolutional code can be represented as (n,k, K) where ● k is the number of bits shifted into the encoder at one time. Generally, k = 1. ● n is the number of encoder output bits corresponding to k information bits. ● The code-rate, Rc = k/n . ● The encoder memory, a shift register of size k, is the constraint length. ● n is a function of the present input bits and the contents of K. ● The state of the encoder is given by the value of (K - 1) bits. Example of Generating a Convolutional Code Let us consider a convolutional encoder with k = 1, n = 2 and K = 3. The code-rate, Rc = k/n = 1/2 . The input string is streamed from right to left into the encoder. When the first bit, 1, is streamed in the encoder, the contents of encoder will be − When the next bit, 1 is streamed in the encoder, the contents of encoder will be − When the next bit, 0 is streamed in the encoder, the contents of encoder will be − When the last bit, 1 is streamed in the encoder, the contents of encoder will be − Representing Convolution Encoder with State Transition Diagram and State Table From the above example, we can see that any particular binary convolutional encoder is associated with a set of binary inputs, a set of binary outputs and a set of states. The transitions and the output may be effectively represented by a state transition diagram and a state table. For the binary convolution encoder given in the example − The set of inputs = {0, 1} The set of outputs = { 00, 10, 11} The set of states = { 00, 01, 10, 11} We can see that in the initial state, 00, when the input 1 was given, the next state became 10 and the corresponding output was 11. In this state 10, when the input 1 was given, the next state was 11 and the encoder outputs were 10. In the same manner we get the other transitions. When this is tabulated, we get the state transition table as follows – The corresponding state transition diagram will be − There are three alternative methods that are often used to describe a convolutional code: Tree diagram Trellis diagram State diagram Trellis diagram A convolutional encoder is a finite state machine. An encoder with n binary cells will have 2n states. Imagine that the encoder (shown on Img.1, above) has '1' in the left memory cell (m0), and '0' in the right one (m−1). (m1 is not really a memory cell because it represents a current value). We will designate such a state as "10". According to an input bit the encoder at the next turn can convert either to the "01" state or the "11" state. One can see that not all transitions are possible for (e.g., a decoder can't convert from "10" state to "00" or even stay in "10" state). An actual encoded sequence can be represented as a path on this graph. One valid path is shown in red as an example. This diagram gives us an idea about decoding: if a received sequence doesn't fit this graph, then it was received with errors, and we must choose the nearest correct (fitting the graph) sequence. The real decoding algorithms exploit this idea. A trellis diagram for the encoder on Img.1. A path through the trellis is shown as a red line. The solid lines indicate transitions where a "0" is input and the dashed lines where a "1" is input. Where convolutional codes are used Convolutional codes are used extensively to achieve reliable data transfer in numerous applications, such as digital video, radio, mobile communications (e.g., in GSM, GPRS, EDGE and 3G networks (until 3GPP Release 7)) and satellite communications. These codes are often implemented in concatenation with a hard-decision code, particularly Reed–Solomon. Prior to turbo codes such constructions were the most efficient, coming closest to the Shannon limit. Q. Below figure depicts a rate ½, constraint length L = 1, convolutional encoder. Sketch the Tree diagram. Also find encoder output for input data: 11101 Step 1: Step 2: Step 3: Step 4: Step 5: