{"id":23247017,"url":"https://github.com/vsergeev/zigradio","last_synced_at":"2025-08-20T05:32:16.563Z","repository":{"id":152256375,"uuid":"606006490","full_name":"vsergeev/zigradio","owner":"vsergeev","description":"A lightweight software-defined radio framework built with Zig","archived":false,"fork":false,"pushed_at":"2023-12-31T07:12:49.000Z","size":132,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-12-31T08:21:52.028Z","etag":null,"topics":["radio","sdr","zig","zigradio"],"latest_commit_sha":null,"homepage":"https://zigradio.org","language":"Zig","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vsergeev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"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}},"created_at":"2023-02-24T11:40:24.000Z","updated_at":"2023-12-31T08:21:55.804Z","dependencies_parsed_at":null,"dependency_job_id":"5c2dbc5f-5296-43b7-9acf-ac304eab44d7","html_url":"https://github.com/vsergeev/zigradio","commit_stats":null,"previous_names":[],"tags_count":1,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsergeev%2Fzigradio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsergeev%2Fzigradio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsergeev%2Fzigradio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsergeev%2Fzigradio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vsergeev","download_url":"https://codeload.github.com/vsergeev/zigradio/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230394138,"owners_count":18218707,"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":["radio","sdr","zig","zigradio"],"created_at":"2024-12-19T07:17:14.283Z","updated_at":"2025-08-20T05:32:16.539Z","avatar_url":"https://github.com/vsergeev.png","language":"Zig","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ZigRadio [![Tests Status](https://github.com/vsergeev/zigradio/actions/workflows/tests.yml/badge.svg)](https://github.com/vsergeev/zigradio/actions/workflows/tests.yml) [![GitHub release](https://img.shields.io/github/release/vsergeev/zigradio.svg?maxAge=7200)](https://github.com/vsergeev/zigradio) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/vsergeev/zigradio/blob/master/LICENSE)\n\n**ZigRadio** is a lightweight flow graph signal processing framework for\nsoftware-defined radio. It provides a suite of source, sink, and processing\nblocks, with a simple API for defining flow graphs, running flow graphs, and\ncreating blocks. ZigRadio has an API similar to that of\n[LuaRadio](https://luaradio.io/) and is also MIT licensed.\n\nZigRadio can be used to rapidly prototype software radios,\nmodulation/demodulation utilities, and signal processing experiments.\n\n## Example\n\n##### Wideband FM Broadcast Radio Receiver\n\n``` zig\nconst std = @import(\"std\");\n\nconst radio = @import(\"radio\");\n\npub fn main() !void {\n    var gpa = std.heap.GeneralPurposeAllocator(.{}){};\n\n    const frequency: f64 = 91.1e6; // 91.1 MHz\n\n    var source = radio.blocks.RtlSdrSource.init(frequency - 250e3, 960000, .{});\n    var if_translator = radio.blocks.FrequencyTranslatorBlock.init(-250e3);\n    var if_filter = radio.blocks.LowpassFilterBlock(std.math.Complex(f32), 128).init(200e3, .{});\n    var if_downsampler = radio.blocks.DownsamplerBlock(std.math.Complex(f32)).init(4);\n    var fm_demod = radio.blocks.FrequencyDiscriminatorBlock.init(75e3);\n    var af_filter = radio.blocks.LowpassFilterBlock(f32, 128).init(15e3, .{});\n    var af_deemphasis = radio.blocks.FMDeemphasisFilterBlock.init(75e-6);\n    var af_downsampler = radio.blocks.DownsamplerBlock(f32).init(5);\n    var sink = radio.blocks.PulseAudioSink(1).init();\n\n    var top = radio.Flowgraph.init(gpa.allocator(), .{ .debug = true });\n    defer top.deinit();\n    try top.connect(\u0026source.block, \u0026if_translator.block);\n    try top.connect(\u0026if_translator.block, \u0026if_filter.block);\n    try top.connect(\u0026if_filter.block, \u0026if_downsampler.block);\n    try top.connect(\u0026if_downsampler.block, \u0026fm_demod.block);\n    try top.connect(\u0026fm_demod.block, \u0026af_filter.block);\n    try top.connect(\u0026af_filter.block, \u0026af_deemphasis.block);\n    try top.connect(\u0026af_deemphasis.block, \u0026af_downsampler.block);\n    try top.connect(\u0026af_downsampler.block, \u0026sink.block);\n\n    _ = try top.run();\n}\n```\n\nCheck out some more [examples](examples) of what you can build with ZigRadio.\n\n## Building\n\nZigRadio requires Zig version 0.14.\n\n```\n$ git clone https://github.com/vsergeev/zigradio.git\n$ cd zigradio\n```\n\nBuild examples:\n\n``` shell\n$ zig build examples\n```\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$ ./zig-out/bin/example-rtlsdr_wbfm_mono 89.7e6\n```\n\n## Embedding ZigRadio\n\nFetch the ZigRadio package:\n\n```\nzig fetch --save git+https://github.com/vsergeev/zigradio#master\n```\n\nAdd ZigRadio as a dependency to your `build.zig`:\n\n```\nconst radio = b.dependency(\"radio\", .{});\n...\nexe.root_module.addImport(\"radio\", radio.module(\"radio\"));\nexe.linkLibC();\n```\n\nOptimization `ReleaseFast` is recommended for real-time applications. libc is\nrequired for loading dynamic libraries used for acceleration and I/O.\n\n## Project Structure\n\n* [src/](src/) - Sources\n    * [radio.zig](src/radio.zig) - Top-level package\n    * [core/](src/core) - Core framework\n    * [blocks/](src/blocks) - Blocks\n        * [sources/](src/blocks/sources) - Sources\n        * [sinks/](src/blocks/sinks) - Sinks\n        * [signal/](src/blocks/signal) - Signal blocks\n        * [composites/](src/blocks/composites) - Composite blocks\n    * [utils/](src/utils) - Utility functions\n    * [vectors/](src/vectors) - Generated test vectors\n* [examples/](examples) - Examples\n* [benchmarks/](benchmarks) - Benchmark Suite\n* [docs/](docs) - Documentation\n* [website/](website) - Website\n* [build.zig](build.zig) - Zig build script\n* [build.zig.zon](build.zig.zon) - Zig package manifest\n* [CHANGELOG.md](CHANGELOG.md) - Change log\n* [LICENSE](LICENSE) - MIT License\n* [README.md](README.md) - This README\n\n## Testing\n\nRun unit tests with:\n\n```\n$ zig build test\n```\n\nTest vectors are generated with Python 3 and NumPy/SciPy:\n\n```\n$ zig build generate\n```\n\n## Benchmarking\n\nRun the benchmark suite with:\n\n```\n$ zig build benchmark\n```\n\n## License\n\nZigRadio is MIT licensed. See the included [LICENSE](LICENSE) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvsergeev%2Fzigradio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvsergeev%2Fzigradio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvsergeev%2Fzigradio/lists"}