Also known as: GNU Radio, GNU Radio Companion, GRC
GNU Radio is a free, open-source software-defined radio framework that lets you build a receiver or transmitter as a flowgraph — a directed graph of signal-processing blocks that pass streams of samples to one another.1 Rather than writing a monolithic program, an engineer wires together sources, filters, demodulators, and sinks; the framework schedules the blocks and moves IQ samples between them. It is the de-facto prototyping toolkit for experimental and research radio.
How it works
At the core is a runtime scheduler that executes blocks concurrently and manages the buffers between them. Each block declares how many input samples it consumes and how many output samples it produces; the scheduler calls each block’s work function whenever enough data is available, moving samples through shared circular buffers with as little copying as possible. Blocks fall into a few families:
- Sources and sinks — hardware front ends (via
gr-osmosdror SoapySDR), files, UDP sockets, or the audio card. - Streaming DSP — FIR filters, a digital down-converter, resamplers, FFTs, and the arithmetic primitives to combine streams.
- Modulators and demodulators — for AM, FM, PSK, FSK, OFDM, and many digital modes.
- Sync and framing — timing recovery, carrier recovery, correlators, and packet deframers.
Most users assemble these visually in GNU Radio Companion (GRC), a drag-and-drop editor that generates Python. Because the generated program is ordinary Python calling into C++ blocks, users can drop into code for anything the GUI does not cover, and can package their own out-of-tree (OOT) modules to extend the block library. In addition to streaming samples, blocks pass tagged stream metadata and asynchronous message ports, which carry control information and decoded packets alongside the sample flow.
The design goal is reuse: a timing-recovery block written once works in any flowgraph, so building a new decoder is largely a matter of connecting proven pieces and writing only the protocol-specific glue.
Relevance to SDR
GNU Radio is the reference environment for SDR experimentation and teaching. It underpins
countless research projects and specialized decoders: satellite telemetry receivers,
amateur-radio digital modes, cellular and IoT sniffers, and the DSP back ends of desktop
receivers. Applications such as Gqrx are built directly on GNU Radio’s
block library, and the framework interoperates with almost any front end through
gr-osmosdr and SoapySDR. Its wide-ranging block set makes it the
usual place a new modulation scheme is first demodulated before anyone writes a dedicated tool.
GopherTrunk does not embed or depend on GNU Radio. GopherTrunk is a self-contained, pure-Go decoder that implements its own DSP chain — channelization, timing and carrier recovery, symbol slicing, and framing — directly in Go, so it ships as a single static binary with no GNU Radio runtime. The two occupy overlapping territory (both turn IQ samples into decoded symbols), but they are independent codebases: GNU Radio is a general framework you assemble, while GopherTrunk is a purpose-built trunking scanner. GNU Radio remains a useful companion for GopherTrunk work as a bench tool — for capturing IQ, visualizing a spectrum, or prototyping a demodulator before porting the idea into Go.