LuaRadio as a Docker image
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.
Mono 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()
To run simply type:
$ docker run -ti --privileged marcelmaatkamp/luaradio
Check out some more examples of what you can build with LuaRadio.