3.4.10) where the generator matrix can be {bo, b1, bm} can be represented as a polynomial bo + expressed as b1 D + + bmDm by weighting the ith bit in time by Di where D is a variable representing delay. Similarly, u'(D) = [u1(D), u2(D), ..., uj(D), ..., uk(D)] is a row vector of k polynomials, with the jth polynomial and c'(D) [c1(D), c2(D)], (D) = [u(D)]. The representing the jth bit sequence. The matrix G(D) is a k aforementioned representation of a convolutional code is X n matrix that contains generator polynomials that often useful for analyzing the performance characteris- specify the relationship between the input polynomials tics of a code. and the output polynomials. For example, consider the Another representation of a convolutional code is as convolutional code shown in Figure 3.4-6a. The first a trellis. A pictorial representation of a trellis can be output bit is the modulo-2 addition of the current input formed by aligning all of the possible states in a vertical Figure 3.4-6 (a) Convolutional code example with parameters V = 2, k = 1, and n=2. (b) State diagram representation of convolutional code. CHAPTER 3.4 Channel protection fundamentals zero), a naive approach to finding the codeword sequence that is closest to the received sequence would be to calculate the distance of the received sequence to each path in the trellis that starts in state zero and then declare the path that is closest to the received sequence as the decoded codeword. This method is inefficient because the amount of computation grows exponentially with the length of the sequence. A more efficient decoding algo- rithm can be realized by using the Viterbi algorithm. The Viterbi algorithm begins at the first stage of the trellis by calculating the distance between all branches of the Figure 3.4-7 Trellis representation of convolutional code given trellis that emerge from state zero and the corresponding in Figure 3.4-6a. block in the received sequence (i.e., (0) general, there will be Zk branches that emerge from any column for e