首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用 GNU Radio 理解信号调制:调幅、调频、调相与数字调制

使用 GNU Radio 理解信号调制:调幅、调频、调相与数字调制

作者头像
yichen
发布2026-06-24 19:34:47
发布2026-06-24 19:34:47
1230
举报

前面我们一直研究的是接收、重点是解调信号,从无线电信号里把信息取出来,接下来看看如何调制信号,将基带信号转换成适合通过无线信道传输的信号(如果是真实发射,还需要经过上变频、DAC、功放、天线等环节),接下来先把一些基础的概念解释清楚

基带信号,这是我们真正想要传递的内容,例如前面文章中的 AM 或 FM 广播,基带信号就是一些音频数据,从发射方的角度来看,基带信号就是在进行调制之前试图通过无线电发送的波形

载波,一般就是一个高频的正弦波,用来"承载"基带信号,把基带信号"搬到"适合无线传播的频率位置上

调制,就是用我们要传递的信息(基带信号)去控制载波的某个属性,例如控制载波幅度那就是 AM 调制;控制载波频率那就是 FM 调制;控制载波相位那就是 PM 调制

来具体看不同的调制方式吧

◆◆调幅◆◆

幅度调制(Amplitude Modulation)是指当基带信号较低时降低载波信号的幅度,当基带信号较高时升高载波信号的幅度,在数学上就是两个信号相乘,我们来做个实验观察一下这个现象

添加两个 Signal Source,其中一个波形设置为三角形(Triangle)频率设置为 1KHz;另一个保留默认的余弦函数,频率设置为 10KHz;添加一个 Multiply ;最后添加一个 QT GUI Time Sink 设置 Number of Inputs 为 2;所有模块类型设置为 float,最终效果如图所示

运行后即可看到,蓝色三角波越高,红色载波振幅越大;蓝色三角波越低,红色载波振幅越小。意味着基带信号控制着载波的幅度

在 AM 调制的时候存在一个问题,我们来看配套的 GNU Radio 工程 ch_10/amp_mod_begin.grc

使用一个三角波作为基带信号,和一个正弦载波相乘,最后通过 Complex to Mag 作为一个简化版本的 AM 解调器把调制的信号还原回来(这里的 Complex to Mag 更准确地说是在取复数信号的幅度,用来模拟包络检波;它不是完整的 AM 接收机解调链路)

这么看波形是很正常的,即使调整 amplitude 变量,本来的基带信号(Modulator Input)是啥样,解调输出还是啥样(Demod Out)但是简单的乘法之所以有效,是因为我们的基带信号只取正值,信号源模块的三角波默认从 0 变为 1,然后再变回 0。然而很多时候基带信号会同时取正值和负值,如果存在负数会怎么样呢

修改基带信号的 Amplitude = 2*amplitude、Offset = -1

再次执行你会发现,嗯?看起来解调出来的信号和基带信号不一样了,这是因为普通 AM 包络解调只能恢复包络大小,不能恢复包络的正负号。因此负半轴会被翻到正半轴,解调结果近似变成原始基带的绝对值(普通 AM 包络解调默认有一个前提:调制包络始终是非负的)

而解决这个问题的办法就是把基带调高,本来是 -1 ~ 1,改成 0 ~ 2 这样形状不变的前提下全都是正数了,可以在中间加入一个 Add Const 模块,设置为 +1;如果有信号偶尔比 -1 还小,那么只加 +1 仍可能不够。这时可以先用 Multiply Const 对基带信号做衰减,确保送入调制器 Multiply 之前的信号始终不小于 0

◆◆调频◆◆

频率调制是指根据基带信号的值改变载波信号的频率,当基带信号值增大时,载波频率加快;当基带信号值减小时,载波频率减慢,基带信号保持不变时,输出的瞬时频率也保持在某个固定值;如果这个基带值不是 0,那么它会保持在相对中心频率的某个固定偏移上。打开 ch_10/fm_mod.grc 工程来具体看一下

基带信号仍然是一个三角波形,通过 Frequency Mod 调制直接输出观察波形

可以加入一个 QT GUI Waterfall Sink 也就是俗称的瀑布图,这样我们可以看清楚基带信号控制频率产生的变化来回摆动,同时也可以在 Modulator Output 中看到疏密变化和 Modulator Output - FFT 中看到当前信号集中在哪些频率上

这就和之前的 AM 调试不一样了,打个比方经常见到的 OOK 类型的无线遥控器属于幅度类调制,中心频率集中在 433.92 MHz 通过开关载波来调整 0/1,虽然频谱上不一定是绝对的一根线,但是基本是固定的频率,不会随着数据连续摆动

而 FSK 的话可能就能看到发送不同的数据会在不同的频率上,虽然可以定一个大概的主频率,但是会有些跳变,我们当前的实验默认中心频率在 0Hz,所以会看到在 0Hz 附近摆动,如果接 SDR 发射,并且把 SDR 的中心频率设置为 433.92MHz,那么它就会变成在 433.92MHz 附近摆动

在 Frequency Mod 有一个叫做灵敏度的参数,它可以理解为基带信号对频率偏移的控制力度。它越大,同样的基带输入会造成越大的频率偏移,瀑布图中的摆动范围也会越宽。

◆◆调相◆◆

相位调制 Phase Modulation 可能最难的是相位这个词,我们可以先理解成同一个正弦波整体提前一点或者滞后一点,相位是啥呢,比如我们看两个频率和幅度一样的正弦和余弦函数,他俩就是相位差了四分之一个周期,相位差是 90°

打开 ch_10/phase_mod.grc 来看一下调相,运行项目会看到下方的蓝色载波固定不动,红色的调制后的波形会随着调制输入变化而左右移动。

Phase Mod 的作用是把基带信号变成一个“相位偏移量”(该把载波旋转多少角度),再通过 Multiply 把这个相位偏移作用到载波上(在复数表示里,一个信号可以同时表示幅度和相位;两个复数相乘时,幅度相乘、相位相加,所以这里的 Multiply 实际上是在把基带产生的相位偏移叠加到载波相位上)

涉及调相部分使用的是复数,复数载波 × 复数相位旋转量,最终会使相位相加(比如本来一个是30°,一个是 20°,乘完变成了 50°)

◆◆数字调制◆◆

上面讨论的是模拟信号,那对于数字信号呢,比如 3.3v 表示 1,0v 表示 0,这时候可以用一个方波表示,这个波形非常简单,要么是高要么是低,没有中间值

如果把这个方波信号送到调幅系统中会是什么样呢?OOK(On-Off Keying)调制!

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档