Digital voice decoding
How to decode P25 and DMR voice with DSD+
- Tools
- DSD+ FastLane, SDR++, VB-Cable, Windows 10/11
- Skill / setup
- intermediate · 1–2 hours (all GUI, no command line) · ~$65–$90 (RTL-SDR Blog v4 ~$40 + antenna ~$25; DSD+ FastLane ~$25/yr subscription)
If you've got an RTL-SDR and a Windows machine, you can decode P25 Phase 1 and DMR Tier 2 voice traffic in real time with two pieces of free software and a virtual audio cable. This guide gets you from "dongle plugged in" to "decoded transmissions scrolling past with talkgroup IDs" without needing a trunked-system setup like Trunk Recorder.
What you'll have at the end
SDR++ running on the left half of your screen tuned to a conventional P25 or DMR voice channel, demodulating the digital carrier into baseband audio. That audio gets piped through a virtual audio cable into DSD+ FastLane on the right half, which decodes the protocol and shows you each transmission as it lands: source radio ID, talkgroup ID, slot number (for DMR), and the decoded voice playing through your speakers. A scrolling event log captures the history. Optional: dump decoded audio to a WAV file per transmission, or feed the audio into a recording app for archiving.
This is a single-frequency setup — DSD+ doesn't follow trunked systems on its own. For full trunked-system following with per-call recording, see the Trunk Recorder guide. DSD+ is the right tool when you want to listen to a specific conventional digital channel, a single talkgroup whose voice frequency you already know, or a DMR repeater serving your local ham community.
What you need
Hardware. An RTL-SDR Blog v4 dongle (~$40) is fine for most public-safety and amateur DMR bands. If you're chasing weaker signals or want better front-end filtering, an Airspy R2 or HF+ Discovery (~$170–$220) is the upgrade. Antenna: a discone or a dedicated 700/800 MHz antenna for public-safety, a dual-band VHF/UHF antenna for amateur DMR. SMA-to-MCX adapter for the RTL-SDR. Any Windows 10 or Windows 11 PC; an old laptop with 4GB RAM is plenty.
Software. SDR++ (free, runs on Windows native). DSD+ FastLane (paid, ~$25/year subscription for the actively-maintained build with P25 Phase 2 and DMR support; the free DSD+ Public is older and decodes a narrower set of modes). VB-Cable (free for the basic A/B build; donationware) — this is the virtual audio cable that pipes SDR++'s output into DSD+'s input. Optionally: VLC or Audacity if you want to record decoded audio independently.
Time. See the frontmatter at the top of this page. Skill level. Comfortable installing Windows software, fiddling with audio device settings, and reading a waterfall display. No command line required — this is all GUI.
Step-by-step setup
1. Identify a digital channel to decode
Pick a conventional (non-trunked) P25 or DMR channel that's active in your area. Easiest sources:
- RadioReference frequency database — your county's "Conventional" section lists single-frequency digital channels. Look for
P25orDMRin the Mode column. - Local amateur DMR repeaters — repeaterbook.com is the canonical lookup. Filter by mode = DMR and your state.
- Business band — many businesses run DMR on the UHF business pool (450–470 MHz). RadioReference's "Business" tab.
Write down the frequency in MHz. For DMR, also write down the color code if it's listed (a number 0–15; it's the DMR equivalent of a P25 NAC and helps DSD+ confirm the right network).
If you only have access to a trunked system, you can still use DSD+ — tune to one of the system's voice channels (not the control channel) and you'll decode whatever talkgroup that voice channel is carrying at the moment. It'll jump as the trunked controller assigns it to different talkgroups, so it's a less coherent listening experience than Trunk Recorder, but it works for casual monitoring.
2. Install SDR++ and confirm reception
Download SDR++ from the official GitHub releases page and install. Open it, click the gear icon (Source), pick RTL-SDR from the dropdown, and click ▶. Tune to your chosen frequency. For P25 set the demodulator to NFM (Narrow FM); for DMR also NFM. Bandwidth: 12.5 kHz (P25 Phase 1) or 12.5 kHz (DMR — both slots within the same channel).
You should see a clear digital carrier in the waterfall — a tight, regular pattern, not the soft amorphous look of analog FM. If the channel is keyed up, you'll hear a digital warble through your speakers (it sounds like a fast rasping sound — that's the raw modulation, not voice).
SNR target: ≥ 15 dB above noise floor. Below that, DSD+ will throw lots of frame errors. If your SNR is weak, this is the antenna's job — move it outdoors, get it higher, or switch to a band-tuned antenna.
3. Install VB-Cable
Download VB-Cable from vb-audio.com. Install the basic build (free, donationware — you get one virtual cable A/B pair, which is all this setup needs). Reboot when the installer prompts.
After reboot, open Windows' Sound Settings. You should see two new devices: CABLE Input (VB-Audio Virtual Cable) as an output device, and CABLE Output (VB-Audio Virtual Cable) as an input device. These are the two ends of one virtual cable — anything sent to CABLE Input shows up at CABLE Output for the next app to consume.
4. Route SDR++ audio into VB-Cable
In SDR++, open the Sinks module (left sidebar). The default output device is your speakers — change it to CABLE Input (VB-Audio Virtual Cable). SDR++ will now stop playing audio through your speakers and instead feed it into the virtual cable.
You can also add a second sink set to your speakers if you want to hear the raw digital warble while DSD+ decodes — SDR++ supports multiple sinks. Useful for confirming the channel is keyed up when DSD+ is silent.
5. Install DSD+ FastLane
Subscribe at the DSD+ FastLane site (donate, get a download link). Unzip the package somewhere convenient — DSD+ doesn't have a traditional installer; it runs from the folder you extract it to. Inside the folder you'll find DSDPlus.exe and a DSDPlus.frs config file plus dsdplus.cfg.
Read Readme.txt once. The included DSDPlus.frs file has reasonable defaults for most setups, but you'll likely tweak the audio device line in the next step.
6. Configure DSD+ to read from VB-Cable
Open DSDPlus.frs in Notepad. Find the line that starts with InputDevice (or inputDev depending on version). Change it to point at CABLE Output (VB-Audio Virtual Cable). Save.
If the file uses numeric device IDs rather than names, run DSDPlus.exe -i once and DSD+ will print a numbered list of all audio input devices on your system. Find the VB-Cable Output line in that list and use its number.
The other defaults — frame deinterleave, modulation mode auto-detect — are fine to leave alone for a first run.
7. First run
With SDR++ still running and tuned to your active channel, double-click DSDPlus.exe. A console window opens, then a second window shows the live event display.
Success looks like: as soon as someone keys up, you'll see a new row appear with source radio ID, destination talkgroup, signal level, and (for DMR) slot number. The decoded voice plays through your default audio output. The console window shows protocol-level decoding events — frame syncs, error rates, mode changes.
If you see frame syncs but no audio, the most common cause is that DSD+ is decoding the data portion of the channel (text messages, GPS) but no voice is being transmitted. Wait for an actual voice transmission.
8. Tune for a clean decode
Two settings affect decode quality:
- SDR++ AGC. Open the demodulator panel and disable AGC if it's on. AGC creates rolling gain changes that DSD+ reads as signal fluctuation; a fixed gain locked to your antenna's noise floor decodes more reliably.
- VB-Cable level. If DSD+ shows constant frame errors despite a strong waterfall, the audio path may be clipping. Right-click the speaker icon → Sounds → Recording → CABLE Output → Properties → Levels. Drop to ~70% if it's at 100%.
Once you have a clean decode, leave it running. DSD+ will keep logging transmissions to its DSDPlus.log file in the same folder so you have a session record.
Common gotchas
"DSD+ shows frame syncs but no voice." Either the transmission is data-only (text/GPS), or you're tuned to the wrong slot on a DMR channel. DMR uses two timeslots on one frequency; DSD+ decodes both, but voice traffic may only be on one. Watch the slot column in the event display — if all the data is Slot 2 and no voice plays, your default audio is set to slot 1. Configure both slots in DSDPlus.frs.
"VB-Cable shows up in Sound Settings but DSD+ can't find it." DSD+ enumerates audio devices at startup. If you installed VB-Cable while DSD+ was already running, restart DSD+. Also: 32-bit DSD+ builds can't see 64-bit-only audio drivers on some Windows 11 systems — make sure you grabbed the 64-bit DSD+ FastLane build.
"SDR++ output is dead silent in DSD+." SDR++'s sink might still be pointed at your speakers, not VB-Cable. Open the Sinks module and confirm the output device. Also confirm SDR++ isn't paused (the ▶ button should be green / playing).
"Constant frame errors despite strong signal." AGC is fighting you. Disable AGC in the SDR++ demodulator panel and set a fixed gain — usually 30–40 dB for most setups. Then re-listen.
"DSD+ FastLane subscription expired and now I can't run it." FastLane requires an active subscription to launch; an expired key locks the binary. Either renew, or switch to the free DSD+ Public build (older, narrower mode support) or to DSD-FME (open source, runs on Linux). DSD-FME is a credible alternative if you've already standardized on Linux for the rest of your radio stack.
What to do next
For full trunked-system following with per-call recording, see Monitor local public-safety with Trunk Recorder — that's a different category of setup but covers the trunked-system case DSD+ doesn't. For airband (conventional analog) monitoring, Listen to airband with SDR++ covers the analog companion workflow. The SDRplus Discord has an active #digital-modes channel for DSD+ troubleshooting. For DMR-specific decoding deep-dives (BrandMeister network talkgroups, color-code filtering, DMR contact list integration), see the DSD+ FastLane documentation under the DMR section.
Local DIY vs. Squelch Deck
| Dimension | Local DIY | Squelch Deck |
|---|---|---|
| Setup time | 1–2 hours | ~1 minute (tap the app) |
| Hardware cost | ~$65–$90 (+ $25/yr DSD+ subscription) | One device |
| Ongoing maintenance | OS updates, dependency drift, debugging when it breaks | App updates roll through the Squelch Deck catalog |
| Customization ceiling | Total — you own the stack | Bounded by what apps support; you can build new apps |
| Skill required | Windows audio routing, SDR tuning, GUI config | Touchscreen |
| Best for | Tinkerers who want control + learning value | People who want it to work on a dedicated box |
Sources we drew from
- DSD+ FastLane homepage — install, configuration syntax, supported modes.
- SDR++ on GitHub — release downloads, sink module documentation, RTL-SDR source config.
- VB-Cable / VB-Audio — virtual audio cable install and Windows device routing.
- RadioReference — frequency database for conventional digital channels.
- repeaterbook.com — amateur DMR repeater lookup by location.
- A representative
DSDPlus.frsconfiguration file from the DSD+ FastLane package.