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
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
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
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
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
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
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
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
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
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
420e98de31
[feat](trx-client,trx-frontend-http): add default rig and hideable rf gain
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 23:45:17 +01:00
sjg
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
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
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
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
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
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
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
96da7ca471
[style](trx-frontend-http): lower rds overlay badge
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 23:12:38 +01:00
sjg
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
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
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
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
3a75b7ac5b
[fix](trx-frontend-http): satisfy audio copyTo arguments
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 22:28:35 +01:00
sjg
85ad204974
[fix](trx-frontend-http): handle stereo audio frame layouts
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 22:26:56 +01:00
sjg
f06dbc921a
[fix](trx-frontend-http): reconfigure audio stream on rig change
...
Co-authored-by: OpenAI Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 22:23:03 +01:00
sjg
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
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
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
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
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
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
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
1cc60c8a10
[style](trx-frontend-http): align wfm control button sizing
...
Co-authored-by: Codex <codex@openai.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 20:51:27 +01:00
sjg
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
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
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
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
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
sjg
95716a0fc3
[feat](trx-rs): expose WFM stereo denoise toggle
...
Add a server-side toggle for the multiband stereo denoiser so it can be
enabled or disabled at runtime without restarting the server.
Backend (trx-backend-soapysdr):
- Add `denoise_enabled: bool` to `WfmStereoDecoder`; gate multiband
blend behind it (falls back to uniform single-band blend when off)
- Add `set_denoise_enabled()` method on `WfmStereoDecoder`
- Propagate `wfm_denoise: bool` through `ChannelDsp`, `SdrPipeline`,
and `SoapySdrRig`; add `set_wfm_denoise()` at each layer
- Include `wfm_denoise` in `filter_state()` so it flows into snapshots
Protocol / core (trx-core, trx-protocol, trx-server):
- Add `SetWfmDenoise(bool)` to `RigCommand` and `ClientCommand`
- Add default `set_wfm_denoise()` trait method to `RigCat`
- Handle `SetWfmDenoise` in `rig_task.rs` and update `RigFilterState`
- Add `wfm_denoise: bool` (default `true`) to `RigFilterState`
Frontend (trx-frontend-http):
- Add `POST /toggle_wfm_denoise` endpoint
- Add "Denoise On/Off" button next to the stereo/mono audio picker
- Sync button state from SSE filter snapshot (`update.filter.wfm_denoise`)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Signed-off-by: Stan Grams <sjg@haxx.space >
2026-02-28 19:47:36 +01:00