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.
OP25 Installation and Configuration Tutorial | Setup OP25 P25 Phase 1 and 2 SDR Decoder on Linux Pi
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.
P25 Police Scanner Control Head OP25 SDR Raspberry Pi or Android GUI Front-End
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
DragonOS is a ready to use Ubuntu Linux image that comes preinstalled with multiple SDR program. The creator of DragonOS, Aaron, uploads various YouTube tutorials. In his latest tutorial he shows how to install the latest version of the "Boatbod" OP25 development code for receiving P25 Phase 1 on Linux with the latest GNU Radio 3.8. In the video Aaron uses an RTL-SDR, but notes it could also work with other SDRs like the HackRF.
In this weeks episode of Frugal Radio's SDR Guide videos Rob shows how a FM bandstop filter can help in certain situations. A FM bandstop is designed to reduce the power level of FM broadcast stations that are received by your antenna. FM broadcast stations are often extremely strong, and this can cause an SDR to overload, resulting in poor reception on other frequencies.
In the video he demonstrates how he is unable to receive air traffic control signals due to FM broadcast overload. After inserting an FM bandstop filter the air traffic signals become receivable. We note that we sell a low cost FM bandstop filter in our store.
2020 SDR Guide EP8 : Overcoming FM Broadcast Interference with a Nooelec flamingo band stop filter
In a second video Rob demonstrates the use of the recently released Simple DMR plugin which we posted about earlier.
Quickest way to monitor DMR with your SDR? Simple DMR for SDR# installed in under 5 mins!