
软件无线电的学习路径往往是这样:从发射端的符号映射和脉冲成形开始,延伸到数字前端、ADC/DAC、晶振与时钟误差,最后又回到接收端的符号同步与载波同步。单独看,每一部分解决的是一个具体问题;把它们串起来,其实是一套简单 QPSK 无线收发系统从数字比特到星座点簇的完整过程。
本文不重复推导每个模块的详细原理,而是沿着信号实际经过的路径,对前一阶段的学习和调试结果做一次阶段性总结:数字域里的一串复数,是如何一步步变成天线上的电磁波,又如何在接收端从混乱的星座轨迹里,重新收敛为干净的四个 QPSK 点簇。
数字通信的起点是一串二进制 bit。以 QPSK 为例,每两个 bit 映射为一个复数符号,形成四个理想星座点。这里需要区分「符号」和「采样点」:符号决定要传递的信息,而 SPS(每符号采样数)决定一个符号在数字波形中由多少个采样点表示。完成映射后得到的仍然是离散复数序列,还需要经过成形滤波,才能成为适合传输的基带波形。

本系统在发射端使用 RRC(根升余弦)进行脉冲成形,在接收端再次使用参数一致的 RRC 进行匹配滤波,两只 RRC 级联后的整体响应满足升余弦特性。发射端的 RRC 负责限制带宽并塑造脉冲;接收端的匹配滤波器则在采样判决前提高信噪比。两者不是重复处理,而是同一套收发设计的前后两半。
在 GNU Radio 中,可以把 bit 生成、QPSK 映射、上采样和 RRC 成形等步骤封装成一个自定义的 OOT 模块。封装以后,发射端不再需要反复搭建零散模块,只需要统一设置调制方式、SPS、滚降系数和滤波器长度:


运行后即可得到发射端的时域波形、频谱和星座图:

调制器输出的是数字复基带序列 I[n] + jQ[n],它还不是空间中传播的无线电波。后续过程可分为 DAC、正交混频、功率放大和天线几个阶段:DAC 将数字 I/Q 转换为模拟基带电压;本振提供载波;正交混频器把 I、Q 两路搬移到射频;最后经过功率放大器和天线发射出去。到这里,软件中生成的一串复数才真正进入物理世界。

发射端生成 IQ 序列后,下一步就是将数据送入 PlutoSDR Sink。这里的 Sample Rate 是 GNU Radio 与设备之间的基带采样率,并不是 ADC/DAC 的物理采样率。两者之间由数字前端 DFE 完成采样率转换和频谱搬移。

当转换倍率较大时,DFE 通常采用 CIC、半带滤波器和 CFIR 组成的多级结构,在降低计算量的同时完成插值与滤波:

经过 DFE 后,信号到达 ADC/DAC。它们是数字域与模拟域的物理分界线:发射端由 DAC 将数字 IQ 转换为模拟电压,接收端由 ADC 对模拟波形进行采样和量化。采样率、量化位数、ENOB 和采样时钟等参数决定了系统的带宽与精度。其中采样时钟又自然引出了下一部分:时钟从哪里来,它为什么会产生误差?

采样时钟和射频本振都来自晶振与 PLL。由于发射机和接收机使用不同的晶振,两端的时间与频率基准不可能完全一致,最终表现为三种偏差:
| 偏差 | 成因 | 现象 |
|---|---|---|
| CFO(载波频偏) | 收发本振不一致 | 基带星座持续旋转 |
| SFO(采样频偏) | 收发采样时钟不一致 | 最佳采样位置随时间漂移 |
| STO(符号定时偏差) | 初始符号时刻不对齐 | 采样点偏离符号中心 |

因此,符号同步解决「什么时候采样」,载波同步解决「星座旋转了多少」。
早期接收实验使用 HackRF One,后来将收发平台统一升级为 P201Pro / PlutoSDR 双机。P201Pro 使用 AD9361 和精度约 ±0.5 ppm 的 VCTCXO,并可在 GNU Radio 中分别通过 PlutoSDR Sink 与 Source 完成收发,降低了同步难度,也统一了实验接口。

| 项目 | P201Pro |
|---|---|
| 晶振频率 | 40 MHz |
| 晶振类型 | VCTCXO |
| 频率精度 | ±0.5 ppm |
| 宽压供电 | 8–36 V |
| ADC 位数 | 12 bit |
| 射频收发芯片 | AD9361 |

说明:发射端基带信号经过调制后由 P201Pro 发射,射频频率为 1 GHz,基带采样率为 4 MHz;接收端 P201Pro 在 1 GHz 处接收信号,下变频得到 IQ 基带信号,用于后续同步与解调处理。
P201Pro 接收并输出复基带 IQ 后,GNU Radio 接收链为:
PlutoSDR Source → AGC → FLL Band-Edge → RRC 匹配滤波
→ Symbol Sync → Costas Loop → Constellation Sink
其中 AGC、FLL 和匹配滤波完成前置处理,后面的主线就是符号同步与载波同步。
Symbol Sync 使用 Gardner 定时环路寻找最佳采样时刻,将匹配滤波后的 4 SPS 转换为 1 SPS。实测中,星座由多层散乱轨迹收敛成较窄的旋转环,平均周期稳定在 4 附近,说明定时环路已经稳定跟踪:

符号同步后的星座仍会受残余 CFO 和相位偏差影响而旋转。四阶 Costas Loop 对符号进行反向旋转后,圆环收敛为四个 QPSK 点簇:

到这里,前面分散学习的调制、数字前端、ADC/DAC、晶振和同步算法被串成了同一条信号链:
bit 流 → QPSK 符号映射 → 上采样与 RRC 成形 → DFE 插值与 DUC → DAC
→ 正交上变频与功率放大 → 无线信道
→ 下变频与 ADC → DDC → AGC / FLL → RRC 匹配滤波
→ Gardner 定时恢复 → Costas 载波同步 → QPSK 四点簇
GNU Radio 中的各个模块,也能够与真实收发机内部的处理环节一一对应。设备连接好后,通过两台 PC 进行收发:

目前已经能够发出 QPSK 波形,并在接收端恢复出四个点簇。下一阶段将继续完成:
从一串 bit 到四个星座点簇,这条链路把「发射端成形 → 数字前端 → ADC/DAC → 时钟误差 → 接收端同步」几个原本独立的知识点真正连了起来。GNU Radio 提供了可观测的中间过程,而 P201Pro 提供了稳定的射频前端与时钟基准,两者结合让每一个环节的现象都能被实测验证——这也正是软件无线电相比纯理论推导最有价值的地方。