From 6d466f44d21ea09e50e210c643be74a5f67b9989 Mon Sep 17 00:00:00 2001 From: Stan Grams Date: Sat, 28 Feb 2026 23:37:08 +0100 Subject: [PATCH] [fix](trx-backend-soapysdr): narrow wfm stereo difference band Co-authored-by: OpenAI Codex Signed-off-by: Stan Grams --- .../trx-backend/trx-backend-soapysdr/src/demod.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/trx-server/trx-backend/trx-backend-soapysdr/src/demod.rs b/src/trx-server/trx-backend/trx-backend-soapysdr/src/demod.rs index 0fd930d..0cc552c 100644 --- a/src/trx-server/trx-backend/trx-backend-soapysdr/src/demod.rs +++ b/src/trx-server/trx-backend/trx-backend-soapysdr/src/demod.rs @@ -15,6 +15,10 @@ const PILOT_HZ: f32 = 19_000.0; /// top-end artifacts on strong signals while still preserving the useful /// broadcast audio range. const AUDIO_BW_HZ: f32 = 15_800.0; +/// Stereo L-R subchannel bandwidth for WFM (Hz). +/// Keep this a bit lower than the mono path because the recovered difference +/// signal is noisier and more prone to high-frequency artifacts. +const STEREO_DIFF_BW_HZ: f32 = 13_500.0; /// Q values for a proper 4th-order Butterworth cascade (two 2nd-order stages). /// Stage 1: Q = 1 / (2 cos(π/8)) const BW4_Q1: f32 = 0.5412; @@ -476,10 +480,10 @@ impl WfmStereoDecoder { sum_lpf1: BiquadLowPass::new(composite_rate_f, AUDIO_BW_HZ, BW4_Q1), sum_lpf2: BiquadLowPass::new(composite_rate_f, AUDIO_BW_HZ, BW4_Q2), sum_notch: BiquadNotch::new(composite_rate_f, PILOT_HZ, PILOT_NOTCH_Q), - diff_lpf1: BiquadLowPass::new(composite_rate_f, AUDIO_BW_HZ, BW4_Q1), - diff_lpf2: BiquadLowPass::new(composite_rate_f, AUDIO_BW_HZ, BW4_Q2), - diff_q_lpf1: BiquadLowPass::new(composite_rate_f, AUDIO_BW_HZ, BW4_Q1), - diff_q_lpf2: BiquadLowPass::new(composite_rate_f, AUDIO_BW_HZ, BW4_Q2), + diff_lpf1: BiquadLowPass::new(composite_rate_f, STEREO_DIFF_BW_HZ, BW4_Q1), + diff_lpf2: BiquadLowPass::new(composite_rate_f, STEREO_DIFF_BW_HZ, BW4_Q2), + diff_q_lpf1: BiquadLowPass::new(composite_rate_f, STEREO_DIFF_BW_HZ, BW4_Q1), + diff_q_lpf2: BiquadLowPass::new(composite_rate_f, STEREO_DIFF_BW_HZ, BW4_Q2), dc_m: DcBlocker::new(0.9999), dc_l: DcBlocker::new(0.9999), dc_r: DcBlocker::new(0.9999),