Also known as: DSD, Digital Speech Decoder, DSDPlus, dsd-fme
DSD (Digital Speech Decoder) is an open-source program that decodes several digital-voice radio modes — including P25 Phase 1, DMR, NXDN, D-STAR, and System Fusion/YSF — by taking demodulated FM discriminator audio and recovering the underlying vocoder frames as intelligible speech.1 It is the tool that made listening to unencrypted digital-voice traffic practical for hobbyists, and its variants (notably DSD+ and the open dsd-fme fork) are widely used.
How it works
Classic DSD is fed the raw discriminator output of an FM receiver — the instantaneous frequency, before any de-emphasis or filtering — which for the 4-level modulations used by these systems (C4FM and related) looks like a noisy four-level baseband signal. DSD performs symbol timing recovery to sample once per symbol, then a slicer maps each sample to one of the levels (dibits). It searches for each mode’s frame-sync pattern to both identify the protocol (P25, DMR, NXDN, and so on) and align to frame boundaries.
Once aligned, DSD applies the mode’s forward error correction and deinterleaving to recover the payload, separating signalling from the voice frames. The voice frames are vocoder parameters — IMBE for P25 Phase 1, AMBE/AMBE+2 for DMR, NXDN, D-STAR, and YSF — which DSD passes to a vocoder synthesizer that reconstructs the audio waveform played out to the listener. Encrypted traffic still decodes as frames but yields only noise, since DSD has no keys. Modern usage often skips a physical radio’s discriminator and instead feeds DSD from an SDR demodulator’s audio, while forks like dsd-fme add direct digital output, trunk-following helpers, and more modes.
Relevance to SDR
DSD (and its DSD+ and dsd-fme relatives) is the classic answer to “how do I hear a digital scanner signal on my SDR?” It handles the hard part — recovering speech from a vocoder-encoded, FEC-protected bitstream — for the major North American and international digital-voice standards. In a typical SDR setup, a receiver demodulates the FM signal and routes audio into DSD, which prints call metadata and outputs speech. It is a voice/per-channel decoder, though; following a trunked system’s control channel and hopping to voice grants is handled by companion tooling (or by the DSD+ suite’s own trunking components).
GopherTrunk overlaps DSD in purpose but is an independent, from-scratch implementation. GopherTrunk is a pure-Go trunking scanner that does its own IQ channelization, symbol recovery, framing, and control-channel following, and it decodes the clear/scrambled signalling and audio of P25, DMR, NXDN, TETRA, and more without relying on DSD. Like DSD, it cannot decode keyed encryption — both recover only unencrypted traffic. The key distinction is scope and integration: DSD is a focused per-channel voice decoder often paired with separate control software, while GopherTrunk is an integrated scanner that manages the whole trunked system from control channel to voice. They are best thought of as parallel tools that solve the same digital-voice problem in different ecosystems.
Sources
-
DSD (Digital Speech Decoder) — the source repository, and the Wikipedia article, documenting the supported modes, discriminator-audio input, symbol/FEC processing, and AMBE/IMBE vocoder synthesis. ↩