LuaRadio介绍

news/2024/12/22 20:49:32/

介绍

LuaRadio是一个用于构建信号处理流程图的框架
在软件定义的无线电流图中,源和接收块倾向于实现某种I/O,如从SDR加密狗读取样本,或将样本写入IQ文件,而处理块倾向于计算,如滤波器和乘法器。image

数据类型说明

LuaRadio块具有与其输入和输出端口相关联的数据类型。例如,一个乘法器块可能支持名为in1和in2的复数值输入,并支持名为out的复数值输出。它还可以支持实值输入in1和in2,并支持实值输出out。与输入和输出端口相关联的每个数据类型集合称为类型签名。imageimage
LuaRadio为流图中的每个块自动选择正确的类型,以便在块之间的连接中输出和输入类型匹配。

关于采样率

LuaRadio块有一个与之相关的采样率,不需要人工强制设置(类似Gnuraido),下游区块继承并可能修改其上游区块的采样率。例如,插值块和抽取块将分别对采样率进行乘法和除法运算。image

关于流图的结束状态说明

虽然有些流程图可以描述连续运行的系统(例如,宽带FM广播电台接收器),但LuaRadio流程图不一定永远运行。如果一个源终止,当最后的样本在图中传播时,框架将优雅地折叠流图。image

与GnuRadio的对比

  • 目的
    LuaRadio不是GNU Radio的替代品,而是一个更倾向于脚本和原型的替代品,强调快速、无编译的块开发。

  • 体量对比
    GNU Radio往往有很大的空间占用。一个典型的二进制GNU Radio安装的重量超过100MB。当安装包含开发支持时,boost开发头文件和许多其他库和工具(gsl, blas, swig, orc等)可以再增加100MB或更多。
    在时间和依赖方面,GNU Radio也有很大的编译要求。GNU Radio框架及其模块的编译通常是缓慢的,并且由于对boost的依赖,可能是不稳定的。当底层GNU Radio或boost运行时更新时,编译版本的GNU Radio模块和应用程序可能以复杂的方式中断。这些模块和应用程序可能需要常规的重新编译(有时是按照特定的顺序),以便与更新后的库以及彼此正确链接。
    LuaRadio的总内存占用大约为1MB,它的块不需要编译。LuaRadio对非实时应用的依赖为零,并且可以在实时应用中使用liquid-dsp或VOLK进行加速。liquid-dsp共享LuaRadio对最小依赖的亲和力,并使嵌入式Linux平台更容易访问软件定义的无线电。

  • 协议对比
    GNU Radio使用GPL v3。
    LuaRadio的许可是MIT。

  • 扩展
    GNU Radio块通常是用c++编写的,并且往往有许多用于构建、Python绑定、图形编辑器绑定和测试的样板。这可以通过工具来缓解,例如gr_modtool,但对某些人来说,这可能会增加框架的不透明性。
    LuaRadio块是用纯Lua编写的,基本上没有样板文件,不需要编译或绑定。使用LuaRadio,脚本的便利性既适用于定义流程图,也适用于开发块。

  • 数据结构对比
    GNU Radio块每个只能支持一种类型签名,这就把块类型区分的问题推给了用户。GNU Radio已经开发了一个丰富的命名法,用于用类型签名注释它们的块名,使用像_cc和_ff这样晦涩的后缀,例如multiply_cc, multiply_ff, fir_filter_ccc, fir_filter_ccf, fir_filter_fff等。
    LuaRadio块可以支持多种类型签名。例如,MultiplyBlock和FIRFilterBlock可以同时接受复数值和实值的输入/输出类型,框架将根据流图中块的连接自动区分正确的类型签名。这有助于代码重用和整合,以及在定义流程图时的易用性。

  • 关于采样率
    GNU Radio要求用户手动指定需要它的每个块的采样率。一些块需要规范化参数(例如角频率),这也要求用户计算正确的规范化。
    LuaRadio在所有块之间自动传播采样率。这减少了块所需的配置量。

  • 性能对比
    一般来说,LuaRadio的性能与GNU Radio的性能处于同一级别。在计算成本较高的模块中,比如过滤器,LuaRadio的性能与GNU Radio相当,甚至略好一些。在其他情况下,LuaRadio的性能可能在GNU Radio的30%到80%之间,但这通常是针对已经处于非常高吞吐量领域的块。在少数情况下,LuaRadio的性能超过了GNU Radio的性能。
    总体来说GNU Radio的总体性能仍然优于LuaRadio。

  • 成熟度
    GNU Radio拥有更大的社区、更多的模块、更多的硬件支持和更成熟的代码库。
    LuaRadio没有像GNU Radio Companion (GRC)那样的图形流图编辑工具。

