Field Guide · term

Also known as: TETRA demod pipeline, TETRA IQ-to-dibit chain, TETRA demodulator

The TETRA receiver chain is the signal-processing pipeline that turns a tuned TETRA carrier into the stream of dibits every higher layer reads.1 TETRA’s physical layer is π/4-DQPSK at 18000 symbols per second, one dibit (two bits) per symbol, shaped by a root-raised-cosine pulse with roll-off α = 0.35. The receiver undoes that shaping and clock, corrects the channel, and recovers each symbol’s differential phase — the information TETRA actually carries.2

IQ RRC matched filter α=0.35 Gardner timing CMA snapshot equalizer π/4-DQPSK diff decode dibits taps adapt continuously · a FROZEN snapshot is applied per burst
Each stage feeds the next: the matched filter maximises symbol SNR, Gardner recovers symbol time, the snapshot equalizer inverts the channel with frozen taps, and the differential decoder reads the π/4 phase steps as dibits.

The stages

The chain runs four stages in order. A matched filter — a root-raised-cosine FIR designed around the same α = 0.35 pulse the transmitter uses — maximises symbol signal-to-noise and suppresses inter-symbol interference from the pulse shaping itself. The filtered stream is still at many samples per symbol, so Gardner timing recovery closes a feedback loop that estimates the correct sampling instant and decimates to exactly one sample per symbol; it recovers the clock without needing to know the carrier phase, which suits a differentially-coded signal. An optional residual-carrier AFC sits ahead of timing recovery because a spinning constellation corrupts the Gardner metric. Then the equalizer inverts any linear channel distortion, and finally the differential decoder reads each symbol’s phase step relative to the previous symbol and classifies it into a 0..3 dibit.

Why a snapshot equalizer

Real captures — especially concurrent-load traffic carriers — suffer multipath and band-edge group delay that smear the constellation. A blind CMA equalizer inverts that linear channel without a training sequence, by driving the output toward constant modulus. But CMA is placed ahead of a differential decoder, and that placement is a trap: CMA’s cost is rotation-invariant, so a continuously-adapting equalizer’s output phase wanders as its taps update. A time-varying phase does not cancel in the differential product s·conj(last) — every dibit is corrupted. The design answer is to adapt a tracking filter continuously but apply a frozen snapshot of its taps, refreshed only every few hundred symbols (far longer than one 255-symbol burst). Each burst then sees a constant filter and a constant phase that the differential step cancels cleanly; the single symbol straddling a snapshot boundary is absorbed by the downstream FEC. On the reporter’s captures this roughly doubles the CRC-valid traffic-burst yield with no regression on already-clean captures.

Relevance to SDR

internal/radio/tetra/receiver/receiver.go composes the chain: an RRC PiOver4DQPSK matched filter, a sync.Gardner loop (selectable via ClockMode), a carrierAFC, a channel-select FIR that rejects adjacent carriers admitted by the wide channelised passband, an equalizer.SnapshotCMA, and the differential decoder that emits dibits through a DibitSink keyed by an absolute dibit index. A parallel SoftSink can emit each symbol’s complex differential as soft information for soft-decision channel decoding. The receiver is deliberately rate-invariant — everything downstream is sized from the 18000 sym/s symbol rate, not the capture rate — so the same object drives both the control-channel state machine and each per-call voice tap.

Sources

  1. Terrestrial Trunked Radio — Wikipedia, on the TETRA standard and its π/4-DQPSK physical layer. 

  2. Differential coding — Wikipedia, on decoding information carried in the phase change between successive symbols. 

See also