What's New
AM Stereo (C-QUAM) — Experimental
- Auto-detected in AM mode via two-stage verification: 25Hz Goertzel pilot detector + C-QUAM PLL lock confirmation
- When a C-QUAM station is detected, stereo decoding activates automatically — same UI flow as WFM stereo
- We need testers! ~45 US stations, a handful in Italy, Japan, Philippines, and Thailand still broadcast C-QUAM. Requires direct sampling mod or HF-capable dongle. Please report results via GitHub issues.
Noise Reduction
- Spectral NR — Wiener filter (512-pt FFT, overlap-add, minimum-statistics noise floor estimation). Has known artifacts on music/tonal signals — improvements planned.
- Noise Blanker — EMA amplitude tracking with 7-sample hang timer and smooth gain transitions. Works well for impulse noise on AM/HF.
- WFM Stereo Blend — SNR-proportional continuous blend (0–1) replaces hard stereo on/off. Weak stations fade gracefully to mono.
IMA-ADPCM Compression
- Per-client codec negotiation:
noneoradpcmfor both FFT and IQ streams - FFT ADPCM: ~8:1 compression (Float32 → Int16 dB×100 → 4-bit ADPCM + 10-sample warmup)
- IQ ADPCM: 4:1 compression (Int16 → 4-bit ADPCM)
- Default: ADPCM enabled for both FFT and IQ
- Live compression stats in the UI (wire bytes, ratio, savings)
Server Optimizations
- FFT rate cap — configurable
fftFpsper profile (default 30). All computed FFT frames averaged into pending frame, emitted at target rate. Reduces ~1172 fps → 30 fps. - WebSocket backpressure — checks
bufferedAmountbefore sending (256KB for FFT, 1MB for IQ). Slow clients get frames dropped with warning log. - Audio-gated IQ — server only sends per-user IQ data after client sends
audio_enabledcommand.
Dongle Hardware Configuration
- New config options:
directSampling,biasT,digitalAgc,offsetTuning,ifGain,tunerBandwidth - Full rtl_tcp protocol support (commands 0x01–0x0E)
- HF direct sampling dongle example in config.yaml
UI Improvements
- Classic analog S-meter (needle mode) with warm backlit face, dual scale, red needle, peak hold
- Stereo indicator and controls for both WFM and AM modes
- Waterfall resize preservation (offscreen canvas snapshot)
- Spectrum renderer 30fps throttle
- Compression stats panel with live ratio and savings display
Other
- Per-profile
fftFpsconfiguration (1–60, default 30) - FFT size limit raised to 16384
- Dev scripts run shared/server/client in parallel with watch mode
- Stereo PLL stability: faster energy tracking, 200ms hold timer, wider BPF