Noise reduction
- LMS ANR / auto-notch fixed: restored the WDSP constants (
den_mult6.25e-10,lidx120–200 / 0–200, +1/−3 ramp, auto-notch 64 taps / 16-sample delay). The previous quartic leakage scale drove the leak term above 2, inverting it every sample — the "noise reduction" added ~17 dB of gain and distortion instead of removing noise. - Noise blanker threshold: now mapped when the state is re-sent after a reconnect. The raw 0–1 slider value previously made the server blank every sample, silencing the channel.
- Blanker timing: the server's pre-filter average (2 ms) and blanking guard (100 µs) now scale with the dongle sample rate instead of a fixed 100-sample alpha.
- Dead code removed: the spectral/Wiener NR and client audio blanker engine (~500 lines) is gone.
Filters
- SSB passband: the per-client extractor uses a one-sided bandwidth for USB/LSB, so a 2400 Hz request keeps the whole sideband instead of halving it to ±1200 Hz.
- WFM stereo: a decimating FIR (129 taps at 15.5 kHz) replaces the 51-tap LPF + drop-4-of-5 chain, rejecting the 24–34 kHz fold-back while using fewer MACs.
- Client upsampling: polyphase windowed-sinc interpolation for SSB (24 kHz) and CW (12 kHz) to 48 kHz; imaging drops from ~−55 dB to ~−100 dB.
- De-emphasis: selectable 50/75 µs FM de-emphasis, applied locally for the IQ path and on the server for Opus (
{"cmd":"deemphasis"}). - Hi-blend: new Auto mode follows the signal level; the rumble HPF range now extends to 400 Hz.
- CPU: block-form audio LPFs for FM/AM/SSB/CW and a 0.45 anti-alias cutoff.
Verification
cargo test 242 passed, cargo check --all-features, npm run typecheck and npm run build are clean. New tests cover the one-sided extractor, blanker rate scaling, decimating FIR, de-emphasis selection and the deemphasis command.
CI builds the portable server archives and Electron packages for this release.