Using sdr-trunk to listen to p25 digital voice traffic with the RTL-SDR
Table of contents
Intro
I’ve always felt goverment officials with power, especially law enforcement, should not be able to prevent citizens from accessing their communications while performing work duties. Just a few years ago I was able to take my ~$30 baofeng and listen to all of the local communications. Then one day I went to listen and all of the frequencies were silent.
A little research showed that they had moved to some kind of higher frequency digital mode (this was the P25 system). This vastly reduced the number of scanners that could listen, and practically any device with p25 capability ranged from several hundred to several thousand dollars. I gave up for the time.
Why did they switch? The stated reason was a lack of coverage and lack of ability for various departments to communicate. The new system does help to alleviate this, although the previous VHF/UHF FM system was very robust already. One side effect though is that what used to be more easily accessible, now often requires a FOIA(freedom of information act) request. It is harder to hold the people using this system accountable, because the average person can no longer listen to what is going on in their area.
Now a few years later, there are various low cost SDR(software defined radio) devices available. I recently got the RTL-SDR blog v4 device with the adjustable dipole kit and a wideband LNA (low noise amplifier). One of my first thoughts was to wonder if I could finally listen to the local authorities again. As it turns out, you can!
Summary
In this tutorial I’m going to go over getting set up and listening to a p25 trunk using the RTL-SDR blog v4 kit and the sdrtrunk software. I went through a lot of trial and error, much research, and several days of playing with various mostly abandonded software to get to this point. By the end, you should have a general understanding of how P25 works and be able to get set up listening to whichever local trunk you have signal to.
Considerations
SDR
There are several things to mention before we get started. For one you will need an SDR for this. I will be providing configuration instructions for the RTL-SDR, but the configuration should be similar for most others. That said you might have to tweak a few things for optimal performance. Here is a general list of sdrtrunk compatible devices:
- Airspy (Mini, R1, R2, Discovery HF+)
- Funcube Dongle (Pro, Plus)
- HackRF (HackRF One, Jawbreaker, RAD1O)
- RTL-2832 (E4000, FC0013, R820T, R820T2, R828D)
- SDRPlay (RSP1, RSP1A, RSP2, RSPduo, RSPdx)
Antenna
You will also want some kind of antenna tuned to ~800Mhz (or whatever is needed in your area). I am using the RTL-SDR blog v4 dipole kit, which I have had good success with in all bands. I have it adjusted with the small antennas, with maybe 1/3 of the first extension extended. It is set up as a vertical dipole with the active element upward.
My area has a pretty impressive tower system for the local authorities and EMS, and I suspect I could get by with a less optimal antenna if it was well placed. I was able to get mine mounted ourdoors with a suction cup on an upstairs window facing the tower. You can find all of the links to equipment I used here at the bottom of this guide.
As a side note, some of these signals are pretty strong, and it wouldn’t surprise me if you could use a regular wifi or walkie talkie antenna and get decent reception depending on your distance to the signal.
Low Noise Amplifier
Some people may want to use a LNA. I did in my configuration, but these needs are highly variable. If you are close to the tower, or useing this in a mobile configuration where you can move around to find a signal, I suspect you would not need this.
I picked a cheap wideband USB C one simply due to the quick shipping and convenient power plug. It works fine for this.
OS
One more thing to note, I am using Fedora 40 linux for all instructions and screenshots. This software lists compatiblity for Linux, Mac, and Windows 64bit. Along my search to get this running, the fact that Linux is my primary OS was a major factor. I have found that the more niche of a topic that you are trying to use an SDR for, the more likely you are to find the only current software is OS dependant.
There may be easier ways to accomplish listening to a p25 trunk if you are running Windows or Mac. I found several other linux applications, but those were very distro dependant, up to the required build environments. If I had not succeeded here my next step would have been to spin up a container of an appropriate distro to compile or run the other applications I found.
P25 (Project 25)
From wikipedia:
Project 25 (P25 or APCO-25) is a suite of standards for interoperable digital two-way radio products. P25 was developed by public safety professionals in North America and has gained acceptance for public safety, security, public service, and commercial applications worldwide.[1] P25 radios are a direct replacement for analog UHF (typically FM) radios, adding the ability to transfer data as well as voice for more natural implementations of encryption and text messaging. P25 radios are commonly implemented by dispatch organizations, such as police, fire, ambulance and emergency rescue service, using vehicle-mounted radios combined with repeaters and handheld walkie-talkie use.
Departments across the US and other countries have adopted this technology. This helps them coordinate better by having better signal coverage, clearer voice, and the ability to transmit data as well. The technology serves it’s purpose, but has been known to have security flaws for years.
For this guide you just need to understand that this is a digital mode radio system with a trunked system meaning it is actively linked to various repeaters, mobile stations, and other trunked systems. You will be able to hear not only the control station you program in, but the connected stations communicating to it. The advanced technical aspects of P25 are beyond this paper, but I will provide a few links at the bottom to get you started if you are interested in learning more.
sdrtrunk
The software we will be using is the key part of this guide. sdrtrunk is a piece of software written by DSheirer in java and is open source licensed under the GNU GPL. Being written entirely in Java it is very portable, but expect it to use a fair bit of resources. I have noticed a substantial drop in resource usage if you disable the waterfall, or reduce the fft size.
Installation
For ease of installation, I simply grabbed the latest stable release which was sdrtrunk v0.6.0 at the time of this writing.
- Download the appropriate file for your system, for me on Fedora linux with an Intel i5 system it was
sdr-trunk-linux-x86_64-v0.6.0.zip
- Extract the archive wherever you like.
- Navigate to the
bin
subfolder within the extracted folder - Run
sudo ./sdr-trunk
(Note – I had to run it as root to get the software to start a programmed channel with the rtl-sdr. The waterfall, etc worked fine as a normal user and you may not need to use sudo in your case)
That’s it you should have a copy of sdr-trunk running on your system!
Configuration
What frequencies do you need to know?
This varies from area to area, p25 is not frequency dependent and you will have to research which ones you need to know. In my area they seem to mostly be in the 700-800Mhz range.
In most cases you can find the information you want on the radioreference.com database. Search for p25 in your area and you are sure to get some hits. The information you are looking for is the control frequencies that interest you. They will be in red and have the letter “c” at the end like in this image:
Those will be the frequencies you will add in the playlist editor in sdrtrunk. Another option is to just look around the frequency ranges you see are likely and look for a signal that looks like it might be a control channel. It will be a steady signal and look something like this on a waterfall:
Configuring your SDR
- Ensure you sdr is plugged in
- start the sdrtrunk software
- click on the
tuners
tab on sdrtrunk - select your SDR from the list
- make any adjustements you need to
There isn’t too much to be done to configure the actual SDR for this. In the case of the rtl-sdr I simply raised the gain to maximum, and let the software control the offset. I did notice that this software seems to always restart my biast, and I have to toggle it on and back off to actually have it off every time the software is started.
Adding a channel
Now you are ready to use whichever control frequency you have settled on.
- Click the
▶️ Playlist Editor
button - click on the
New
dropdown and select your digital mode,P25 Phase 1
in this case. - Enter whatever System, Site, and Name you like.
- Under the
Source
dropdown enter the control frequency and select your sdr as the preferred tuner. - Under the
Decoder
dropdown select the appropriate modulation. In my case I knew the system I wanted was a simulcast system so I selected LSM and set the max channels to 10 - Change any other settings for the channel you desire such as logging, recording, and auto-start
- Click
Save
to save your changes.
Start the channel and start Listening!
At this point you should be able to click the ▶️ Start
button in the playlist editor and start the reciever listening for the p25 control frequency you programmed in.
Take note that you may be asked at this time for the JBME audio decoder library. Just select the option to automatically install it and you will be all set.
You can close the playlist editor after starting the channel. The control channel will automatically send you a data feed connecting you to trunked calls on nearby frequencies. You should see something like this:
This means you are all set up and should be hearing some voice traffic soon!
Afterword
I hope this guide helps many to be able to listen to their local radio traffic to stay up to date on events and keep the authorities transparent.
This software is capable of much more than I went into, such as:
- connecting directly to RadioReference.com and pulling in configurations
- Setting up aliases or nicknames for specific talk channels on the trunk
- ability to use multiple SDRs to listen to a variety of channels simultaniously
- decodes many other digital modes other than p25