Also known as: trellis-coded modulation, TCM, Ungerboeck coding
Trellis-coded modulation (TCM) integrates convolutional coding directly into the modulation’s symbol mapping, so it wins coding gain without spending extra bandwidth.1 Instead of adding parity bits (which would need more symbols or a wider channel), TCM enlarges the constellation and lets the code decide which symbol transitions are legal, so redundancy hides in the geometry of the signal rather than in extra bits on the wire. It was introduced by Gottfried Ungerboeck in the early 1980s and transformed voiceband modems; the same idea now protects several digital-radio data streams.2
How it works
The engine of TCM is set partitioning. Take a constellation and split it recursively into subsets, at each step maximising the minimum Euclidean distance within a subset. A convolutional encoder then decides which subset the next symbol may come from, while the uncoded data bits pick a specific point inside that subset. Because the code steers the signal toward transitions that are far apart in Euclidean distance, an error would have to jump a larger gap than in the uncoded scheme — that gap is the coding gain, typically 3–6 dB, and it comes without adding symbols. The receiver runs the Viterbi algorithm over the trellis, but crucially it measures Euclidean (soft) distance between the received sample and each candidate point, not Hamming distance on hard-decided bits. This joint treatment of coding and modulation is exactly why TCM beats a separately-designed code plus modulation of the same rate.
The key insight Ungerboeck contributed was that you should not optimise the code and the constellation independently. A convolutional code maximises free Hamming distance, but on a Gaussian channel what matters is free Euclidean distance. Mapping code branches onto a partitioned constellation makes those two align, so the trellis’s most-likely confusable paths are also the ones the constellation keeps farthest apart.
In practice
TCM trades decoder complexity (a Viterbi search with soft metrics) for spectral efficiency, so it thrives where bandwidth is scarce and a demodulator can afford soft decisions — telephone-line modems (V.32, V.34), some satellite links, and digital land-mobile radio. Its natural partner is a modulation whose symbols already carry several bits, so there is room to “spend” one bit on the code without widening the channel.
Relevance to SDR
The clearest radio example is Project 25 Phase 1. P25 Phase 1 uses C4FM, a four-level FSK that carries two bits (dibit) per symbol at 4800 symbols/s. The data and control payloads are protected by a rate-1/2 (and, punctured, rate-3/4) trellis code that operates directly on those dibit symbols: pairs of dibits form the code’s input, and the trellis constrains which four-level symbol sequences are valid, so the decoder can recover the payload well below the SNR an uncoded C4FM stream would need. GopherTrunk implements this P25 trellis decoder in its C4FM decode chain — after symbol recovery it runs the Viterbi search over the P25 trellis to reconstruct the TSBK control words and data blocks, which is part of why a marginal P25 control channel still yields usable channel grants rather than dropping out entirely.
Sources
-
Trellis modulation — Wikipedia, for combining convolutional coding with the constellation mapping to gain coding gain without extra bandwidth. ↩
-
Trellis coded modulation — Wikipedia, for Ungerboeck’s set-partitioning method and Euclidean-distance Viterbi decoding. ↩