Skip to content

VibeSDR v9.0.1 — a 2019 budget phone just became a broadcast receiver

Latest

Choose a tag to compare

@Stuey3D Stuey3D released this 14 Jul 21:02

The headline: the Galaxy Xcover 4S

A Samsung Galaxy Xcover 4S — a rugged budget phone from 2019 — could not decode FM stereo from a plugged-in RTL-SDR. Not at full speed, not even at a reduced sample rate. It broke up, and that was that.

With this release, the same phone decodes FM stereo at the full 2.4 MSPS, without breaking up — while simultaneously serving the stream to a Mac over VibeServer.

Nothing about the stereo decoder changed. It was never a stereo bug. The DSP simply couldn't keep up, and now it can. The radio does 2–8× less work than it did yesterday.

If it runs on an Xcover 4S, it runs on anything you can buy today.


SSB was throwing away half the voice

Set the SSB bandwidth to 2.7 kHz, and you got about 1.4 kHz of audio.

It still sounded like speech — just muffled — which is why it went unnoticed for months. You only catch a bug like this by listening to another receiver on the same signal at the same moment.

The channel filter was built around half the stated bandwidth. That's correct for AM and FM, where the signal sits either side of the carrier. It's wrong for SSB and CW, where the whole sideband lies on one side of it — so the filter closed at half-width and took the consonants with it.

Measured against another receiver on the same 7.187 MHz signal, VibeSDR was 37 dB down across 2.0–2.7 kHz — precisely the band that carries intelligibility. Below 1 kHz the two matched almost exactly, which is why it sounded clear, but never quite as clear.

Set 2.7 kHz and you now get 2.7 kHz — and above the passband VibeSDR is cleaner than the receiver we compared it against.


The radio uses 2–8× less CPU

Benchmarking the engine on a Raspberry Pi 3 turned up three inefficiencies. Cost of one listener, on that Pi:

mode before after
FM broadcast (stereo + RDS) 286% of a core 108%
SSB 117% 30%
AM 53% 28%
NFM 61% 27%
  • FM was filtering three times wider than it needed to. At lower sample rates it wasn't filtering the signal down at all — which is why turning the sample rate down used to make FM cost more, not less.
  • The main filter was doing all its work at the highest possible rate. It now runs at the rate that suits it. Same sound out, a fraction of the work.

Selectivity is unchanged: a strong signal 3 kHz away, and another 10 kHz away, are both still inaudible — even in the gaps when the station you're listening to stops speaking.


VibeServer fixes

  • Stations learned from RDS were never saved. The receiver would learn a station's name, show it — and lose it on restart. It was the one thing in the bookmark list that never got written to disk.
  • …and the browser never noticed them anyway. The web client asked for the bookmark list once, when the page loaded. Learning a station takes about twenty seconds, so the station you're actually listening to was always learned too late to appear. It now keeps asking.
  • Squelch no longer reports itself as a fault. With the squelch closed, the web client flashed a red "NO SOUND — IS THE TAB MUTED?" and hid the S-meter — the one thing you want to watch while waiting for a signal to come up. It now says, calmly, that the squelch is on, and leaves the meter alone.
  • The bandwidth slider filled from the wrong end on the low side, showing you the bandwidth you weren't using.

Also

The waterfall's band edges now follow the receiver's ITU region rather than yours.


iOS: the App Store build is still catching up (see the README). To run 9.0.1 on an iPhone today, sideload the .ipa. Android: install the .apk.