# A History of Channel Coding in Aeronautical Mobile Telemetry and Deep-Space Telemetry
## 3 Deep-Space Telemetry
### In Search of the Missing 2 dB--Turbo Codes  
Turbo codes were introduced in 1993 [76] and quickly became the subject of intense investigation in academia and industry. The space telemetry community also contributed to the subsequent research on turbo codes. At the time turbo codes were introduced, the concatenated coding scheme involving the (255,223) Reed-Solomon code, interleaving, and the \((7,1/2)\) convolutional code was the standard. This was the channel code first used in _Voyager_: see Figure 11c in Section 3.5. For years, there had been an effort to find channel codes whose performance was closer to the Shannon limit [71]. The first step toward this goal was the (15,1/6) convolutional code used by _Cassini_. The generator polynomials are given by (13). The decoder used the Viterbi algorithm operating on a trellis with \(2^{14}=16384\) states. Turbo codes presented the opportunity to achieve the goal with lower complexity. The U.S. space program \"tiptoed\" into the modern coding era [77] with the iterative decoding procedure used with the _Galileo_ program described in Section 3.7. However, the _Galileo_ decoder was the solution to the unusual set of circumstances that challenged the  
Figure 16: A simplified block diagram of the communication system and channel coding capabilities of the _Cassini_/_Huygens_ space probe. Adapted from [69; 73]. success of the _Galileo_ mission. It was not seen as a general, long-term solution to moving closer to the Shannon capacity. Thus, turbo codes presented a structured way to move closer to Shannon capacity with manageable decoder complexity. The hunt was on to establish a turbo coding standard for space telemetry. [PERSON] and [PERSON] found turbo codes that minimized the decoded probability of _bit_ error in 1995 [78]. In the EU, it was realized that because telemetry comprises data frames, the probability of _frame_ error is more important than the probability of _bit_ error [79]. To this end, turbo codes that minimized the probability of frame error were found and published by [PERSON] and his team in 1998 [80]. The turbo codes in [80] were adopted by the CCSDS the TM Synchronization and Channel Coding Standard [50], less than six years after the introduction of turbo codes by [PERSON] in 1993. The turbo code standardization process moved quickly because (1) few proposals were involved, and (2) turbo codes are defined by a relatively small number of parameters (e.g., rate, constraint length, register connections) [77]. The CCSDS turbo code comprises the parallel concatenation of two identical rate-1/4 systematic convolutional codes. The code is capable of producing turbo codes at rates of 1/2, 1/3, 1/4, and 1/6. The constituent convolutional codes had 16 states, in contrast to the 8-state codes standardized for 3G cellular systems and the IEEE 802.16 standard [77]. This choice was made because the constituent 16-state convolutional codes produced a turbo code with a fraction of dB more coding gain than the 8-state convolutional codes. In space telemetry, an improvement in coding gain at the expense of a factor of 2 in decoding complexity is generally a desirable trade-off. The CCSDS turbo encoder is illustrated in Figure 17. The arrangement producing parallel concatenation of the constituent codes is shown in Figure 17a. The input information block, comprising \(k\in\{1784,3568,7136,8920\}\) information bits, is stored in an information block buffer. The possible values of \(k\) correspond to Reed-Solomon interleaving depths of 1, 2, 4, and 5, respectively. The buffer also serves as the interleaver; interleaving is performed by reading out the \(k\) information bits in a permuted order specified in Section 6.3 g of [50]. The turbo code rate is determined by the connections between the outputs of the two constituent encoders and the overall output. The relationship is defined in Table 1.  
The rate-1/4 systematic convolutional encoder is shown in Figure 17b. The switch is in position A for the first \(k\) input bits.