github Stuey3D/VibeSDR exp-2bc23c8
EXPERIMENTAL 2bc23c8 — SSB was throwing away half the voice (+ DSP 2-8x faster)

latest releases: v9.0.1, exp-4917f6f
pre-release4 hours ago

⚠️ EXPERIMENTAL. Supersedes exp-37953d6.

The big one: SSB was throwing away half the voice

Set the bandwidth to 2.7 kHz, get ~1.4 kHz of audio. The slider has been lying. It still sounded like speech — just muffled — which is why it survived for months: you only catch it by A/B-ing another receiver on the same signal.

Cause: the DDC channel filter used chHalf = bwHz/2. That's right for AM/FM, where the signal straddles the carrier. It is wrong for SSB and CW, where the wanted sideband runs from the carrier out to the full bandwidth on one side — which is the very premise the Weaver demodulator is built on. So the filter closed at 1.4 kHz on a 2.8 kHz channel and took the consonants with it.

Confirmed three ways:

  • Measured against an UberSDR recording of the same 7.187 MHz LSB signal: VibeSDR was 37 dB down across 2.0–2.7 kHz — exactly the band that carries intelligibility. (0.3–1.0 kHz matched almost perfectly, hence "clear, but not as clear".)
  • Stuart could only match UberSDR's 2.7 kHz by opening our filter to ~4 kHz — i.e. our passband was about half what the slider claimed.
  • A 2.4 kHz tone, well inside a 2.8 kHz channel, did not survive the DDC.

This bug is old, not new. The previous single-stage filter had a lazy ~10.6 kHz transition that sloppily leaked 1.4–2.8 kHz back through, masking it. Tightening the filter did its job properly and made the hole audible.

👉 Put your SSB bandwidth back to 2.7 kHz. It should now match UberSDR without the fudge.

DSP is also 2–8× cheaper (Local Hardware and VibeServer)

Measured on a Raspberry Pi 3 (scalar), one user @ 2.4 MSPS:

mode before after
WFM (stereo+RDS) 286% of a core ~108%
SSB 117% 30%
AM 53% 28%
NFM 61% 27%
  • WFM decimated to 3× its bandwidth — the comment claimed 1.5x; the code said 3.0 and never changed. At 1.024 MSPS it decimated by one, running the whole MPX chain at full rate. That's why lowering the sample rate made WFM more expensive, not less.
  • The channel filter decimated 50:1 in one step (~750 taps at 2.4 MSPS). Now cascaded, with the narrow filter last, where taps are cheap.
  • The channel rate never had to be the audio rate. 48 kHz → 12 kHz for narrow modes; the Weaver filters cost ~16× less. (UberSDR uses a 12 kHz channel too.)

New regression guards

  • test_passband — tones across the sideband must all survive, and the wrong sideband must still be rejected (60 dB — Weaver is fine).
  • test_adjacent — a 60 dB-stronger jammer parked on the fold frequency must stay out of the audio. The last decimation stage now uses Blackman (~74 dB) not Hamming (~53 dB), because whatever it misses folds into the audio and can never be removed.

Please test

  1. SSB at 2.7 kHz — should now sound like UberSDR. Brighter, more consonants.
  2. Adjacent channels — a strong signal ~10 kHz away must not bleed in. This is the one to be suspicious of.
  3. FM stereo + RDS, especially on the G35 / Xcover 4S.
  4. RDS bookmarks persist across an app restart; squelch shows amber, not red.

Don't miss a new VibeSDR release

NewReleases is sending notifications on new releases.