掌握星座图在IQ数据采集与预处理中的定位、故障信号与验证顺序。
围绕 星座图、谱图、时频图生成实战资料 展开。
IQ数据采集与预处理能跑不代表稳定,真正要确认的是对象边界、状态变化和验证证据。
本节围绕星座图建立一条更容易复测的联调路径。
在生成星座图、谱图或时频图之前,必须解决一个核心工程问题:如何从射频前端获取干净、对齐的基带IQ数据。无论是使用USRP(通用软件无线电外设)还是ZCU111(基于Zynq Ultrascale+ RFSoC的开发平台),原始ADC采样数据都携带直流偏置(DC Offset)和I/Q不平衡(I/Q Imbalance)两类系统性误差。前者源于混频器自混频或ADC的固定偏置,后者则来自模拟正交混频器的幅度/相位失配。若不校准,后续的星座图会出现中心偏移或椭圆畸变,谱图则会在零频处出现虚假尖峰
本节聚焦于从硬件触发采集到数据预处理的全流程,重点说明如何通过软件算法在数字域完成校正,并给出可复用的检查点与判定条件
两种平台的采集流程均遵循“初始化参数 → 触发捕获 → 读取缓冲区 → 预处理”的通用路径,但在触发机制和缓冲区管理上存在关键差异
USRP通过UHD(USRP Hardware Driver)库控制。典型流程中,uhd::usrp::multi_usrp::make()创建会话对象后,需设置中心频率、采样率、增益和天线端口。触发方式通常采用“流式连续捕获”或“单次突发捕获”。工程实践中,更推荐使用set_time_unknown_pps()进行时间同步,然后通过issue_stream_cmd(uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE)指定精确的样本数触发单次捕获。关键检查点在于:捕获前必须调用get_rx_freq()确认锁相环锁定状态,若返回频率与设定值偏差超过1kHz,应判定为硬件失锁并重试
ZCU111使用Xilinx RFSoC的Data Converter IP核。采集流程需通过AXI4-Lite接口配置ADC的NCO(数控振荡器)频率、抽取因子和混频器模式。触发动作通常由xsysmon或自定义的接口信号脉冲启动,数据通过DMA写入DDR。与USRP不同,ZCU111的预处理必须在PL(可编程逻辑)端完成,因为原始数据流速率高达数GSPS,软件侧无法实时处理。因此,直流偏置校正通常在PL端使用累加平均器实现,而I/Q不平衡校正则在PS(处理系统)端通过软件算法后处理
在某5G NR OTA测试项目中,团队使用ZCU111采集256-QAM信号。首次捕获的星座图出现明显的椭圆拉伸,经检查发现PL端的混频器相位未校准。通过写入0x00到ADC_TILE_0_USER_MIXER_PHASE寄存器并重新触发,椭圆度从12%降至1.5%以下,验证了I/Q相位校正的必要性
校正的核心思路是:在数字域估计误差参数,然后对IQ样本进行反向补偿。对于直流偏置,采用长时间平均法:采集一段无信号输入时的样本,计算I路和Q路的均值,然后在后续每个样本中减去该均值。对于I/Q不平衡,则使用Gram-Schmidt正交化或最小二乘估计法
在USRP中,UHD驱动已内置set_rx_dc_offset(true)和set_rx_iq_balance(true)自动校正开关。但在高动态范围场景下,建议关闭自动校正,手动执行以下两步:1. 在无信号时采集1024个样本,计算I/Q均值作为直流偏置;2. 利用已知导频或信号统计特性,计算I/Q幅度比和相位差,构建校正矩阵
以下伪代码展示了ZCU111平台上的I/Q不平衡校正实现,该代码运行在PS端的ARM Cortex-A53上,处理从PL端DMA传输来的IQ数据块
# ZCU111 I/Q Imbalance Correction (Python on PS side)
import numpy as np
def calibrate_iq(iq_samples, pilot_freq=1e6, fs=245.76e6):
# 1. 直流偏置估计
dc_i = np.mean(iq_samples.real)
dc_q = np.mean(iq_samples.imag)
iq_samples -= (dc_i + 1j * dc_q)
# 2. I/Q不平衡估计(基于信号功率)
i_power = np.var(iq_samples.real)
q_power = np.var(iq_samples.imag)
iq_corr = np.mean(iq_samples.real * iq_samples.imag)
# 3. 构建校正矩阵
alpha = np.sqrt(q_power / i_power) # 幅度比
phi = np.arcsin(iq_corr / np.sqrt(i_power * q_power)) # 相位误差
# 4. 应用Gram-Schmidt正交化
i_corrected = iq_samples.real
q_corrected = (iq_samples.imag - np.sin(phi) * iq_samples.real) / np.cos(phi)
q_corrected /= alpha
return i_corrected + 1j * q_corrected阅读这段代码时,重点看IQ数据采集的伪代码,以及它如何用稳定性与可观测性证明结果可复测。
该代码通过计算I/Q两路的方差和协方差,估计出幅度比alpha和相位误差phi,然后对Q路进行线性组合补偿。验证动作是:校正后星座图的误差矢量幅度(EVM)应下降至少3dB
当校正后EVM仍高于-25dB时,应优先检查ADC的时钟抖动或电源纹波,而非继续优化算法参数。硬件底噪是数字校正的理论上限