Why your P25 audio sounds chopped into syllables (and the one-flag fix)
Two symptoms look the same but have different causes: audio that drops a word every few seconds, and audio that is continuously mangled — every syllable present but smeared. The first is usually a USB or CPU hiccup on the Pi. The second is simulcast distortion, and it's the one this article is about.
What simulcast does to the signal
A "countywide simulcast" site transmits the identical signal from five or ten towers on the same frequency, timed to the microsecond. Where you are, you receive two or three of them with slightly different delays. For a voice-band FM signal that's harmless. For P25's C4FM — four frequency levels, 4800 symbols a second — a few microseconds of multipath smears the symbols into each other. The towers are the problem, not the receiver.
Motorola's answer was to transmit LSM (linear simulcast modulation), which looks like QPSK and is tolerant of exactly that. A C4FM demodulator can still sync to it (hence the instant lock) but decodes it badly (hence the hiccups). You need to demodulate it as QPSK.
The fix
In dsd-fme that is -mq:
dsd-fme -ft -T -mq -i rtltcp:127.0.0.1:23471:856.9625M:40:0:12:0:2 -o udp:127.0.0.1:23456
In Wavelens it's the Simulcast systems (QPSK first) switch on the Scanner tab. The bridge also does something smarter on its own: when it hunts, it tries each candidate as C4FM and, if the sync is there but no clean calls come through, again as QPSK — and a RadioReference export that labels the site "Simulcast" makes it go QPSK first. On the Pinellas system the difference is night and day: the same call that was a stutter is clean dispatch audio.
If it's still choppy
- A word missing every few seconds, otherwise clean: the Pi dropped IQ samples. Check the HackRF sweep isn't running during voice (the bridge pauses it by default), that nothing else heavy is on the Pi, and that the dongle is on its own USB port, not a hub shared with a camera.
rtl_tcpruns with-b 32 -n 64(bigger, more USB transfers) for exactly this. - Garbled from a strong, nearby system: try gain 30 instead of 40 — the RTL2832U overloads and the symptoms look like weak signal.
- Robotic, slow, pitch-shifted: a sample-format mismatch, not RF. dsd-fme's UDP output is stereo for
-ft/-fsand mono for-f1/-fE; whoever reads it has to know which. (We spent an evening on that one.) - Frequent "encrypted" tags: nothing to fix. That talkgroup is encrypted and no receiver will decode it.
Rather not build it?
Spotter $64 · Full Spectrum $499: the builds on this blog, programmed and tested, set up for where you drive, with free updates for life. The guides stay here, free, if you change your mind.
Shop Join the free Android beta
Open firmware and bridge on GitHub · receive only · every command on this blog is copied from a Pi we run