×

从 bit 流到 QPSK 点簇:基于 P201Pro 与 GNU Radio 的 SDR 收发系统阶段性总结

2026-09-21





从 bit 流到 QPSK 点簇:基于 P201Pro 与 GNU Radio 的 SDR 收发系统阶段性总结



P201Pro 软件无线电 QPSK 收发实验平台

软件无线电的学习路径往往是这样:从发射端的符号映射和脉冲成形开始,延伸到数字前端、ADC/DAC、晶振与时钟误差,最后又回到接收端的符号同步与载波同步。单独看,每一部分解决的是一个具体问题;把它们串起来,其实是一套简单 QPSK 无线收发系统从数字比特到星座点簇的完整过程

本文不重复推导每个模块的详细原理,而是沿着信号实际经过的路径,对前一阶段的学习和调试结果做一次阶段性总结:数字域里的一串复数,是如何一步步变成天线上的电磁波,又如何在接收端从混乱的星座轨迹里,重新收敛为干净的四个 QPSK 点簇。

一、发射端:从 bit 流得到可发送的 IQ 序列

1.1 bit 流如何变成基带符号

数字通信的起点是一串二进制 bit。以 QPSK 为例,每两个 bit 映射为一个复数符号,形成四个理想星座点。这里需要区分「符号」和「采样点」:符号决定要传递的信息,而 SPS(每符号采样数)决定一个符号在数字波形中由多少个采样点表示。完成映射后得到的仍然是离散复数序列,还需要经过成形滤波,才能成为适合传输的基带波形。

符号脉冲序列、升余弦滤波器与成形后的基带波形
bit → 符号映射 → 上采样 → 成形滤波的直观过程:上为符号脉冲序列,中为升余弦滤波器系数,下为成形后的基带波形。

1.2 成形滤波器和匹配滤波器

本系统在发射端使用 RRC(根升余弦)进行脉冲成形,在接收端再次使用参数一致的 RRC 进行匹配滤波,两只 RRC 级联后的整体响应满足升余弦特性。发射端的 RRC 负责限制带宽并塑造脉冲;接收端的匹配滤波器则在采样判决前提高信噪比。两者不是重复处理,而是同一套收发设计的前后两半。

1.3 将调制流程封装成 OOT 模块

在 GNU Radio 中,可以把 bit 生成、QPSK 映射、上采样和 RRC 成形等步骤封装成一个自定义的 OOT 模块。封装以后,发射端不再需要反复搭建零散模块,只需要统一设置调制方式、SPS、滚降系数和滤波器长度:

简单通用调制流程框图与 Modulator 模块参数
简单通用调制流程:Bits → 串并转换 → 符号映射 → 上采样 → 成型滤波 → 调制 IQ 信号;右图为封装后 Modulator 模块的参数(SPS、Roll-off、Filter Length、Modulation Type)。
GNU Radio 发射端流图
发射端 GNU Radio 流图:File Source(二进制比特)→ Modulator → 瀑布图 / 频谱图 / 时域图 / 眼图,再经 Delay 与 Keep 1 in N 后进入星座图。

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

发射端瀑布图、频谱、时域波形与星座图
发射端输出:左上为瀑布图,右上为频谱(1000 MHz 附近约 1 MHz 带宽),左下为 I/Q 时域波形,右下为发射星座图——四个点清晰可辨。

1.4 IQ 序列如何变成无线信号

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

信号形态的演变:从数字到电磁波
信号形态的演变:① 数字 IQ 序列(离散采样点)→ ② 基带模拟信号(DAC 输出)→ ③ 射频信号(Mixer 输出,可见包络)→ ④ 发射链路各阶段:IQ 序列 → DAC → Mixer → PA → 天线。

二、数字前端:基带采样率如何连接硬件采样率

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

PlutoSDR Sink 模块与其属性配置
PlutoSDR Sink 模块及参数:IIO context URI 192.168.2.1、LO Frequency 1 GHz、Sample Rate 4 MHz、Buffer size 4 M、RF Bandwidth 20 MHz 等。

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

DUC 发射链路架构
DUC 发射链路架构:基带 I/Q → CIC(×K1,无乘法器)→ HB-A / HB-B(×2,约 50% 系数恒为 0)→ CFIR(×2 或 ×1,补偿 droop 并成形)→ 混频 + NCO → DAC → RF。

三、ADC/DAC:数字域与模拟域的分界线

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

SDR 收发链路中 ADC/DAC 的位置
SDR 收发链路中 ADC/DAC 的位置:发射方向为 数字 IQ → DFE → DAC → 模拟基带重构滤波 → Mixer+PA → 天线;接收方向为 天线 → LNA+Mixer → 模拟基带抗混叠滤波 → ADC → DFE → 数字 IQ。ADC/DAC 决定了系统以什么速率、什么精度、在什么时间点感知和生成信号,是同步偏差的物理根源。

四、晶振误差:为什么接收端必须进行同步

