Home SDR $20 P25 Trunking Scanner (Part 3)

$20 P25 Trunking Scanner (Part 3)

by n8ur

The info in this and in part 4 was aided tremendously by several folks on the “op25-dev” mailing list. Without their help, I would not have even known where to start in getting my system running. I hope that what I’m documenting here will be helpful for others going down this path.

If you’ve successfully installed Linux, Gnuradio, and op25 on your computer, you are ready to test the system, and then configure it for trunking.

The scanner application is buried several directories down, and you need to change to that directory and run the program there. So do this:

cd ~/op25/op25/gr-op25_repeater/apps

In that directory, you’ll find the main program, scope.py, and several configuration files with .tsv suffixes — most are examples for specific systems.

Assuming you’re using a RTL dongle, plug that puppy in to your USB port and then issue this command:

./scope.py --args 'rtl' -f 853.600e6 -g 65 -o 17e3 -N 'LNA:35' -V -v 0 -S 250000 -q '-1'

Change the value following the -f to the control channel frequency of the P25 site. (The e6 is scientific notiation and indicates to multiply the value by one million.)

If all is well, you’ll see a box open on your screen showing a spectrum display, with tabs to several other displays as well.

What does the gibberish in the command line mean?

--args 'rtl' indicates that you’re using a RTL dongle receiver.

-f 853.600e6 indicates the frequency to monitor. 853.600 MHz is the primary control panel for the Mongtomery County, Ohio P25 site.

-g 65 sets the audio gain; I’m not sure just what effect it has.

-o 17e3 sets a tuning offset — it’s a little like a local oscillator, and it avoids system-generated noise that appears at the center of the RF tuning. Here, I am moving the channel frequency 17 kHz from the tuned frequency.

-N 'LNA:35' sets the RTL gain.

-V turns on the audio vocoder so you can hear the traffic.

-v 0 sets the verbosity of the console logging. Set to 255 to see everything.

-S 250000 sets the sample rate. We only need to receive one NBFM channel at a time, so setting this to a small number reduces unnecessary CPU load. 250000 samples/second is the slowest rate the RTL-SDR.com dongle supports.

-q -1 adjusts for any frequency error in the dongle. Mine is pretty close, so I only need to adjust down by 1 PPM.

When you run this command, you should see the program open a window showing a spectrum display tab with the control frequency just about centered. If you click on the “traffic” tab you should see site information at the top, and then individual commands coming from the system controller.

If you’ve gotten this far, the system works. All you need to do now is set up the scanning/trunking capability. That’s in part 4.

You may also like


$20 P25 Trunking Scanner (Part 2) | John's Geekblog June 10, 2017 - 3:04 pm

[…] $20 P25 Trunking Scanner (Part 3) […]

Dom June 10, 2017 - 9:14 pm

-g 65, isn’t that RF gain, not audio gain?

n8ur June 11, 2017 - 1:06 am

The web page documentation says: “set USRP gain in dB (default is midpoint) or set audio gain”. I’m really not sure what it does with the RTL dongle. There the LNA gain is set using the -N parameter; I’m not sure if there are other gain settings for that unit. “-g 65” is what I cribbed from the example, and I have tried changing it at this point (leave well enough alone…)

David T. Spangler September 13, 2017 - 10:37 pm

When I successfully installed Linux, Gnuradio, and op25 on my computer PLEASE sponge feed me the rest of the story. I require lots of help.


n8ur September 19, 2017 - 1:48 am

Hi David —

I think I need a little more to go on… what are you having trouble with?

John McCoy September 24, 2017 - 9:26 pm

Hi John,

I’m following along with your tutorial and got what I believe to be a successful build, but I’m failing at runtime with the following error from scope.py:

wx._core.PyAssertionError: C++ assertion “!m_frameStatusBar” failed at ../src/common/framecmn.cpp(381) in CreateStatusBar(): recreating status bar in wxFrame

After Googling, I found that you had posted about trouble with exactly the same error:

Further information was requested, however, I can’t find that anybody posted a solution for you. Do you happen to recall how you got past this?



n8ur September 25, 2017 - 4:55 pm

Hi John — I haven’t seen a fix yet, either. To get around that, I’ve switched to using the debian packages that come with the distribution, rather than building my own. Not quite as current, but at least everything works. I sure do hope the underlying problem gets solved soon, but I’m not holding my breath.

Dor June 4, 2018 - 12:34 am

I’m using HackRF One sdr!
What do I need to write instead the rtl in the command line..!?
Please help me!!

n8ur June 6, 2018 - 6:37 pm

I’m not sure what you would need to use — it might be as simple as just “hackrf” instead of “rtl” but I can’t test it here.


Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.