From dd1af5aa94fac7af3c46ef8f31586bb0b0efd7c6 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 27 Mar 2026 15:09:49 +0000 Subject: [PATCH] [fix](trx-rds): revert RRC span to 10 chips to restore stopband rejection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The span-5 reduction passed synthetic tests because both the TX and RX filters used the same truncated pulse shape (perfect matched filtering). On real signals, the transmitter uses a full RRC pulse, and our truncated RX filter couldn't match it — the weaker stopband rejection (~25% less than pre-TED at α=0.30) allowed adjacent-channel interference through, degrading soft confidence values and block decode rate, which caused poor PS accumulation. Span 10 at α=0.30 gives 50% better stopband rejection than the pre-TED α=0.50/span=4 configuration, at the cost of 2048 vs 1024 FFT size. Co-Authored-By: Claude Opus 4.6 Signed-off-by: Stan Grams https://claude.ai/code/session_01Sw9esAuic8KHP1t8nZgvH2 Signed-off-by: Claude --- src/decoders/trx-rds/src/lib.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/decoders/trx-rds/src/lib.rs b/src/decoders/trx-rds/src/lib.rs index 4facfd7..11f86a7 100644 --- a/src/decoders/trx-rds/src/lib.rs +++ b/src/decoders/trx-rds/src/lib.rs @@ -69,12 +69,14 @@ const COSTAS_LOCK_THRESHOLD: f32 = 0.15; /// sensitivity gain. The tighter excess bandwidth is handled by the longer /// RRC_SPAN_CHIPS to keep ISI negligible. const RRC_ALPHA: f32 = 0.30; -/// Tech 1 — RRC filter span in chips. 5 chips captures >95% of the RRC -/// pulse energy at α=0.30 (first zero at t≈1.43 chips, sidelobes beyond -/// ±2.5 chips contribute <5% energy) while keeping the FFT overlap-save -/// block size at 512 and FFT size at 1024 — matching the pre-TED filter -/// efficiency. Added latency is ~2.1 ms at 2375 chips/s, negligible for RDS. -const RRC_SPAN_CHIPS: usize = 5; +/// Tech 1 — RRC filter span in chips. 10 chips captures the full RRC +/// pulse including low-level sidelobes, keeping stopband leakage below +/// −60 dB — critical for rejecting adjacent-channel interference on real +/// signals where α is small. The extra taps (vs span 5) increase FFT +/// size from 1024 to 2048 but the improved stopband rejection translates +/// directly into better block decode rate on weak, noisy signals. +/// Added latency is ~4.2 ms at 2375 chips/s, negligible for RDS. +const RRC_SPAN_CHIPS: usize = 10; /// Staleness timeout in seconds. If the incumbent candidate has not produced /// a state update in this many seconds, its score advantage is cleared so any /// candidate can take over. Prevents the decoder from "freezing" when the