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)
See how it compares to Squelch Deck

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 P25 or DMR in 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

DimensionLocal DIYSquelch Deck
Setup time1–2 hours~1 minute (tap the app)
Hardware cost~$65–$90 (+ $25/yr DSD+ subscription)One device
Ongoing maintenanceOS updates, dependency drift, debugging when it breaksApp updates roll through the Squelch Deck catalog
Customization ceilingTotal — you own the stackBounded by what apps support; you can build new apps
Skill requiredWindows audio routing, SDR tuning, GUI configTouchscreen
Best forTinkerers who want control + learning valuePeople who want it to work on a dedicated box
Join the list

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.frs configuration file from the DSD+ FastLane package.