the error pattern detector must be modified to deal with the missing leading bits and the fact that there cannot be errors in those missing bits. Convolutional Codes A convolutional coder converts a continuous stream of source data symbols into a con- tinuous stream of encoded symbols. Like block codes, convolutional codes can be systematic or unsystematic, and can be used for error detection only or correction as well. However, where only error detection is required, block codes are simpler and are almost always used. By contrast with the analysis and design of block codes, the behavior of convolutional codes is harder to analyze, and some of the best codes are found by computer search. A rigorous mathematical treatment is, however, available in Forney (1970). Tables of good convolutional codes for various requirements are available in reference books, together with measures of their performance, such as their coding gain at different output BERs. Convolutional Coding A convolutional coder takes M-ary input digits in groups of k at each timestep and produces groups of n output digits. Because the input and output datarates are k and n digits per timestep, the code is known as a rate-k/n code. The coder contains k parallel shift registers of maximum length L - 1, where L is known as the constraint length of the code. Two com- mon pictorial representations of such a coder (with k = 1, n = 2, and L = 4) are shown in Figure 4.4. The output digits are formed as weighted sums of the input digit(s) and the digits in the shift register(s), with arithmetic in GF(M) as for block codes. In binary, the only possible weights are 0 and 1, SO the output bits are formed by selected modulo-2 sums of the input bit(s) and register contents. After the output digits have been formed, the input digit(s) are shifted into the shift register(s). An alternative representation of a convolutional coder is as a single shift register of length <(L - 1)k digits. In each timestep the n output digits are calculated and then the k Chapter 4 Codi