A fix release on top of 3.1.0, and a bigger one than its number suggests.
The audio dropouts
AdaptiveIf::setBandwidth had no early-out. The shadow receiver — the parallel
copy that measures whether narrowing the IF would help — is told its bandwidth
on every evaluation, the same value each time, about fifteen times a second,
for as long as anyone is listening to FM. Each call designed a fresh
windowed-sinc filter and heap-allocated it on the DSP thread.
The allocation was the lesser half. Replacing the filter throws away its
history, so every shadow measurement was taken on a filter that had just been
reset — measuring its own start-up transient as if it were the signal.
Confirmed on air after the fix: "HFM is rock solid now."
IMS has never actually run until now
That corrupted measurement steers the narrowing decision, and it read so badly
that IMS could not engage at all — on any receiver, since the feature
shipped. With an honest shadow it engages, and it was seen working on air for
the first time on 103.8 with a strong neighbour up the band: 110k narrow ·
wide would cost 3.8 dB.
Two things had to be right for that. The calibration was never wrong — held
wide, a clean station settles at −9.5 dB against the −9.8 dB measured on air.
What was wrong is that the decision acted before the average meant anything: it
is seeded at zero and both sides are still settling for seconds after a retune.
A dwell counts agreement and cannot tell agreement from a shared transient, so
there is now a separate warm-up gate asking whether there is yet anything to
agree about.
The bench tests assert the negative half: a station with no neighbour is
measured as a loss and left alone, and each IF filter is designed once over
eight seconds rather than once per evaluation.
Also
- The Mac app's version is read from the build rather than typed into the
packaging script, so the bundle cannot disagree with the server inside it. - RDS2 subcarrier detection was added and then removed. 76 kHz is exactly four
times the 19 kHz pilot, so it measured the receiver's own fourth harmonic —
13 dB above the reference on a station that certainly does not transmit RDS2.
A tone-versus-data discriminator told them apart, but with deployment limited
to a handful of European trials there was nothing within reach to point it at.
Install
macOS — download, unzip, drag to Applications. Signed, notarised and
stapled, so it opens without a Gatekeeper warning.
Raspberry Pi / Debian — sudo apt update && sudo apt install --only-upgrade vibeserver