初级教程(1)介绍 GNU Radio

1.什么是 GNU 无线电?

Gnuradio_logo_glyphs_as_paths

GNU Radio 是一个免费的开源软件开发工具包,它提供信号处理块来实现软件无线电。它可以与现有的低成本 RF 外设硬件一起使用来创建软件定义的无线电,或者仿真使用不需要硬件。它广泛用于研究、工业、学术界、政府和业余爱好者环境,以支持无线通信研究和现实世界的无线电系统。

下面显示了 GNU Radio Companion 可视化编辑器中的示例流程图:

750px-FunCube_2_meter_NB_FM_fg

GNU Radio 是一个框架,使用户能够设计、仿真和部署功能强大的现实无线电系统。它是一个高度模块化、面向“流程图”的框架,带有一个综合的处理模块库,可以很容易地组合起来制作复杂的信号处理应用程序。GNU Radio 已被用于大量现实世界的无线电应用,包括音频处理、移动通信、跟踪卫星、雷达系统、GSM 网络、Digital Radio Mondiale 等等——所有这些都实现在计算机软件中。它本身并不是针对任何特定硬件的解决方案。它也不为特定无线电通信标准(例如 802.11、ZigBee、LTE 等)提供开箱即用的应用程序,

为什么我需要 GNU Radio?

以前,在开发无线电通信设备时,工程师必须开发专门电路用于检测特定信号类型,设计能够解码或编码特定传输的专用集成电路,并使用昂贵的设备进行调试。

软件无线电 (SDR) 采集模拟信号,在物理和经济可行的范围内转移到通用计算设备处理,使用软件算法在计算机上处​​理无线电信号。

当然,您可以从头编写计算机与无线电设备互联的程序,各个算法需要将数据移入移出。但这很快就会变得麻烦:为什么要重新实现标准滤波器?为什么你必须关心数据如何在不同的处理块之间移动?使用高度优化和同行审核的实现,而不是自己编写东西不是更好吗?你如何让你的程序在多核架构上很好地扩展,同时在功耗只有几瓦的嵌入式设备上也能很好地运行?您真的要自己编写所有 GUI 吗?

使用 GNU Radio:一个专用于为商用计算机编写信号处理应用程序的框架。GNU Radio 将功能包装在易于使用的可重用块中,提供出色的可扩展性,提供广泛的标准算法库,并针对各种通用平台进行了大量优化。它还附带了大量示例,可帮助您入门。

本页的其余部分简要介绍了 DSP,如果您已经熟悉 DSP,请随时跳到下一个教程。

数字信号处理

作为一个软件框架,GNU Radio 使用通用计算机处理数字化信号以生成通信功能。

一点信号理论

在软件中进行信号处理需要信号是数字的。但什么是数字信号?

为了更好地理解,让我们看一个常见的“信号”场景:使用手机录制语音进行传输。

一个人说话会产生声音信号——在这种情况下,该信号由人的声带产生的不同气压波组成。信号是随时间变化的物理量,例如气压。

Sound_vocal

当波到达麦克风时,它会将变化的压力转换为电信号,即可变电压:

P_to_u

既然信号是电信号,我们就可以使用它了。此时的音频信号是模拟的——计算机还不能处理它;对于计算处理,信号必须是数字的,这意味着两件事:

它只能是有限数量的值之一。

