GNU Radio官方教程系列(一):什么是 GNU Radio
什么是 GNU Radio?

GNU Radio 是一个免费且开源的软件开发工具包,提供信号处理模块以实现软件无线电。它可以与现成的低成本外部射频硬件结合使用,用于创建软件定义无线电,也可以在仿真环境中不使用硬件。它被广泛应用于科研、工业、学术和业余爱好者环境中,以支持无线通信研究和实际无线电系统。
下面展示了 GNU Radio Companion 可视化编辑器中的一个示例流程图:

GNU Radio 是一个框架,使用户能够设计、模拟并部署高性能的真实无线电系统。它是一个高度模块化、以“流图”为导向的框架,配备了一个完整的处理模块库,可以轻松组合用于构建复杂的信号处理应用。GNU 无线电被广泛应用于各种实际无线电应用,包括音频处理、移动通信、GSM 网络、数字无线电世界等——全部在计算机软件中。单独使用硬件并不是解决方案。它也不能为特定的无线通信标准(如 802.11、ZigBee、LTE 等)提供开箱即用的应用,但它可以(并且已经被)用于开发几乎任何带限通信标准的实现。
我为什么要用 GNU Radio?
过去,在开发无线电通信设备时,工程师必须开发专门的电路来检测特定信号类别,设计能够解码或编码该信号的特定集成电路,并使用昂贵的设备进行调试。
软件定义无线电(SDR)将模拟信号处理在物理和经济上尽可能地通过软件算法在计算机上处理无线电信号。
当然,你也可以用连接电脑的无线电设备,自己编写程序,根据需要连接算法,自己移动数据。但这很快就变得麻烦:为什么要重新实现标准过滤器?为什么你非得关心数据如何在不同处理块之间流动?使用高度优化且经过同行评审的实现,难道不比自己写东西更好吗?又如何让你的程序在多核架构上良好扩展,同时在耗电仅几瓦的嵌入式设备上运行良好?你真的想自己写所有的 GUI 吗?
这应运而生,GNU Radio:一个专门为普通计算机编写信号处理应用的框架。GNU Radio 将功能包裹在易于使用的可重复使用模块中,具备出色的可扩展性,提供丰富的标准算法库,并针对多种常见平台进行了高度优化。它还附带大量示例帮助你入门。
本页剩余部分将简要介绍 DSP,如果你已经熟悉 DSP,可以直接跳到下一个教程。
数字信号处理
作为一个软件框架,GNU Radio 利用数字化信号生成通用计算机的通信功能。
一点信号理论
在软件中进行信号处理需要信号是数字的。但什么是数字信号?
为了更好地理解,我们来看一个常见的“信号”场景:用手机录制语音传输。
一个人在物理上产生声音信号——在这里,信号是由人类声带产生的不同气压波组成。信号是一个随时间变化的物理量,就像空气压力一样。

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

现在信号是电信号,我们可以处理它。此时音频信号是模拟的——计算机还无法处理;对于计算处理来说,信号必须是数字的,这意味着两点:
它只能是有限的数值之一。
信号可以随时间变化,但对于每个瞬间,它只接受一个值——这个值不来自某个“连续体”(如 [−1.5;+1.5] ,),而是来自某个有限集合(如 {−1.50,−1.49,…,+1.49,+1.50} )。
它只存在于时间中的离散集合
信号并非定义为任意时间点——时间点是独立且可数的。你可以说“这是信号第一次取特定值的时间点,这是第二个时间点......”。

因此,这种数字信号可以用一串数字表示,称为采样。采样之间的固定时间间隔导致信号采样率。
将物理量(电压)转换为数字样本的过程由模拟数字转换器(ADC)完成。配套设备是数字转模拟转换器(DAC),它从数字计算机接收数字并将其转换为模拟信号。
现在我们有了一串数字,计算机就能用它做任何事情。例如,它可能应用数字滤波器、压缩信号、识别语音,或通过数字链路传输信号。
数字信号处理应用于无线电传输
与声音相同的原理也可以应用于无线电波:
信号,这里称为电磁波,可以通过天线转换为变化电压。

这个电信号随后会被置于载波频率上,通常为几兆赫甚至数吉赫兹。
不同类型的接收机(例如超外差接收机、直接转换接收机、低中频接收机)可以商业化作为专用软件无线电外设购买,用户已可获得(例如连接声卡的业余无线电接收机),或者通过重新利用廉价消费级数字电视接收机(例如RTL-SDR 项目)获得。
基于模块化、流程图的数字信号处理方法
处理数字信号时,将各个处理阶段(过滤、校正、分析、检测等)视为处理块,可以通过简单的流量指示箭头连接:

在构建信号处理应用时,会构建一个完整的块图。这种图在 GNU Radio 中称为 flowgraph。

GNU Radio 是一个用于开发这些处理模块并创建流程图的框架,这些流程图构成了无线电处理应用。
作为 GNU Radio 用户,你可以将现有的分组组合成一个高级流程图,完成像接收数字调制信号这样复杂的事情,GNU Radio 会自动在这些区块之间移动信号数据,并在数据准备好处理时进行处理。
GNU Radio 自带了大量现有的模块。所有索引均可在 Block Docs 中找到。为了给你展示一些标准装置中可用的内容,以下是一些最受欢迎的模块类别及其成员:
- 波形发生器
- 调制器
- 仪器(即图形用户界面)
- 数学算子
- 频道模型
- 滤波器
- 傅里叶分析
利用这些模块,许多标准任务,如信号归一化、同步、测量和可视化,只需将相应模块连接到信号处理流程图即可完成。
另外,你也可以自己写模块,结合现有模块和一些智能功能,提供新功能和逻辑,或者开发自己的模块,对输入数据和输出数据进行操作。
因此,GNU Radio 主要是一个用于开发信号处理模块及其交互的框架。它自带了丰富的标准模块库,开发者可以基于多种系统进行构建。然而,GNU Radio 本身并不是一个准备好做特定事情的软件——用户的工作是从中构建有用的东西,尽管它已经包含了许多有用的工作示例。可以把它看作一组构建模块。
全部回复 (0)
lium
社区创作者
