Also known as: frozen-tap equalization, snapshot CMA, snapshot LMS
Snapshot equalization is a way of applying an adaptive equalizer, not a new way of adapting one: a tracking filter adapts continuously in the background, but the signal is filtered through a frozen copy of the taps, refreshed only between bursts, so every burst sees one constant filter.1 The design exists to resolve a genuine dilemma that appears whenever an adaptive equalizer feeds a differential decoder — and both horns of the dilemma score exactly zero.
The dilemma it resolves
A blind CMA equalizer’s cost depends only on output
magnitude, so nothing constrains its output phase: as the taps adapt, the phase wanders.
A differential decoder recovers each symbol as s·conj(previous), which cancels any
constant rotation perfectly — that is the point of
π/4-DQPSK — but a phase that moves between the two symbols of a
pair does not cancel; it corrupts every dibit. Measured on real TETRA captures, a
streaming-adaptive CMA ahead of the differential decoder scored zero CRC-valid frames.
The obvious retreat — freeze the taps permanently — only ever reproduces the unequalized
baseline, because a frozen filter cannot follow the channel. Adapt-continuously,
apply-frozen takes the third path: within a burst the applied filter is constant (its
rotation cancels differentially, the same property that makes any constant offset
harmless), while between bursts the snapshot refreshes from the tracker. Refresh every
several bursts’ worth of symbols; the single symbol pair straddling a refresh is absorbed by
the FEC.
What else it needs to work
Field-tested supporting rules, each learned from a variant that failed:
- Normalise by a constant, not a local average. The CMA update scales with |x|³; an EMA that tracks a TDMA downlink’s slot-to-slot power swings gives a moving modulus target and the equalizer converges to garbage. Use a cumulative-mean (effectively global) normaliser.
- Guard against divergence. A normalisation transient or deep fade can blow the tracking taps up; re-seed the tracker to pass-through when tap magnitude explodes, so one bad patch cannot poison later snapshots.
- Judge by decoded output, never by EVM. Blind CMA minimises modulus, not correctness — one unstable variant showed differential EVM collapsing 34% → 8% while CRC-valid frames stayed at zero. CRC yield is the verdict.
These and their siblings are collected in equalizer gotchas.
Relevance to SDR
GopherTrunk ships two snapshot equalizers (internal/dsp/equalizer/).
SnapshotCMA — blind, in the TETRA receiver’s stream path — roughly doubled
CRC-valid voice frames across a set of marginal captures (410 → 778) and lifted a
control-channel fixture from ~12% to ~100% clean BSCH, with no loss on clean signal.
SnapshotLMS — trained, in the traffic extractor — goes further where framing is
known: it trains on each burst’s
midamble from the raw (pre-differential) symbols,
freezes, equalizes that one burst, and re-derives the
soft-decision LLRs from the equalized symbols. The raw-symbol
detail matters: the channel is a clean convolution only in the raw symbol domain —
s·conj(prev) is a nonlinear product — so the trained equalizer must run before the
differential decode. The same discipline transfers to any burst waveform with a
differential slicer downstream.
Sources
-
Blind equalization — Wikipedia, on blind adaptive equalizers and the phase indeterminacy of constant-modulus cost functions. ↩