Earlier in the month we posted about Adrian M’s video that showed his QRadioLink software running on Android with an RTL-SDR. QRadioLink is a digital amateur radio voice decoder and encoder, that currently supports modern digital voice codecs like Codec2 and Opus. It’s compatible with a wide range of SDRs including the RTL-SDR, as well as TX capable SDRs for transmitting.
Over on YouTube Adrian M has recently uploaded a new video showing a comparison of QRadioLink receiving SSB, NFM, Codec2 and Opus voice signals at the same initial power levels. The results show that the digital modes are generally much clearer and static free even at low TX levels. He writes:
The Linux SDR transceiver application QRadioLink uses here an RTL-SDR dongle for reception. The QRadioLink transmit chain is using an USRP B200 with output power set at about half the maximum. The Codec2 digital mode works down to a low CNR (6 dB) where even SSB is hard to copy. The Opus mode provides good voice quality at a level where analog narrow FM is noisy. The code for QRadioLink is fully open-source, licensed under GPLv3, and can be found on Github, where it’s undergoing development. Bug reports, patches and suggestions are welcome.
Thank you to George (gbozo), who has just released no-sdr (named from No(de)-sdr), a new open source multi-user WebSDR for the RTL-SDR written in Go and node JS. A WebSDR allows users to run an SDR remotely and access it over a local or internet network connection. This is useful for bringing an SDR closer to an antenna, instead of running a long, lossy coax cable, and for sharing SDRs among multiple networked users.
The no-SDR software runs on x86 or Raspberry Pi, is Dockerized, and supports multiple RTL-SDR dongles being connected at the same time. On the DSP side, it currently implements WFM (stereo + RDS), NFM, AM, AM Stereo (experimental stereo C-QUAM), USB, LSB, CW, and raw IQ, with digital decoders like ADS-B, AIS, APRS, POCSAG, FT8, and WSPR planned. There is also an "Identify Song" button that uses the Audd API to ID currently playing tracks on WFM, NFM, and AM.
George also points out that he's implemented an innovative lossless FFT codec with a very high ~10:1 compression ratio, as well as the Opus codec for audio. The result is a 12-15 kB/s transmission rate with a 12 FPS FFT with 8192 bins and AM demodulation compressed audio.
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.
QRadioLink is a Linux and Android compatible radio app that can run on smartphones. It can be used to receive and transmit digital radio signals with a compatible SDR such as an RTL-SDR (RX only), or a LimeSDR Mini (TX and RX). The following video by Adrian M shows QRadioLink running on an Android phone with a LimeSDR Mini connected to it. An external battery pack is also connected to maintain power levels over a longer time.
In the video Adrian shows how this combination can be used as a fully portable radio transceiver. The video first shows him receiving broadcast FM, digital amateur radio voice (Codec2 & Opus is supported), narrowband FM and SSB signals. Later in the video he transmits a digital voice signal using the microphone on his Android phone. He notes that an external amplifier would still be needed if you wanted more transmission power.
Portable SDR transceiver: LimeSDR-mini, mobile phone and QRadioLink
Back in September we posted [1, 2] about the QRadioLink software which is an RTL-SDR compatible digital amateur radio voice decoder and encoder program for Linux and Android (with chroot). It supports modern digital voice codecs like Codec2 and Opus. It is capable of being used with multiple SDRs, and can be used for transmitting digital voice too if you have a transmit capable SDR.
Andrian the developer recently wrote in to let us know that QRadioLink now has a website at qradiolink.org that you can follow for updates about its development. The website also explains some of the features of the software, and lists possible performance values of digital voice. The features include:
Receives and transmits analog voice, digital voice, low resolution video, text, IP protocol.
Narrow band modem with Codec2 or wideband modem and Opus.
Digital Modems: BPSKQPSK2FSK4FSK
Modes: narrow FM, SSB, digital voice, digital video, digital data
Typical Receiver performance is given in the following table, with all values being measured on an R820T RTL-SDR.
Mode
Condition
Sensitivity (dBm)
Codec2 700B
20 db SINAD
-115
Codec2 1400
20 db SINAD
-112
Opus
20 db SINAD
-102
Narrow FM
12 db SINAD
-118
In the future Adrian hopes to expand the software to include features like VOIP integration, SSB transceiver, DTMF & CTCSS encoder/decoders, multi-channel RX, HD video, remote control and a GUI improvement.
Thank you to Adrian for submitting his video about using the Android App called QRadioLink and an RTL-SDR to decode digital amateur radio voice transmissions. Adrian writes that in the video the RTL-SDR connects to the Android phone with a USB OTG cable and uses a sample rate of 1 MSPS. He also writes the following about QRadioLink:
QRadioLink is a building platform which allows experimenting with VHF-UHF SDR transceivers using different modulation schemes for digital data transmissions. So far digital voice and text transmission is supported, using either a narrow band modem and Codec2 or a high bandwidth modem and Opus. Supported hardware includes the RTL-SDR, Ettus USRP, HackRF, BladeRF and in general all devices supported by libgnuradio-osmosdr.
QRadioLink running on Android (Debian chroot) with RTL-SDR
Over on YouTube user Corrosive has been uploading some videos that explore cordless phone security with a HackRF. In his first video Corrosive shows how he’s able to use a HackRF to capture and then replay the pager tones (handset finding feature) for a very cheap VTech 5.8 Gigahertz cordless phone. He uses the Universal Radio Hacker software in Windows.
In the second video corrosive shows how bad the voice security on the VTech 5.8 GHz phone can be. It turns out that while advertised as a 5.8 GHz phone and the handset does transmit at 5.8 GHz, the VTech basestation actually transmits voice in clear NFM at around 900 MHz. Cordless phones advertised as 5.8 GHz are typically considered as more secure due to their high frequency which is inaccessible to most scanner radios. In the video he also shows some of the digital pairing signals that the phone and basestation transmits.
There are now dozens of software defined radio packages that support the ultra cheap RTL-SDR. On this page we will attempt to list, categorize and provide a brief overview of each software program. We categorize the programs into general purpose software, single purpose software, research software and software compatible with audio piping.
If you know of a program that is missing please leave a comment in the comments section at the bottom of the page.
SDR# (pronounced "SDR Sharp") is the most popular free RTL-SDR compatible software in use at the moment. It is relatively simple to use compared to other SDR software and has a simple set up procedure. We have a full overview of the installation procedure on our Quick Start Page. SDR# is designed to be use with the $199 Airspy SDR, but works just fine with the RTL-SDR.
SDR# is a simple to use program that also has some advanced features. It has a useful modular plugin type architecture, and many plugins have already been developed by third party developers. The basic SDR# download without any third party plugins includes a standard FFT display and waterfall, a frequency manager, recording plugin and a digital noise reduction plugin. SDR# also decodes RDS signals from broadcast FM.
HDSDR is based on the old WinRAD SDR program. HDSDR supports the RTL-SDR through use of an ExtIO.dll module. To install HDSDR, download the program from the link on the main HDSDR page, then to use the RTL-SDR you will need to download the ExtIO_RTL2832.dll file an place it into the HDSDR folder. When opening HDSDR, select the newly copied ExtIO_RTL2832.dll. The other dlls that come with HDSDR will not work with the RTL-SDR, even though they have RTL-SDR in their filename. The official installation instructions can be found here.
Along with a FFT display and waterfall, HDSDR has some extra advanced features. Users will also find an Audio FFT and waterfall display on the bottom of the screen. The output audio can also be bandpass filtered by dragging the filter borders on the display. Bandpass filtering the audio can really help clean up a noisy signal. The audio processing also supports placing of notch filters either manually or automatically. There are also noise reduction and noise blanker features and an automatic frequency centering algorithm which will automatically center the signal, so you don't need to click exactly in the center of a signal. Traditional ham radio users will also enjoy the S-units signal strength meter and the built in frequency manager.
SDR-RADIO.COM V2 and the newer V3 is a popular SDR program with many advanced features. As such is it a fair amount more difficult to learn and use compared to SDR# and HDSDR. Be sure you install version 2 and not V1.5 as only V2 has RTL-SDR support.
Once sdr-radio is installed, to get it working with the RTL-SDR you will need to compile or download three .dll files (SDRSourceRTL2832U.dll, rtlsdr.dll and libusb-1.0.dll) and place them into the sdr-radio folder. To compile your own dlls see the instructions here, otherwise download the dlls directly from the bottom of this link. If the dlls were placed in the correct folder you will be able to add your RTL-SDR as a receiver by clicking on the +Definitions button, and then finding and adding the RTL SDR (USB) option under the search drop down menu.
Like HDSDR, not only does sdr-radio have a RF FFT signal and waterfall display, but also an optional audio spectrum FFT and waterfall display. Built in are also several DSP features like a noise blanker, noise reduction filter, notch filter and squelch options. The EMNS noise reduction filter is particularly good at automatically cleaning up and clarifying voice signals.
To add to the feature list, sdr-radio also has built in PSK, RTTY and RDS decoders, and also comes with a satellite tracker. Furthermore, sdr-radio V2 (not V3 yet) has an excellent remote server which will allow you to easily set up and connect to a remote RTL-SDR server over a network or the internet. Finally, sdr-radio is capable of listening to up to 6 signals in the same chunk of visible spectrum at a time.