信号会随时间变化,但对于每一瞬间,它只取一个值——而且该值不是来自某个“连续体”(比如[−1.5;+1.5],但来自一些有限集(如{−1.50,−1.49,……,+1.49,+1.50}).

Cont_to_digital

因此,该数字信号可以用样本的数字序列表示。样本之间的固定时间间隔是信号采样率

获取物理量(电压)并将其转换为数字样本的过程由模数转换器(ADC) 完成。互补设备是数模转换器(DAC),它从数字计算机获取数字并将其转换为模拟信号。

现在我们有了一个数字序列,我们的计算机可以用它做任何事情。例如,它可能会应用数字滤波器、对其进行压缩、识别语音或使用数字链路传输信号。

将数字信号处理应用于无线电传输

与声音相同的原理可以应用于无线电波:

可以使用天线将信号(此处为电磁波)转换为变化的电压。

Antenna

然后,该电信号位于载波频率上,通常为几兆赫甚至千兆赫兹。

不同类型的接收器(例如超外差接收器、直接转换接收器、低中频接收器)可以作为专用软件无线电外围设备,可以通过商业渠道购买。用户可以使用(例如连接到声卡的业余无线电接收器)或者可以购买电视棒(臭名昭著的RTL-SDR项目)。

一种模块化的、基于流程图的数字信号处理方法

要处理数字信号,可以直接将各个处理阶段(滤波、校正、分析、检测…)视为处理块,可以使用简单的流向指示箭头将其连接起来:

Twoblocks_arrow

在构建信号处理应用程序时,将构建一个完整的块图。这样的图在 GNU Radio 中称为流程图。

Example_flowgraph

GNU Radio 是一个框架,用于开发这些处理块并创建流程图,其中包括无线电处理应用程序。

作为 GNU Radio 用户,您可以将现有的块组合成一个高级流程图,它可以执行与接收数字调制信号一样复杂的事情,GNU Radio 将自动在这些块之间移动信号数据,并在数据准备好处理时进行处理.

GNU Radio 带有大量现有的模块。所有这些的索引都可以在Block Docs中找到。仅向您提供标准安装中可用内容的一小部分,以下是一些最流行的块(Block)类别及其一些成员:

  • 波形发生器
    • 恒源
    • 噪声源
    • 信号源(例如正弦波、方波、锯齿波)
  • 调制器
    • 调幅解调器
    • 连续相位调制
    • PSK调制/解调
    • GFSK调制/解调
    • GMSK 调制/解调
    • QAM 调制/解调
    • WBFM 接收
    • NBFM接收
  • 仪器(即 GUI)
    • 星座Sink
    • 频率Sink
    • 直方图Sink
    • 号码Sink
    • 时间栅格Sink
    • 时间Sink
    • 瀑布Sink
  • 数学运算符
    • 绝对值
    • 复共轭
    • 积分
    • Log10
    • RMS
  • 信道模型
    • 信道模型
    • 衰减信道模型
    • 动态信道模型
    • 频率选择性衰减信道模型
  • 滤波器
    • 带通/抑制滤波器
    • 低通/高通滤波器
    • IIR滤波器
    • 通用滤波器组
    • 希尔伯特
    • 抽取 FIR 滤波器
    • 根升余弦滤波器
    • FFT滤波器
  • 傅立叶分析
    • 快速傅里叶变换
    • 对数功率 FFT
    • Goertzel(重采样器)
    • 分数重采样器
    • 多相任意重采样器
    • 理性重采样器(同步器)
    • 时钟恢复MM
    • 关联和同步
    • 科斯塔斯环路
    • FLL 带边
    • PLL 频率检测
    • PN相关器
    • 多相时钟同步

使用这些块(Block),只需将适当的块(Block)连接到信号处理流程图,即可完成许多标准任务,例如标准化信号、同步、测量和可视化。

此外,您可以编写自己的块(Block),将现有块(Block)与一些智能结合起来以提供新功能和一些逻辑,或者您可以开发自己的块(Block)来处理输入数据和输出数据。

因此,GNU Radio 主要是一个用于开发信号处理模块及其交互的框架。它带有一个广泛的块标准库,并且有许多可用的系统可供开发人员构建。然而,GNU Radio 本身并不是准备好执行特定操作的软件——尽管它已经附带了许多有用的工作示例,但用户的工作是从中构建有用的东西。将其视为一组构建块(Block)

2.安装 GNU Radio

快速入门

Ubuntu 22.04sudo apt-get install gnuradiov3.10.1.1
Ubuntu 20.04sudo add-apt-repository ppa:gnuradio/gnuradio-releasessudo apt-get updatesudo apt-get install gnuradio python3-packagingv3.10.5.1
WindowsInstall the latest Radioconda installer
Launch “GNU Radio Companion” from the Start menu
v3.10.5.1
macOSInstall Homebrew
brew install gnuradio
v3.10.5.1

其他安装方法

特定于平台的指南

跨平台指南

  • Conda install guide
  • PyBOMBS – 注意:我们不再将 PyBOMBS 作为安装 GNU Radio 的推荐方法,除非您想使用旧版本(例如 GR 3.7、3.8 和匹配版本的 OOT)

VMs 和 Live Images

多年来,已经创建了许多 Live Images 和 VM。目前没有官方版本,但这里有一些当前选项:

  • Instant GNU Radio一个可定制的、以编程方式生成的 VM 和 GNU Radio 的实时环境。
  • UbuntuVM带有 GNU Radio 3.8.2.0、Fosphor、GQRX 和其他几个有用软件的 Ubuntu 20.04 虚拟机映像。(使用 Instant GNU Radio 创建)

好的,它已经安装好了,现在呢?

3.你的第一个流程图

本教程描述了如何在 GNU Radio 中创建和运行您的第一个流程图。

本指南假定已安装 GNU Radio。GNU Radio 安装结构在这里:安装 GNU Radio。下一个教程GRC 中的 Python 变量描述了如何在 GNU Radio Companion (GRC) 中使用 Python 数据类型。

启动 GNU Radio Companion 

GNU Radio Companion (GRC) 是一个用于创建和运行流程图的可视化编辑器。GRC 使用.grc文件,然后将其转换为 Python .py流程图。

CTRL + ALT + T或右键单击桌面并选择Open in Terminal打开终端:

500px-OpenTerminal

在终端中输入:

$ gnuradio 伴侣 &

GRC 窗口打开:

500px-NewGRCFlowgraph


双击Options块并通过编辑IdTitle命名流程图:

500px-NameYourFlowgraph

Id是 Python 流图的文件名将其命名为sineWaveFlowgraph。标题是流程图的描述单击“确定”保存更改。

单击文件:保存以保存 GRC 流程图。

GRCClickSave

输入sineWaveGRC.grc作为.grc文件的名称,以区别于 Id。

500px-EnterGRCName

GRC 文件被命名并保存。

添加块

添加块以创建第一个流程图。GNU Radio 带有一个信号处理模块库。可以使用右侧的箭头浏览块。也可以使用CTRL + F或选择放大镜(以红色突出显示)来搜索块:

500px-SearchBlockLibrary

搜索信号源块,然后将其拖放到 GRC 工作区中:

250px-SearchSignalSourceBlock

现在搜索ThrottleQT GUI Frequency SinkQT GUI Time Sink。将每个块拖放到工作区中。流程图应如下所示:

500px-UnconnectedFlowgraph

Signal Source块将创建一个复数的正弦信号,QT GUI Frequency Sink将显示频谱的幅度,QT GUI Time Sink将显示时域。Throttle块用于在没有无线电硬件的情况下进行流量控制 

块需要连接。首先单击Signal Source的输出(以红色突出显示),然后单击Throttle的输入(以橙色突出显示)。

500px-MakeFirstConnection

Signal Source块文本从红色变为黑色红色文本表示块仍有输入或输出需要连接才能运行流程图。将油门输出连接到频率接收器和时间接收器:

500px-ConnectedFlowgraph

运行流程图

播放按钮(以红色突出显示)运行流程图:

250px-RunFlowgraphButton

一个新窗口显示时域和频域中的信号:

500px-FrequencySinkTimeSink

成功!流程图正在运行。

打开文件浏览器。有两个文件。第一个文件是sineWaveGRC.grc,包含在 GRC 中显示流程图的信息。第二个文件是sineWaveFlowgraph.py,包含实际的 Python 流程图代码。Options 块中的Id确定.py文件的名称。

250px-GRCandPy

继续学习下一个教程GRC 中的 Python 变量,它描述了如何在 GRC 中使用 Python 数据类型。

发表回复 0

Your email address will not be published. Required fields are marked *