[fix](trx-rds): revert RRC span to 10 chips to restore stopband rejection
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 <noreply@anthropic.com> Signed-off-by: Stan Grams <sjg@haxx.space> https://claude.ai/code/session_01Sw9esAuic8KHP1t8nZgvH2 Signed-off-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -69,12 +69,14 @@ const COSTAS_LOCK_THRESHOLD: f32 = 0.15;
|
|||||||
/// sensitivity gain. The tighter excess bandwidth is handled by the longer
|
/// sensitivity gain. The tighter excess bandwidth is handled by the longer
|
||||||
/// RRC_SPAN_CHIPS to keep ISI negligible.
|
/// RRC_SPAN_CHIPS to keep ISI negligible.
|
||||||
const RRC_ALPHA: f32 = 0.30;
|
const RRC_ALPHA: f32 = 0.30;
|
||||||
/// Tech 1 — RRC filter span in chips. 5 chips captures >95% of the RRC
|
/// Tech 1 — RRC filter span in chips. 10 chips captures the full RRC
|
||||||
/// pulse energy at α=0.30 (first zero at t≈1.43 chips, sidelobes beyond
|
/// pulse including low-level sidelobes, keeping stopband leakage below
|
||||||
/// ±2.5 chips contribute <5% energy) while keeping the FFT overlap-save
|
/// −60 dB — critical for rejecting adjacent-channel interference on real
|
||||||
/// block size at 512 and FFT size at 1024 — matching the pre-TED filter
|
/// signals where α is small. The extra taps (vs span 5) increase FFT
|
||||||
/// efficiency. Added latency is ~2.1 ms at 2375 chips/s, negligible for RDS.
|
/// size from 1024 to 2048 but the improved stopband rejection translates
|
||||||
const RRC_SPAN_CHIPS: usize = 5;
|
/// 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
|
/// 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
|
/// 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
|
/// candidate can take over. Prevents the decoder from "freezing" when the
|
||||||
|
|||||||
Reference in New Issue
Block a user