#run-time #sdr #radio #acceleration #async #data-processing

futuresdr

异构架构的实验性异步SDR运行时

37个版本

0.0.37 2023年11月6日
0.0.35 2023年7月12日
0.0.32 2023年2月19日
0.0.27 2022年10月3日
0.0.1-experimental2021年7月29日

#156 in 异步

Download history 1/week @ 2024-05-16 1/week @ 2024-05-23 3/week @ 2024-05-30 4/week @ 2024-06-06 7/week @ 2024-07-04 3/week @ 2024-07-11 53/week @ 2024-07-18 108/week @ 2024-07-25

每月161次下载
3 crates 中使用

Apache-2.0 和可能 GPL-3.0

630KB
16K SLoC

FutureSDR

一种为异构架构设计的实验性异步SDR运行时,它

  • 可扩展:自定义缓冲区(支持GPU和FPGA等加速器)和自定义调度器(针对您的应用程序优化)。

  • 异步:解决IO、阻塞和计时器方面长期存在的问题。

  • 便携:Linux、Windows、Mac、WASM、Android,并通过REST API和基于Web的GUIs提供对嵌入式平台的主要支持。

  • 快速:SDR快如闪电!

Crates.io Apache 2.0 licensed Build Status

网站 | 指南 | API文档 | 聊天

概述

FutureSDR支持,这些块具有同步或异步实现,用于流式或基于消息的数据处理。块可以组合成流图并在由调度器驱动的运行时上启动。

  • 单线程和多线程调度器,包括针对特定应用程序实现的示例。
  • 使用Vulkan API的可移植GPU加速(支持Linux、Windows、Android等)。
  • Xilinx Zynq的用户空间DMA驱动程序,用于连接FPGA。

开发

由于FutureSDR处于开发早期阶段,SDR应用程序可能需要修改运行时。因此,我们不推荐将其作为依赖项添加到单独的项目中,而是建议克隆仓库并将应用程序作为二进制文件、示例或子crates实现。

示例

一个将123个零转发到接收器的示例流图

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::<u8>::new();
    let head = Head::<u8>::new(123);
    let snk = NullSink::<u8>::new();

    connect!(fg, src > head > snk);

    Runtime::new().run(fg)?;

    Ok(())
}

贡献

我们非常欢迎贡献。请参阅(正在进行中的)贡献指南以获取更多信息。如果您开发较大功能或在主要目的是提交上游更改的重大更改上工作,提前宣布将非常好。

行为准则

FutureSDR项目遵守Rust行为准则。它描述了所有贡献者应遵守的最低行为标准。

许可证

本项目采用Apache 2.0许可证

使用此许可证与大多数开源SDR应用程序和框架形成对比,这些框架大多是AGLP、LGPL或GPL。简而言之,这意味着从重新许可项目用于商业用途中无法获得任何金钱,因为Apache 2.0已经允许这样做。此外,公司可以使用(部分)项目,并在商业产品中集成(修改)版本,而无需发布源代码或向项目做出贡献。

采用此许可证的主要动机是

  • 它更适合Rust生态系统
  • 它简化了采用;可以几乎无附带条件地使用(部分)代码
  • 目前使用开源而不贡献似乎比完全不使用开源更好

贡献

除非您明确声明,否则任何有意提交以包含在FutureSDR中的贡献,都应按照Apache 2.0许可证授权,不得附加任何额外条款或条件。

依赖项

~8–55MB
~1M SLoC