LuaRadio is a lightweight, embeddable flow graph signal processing framework for software-defined radio. It provides a suite of source, sink, and processing blocks, with a simple API for defining flow graphs, running flow graphs, creating blocks, and creating data types. LuaRadio is built on LuaJIT, has a small binary footprint of under 750 KB (including LuaJIT), has no external hard dependencies, and is MIT licensed.

LuaRadio can be used to rapidly prototype software radios, modulation/demodulation utilities, and signal processing experiments. It can also be embedded into existing radio applications to serve as a user scriptable engine for processing samples.

LuaRadio blocks are written in pure Lua, but can use LuaJIT’s FFI to wrap external libraries, like VOLK, liquid-dsp, and others, for computational acceleration, more sophisticated processing, and interfacing with SDR hardware.

Use GNU Radio? See how LuaRadio compares to GNU Radio.


Wideband FM Broadcast Radio Receiver

local radio = require('radio')

    radio.RtlSdrSource(88.5e6 - 250e3, 1102500), -- RTL-SDR source, offset-tuned to 88.5 MHz - 250 kHz
    radio.TunerBlock(-250e3, 200e3, 5),          -- Translate -250 kHz, filter 200 kHz, decimate 5
    radio.FrequencyDiscriminatorBlock(1.25),     -- Frequency demodulate with 1.25 modulation index
    radio.LowpassFilterBlock(128, 15e3),         -- Low-pass filter 15 kHz for L+R audio
    radio.FMDeemphasisFilterBlock(75e-6),        -- FM de-emphasis filter with 75 uS time constant
    radio.DownsamplerBlock(5),                   -- Downsample by 5
    radio.PulseAudioSink(1)                      -- Play to system audio with PulseAudio

Check out some more examples of what you can build with LuaRadio.


With LuaJIT installed, LuaRadio can be run directly from the repository:

git clone
$ cd luaradio
$ ./luaradio --platform
luajit          LuaJIT 2.0.4
os              Linux
arch            x64
page size       4096
cpu count       4
cpu model       Intel(R) Core(TM) i5-4570T CPU @ 2.90GHz
    fftw3f      true
    volk        true
    liquid      true

LuaRadio is accelerated by the optional libraries liquid-dsp, VOLK, and fftw for real-time applications. To run the real-time examples, install liquid-dsp or VOLK, and check that the liquid and/or volk features are marked true in the platform information.

LuaRadio primarily supports Linux. It also strives to support FreeBSD and Mac OS X, but real-time support and audio sink support on these platforms is currently experimental.

Try out one of the examples with an RTL-SDR dongle:

$ ./luaradio examples/rtlsdr_wbfm_mono.lua 91.1e6

LuaRadio and all of its examples run great on the Raspberry Pi 3 with Arch Linux.

See the Getting Started guide for a tutorial on building your own flow graphs.