

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

◆◆一些基础概念◆◆
真实世界的信息大多是连续变化的,比如声音、光线、温度等,这些连续信号被称为模拟信号。然而,计算机只能处理离散的数字信息,也就是数字信号。为了将模拟信号转换为数字信号,我们需要进行数字采样
采样过程本质上就是测量:在固定的时间间隔内,对模拟信号的幅度进行测量,并记录其数值。只要采样的频率足够高,并且测量足够精确,那么这些离散的数字样本就能完整还原原始信号的信息
打个比方,数字采样就像是用相机拍摄一个连续运动的场景:虽然每一帧是静态的,但只要帧率足够高,播放时就能呈现出流畅的动态画面。同理,数字采样通过足够快、足够准的“抓拍”,将连续的现实世界转化为离散的数字序列,从而让计算机能够存储、处理和重现这些信息
为了进行数字采样,需要以固定间隔对信号进行采样,并将采集到的样本转换为计算机可以处理的数字序列,完成这一过程的硬件称为模数转换器,比如一个正弦信号输入到 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 之间塞各种有趣的模块来实现信号调制解调

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