例子-混频两个单音信号

  • lua代码-test.lua
local radio = require('radio')-- Blocks
local source1 = radio.SignalSource('cosine', 125e3, 1e6) -- 125 kHz cosine source, sampled at 1 MHz
local source2 = radio.SignalSource('cosine', 75e3, 1e6)  -- 75 kHz cosine source, sampled at 1 MHz
local mixer = radio.MultiplyBlock()                      -- Multiply block
local throttle = radio.ThrottleBlock()                   -- Throttle block
local sink = radio.GnuplotSpectrumSink()                 -- Spectrum plotting sink
local top = radio.CompositeBlock()                       -- Top-level block to contain the flow graph-- Connections
top:connect(source1, 'out', mixer, 'in1')
top:connect(source2, 'out', mixer, 'in2')
top:connect(mixer, throttle, sink)-- Run it
top:run()
  • 运行脚本
./luaradio test.lua
  • 流图image

  • 频谱图image

  • 说明
    此脚本实现了将125KHz和75KHz的两个单音信号混频,得到200Khz和50Khz的和频和差频信号。


http://www.ppmy.cn/news/1150094.html

相关文章

【知网检索征稿】第三届社会发展与媒体传播国际学术会议(SDMC 2023)

第三届社会发展与媒体传播国际学术会议(SDMC 2023) 2023 3rd International Conference on Social Development and Media Communication 第三届社会发展与媒体传播国际学术会议 (SDMC 2023)将于2023年11月03-05日在中国杭州召开。会议主题主要围绕社会…

vscode 资源管理器移动到右边

目录 vscode 资源管理器移动到右边 vscode 资源管理器移动到右边 点击 文件》首选项》设置》工作台》外观》 找到这个配置下拉选择左右

如何开发一款跑酷游戏?

跑酷游戏(Parkour Game)是一种流行的视频游戏类型,玩家需要在游戏中控制角色进行极限动作、跳跃、爬墙和各种动作,以完成各种挑战和任务。如果你有兴趣开发一款跑酷游戏,以下是一些关键步骤和考虑事项: 游…

iMazing2023免费版苹果iPhone手机备份应用软件

iMazing是一款功能强大的苹果手机备份软件,它可通过备份功能将通讯录备份到电脑上,并在电脑端iMazing“通讯录”功能中随时查看和导出联系人信息。它自带Wi-Fi自动备份功能,能够保证通讯录备份数据是一直在动态更新的,防止手机中新…

git push rejected的原因

"git push rejected" 是 Git 中一个常见的错误消息,表示你尝试将本地的更改推送到远程仓库时,远程仓库拒绝了你的推送请求。这通常有几个可能的原因,下面是一些常见的情况和解决方法: 权限问题:你可能没有足…

js的运算符

文章目录 一、算术运算符二、逻辑运算符三、比较运算符四、赋值运算符五、三目运算符六、展开运算符 一、算术运算符 加: 字符串的拼接也是该符号,若需要两个字符串的数字相加,需要转成整数或小数:parseInt、parseFloat 减&#…

使用docker创建redis实例、主从复制、哨兵集群

单机模式 1 拉取镜像 docker pull redis:7.2.1 2 新建redis映射配置文件夹data和conf $ mkdir -p /mydata/redis/data $ mkdir -p /mydata/redis/conf 3 切换到redis配置文件映射目录/mydata/redis/conf cd /mydata/redis/conf 4 编辑配置文件 vim redis.…

自定义类型:结构体,枚举,联合 (1)

1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag { member-list; }variable-list; 例如描述一个学生: struct是结构体关键字,不能省略。 …