Thank you to Mike for writing in and sharing with us his video detailing how he makes use of a Raspberry Pi 5, touch LCD Screen and RTL-SDR to create a portable and low cost P25 police scanner. Mike notes that the cost of his system is $250, which is a lot cheaper than a comparable $600 P25 scanner.
Here is my latest weekend project; a Raspberry Pi 5 with an RTL-SDR dongle running SDRTrunk software. It is configured to listen to the local LAPD channels and runs great! The chip gets a bit hot so I think I need to add a fan.
Building a $600 P25 Police Scanner for $250!!! (SDR-Pi)
In his latest video Rob from the Frugal Radio YouTube channel has uploaded a video where he experiments with a SDR web interface and smartphone App called "Rdio-scanner". Rdio-scanner is an interface that tries to reproduce the user experience of using a real hardware scanner with an SDR and RF voice decoding/recording software like Trunk Recorder being used in the background. Rob writes:
rdio-scanner creates a customizable web interface from which to control your software defined radio. Using it, you can turn a computer, phone or tablet into something that closely resembles a hardware scanner!
Trunk Recorder is the software that decodes the unencrypted P25 signals and records them to disk. Here is it demonstrated working on a large Simulcast (LSM) site.
rdio-scanner reads the audio files. Through the rdio-scanner interface, you are basically choosing which audio files to play.
Rob runs the rdio-scanner software on his Panasonic Toughbook, noting that the interface looks really great in Tablet mode and works well with the touchscreen. He also notes that his toughbook has a SIM card socket, so a data SIM would enable him to access his P25 monitoring system at home from anywhere.
SDR experiments with Rdio-scanner, Trunk Recorder, Airspy Mini & Panasonic Toughbook on P25 LSM
Over on Reddit we've discovered an interesting program called 'Turbine' that has recently been open sourced by the author. This program connects to a wideband capable SDR such as a HackRF and captures and streams all frequencies in a trunked radio system. Users can then browse the recordings online. On his reddit post u/norasector introduces Turbine, and his application for it called 'NoraSector'.
I am open sourcing the SDR code for NoraSector, which currently captures and streams the radio systems for both King and Snohomish County, WA. It uses a HackRF One to capture every channel concurrently, and can even process multiple systems at the same time, provided they are within the same bandwidth that is captured by the SDR and there's adequate reception. I plumb the output through a WebRTC streaming infrastructure I built to stream audio to clients over the web with very low latency. My goal was to give complete access to an entire system to anyone over the web, just as they would have if they were using a handheld scanner, and with comparable latency.
Turbine is a bit different other SDR software out there. It's written entirely in Go, and was built explicitly to only use a single SDR rather than bonding multiple SDRs together.
Turbine works by tuning known control frequencies and then tuning all voice frequencies it learns from them. Voice transmissions are encoded using the Opus audio codec for compatibility with WebRTC and blasted out as frames over UDP. It also includes a functional-but-janky built-in visualization web server to look at each stage of the DSP pipeline for each frequency, which was crucial for debugging as I was building it.
Right now, it only supports legacy Motorola SmartZone systems (which is what is used near me), but it shouldn't be a large lift to make it support P25. The code is heavily influenced by op25 and GNURadio (and in some places just outright copying them). I built it in Go because a) it's what I'm most familiar with and b) the sheer density of GNURadio made it hard for me to piece things together how I wanted. Go's concurrency model is a natural fit for doing many concurrent operations on the byte stream, and I haven't had issues with garbage collection pausing execution in a detrimental way.
Turbine isn't intended for use with lower sample rate SDRs like the RTLSDR. It has a driver for it, but doesn't support bonding multiple SDRs together. If an entire system fits within the 2MHz sample rate, it would probably be fine. You should be able to fire it up with a RTLSDR but it will not be able to capture very much. It currently only officially supports the HackRF One, but adding other SDRs should be relatively trivial. Note that the HackRF I am using is the model with the upgraded TCXO, as I found that the built-in oscillator was not accurate enough.
Turbine has only been tested to run on Linux and is very CPU-intensive; the production radio runs on a dedicated i7-11700k 8c/16t CPU and consumes about 60% of all cores decoding both systems. There are some potential optimizations that could be made that would lower CPU consumption during periods of low activity, but I built it for the worst case of having to encode every voice frequency at once.
The usual disclaimers about OSS apply. I hope you find it interesting or perhaps useful, and maybe portions can be adapted so Go can be used more in SDR projects.
MMDVM is firmware that normally runs on an ARM microcontroller board such as the Arduino Due, and is designed to be interfaced with hardware radios via the microcontrollers built in ADC and DAC hardware.
In order to use an SDR instead of physical hardware radios, Adrian's article describes how a fork of MMDVM called MMDVM-SDR is used in his system as this allows the code to run on a normal Linux computer with an SDR. GNU Radio running on Adrian's own QRadioLink software is then used to create software ADC/DAC interfaces for the SDR and MMDVM-SDR to interface with, as well as providing a user interface.
Over on their YouTube channel GNU Radio have uploaded a recent talk by Aaron Rossetto titled "A Look at Project 25 (P25) Digital Radio". The talk explains the North American public safety P25 system in great depth, and is a good watch for anyone looking into details on how the system works in a deeply technical way. He later shows some examples of his P25 decoding and recording setup. Slides can be found here, and the video is posted below.
Agenda: In this presentation, I will introduce Project 25 digital radio, with a strong emphasis on its use in North American public safety trunked radio systems, and to describe experiments monitoring and decoding P25 traffic using GNU Radio code.
In this weeks video Sarah from the SignalsEverywhere YouTube channel show us how to install and configure the OP25 software on a Linux machine. OP25 is a Linux based P25 digital voice decoder which works with RTL-SDR dongles. It is capable of decoding both Phase 1 and Phase 2 systems. Installation is fairly simple via an installation script, but it does take some time to install. After installation Sarah shows how to configure the software in order to properly follow a trunked P25 system. In order to help with importing talkgroup information from a premium RadioReference account Sarah has also created an automatic importer Python script which is very useful.
Sarah from the SignalsEverywhere YouTube channel is back and this time showing off a new program she has created called "Pi25" or "OP25 Mobile Control Head". The program is a Python GUI for OP25 which runs on almost any platform including Android and Windows. OP25 is an advanced open source digital voice P25 Phase 2 capable decoder which can be used with an RTL-SDR and run on a Raspberry Pi.
Sarah's GUI software allows information from the OP25 software to be displayed on a nice large Android tablet screen, as well as having scanner forward/back buttons, and talkgroup skip and hold controls. This is very useful for in-car control on a mobile setup.
Sarah notes that she is also considering running a Kickstarter for a physical hardware OP25 head unit controller so please let her know in the YouTube video comments if you are interested.
In his latest episode of his SDR Guide series Rob from Frugal Radio provides a walkthrough on using DSDPlus Fastlane to decode trunked P25 with just one RTL-SDR V3 dongle. In the video he explains each of the various DSDPlus windows, and demonstrates decoding of a Simulcast system in his area.
DSDPlus is a program capable of decoding various digital audio protocols such as DMR and P25. The "Fastlane" version is a $25 paid upgrade which allows you to download the latest version that contains more features.
2021 SDR Guide Episode 9 : $25 DSDPlus P25 LSM trunking walkthrough using 1 x $25 RTL-SDRv3