SDR-SLC: A systems architecture approach to low-cost SDR

Software-defined radio hardware has become technically impressive, but increasingly closed, expensive, and difficult to experiment with. SDR-SLC is an attempt to move in the opposite direction: an open protocol suite for super-low-cost networked SDR hardware that can be implemented on everything from an STM32 microcontroller to a Linux daemon connected to an RTL-SDR dongle.

An open networked SDR platform for HAM radio experimenters

Over the past year I have been working on a personal SDR project that has gradually grown into something much larger than I originally intended. What started as experiments with STM32 microcontrollers, Tayloe detectors, Ethernet streaming, and DSP on the MacBook has evolved into a complete open protocol suite and SDR ecosystem, published under the name SDR-SLC.

The project is still under active development and many parts are not yet finished, polished, or documented to the level I would like. Nevertheless, enough pieces are now working together that it makes sense to publish the architecture, specifications, software, and hardware designs so that other HAM radio experimenters can follow along and eventually build on top of it themselves.

The central idea behind SDR-SLC is relatively simple:

Keep the radio hardware simple. Push the DSP processing to the host computer.

Modern laptops have enormous processing capability available for FFTs, filtering, demodulation, waterfall rendering, digital modes, and signal analysis. Instead of embedding all DSP functionality into expensive FPGA-based hardware, SDR-SLC moves as much processing as possible into software running on the host system.

The radio hardware itself therefore mainly becomes an RF frontend, I/Q sampling, Ethernet transport, and timing and synchronization. Everything else happens on the client.

SDR-SLC protocol suite

The first part is the protocol suite itself. This defines how all components interoperate: device discovery, control plane, stream lifecycle management, VITA-49 I/Q transport, and timing and synchronization. It is intentionally designed to be implementable on relatively small hardware platforms such as STM32 microcontrollers and Raspberry Pi systems.

The specifications cover the overall architecture, service discovery, the control plane, and VITA-49 transport. The protocols are open and intended for experimentation and interoperability. See the Specifications page for the current documents.

STM32-based SDR transceiver hardware

The second component is the SDR transceiver hardware. The current prototype consists of an STM32H753 Nucleo board, a Tayloe quadrature detector, several analogue op-amp stages, and an SI5351 clock generator. The goal is not to build the smallest possible SDR, but rather something that is understandable, hackable, and reproducible by experimenters.

The STM32 firmware is written in C and handles Ethernet networking, SDR-SLC discovery, control-plane processing, VITA-49 packet generation, ADC sample handling, and stream transport. This hardware continues to evolve as the RF and firmware experiments continue. See HF transceiver for schematics and firmware.

Native macOS SDR client

The third component is a native SDR client written in Swift for macOS. It implements automatic SDR-SLC device discovery, control-plane communication, VITA-49 reception, waterfall and spectrum display, and host-side DSP processing.

The client is already capable of communicating with working SDR-SLC devices, displaying live spectrum and waterfall data, and decoding SSB, AM, FM, WFM and CW. See the client for the current release.

Optional PTPv2/GPS clock

One optional component in the network is a realtime PTPv2 clock, currently implemented using a Raspberry Pi, a uBlox GPS receiver, and Linux PTP software. The purpose is to experiment with precise network timing, synchronized SDR receivers, accurate timestamps, and future distributed SDR experiments. This component is entirely optional but forms part of the larger architectural vision.

RTL-SDR reference implementation

To make experimentation easier, I have also written a Linux daemon that lets a standard low-cost RTL-SDR USB dongle, connected to a Raspberry Pi or Linux machine, appear as a fully networked SDR-SLC device. It implements SDR-SLC discovery, the control plane, VITA-49 streaming, and RTL-SDR tuner integration.

This means experimenters can already start testing the SDR-SLC ecosystem without requiring custom hardware. See Daemons for the current reference implementations.