Tagged: P25

Turbine: Capture and Stream all Frequencies in a Trunked Radio System with a HackRF

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.

There have been similar projects in the past like radiocapture-rf, scaneyes, and broadcastify calls, but Turbine looks like one of the most comprehensive.

Norasector: An implementation of the Turbine Trunk Recording software

A SDR Digital Voice Hotspot with GNU Radio, MMDVM and QRadioLink

Thank you to Adrian (YO8RZZ) for writing in and sharing with us his article explaining how to use an SDR to set up a digital voice hotspot for digital voice modes supported by MMDVM such as D-Star, DMR, System Fusion, P25 and NXDN. Adrian notes that this is possible with any full duplex SDR such as the LimeSDR or PlutoSDR, or with a combination of simplex devices, such as a HackRF for transmitting combined with an RTL-SDR for receiving.

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.

QRadioLink used as the UI for MMDVM-SDR and GNU Radio

GNU Radio Amateur Radio Meeting: A Look at Project 25 (P25) Digital Radio

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.

  • What is Project 25?
  • A brief introduction to trunked radio
  • Diving into the P25 protocol
    • Modulation
    • Packet framing and encapsulation
    • Packet types
  • GNU Radio and P25 decoding experiments
Amateur Radio Meetup: P25 Trunked Radio

SignalsEverywhere: Installing and Configuring OP25 Phase 1 & 2 Digital Voice Decoder on Linux

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

SignalsEverywhere: A Front End GUI Control Head for OP25

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

Frugal Radio: SDR Guide Ep 9 – P25 LSM Trunking with one RTL-SDR V3 and DSDPlus

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: OP25 “Boatbod” P25 Phase 1 Running on GNU Radio 3.8 with RTL-SDR

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.

DragonOS Focal OP25 "Boatbod" P25 Phase 1 w/ RTLSDR (GNU Radio 3.8, Python3, R9+)

Frugal Radio: SDR Guide Ep 8: Overcoming FM Broadcast Interference + Simple DMR Plugin Demo

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!