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 signal processing.
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, 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.CompositeBlock():connect( 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 ):run()
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 https://github.com/vsergeev/luaradio.git
$ cd luaradio $ ./luaradio --platform luajit LuaJIT 2.0.5 os Linux arch x64 page size 4096 cpu count 4 cpu model Intel(R) Core(TM) i5-4570T CPU @ 2.90GHz features fftw3f true fftw-3.3.8-sse2-avx volk true 2.0 (avx2_64_mmx_orc) liquid true 1.3.2 $
LuaRadio is accelerated by the optional libraries
VOLK, and fftw for real-time
applications. To run the real-time examples, install liquid-dsp or VOLK, and
check that the
volk features are marked
true in the
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.
$ ./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.