采样时钟和射频本振都来自晶振与 PLL。由于发射机和接收机使用不同的晶振,两端的时间与频率基准不可能完全一致,最终表现为三种偏差:

偏差 成因 现象
CFO(载波频偏) 收发本振不一致 基带星座持续旋转
SFO(采样频偏) 收发采样时钟不一致 最佳采样位置随时间漂移
STO(符号定时偏差) 初始符号时刻不对齐 采样点偏离符号中心
同步偏差的因果链:从晶振到误码
同步偏差的因果链:晶振差异(±1 ~ 20 ppm,物理根源)→ 采样时钟差异 → ADC/DAC 时间轴不同(数字表现)→ 接收端符号在错误时间点采样 → 星座图旋转、误码率上升(通信后果)→ 需要同步算法补偿(CFO / SFO / STO)。

因此,符号同步解决「什么时候采样」,载波同步解决「星座旋转了多少」

五、从 HackRF One 到 P201Pro:实验平台的升级

早期接收实验使用 HackRF One,后来将收发平台统一升级为 P201Pro / PlutoSDR 双机。P201Pro 使用 AD9361 和精度约 ±0.5 ppm 的 VCTCXO,并可在 GNU Radio 中分别通过 PlutoSDR Sink 与 Source 完成收发,降低了同步难度,也统一了实验接口。

P201Pro 收发系统框图与关键参数
P201Pro 收发系统框图与关键参数:发射端 File Source → Modulator → PlutoSDR Sink(LO 1 GHz、基带采样率 4 MHz、Buffer 262144 samples、RF 带宽 4 MHz);接收端 PlutoSDR Source → Throttle → Constellation Sink(Center Freq 1 GHz、Gain Manual 20 dB 可调、RF 带宽 4 MHz)。
项目 P201Pro
晶振频率 40 MHz
晶振类型 VCTCXO
频率精度 ±0.5 ppm
宽压供电 8–36 V
ADC 位数 12 bit
射频收发芯片 AD9361
两台 P201Pro 设备与天线的实拍连接
实验实拍:两台 P201Pro 分别作为发射端与接收端,通过天线完成 1 GHz 频段的无线收发。

说明:发射端基带信号经过调制后由 P201Pro 发射,射频频率为 1 GHz,基带采样率为 4 MHz;接收端 P201Pro 在 1 GHz 处接收信号,下变频得到 IQ 基带信号,用于后续同步与解调处理。

六、接收端:从混乱星座恢复出 QPSK 点簇

P201Pro 接收并输出复基带 IQ 后,GNU Radio 接收链为:

PlutoSDR Source → AGC → FLL Band-Edge → RRC 匹配滤波
                 → Symbol Sync → Costas Loop → Constellation Sink

其中 AGC、FLL 和匹配滤波完成前置处理,后面的主线就是符号同步与载波同步

6.1 Symbol Sync:找到最佳采样时刻

Symbol Sync 使用 Gardner 定时环路寻找最佳采样时刻,将匹配滤波后的 4 SPS 转换为 1 SPS。实测中,星座由多层散乱轨迹收敛成较窄的旋转环,平均周期稳定在 4 附近,说明定时环路已经稳定跟踪:

Symbol Sync 定时环路实测:瞬时周期、平均周期与定时误差
定时环路实测:上半部分为同步前后的星座对比(散乱轨迹 → 较窄旋转环)以及 I/Q 时域与频谱;下半部分 Timing Loop 指标显示 Instantaneous Period 在 4 附近抖动、Average Period 稳定收敛于约 4.0,Timing Error 保持在小幅范围内。

6.2 Costas Loop:让旋转圆环停下来

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

Costas Loop 载波同步前后的星座与频谱
载波同步效果:左上为同步前的旋转圆环,右上为经 Costas Loop 校正后收敛的四个点簇;下方为同步后的瀑布图与频谱。

七、把整条 QPSK 收发链路串起来

到这里,前面分散学习的调制、数字前端、ADC/DAC、晶振和同步算法被串成了同一条信号链:

bit 流 → QPSK 符号映射 → 上采样与 RRC 成形 → DFE 插值与 DUC → DAC
       → 正交上变频与功率放大 → 无线信道
       → 下变频与 ADC → DDC → AGC / FLL → RRC 匹配滤波
       → Gardner 定时恢复 → Costas 载波同步 → QPSK 四点簇

GNU Radio 中的各个模块,也能够与真实收发机内部的处理环节一一对应。设备连接好后,通过两台 PC 进行收发:

两台 PC 与 P201Pro 完成端到端收发
端到端联调:两台 PC 分别连接 P201Pro,完成从比特流发射到接收端 QPSK 四点簇恢复的完整链路。

八、下一阶段

目前已经能够发出 QPSK 波形,并在接收端恢复出四个点簇。下一阶段将继续完成:

  • QPSK 硬判决与 bit 解映射
  • 帧头、前导序列和包同步
  • 收发 bit 对比和 BER 统计
  • 在稳定单载波链路的基础上继续学习 OFDM、信道估计和 MIMO

小结

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