软件无线电平台GNU Radio简单使用

一、前言

GNU Radio 是一个免费、开源的软件开发工具包,用于构建软件无线电(Software Radio)。它的核心思想是将传统上由硬件专用集成电路完成的信号处理任务,改由软件来实现,从而让同一套硬件能够通过更换软件来支持多种不同的通信标准。

1、核心架构与工作方式

GNU Radio 应用通常以“流图”(Flowgraph)的形式构建,由多个信号处理块(Block)通过连接(Connection)组合而成。

  • 处理块:是基本的功能单元,负责特定的信号处理任务(如滤波、调制、解调)。它们主要用 C++ 编写以保证实时处理的高性能,同时提供 Python 接口用于快速开发和顶层逻辑控制。
  • 流图:用户通过连接各个处理块来定义数据流向。连接本质上是由共享内存实现的缓冲区,它高效地在块之间传递数据。
  • 运行模式:它既可以连接低成本的外部射频硬件(如 USRP、RTL-SDR、HackRF等)进行真实信号收发,也可以在不连接硬件的情况下,利用录制或生成的数据进行纯软件仿真。

2、主要特点与组成

  • 图形化工具:通常包含 GNU Radio Companion (GRC),这是一个图形化界面,允许用户通过拖拽和连接块来直观地搭建流图,并自动生成对应的 Python 源代码。
  • 应用领域:广泛应用于学术研究、工业原型开发、业余无线电以及政府项目中,支持无线通信研究及实际无线电系统的构建。
  • 版本动态:目前广泛使用的稳定版本是 3.x 系列。同时,项目正在向 GNU Radio 4 过渡,其候选版本(RC3)已发布,采用了更模块化的仓库结构并改进了运行时调度器

二、安装

在 Ubuntu 或 Debian 系统上,最简便的安装方式是直接通过包管理器安装

sudo apt install gnuradio

在Windows/MacOS系统上,可以安装Radioconda,以达到使用

https://github.com/radioconda/radioconda-installer

安装好后,执行gnuradio-companion,启动后界面如下

三、功能模块

GNU Radio 自带的功能模块非常丰富,以下只是常见的几种类型:

1、信号源模块(Source Blocks)
  • Signal Source:用于生成不同类型的信号,如正弦波、余弦波、方波等。用户可以设置信号的频率、幅度、相位等参数。
  • Random Source:生成随机信号,用于模拟噪声或测试通信系统的抗干扰能力。
2、信号处理模块(Signal Processing Blocks)
  • 滤波器(Filters):包括低通、高通、带通、带阻等多种滤波器,用于对信号进行频域处理,去除噪声或提取特定频段的信号。
  • 调制器(Modulators):将基带信号调制到射频载波上,支持多种调制方式,如PSK、QAM、FSK等。
  • 解调器(Demodulators):从射频信号中解调出基带信号,与调制器相对应,支持多种解调方式。
  • FFT(快速傅里叶变换):用于将信号从时域转换到频域,便于进行频谱分析。
  • IFFT(逆快速傅里叶变换):FFT的逆过程,将频域信号转换回时域信号。
3、信道模块(Channel Blocks)
  • Channel Model:模拟信号在无线信道中传输的过程,包括多径效应、衰落、噪声等信道特性。
  • Fading Model:专门用于模拟信号的衰落过程,包括大尺度衰落和小尺度衰落。
4、同步与定时模块(Synchronization and Timing Blocks)
  • 同步器(Synchronizers):用于实现信号的同步,包括载波同步、符号同步等。
  • 定时恢复(Timing Recovery):从接收信号中提取定时信息,以便正确地进行符号采样。
5、编码与解码模块(Coding and Decoding Blocks)
  • 信道编码(Channel Coding):在发送端对信号进行编码,增加冗余信息以提高系统的抗干扰能力和可靠性。
  • 信道解码(Channel Decoding):在接收端对接收到的信号进行解码,恢复出原始信号。
6、控制器与流控制模块(Controllers and Flow Control Blocks)
  • Throttle:用于控制数据流的速度,防止数据流过快导致系统处理不过来。
  • Head:限制数据流的长度,只取前N个样本进行处理。
7、可视化与调试模块(Visualization and Debugging Blocks)
  • QT GUI Sinks:包括QT GUI Time Sink、QT GUI Frequency Sink等,用于在图形界面上实时显示信号的时域波形、频域特性等。
  • Scope Sink:类似于示波器,用于显示信号的实时波形。
8、其他模块
  • 数学运算模块:如加法器、乘法器、除法器等,用于执行基本的数学运算。
  • 类型转换模块:如Int To Float、Float To Complex等,用于数据类型的转换。

四、初步测试

我们以在Ubuntu系统下的GNU Radio为例,首先选择模块,比如Singal Source,一个信号源

再选择一个QT GUI Time Sink,时域波形可视化模块

其次,选一个QT GUI Frequency Sink,频域可视化模块

最后将信号源和可视化模块连接

点击运行,就能看到可视化的效果了。

五、进阶使用

本次我们使用HackRF(一款开源的软件无线电(SDR)外设)观测一下周围的Wi-Fi信号,设置变量:采样率20M(20e6),中心频率2.437G(2.437e9),再添加Soapy HackRF Source设置信号源hackrf=0,添加可视化模块QT GUI Frequency Sink、QT GUI Waterfall Sink,观察频域特性、瀑布图。

可以清楚的看到在真实世界下,一段时间内各频率信号强度的变化和当前时刻各频率的信号强度。

六、参考文档

https://www.gnuradio.org/

https://cloud.tencent.com/developer/article/2620651

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注