{"id":13419071,"url":"https://github.com/vsergeev/luaradio","last_synced_at":"2025-04-04T07:07:22.038Z","repository":{"id":9532233,"uuid":"50723501","full_name":"vsergeev/luaradio","owner":"vsergeev","description":"A lightweight, embeddable software-defined radio framework built on LuaJIT","archived":false,"fork":false,"pushed_at":"2024-03-29T08:11:22.000Z","size":18711,"stargazers_count":599,"open_issues_count":11,"forks_count":63,"subscribers_count":36,"default_branch":"master","last_synced_at":"2024-07-31T22:45:39.886Z","etag":null,"topics":["lua","luajit","luaradio","radio","sdr"],"latest_commit_sha":null,"homepage":"https://luaradio.io","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vsergeev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"ko_fi":"vsergeev","custom":"https://www.buymeacoffee.com/vsergeev"}},"created_at":"2016-01-30T12:15:53.000Z","updated_at":"2024-07-28T18:39:53.000Z","dependencies_parsed_at":"2024-10-26T16:03:46.260Z","dependency_job_id":"fcaebe86-8fef-44a5-abed-b88ecd21b3a8","html_url":"https://github.com/vsergeev/luaradio","commit_stats":null,"previous_names":[],"tags_count":36,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsergeev%2Fluaradio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsergeev%2Fluaradio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsergeev%2Fluaradio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsergeev%2Fluaradio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vsergeev","download_url":"https://codeload.github.com/vsergeev/luaradio/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247135144,"owners_count":20889421,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["lua","luajit","luaradio","radio","sdr"],"created_at":"2024-07-30T22:01:10.898Z","updated_at":"2025-04-04T07:07:22.009Z","avatar_url":"https://github.com/vsergeev.png","language":"Lua","funding_links":["https://ko-fi.com/vsergeev","https://www.buymeacoffee.com/vsergeev"],"categories":["Lua"],"sub_categories":[],"readme":"# LuaRadio [![Tests Status](https://github.com/vsergeev/luaradio/actions/workflows/tests.yml/badge.svg)](https://github.com/vsergeev/luaradio/actions/workflows/tests.yml) [![GitHub release](https://img.shields.io/github/release/vsergeev/luaradio.svg?maxAge=7200)](https://github.com/vsergeev/luaradio) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/vsergeev/luaradio/blob/master/LICENSE) [![Reference Manual](https://img.shields.io/badge/docs-reference%20manual-blue)](https://luaradio.io/docs/reference-manual.html) [![Mailing List](https://img.shields.io/badge/mailing%20list-grey)](https://groups.io/g/luaradio)\n\n**LuaRadio** is a lightweight, embeddable flow graph signal processing\nframework for software-defined radio. It provides a suite of source, sink, and\nprocessing blocks, with a simple API for defining flow graphs, running flow\ngraphs, creating blocks, and creating data types. LuaRadio is built on\n[LuaJIT](http://luajit.org/), has a small binary footprint of under 750 KB\n(including LuaJIT), has no external hard dependencies, and is MIT licensed.\n\nLuaRadio can be used to rapidly prototype software radios,\nmodulation/demodulation utilities, and signal processing experiments.  It can\nalso be embedded into existing radio applications to serve as a user scriptable\nengine for signal processing.\n\nLuaRadio blocks are written in pure Lua, but can use [LuaJIT's\nFFI](http://luajit.org/ext_ffi.html) to wrap external libraries, like\n[VOLK](http://libvolk.org/),\n[liquid-dsp](https://github.com/jgaeddert/liquid-dsp), and others, for\ncomputational acceleration, sophisticated processing, and interfacing with SDR\nhardware.\n\nUse GNU Radio? See [how LuaRadio compares to GNU\nRadio](docs/6.comparison-gnuradio.md).\n\nSee the LuaRadio [mailing list](https://groups.io/g/luaradio) for general\ndiscussion.\n\n## Example\n\n##### Wideband FM Broadcast Radio Receiver\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"docs/figures/flowgraph_rtlsdr_wbfm_mono_compact.png\" /\u003e\n\u003c/p\u003e\n\n``` lua\nlocal radio = require('radio')\n\nradio.CompositeBlock():connect(\n    radio.RtlSdrSource(88.5e6 - 250e3, 1102500), -- RTL-SDR source, offset-tuned to 88.5MHz-250kHz\n    radio.TunerBlock(-250e3, 200e3, 5),          -- Translate -250 kHz, filter 200 kHz, decimate by 5\n    radio.FrequencyDiscriminatorBlock(1.25),     -- Frequency demodulate with 1.25 modulation index\n    radio.LowpassFilterBlock(128, 15e3),         -- Low-pass filter 15 kHz for L+R audio\n    radio.FMDeemphasisFilterBlock(75e-6),        -- FM de-emphasis filter with 75 uS time constant\n    radio.DownsamplerBlock(5),                   -- Downsample by 5\n    radio.PulseAudioSink(1)                      -- Play to system audio with PulseAudio\n):run()\n```\n\nCheck out some more [examples](examples) of what you can build with LuaRadio.\n\n## Built-in Applications\n\nLuaRadio comes with a collection of built-in command-line applications. These\napplications include radio receivers that are compatible with all SDR sources\nsupported by the framework, as well as file and network sources:\n\n```\n$ luaradio\nUsage: luaradio [options] \u003cscript\u003e [args]\n\nOptions:\n  -h, --help            Print help and exit\n  --version             Print version and exit\n  --platform            Dump platform and exit\n  -v, --verbose         Enable debug verbosity\n  -a, --application     Run built-in application\n\nApplication Usage: ./luaradio -a \u003capplication\u003e [args]\n\nBuilt-in Applications:\n  rx_raw                Raw Receiver\n  rx_wbfm               Wideband FM Receiver\n  rx_nbfm               Narrowband FM Receiver\n  rx_am                 AM Receiver\n  rx_ssb                SSB Receiver\n  rx_rds                RDS Receiver\n  rx_ax25               AX.25 Receiver\n  rx_pocsag             POCSAG Receiver\n  rx_ert                ERT Receiver (IDM, SCM, SCM+)\n  iq_converter          IQ File Converter\n$ \n```\n\nSee the [Applications](docs/8.applications.md) documentation for more\ninformation on running built-in applications.\n\n## Quickstart\n\nWith LuaJIT installed, LuaRadio can be run directly from the repository:\n\n```\ngit clone https://github.com/vsergeev/luaradio.git\n```\n\n``` shell\n$ cd luaradio\n$ ./luaradio --platform\nluajit          LuaJIT 2.0.5\nos              Linux\narch            x64\npage size       4096\ncpu count       4\ncpu model       Intel(R) Core(TM) i5-4570T CPU @ 2.90GHz\nfeatures\n    fftw3f      true    fftw-3.3.8-sse2-avx\n    volk        true    2.0 (avx2_64_mmx_orc)\n    liquid      true    1.3.2\n$\n```\n\nLuaRadio is accelerated by the optional libraries\n[liquid-dsp](https://github.com/jgaeddert/liquid-dsp),\n[VOLK](http://libvolk.org/), and [fftw](http://www.fftw.org/). For best\nreal-time performance, install these libraries and check that the features are\nmarked `true` in the platform information:\n\n* Arch Linux: `sudo pacman -S liquid-dsp libvolk fftw`\n* macOS (Homebrew): `brew install liquid-dsp fftw`\n* macOS (MacPorts): `sudo port install liquid-dsp volk fftw-3`\n* Ubuntu/Debian/Raspbian: `sudo apt-get install libliquid-dev libvolk2-dev libfftw3-dev`\n* Fedora/CentOS: `sudo yum install liquid-dsp fftw`\n\nTry out one of the [examples](examples) with an\n[RTL-SDR](http://www.rtl-sdr.com/about-rtl-sdr/) dongle:\n\n```\n$ ./luaradio examples/rtlsdr_wbfm_mono.lua 91.1e6\n```\n\nLuaRadio primarily supports Linux. It also strives to support FreeBSD and\nmacOS, but real-time and audio support on these platforms is currently\nexperimental. LuaRadio and all of its examples run great on the Raspberry Pi 3\nwith Arch Linux or Raspbian.\n\nSee the [Getting Started](docs/2.getting-started.md) guide for a tutorial on\nbuilding your own flow graphs.\n\n## Installation\n\nArch Linux users can install LuaRadio with the AUR package `luaradio`.\n\nmacOS users can install LuaRadio with the Homebrew or MacPorts package `luaradio`.\n\nSee the [Installation](docs/1.installation.md) guide for other installation\nmethods and details.\n\n## Project Roadmap\n\nCheck out the [project\nroadmap](https://github.com/vsergeev/luaradio/wiki#project-roadmap) for\nupcoming changes.\n\nContributions are welcome! See the [contributing document](CONTRIBUTING.md) for\nguidelines.\n\n## Documentation\n\nLuaRadio documentation is contained in the [docs](docs) folder.\n\n0. [Reference Manual](docs/0.reference-manual.md)\n1. [Installation](docs/1.installation.md)\n2. [Getting Started](docs/2.getting-started.md)\n3. [Creating Blocks](docs/3.creating-blocks.md)\n4. [Embedding LuaRadio](docs/4.embedding-luaradio.md)\n5. [Architecture](docs/5.architecture.md)\n6. [Comparison to GNU Radio](docs/6.comparison-gnuradio.md)\n7. [Supported Hardware](docs/7.supported-hardware.md)\n\n## Project Structure\n\n* [radio/](radio) - Radio package\n    * [core/](radio/core) - Core framework\n    * [types/](radio/types) - Basic types\n    * [utilities/](radio/utilities) - Utility classes and functions\n    * [blocks/](radio/blocks) - Blocks\n        * [sources/](radio/blocks/sources) - Sources\n        * [sinks/](radio/blocks/sinks) - Sinks\n        * [signal/](radio/blocks/signal) - Signal blocks\n        * [protocol/](radio/blocks/protocol) - Protocol blocks\n    * [composites/](radio/composites) - Composite blocks\n    * [thirdparty/](radio/thirdparty) - Included third-party libraries\n    * [init.lua](radio/init.lua) - Package init\n* [examples/](examples) - Examples\n* [embed/](embed) - Embeddable C library\n    * [Makefile](embed/Makefile) - C library Makefile\n    * [luaradio.c](embed/luaradio.c) - C API implementation\n    * [luaradio.h](embed/luaradio.h) - C API header\n    * [examples/](embed/examples) - C API examples\n    * [tests/](embed/tests) - C API unit tests\n* [benchmarks/](benchmarks/) - Benchmark suites\n    * [luaradio_benchmark.lua](benchmarks/luaradio_benchmark.lua) - LuaRadio benchmark suite\n    * [gnuradio_benchmark.py](benchmarks/gnuradio_benchmark.py) - GNU Radio benchmark suite\n* [docs/](docs) - Documentation\n    * [refman/](docs/refman) - Reference manual generator\n* [tests/](tests) - Unit tests\n* [CHANGELOG.md](CHANGELOG.md) - Change log\n* [README.md](README.md) - This README\n* [LICENSE](LICENSE) - MIT License\n* [luaradio](luaradio) - `luaradio` runner helper script executable\n\n## Testing\n\nLuaRadio unit tests are run with [busted](http://olivinelabs.com/busted/).\n\nInstall `busted` with [LuaRocks](https://luarocks.org/):\n\n```\nsudo luarocks --lua-version=5.1 install busted\n```\n\nRun unit tests with:\n\n```\nbusted\n```\n\n## License\n\nLuaRadio is MIT licensed. See the included [LICENSE](LICENSE) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvsergeev%2Fluaradio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvsergeev%2Fluaradio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvsergeev%2Fluaradio/lists"}