sjg
e7997f8492
[perf](trx-backend-soapysdr): use ring history for wfm resampler
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 01:34:50 +01:00
sjg and Claude Opus 4.6
a6c3a85c8d
[fix](trx-backend-soapysdr): match wfm sum/diff filter cutoffs at 18 kHz
...
Raise both AUDIO_BW_HZ and STEREO_DIFF_BW_HZ to 18 kHz so the L+R and
L-R filter paths have identical group delay across the full audio band.
The previous mismatch (15.8 vs 14.5 kHz) caused frequency-dependent
phase errors in the stereo matrix that degraded real-world separation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 01:31:34 +01:00
sjg
f9691fee1e
[perf](trx-backend-soapysdr): vectorize wfm discriminator angle
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 01:30:41 +01:00
sjg
72219956d9
[perf](trx-backend-soapysdr): trim wfm resampler taps
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 01:21:50 +01:00
sjg and Claude Opus 4.6
b2ce62646c
[fix](trx-backend-soapysdr): improve wfm stereo blend threshold
...
Raise the stereo blend floor from 0.55 to 0.75 at pilot lock and lower
the full-blend ceiling from stereo_detect_level 0.92 to 0.70. This
gives real-world signals with moderate pilot strength much better L/R
separation (~17 dB immediately at lock vs ~5 dB before) and reaches
full unity blend sooner.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 01:20:38 +01:00
sjg
926a02e043
[perf](trx-backend-soapysdr): streamline wfm decode loop
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 01:19:47 +01:00
sjg
b42e557a25
[perf](trx-backend-soapysdr): pack iq fir filtering
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 01:17:16 +01:00
sjg
198efa2092
[perf](trx-backend-soapysdr): update fir overlap in place
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 01:13:10 +01:00
sjg
7a6467320b
[perf](trx-backend-soapysdr): reuse fir scratch buffers
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 01:10:34 +01:00
sjg
ca0f236f4a
[perf](trx-backend-soapysdr): reduce mixer and buffer overhead
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 01:07:19 +01:00
sjg
bec3fc72d3
[fix](trx-backend-soapysdr): widen wfm stereo image
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 01:03:05 +01:00
sjg
6f37f9c66b
[fix](trx-backend-soapysdr): refine wfm stereo tracking
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 00:58:20 +01:00
sjg
e84a0599fa
[feat](trx-backend-soapysdr): add avx2 wfm hot paths
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 00:52:53 +01:00
sjg
3e88c3f5d9
[feat](trx-backend-soapysdr): speed up fir and widen wfm resampler
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 00:50:04 +01:00
sjg
5411607b63
[fix](trx-backend-soapysdr): honor frontend wfm bandwidth
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 00:46:08 +01:00
sjg
17c70f89e5
[fix](trx-backend-soapysdr): fully reset wfm decoder on tune
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 00:41:28 +01:00
sjg
fdcc732c83
[fix](trx-backend-soapysdr): retune wfm fir window
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 00:38:44 +01:00
sjg
b0d8ce8e29
[fix](trx-backend-soapysdr): restore wfm agc and cutoffs
...
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 00:35:19 +01:00
sjg and OpenAI Codex
a6847742d9
[fix](trx-backend-soapysdr): keep wfm discriminator state across blocks
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 00:31:41 +01:00
sjg and OpenAI Codex
a8ed9e8fa4
[fix](trx-backend-soapysdr): lower wfm internal rate ceiling
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 00:24:33 +01:00
sjg and OpenAI Codex
a25182ea3f
[fix](trx-backend-soapysdr): drop wfm limiter and widen cutoffs
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 00:20:41 +01:00
sjg and OpenAI Codex
3b277da243
[fix](trx-backend-soapysdr): make wfm limiter bass-insensitive
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 00:10:54 +01:00
sjg and OpenAI Codex
206696acc5
[feat](trx-backend-soapysdr): add adaptive wfm stereo blend
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 00:07:13 +01:00
sjg and OpenAI Codex
5060522541
[fix](trx-backend-soapysdr): add wfm limiter and restore cutoffs
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 00:02:19 +01:00
sjg and OpenAI Codex
b6f0a9967d
[fix](trx-backend-soapysdr): improve wfm stereo separation trim
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-03-01 00:00:31 +01:00
sjg and OpenAI Codex
32822effda
[fix](trx-backend-soapysdr): retune wfm sum and diff cutoffs
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 23:55:17 +01:00
sjg and OpenAI Codex
635d2b39bb
[fix](trx-backend-soapysdr): add stereo diff high-pass and headroom
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 23:51:26 +01:00
sjg and OpenAI Codex
9453c90dac
[fix](trx-backend-soapysdr): retune wfm stereo difference path
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 23:41:07 +01:00
sjg and OpenAI Codex
0dd91a952b
[fix](trx-backend-soapysdr): add headroom to wfm stereo matrix
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 23:38:18 +01:00
sjg and OpenAI Codex
6d466f44d2
[fix](trx-backend-soapysdr): narrow wfm stereo difference band
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 23:37:08 +01:00
sjg and OpenAI Codex
9e49bfbcc8
[fix](trx-backend-soapysdr): latch full stereo blend after lock
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 23:34:43 +01:00
sjg and OpenAI Codex
617255cd32
[feat](trx-rs): expose live sdr gain control
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 23:30:08 +01:00
sjg and OpenAI Codex
93e507606e
[feat](trx-server,trx-backend-soapysdr): add sdr gain ceiling
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 23:23:41 +01:00
sjg and OpenAI Codex
dbeec9fb39
[feat](trx-backend-soapysdr): use fir resampler for wfm audio
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 23:17:15 +01:00
sjg and OpenAI Codex
5a6ff1427a
[fix](trx-client,trx-backend-soapysdr): improve rig switching and fm agc
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 23:06:53 +01:00
sjg and OpenAI Codex
8440fe164b
[fix](trx-backend-soapysdr): reduce wfm audio cutoff
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 22:54:03 +01:00
sjg and OpenAI Codex
735c9a7f07
[fix](trx-backend-soapysdr): bypass agc for wfm audio
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 22:38:54 +01:00
sjg and OpenAI Codex
3ccda5fb5a
[fix](trx-backend-soapysdr,trx-frontend-http): reset stereo state and soften wfm top end
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 22:34:54 +01:00
sjg and Codex
b6053729a4
[fix](trx-backend-soapysdr): emit proper stereo pcm frames
...
Co-authored-by: Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 22:07:34 +01:00
sjg and Codex
df1bbf8f5b
[fix](trx-rs): remove wfm denoise and default stereo audio
...
Co-authored-by: Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 22:01:17 +01:00
sjg and Codex
d6c89bcc6b
[fix](trx-backend-soapysdr): tighten wfm pilot detect and stereo agc
...
Co-authored-by: Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 21:51:36 +01:00
sjg and Codex
b722787ada
[feat](trx-rs): show live wfm stereo detect state
...
Co-authored-by: Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 21:44:32 +01:00
sjg and Codex
862f0200bb
[fix](trx-backend-soapysdr): tune wfm stereo separation trim
...
Co-authored-by: Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 21:39:35 +01:00
sjg and Codex
73fe9d52ff
[fix](trx-backend-soapysdr): improve wfm stereo separation
...
Co-authored-by: Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 21:34:31 +01:00
sjg and Codex
a456864957
[fix](trx-backend-soapysdr): restore wfm stereo separation
...
Co-authored-by: Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 21:26:32 +01:00
sjg and Claude Opus 4.6
eb740dbb43
[fix](trx-backend-soapysdr): add missing wfm_denoise arg in dsp tests
...
Fix pre-existing compilation failures in four test call sites that were
missing the wfm_denoise: bool argument added to ChannelDsp::new() and
SdrPipeline::start().
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 20:43:10 +01:00
sjg and Claude Opus 4.6
bbc7e857e5
[fix](trx-backend-soapysdr): improve WFM stereo demodulation quality
...
- Raise audio LPF cutoff from 15 kHz to 17 kHz to pass full FM stereo
audio bandwidth without excessive HF rolloff
- Replace 2-point linear interpolation resampler with 4-point Hermite
cubic spline for a much flatter passband up to 17 kHz
- Add FM discriminator gain normalization (fm_gain = fs / 150000) so
±75 kHz deviation maps to ±1.0 regardless of composite sample rate,
stabilizing stereo carrier amplitude reconstruction
- Double pilot PLL proportional (0.0015→0.003) and integral
(0.00002→0.00005) gains for faster lock and better tracking
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 20:43:01 +01:00
sjg and Codex
3d8fd32488
[fix](trx-backend-soapysdr): prevent double agc on mono wfm
...
Co-authored-by: Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 20:30:12 +01:00
sjg and Codex
244f91d97b
[fix](trx-backend-soapysdr,trx-frontend-http): make wfm mono mode real
...
Co-authored-by: Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 20:25:04 +01:00
sjg and Claude Sonnet 4.6
b7c1da138b
[fix](trx-backend-soapysdr): fix WFM stereo separation
...
The 19 kHz pilot notch was applied only to the L+R sum path, introducing
~22° of phase shift at 15 kHz relative to the L-R diff path. This phase
mismatch caused interchannel crosstalk (≈ −14 dB separation at 15 kHz).
Fix: remove the notch from the sum processing chain so both sum and diff
pass through identical 4th-order Butterworth LPFs, giving phase-coherent
demodulation across the full audio band. The notch is relocated to the
mono output branch where phase alignment with the diff channel is not
required. Pilot rejection on the stereo L/R outputs is still adequate
(~28 dB) from the combined LPF + deemphasis response at 19 kHz.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 20:11:15 +01:00