https://github.com/futuresdr/futuresdr
An Async SDR Runtime for Heterogeneous Architectures
https://github.com/futuresdr/futuresdr
dsp message-passing radio research runtime rust sdr stream-processing wireless
Last synced: 5 months ago
JSON representation
An Async SDR Runtime for Heterogeneous Architectures
- Host: GitHub
- URL: https://github.com/futuresdr/futuresdr
- Owner: FutureSDR
- License: apache-2.0
- Created: 2021-08-27T09:41:37.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2025-04-28T18:52:15.000Z (6 months ago)
- Last Synced: 2025-05-16T11:05:53.909Z (5 months ago)
- Topics: dsp, message-passing, radio, research, runtime, rust, sdr, stream-processing, wireless
- Language: Rust
- Homepage: https://www.futuresdr.org
- Size: 26.8 MB
- Stars: 369
- Watchers: 20
- Forks: 61
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# FutureSDR
An experimental asynchronous SDR runtime for heterogeneous architectures that
is:* **Extensible**: custom buffers (supporting accelerators like GPUs and FPGAs)
and custom schedulers (optimized for your application).* **Asynchronous**: solving long-standing issues around IO, blocking, and
timers.* **Portable**: Linux, Windows, Mac, WASM, Android, and prime support for
embedded platforms through a REST API and web-based GUIs.* **Fast**: SDR go brrr!
[![Crates.io][crates-badge]][crates-url]
[![Apache 2.0 licensed][apache-badge]][apache-url]
[![Build Status][actions-badge]][actions-url][crates-badge]: https://img.shields.io/crates/v/futuresdr.svg
[crates-url]: https://crates.io/crates/futuresdr
[apache-badge]: https://img.shields.io/badge/license-Apache%202-blue
[apache-url]: https://github.com/futuresdr/futuresdr/blob/main/LICENSE
[actions-badge]: https://github.com/futuresdr/futuresdr/workflows/CI/badge.svg
[actions-url]: https://github.com/futuresdr/futuresdr/actions?query=workflow%3ACI+branch%3Amain[Website](https://www.futuresdr.org) |
[Guides](https://www.futuresdr.org/learn) |
[API Docs](https://docs.rs/futuresdr/latest/futuresdr) |
[Chat](https://discord.com/invite/vCz29eDbGP/)## Overview
FutureSDR supports *Blocks* with synchronous or asynchronous implementations for
stream-based or message-based data processing. Blocks can be combined to a
*Flowgraph* and launched on a *Runtime* that is driven by a *Scheduler*.* Single and multi-threaded schedulers, including examples for
application-specific implementations.
* Portable GPU acceleration using the Vulkan API (supports Linux, Windows,
Android, ...).
* User space DMA driver for Xilinx Zynq to interface FPGAs.## Development
Since FutureSDR is in an early state of development, it is likely that SDR
applications will require changes to the runtime. We, therefore, do not
recommend to add it as a dependency in a separate project but to clone the
repository and implement the application as binary, example, or sub-crate.## Example
An example flowgraph that forwards 123 zeros into a sink:
``` rust
use futuresdr::anyhow::Result;
use futuresdr::blocks::Head;
use futuresdr::blocks::NullSink;
use futuresdr::blocks::NullSource;
use futuresdr::macros::connect;
use futuresdr::runtime::Flowgraph;
use futuresdr::runtime::Runtime;fn main() -> Result<()> {
let mut fg = Flowgraph::new();let src = NullSource::::new();
let head = Head::::new(123);
let snk = NullSink::::new();connect!(fg, src > head > snk);
Runtime::new().run(fg)?;
Ok(())
}
```## Credits
* The LoRa example is based on a Rust port of [gr-lora-sdr](https://github.com/tapparelj/gr-lora_sdr).
* The M17 example is based on the C implementation of [SP5WWP](https://github.com/M17-Project/M17_Implementations).
* The Rattlegram example is based on the [Rattelgram](https://github.com/aicodix/rattlegram) app.
* The Remez Exchange algorithm in FutureDSP is a Rust port of the [implementation of Jake Janovetz](https://github.com/janovetz/remez-exchange).
* The WLAN example is based on a Rust port of [gr-ieee802-11](https://github.com/bastibl/gr-ieee802-11).
* The ZigBee example is based on a Rust port of [gr-ieee802-15-4](https://github.com/bastibl/gr-ieee802-15-4).## Contributing
Contributions are very welcome. Please see the (work-in-progress) [contributing
guide][contr] for more information. If you develop larger features or work on
major changes with the main intention to submit them upstream, it would be
great, if you could announce them in advance.[contr]: https://github.com/futuresdr/futuresdr/blob/main/CONTRIBUTING.md
## Conduct
The FutureSDR project adheres to the [Rust Code of Conduct][coc]. It describes
the _minimum_ behavior expected from all contributors.[coc]: https://www.rust-lang.org/policies/code-of-conduct
## License
This project is licensed under the [Apache 2.0 license][lic].
The main motivation for this license is that
* it better fits the Rust ecosystem
* it eases adoption; one can use (parts of) the code with close to no strings
attached
* using Open Source and not contributing back (for the time being) seems better
than not using Open Source at all[lic]: https://github.com/futuresdr/futuresdr/blob/main/LICENSE
## Contributions
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in FutureSDR, shall be licensed as Apache 2.0, without any
additional terms or conditions.