首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >软件定义无线电教程(一):SDR基础概念与GNU Radio

软件定义无线电教程(一):SDR基础概念与GNU Radio

作者头像
yichen
发布2025-12-25 11:18:54
发布2025-12-25 11:18:54
3460
举报
前段时间发现国外一本讲 SDR 的书:《Practical SDR Getting Started with Software-Defined Radio》大概翻了翻感觉讲的比较基础和细致,有不少内容正好是之前想学的
image.png
image.png

为了早日实现用身体发送无线电波,拿来学一学

23a923ab3bb3e6827cca8ff208eecb0c.png
23a923ab3bb3e6827cca8ff208eecb0c.png

◆◆一些基础概念◆◆

数字采样

真实世界的信息大多是连续变化的,比如声音、光线、温度等,这些连续信号被称为模拟信号。然而,计算机只能处理离散的数字信息,也就是数字信号。为了将模拟信号转换为数字信号,我们需要进行数字采样

采样过程本质上就是测量:在固定的时间间隔内,对模拟信号的幅度进行测量,并记录其数值。只要采样的频率足够高,并且测量足够精确,那么这些离散的数字样本就能完整还原原始信号的信息

打个比方,数字采样就像是用相机拍摄一个连续运动的场景:虽然每一帧是静态的,但只要帧率足够高,播放时就能呈现出流畅的动态画面。同理,数字采样通过足够快、足够准的“抓拍”,将连续的现实世界转化为离散的数字序列,从而让计算机能够存储、处理和重现这些信息

模数转换(ADC)

为了进行数字采样,需要以固定间隔对信号进行采样,并将采集到的样本转换为计算机可以处理的数字序列,完成这一过程的硬件称为模数转换器,比如一个正弦信号输入到 ADC 中,会进行一系列采样。尽管采集的样本数量有限,但仍能大致看出这是一个正弦波

数模转换(DAC)则是将数字信号转换回模拟信号,比如把电脑上存放的音乐通过喇叭播放出来,变成现实世界的声音

采样率

采样率是每秒对信号采样的次数,每个单独样本之间的时间称为采样周期,采样率越高计算机对于信号的表示就越准确,另一方面,采样率越高,每秒采集的样本数也会越多,因此产生的数据量就越大,你需要有足够的存储空间和数据处理能力来处理这些数据

上图我们看过了正弦波采样率比较高的情况,即使通过散落的点我们也可以看出来是一个正弦波,但是如果像下图采样率太低,遗失了太多的信息,就基本看不出来原始波形了

◆◆软件定义无线电的宏观视角◆◆

软件定义无线电简单解释就是:通过天线接收无线电信号,经由模数转换器(ADC)将其转换成计算机可以处理的数据流,计算机对这些信号进行处理后,再通过数模转换器(DAC)将数据转换为模拟信号,最后通过天线发射出去

◆◆GNU Radio 基本使用◆◆

安装比较简单可以直接参考官方 wiki:

https://wiki.gnuradio.org/index.php/InstallingGR#Other_Installation_Methods

安装完成后会有一个快捷方式,点击打开即可

界面如下,右边是各种组件,所有组件都可以通过 ctrl+f 打开搜索框直接搜名字,鼠标左键按住组件可以拖拽到左侧的流程图进行连线与配置

操作起来很简单,只需要拖拽各种模块并连线,但是理解每个模块的功能及应该如何连接,就难上天了 Orz...

接下来一点点学吧,在 GNU Radio 中有很多种模块,其中最重要的两类是:Source 和 Sink

Source 是流程图中的数据输入源,可以来自文件(File Source)、信号源(Signal Source)、支持 osmocom 的 SDR 硬件设备(osmocom Source)等等

Sink 是流程图中的数据输出端,可将数据写入文件(File Sink)、通过扬声器输出(Audio Sink)、在图中绘制波形(QT GUI Sink)等

第一个流程图

首先来创建一个恒定数值的波形,直接拖拽一个 Constant Source,然后添加一个 Throttle 模块,最后放一个 QT GUI Time Sink,把它们连接起来,点击运行按钮可以看到一个始终为 0 的波形

将 Constant Source 改为 3 再次运行,看起来没什么变化,其实是因为纵坐标 y 轴当前最大刻度是 1,通过滚动鼠标滚轮放大 y 轴刻度,就能看到一个恒为 3 的波形了

哎,但是为什么我们创建了一个恒定为 3 的数值,但是图中却有两个波形呢,这是因为当前的变量类型是复数,两条波形分别代表实部(Signal1)和虚部(Signal2)

现在用三个模块完成了一个简单的 GNU Radio 流程图,左右两个都比较容易理解,Constant Source 就是产生一个固定值、QT GUI Time Sink 就是画个带时间轴的波形图,但是中间的 Throttle 是个什么东西嘞

可以暂时将其理解为一个“限速器”,它按照设定的采样率限制数据输出,从而使后续波形能够稳定、直观地显示(当然我们现在的流程图还太简单,这个模块可有可无)

通过这个简单的示例,我们实现了 Source 到 Sink 的流程,在这中间还要进行各种数学运算以实现调制、解调、滤波等操作

接下来尝试一个最简单的乘法运算,搜索 Multiply Const 拖拽到流程图中,放在 Throttle 后面,设置参数 Constant 为 2,执行流程图可以看到此时波形是固定值 6,我们通过一个乘法模块将原来的 3 乘了 2,这是 GNU Radio 的一个简单的操作,但是却是我们第一次在 Source 和 Sink 之间执行了数学运算,接下来会在 Source 和 Sink 之间塞各种有趣的模块来实现信号调制解调

下一篇文章中我们会对一个原始无线电广播信号进行解调,通过声卡将其播放出来

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陈冠男的游戏人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数字采样
  • 模数转换(ADC)
  • 采样率
  • 第一个流程图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档