Weak-Signal Engineering is a 14-part deep dive into the marginal regime — the space between full quieting and no signal, where a receiver locks but doesn’t decode, and where most real traffic actually lives. Across one year of issue-tracker work, GopherTrunk roughly doubled its decode yield there with four levers: blind equalization (CMA with frozen snapshots), trained equalization (LMS on known midambles), soft-decision FEC, and diversity combining. This series is the cross-protocol theory and engineering of those levers — what each one can and cannot fix, the traps between them, and the tests that keep them honest.

Where SDR Internals gave equalization and diversity one survey episode, this series goes lever by lever. The concurrent TETRA End to End series is its flagship case study, and The Analog Edge covers the other side of the ADC — because the first weak-signal question is always whether the deficit is in the channel or baked into the samples. One discipline runs the length of the series: CRC-valid frames are the only trustworthy verdict; EVM, SNR and constellation beauty are advisory at best and traps at worst.

Every post reads three ways: a TL;DR + cheat-sheet for skimmers, bold headers, tables, and diagrams for the medium read, and full prose with real code for the deep read.

New here? Start with the DSP learning module for the vocabulary, then come back for the engineering.<ol class="post-list series-list"><li class="post-card"> <h2 class="post-card__title">Weak-Signal Engineering, Part 1: The Marginal Regime</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">Between full quieting and no signal lies the marginal regime — where a receiver locks but decodes only a fraction of what it hears — and this opener defines that regime with a real TETRA capture, previews the four levers that roughly doubled GopherTrunk’s yield there, and sets the one verdict rule the whole series lives by.</p></li><li class="post-card"> <h2 class="post-card__title">Weak-Signal Engineering, Part 2: Metrics That Lie — EVM vs CRC Yield</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">Why error vector magnitude, wideband carrier SNR, and constellation beauty can all improve while a decoder recovers nothing — the equalizer whose EVM collapsed 34% to 8% with CRC stuck at zero, the</p></li><li class="post-card"> <h2 class="post-card__title">Weak-Signal Engineering, Part 3: ISI & the Linear Channel — What an Equalizer Can & Can’t Fix</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">The convolution model y = h∗x + n that every equalizer in this series inverts — what multipath and band-edge group delay do to π/4-DQPSK and C4FM symbols, which impairments are linear and therefore recoverable, which are not, and the raw-symbol-domain fact that dictates the architecture of Parts 5 and 7.</p></li><li class="post-card"> <h2 class="post-card__title">Weak-Signal Engineering, Part 4: Blind Equalization — CMA From First Principles</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">The Constant Modulus Algorithm built from its cost function up — how the Godard gradient becomes a five-line tap update in GopherTrunk’s cma.go, why constant-envelope PSK is the perfect prey, why the algorithm needs a noise floor to be well-posed, and where the spurious minima behind Part 2’s EVM trap come from.</p></li><li class="post-card"> <h2 class="post-card__title">Weak-Signal Engineering, Part 5: The Snapshot Trick — Frozen Taps & Differential Decoders</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">Why a continuously-adapting CMA in front of a differential decoder scores exactly zero CRC-valid frames, why permanently frozen taps only ever match the baseline, and how SnapshotCMA’s adapt-continuously-apply-frozen design resolves the dilemma — doubling TETRA voice yield and lifting the thread capture from twelve percent to one hundred.</p></li><li class="post-card"> <h2 class="post-card__title">Weak-Signal Engineering, Part 6: Normalisation & Divergence Guards</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">The unglamorous half of a working blind equalizer — why the CMA update’s cubic scaling in input amplitude makes normalisation part of the algorithm, how an EMA tracking a TDMA downlink’s slot-to-slot power swings turned the full equalizer win into CRC zero, and why the divergence guard that re-seeds blown-up taps deserves a test of its own.</p></li><li class="post-card"> <h2 class="post-card__title">Weak-Signal Engineering, Part 7: Trained Equalization — LMS on the Midamble</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">When the burst carries known symbols, stop guessing — how GopherTrunk trains a SnapshotLMS on each TETRA burst’s midamble in the raw-symbol domain, freezes the taps, equalizes the payload with a FIR warm-up, and re-derives the soft LLRs, taking a synthetic multipath burst from 13% payload bit-error to zero while staying byte-identical when switched off.</p></li><li class="post-card"> <h2 class="post-card__title">Weak-Signal Engineering, Part 8: Soft Decisions — LLRs Through Depuncture & Viterbi</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">Why hard-slicing a marginal symbol throws away the information the FEC needs most, how GopherTrunk carries per-bit log-likelihood ratios through descramble, deinterleave, depuncture, and a correlation-metric Viterbi, and the measured TETRA outcome that justified the whole soft path.</p></li><li class="post-card"> <h2 class="post-card__title">Weak-Signal Engineering, Part 9: Parallel Buffers — SymbolSink, SoftSink & Opt-In Soft Paths</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">The architecture pattern that let equalizers and soft-decision FEC land safely — LLR differentials and raw symbols carried strictly parallel to the hard dibit buffer, a stash bridge keyed by base index, and a byte-identical opt-out pinned by failing-first tests.</p></li><li class="post-card"> <h2 class="post-card__title">Weak-Signal Engineering, Part 10: Diversity I — MRC & Coherence-Gated Calibration</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">Maximal-ratio combining from two receive branches, the wideband-scalar caveat that bounds what one complex gain can deliver, and the scale-invariant coherence gate — |rho| = γ/(1+γ), a noise floor you can compute, and the DC-removal detail that turns out to be load-bearing.</p></li><li class="post-card"> <h2 class="post-card__title">Weak-Signal Engineering, Part 11: Diversity II — Tracking Without Breaking the Differential</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">Why independent-PLL front ends make a frozen diversity calibration decay, and how TrackingCalibrator re-estimates the branch gain continuously yet stays safe ahead of a differential decoder — the anchored phase, the hold-don’t-fallback rule, the step clamp, and the four-arm capture A/B.</p></li><li class="post-card"> <h2 class="post-card__title">Weak-Signal Engineering, Part 12: Proving It’s the Signal — Rate Invariance & Independent Resamplers</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">Experimental design as an engineering skill, with issue #764 as the worked example — how an independent 4:1 resampler proved a ten-dB decode deficit was baked into the captured samples, how clipping was ruled out, and how a unit test now pins the invariant the experiment relied on.</p></li><li class="post-card"> <h2 class="post-card__title">Weak-Signal Engineering, Part 13: The Odd Path Out — P25 Phase 1 C4FM</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">A diagnosis, not a fix — why P25 Phase 1 C4FM voice is the one decode path in GopherTrunk with neither an equalizer nor soft-decision FEC, what the Astro Spectra report showed, and the baseline harness waiting on the one thing that lets a fix land: a real weak-signal capture.</p></li><li class="post-card"> <h2 class="post-card__title">Weak-Signal Engineering, Part 14: The Weak-Signal Playbook</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">The finale — the whole method folded into one decision tree from symptom to lever: measure in-channel SNR and yield, classify the channel as ISI-limited, reliability-limited, fading-limited, or signal-limited, apply the matching lever, and hold every change to the failing-first, capture-A/B, yield-verdict discipline.</p></li></ol><p class="blog-feed-link"> See all deep dives or subscribe via RSS. </p>