
很多人第一次用频谱仪看一条IQ发射链路的输出都会被同一个现象绊住明明只往DAC里灌了一个单音频谱上却干干净净地出现了两个峰一个在载频左边一个在右边幅度相差可能只有二三十dB。这时候大多数人会先怀疑代码里的频率字算错了把NCO的频率前后改三遍发现镜像纹丝不动——它根本不是算出来的而是被模拟链路的幅度和相位失配“生成”出来的。IQ调制技术看起来只是把一路信号拆成两路再合成但它的全部难点都藏在“正交”这两个字的实现精度里数字域可以做到理论上的完美正交模拟域却永远差那么一点点而这一点点会直接变成镜像、本振泄漏和EVM恶化。这篇内容面向的是需要真正把IQ链路跑起来的人做软件无线电的、写数字预失真算法的、搭雷达收发前端的、玩音频单边带的以及被导师安排去调一块射频板的同学。基础概念会讲但重点放在三件事上正交性为什么在数学上成立、在硬件上又为什么必然被破坏以及用最少的两台仪器怎么把破坏点定位出来。全程只谈可复现的方法和可量化的数字不谈玄学。1. 为什么非要把一个信号拆成I和Q两路1.1 一根正弦线能装下的信息量其实很有限先退一步想一个最朴素的问题如果我要把一个基带信号搬到一个很高的载频上去最直接的做法是拿这个信号去乘一个余弦也就是 s(t)m(t)·cos(ω_c t)。这叫双边带调制频谱上会产生上下两个对称的边带各占一份带宽。问题在于这两个边带携带的信息完全一样等于你用两倍的频谱资源传了一份内容。传统广播时代这无所谓反正频谱便宜但在今天的场景里带宽是硬通货浪费一半是不可接受的。单边带调制解决的就是这个问题想办法把其中一个边带抵消掉。数学上的做法是引入第二条支路把原信号做90度相移后乘正弦两路相减其中一个边带就消掉了。这条“90度相移支路”就是Q路的起点。所以从历史上看IQ调制并不是为了“高级”而发明的它是为了省带宽而被逼出来的一个技巧只是后来大家发现这个技巧的用途远不止省带宽。关键在于单边带能否干净地实现完全取决于那两路信号是不是严格的90度正交以及两路的幅度是不是严格相等。任何一点偏差被抵消的那个边带就会漏回来一部分这部分泄漏就是后面要反复打交道的“镜像”。1.2 正交性成立的前提是一个积分不是一个角度很多人对“正交”的理解停留在“相差90度”这个几何直觉上但真正让IQ调制在接收端可以无损分离的是三角函数在一个周期上的积分性质∫cos(ωt)·cos(ωt)dt 1/2∫sin(ωt)·sin(ωt)dt 1/2而 ∫cos(ωt)·sin(ωt)dt 0最后这个零才是全部的秘密。接收端把收到的信号分别乘上本地恢复的cos和sin再低通I路只留下自己那份Q路只留下自己那份互不干扰。这个性质对频率完全相同、相位严格相差90度的两个本振才成立。一旦本振相位差变成85度那个积分就不再是零而是一个正比于cos(85°)的小量于是I路里混进了Q路的分量Q路里混进了I路的分量。这种串扰在星座图上的表现是整团点云被“剪切”成平行四边形而不是均匀的圆形扩散——这是一个非常有用的诊断特征后面还会用到。顺便说一句这个积分性质也解释了为什么IQ调制对相位噪声的敏感度和普通调制不一样本振的相位噪声对I、Q两路是共模的它会整体旋转星座但不直接产生镜像真正产生镜像的是两路之间的差分误差。所以调IQ链路时先别急着怪本振相噪那个锅通常不归它背。1.3 复基带把两个实数通道看成一个复数真正让IQ调制变得好用的是换一个视角不要分别看I和Q把它们当成一个复数的实部和虚部写成 x(t)I(t)jQ(t)。这个复数信号就是所谓的复基带信号它没有物理实体只存在于算法和DSP里但它把“幅度”和“相位”这两个概念统一成了一个东西——复数的模和辐角。在这个视角下整个上变频过程可以写成一行s(t) Re{ x(t) · e^{jω_c t} }展开就是 s(t) I(t)cos(ω_c t) − Q(t)sin(ω_c t)。这个式子的好处是它把“我要产生什么”和“我怎么产生”彻底分开了。左边是物理世界要的实信号右边括号里是算法世界能自由操纵的复数。我想让星座点转45度只需要把 x 乘上 e^{jπ/4}我想做频谱搬移只需要把 x 乘上 e^{jΔωt}。所有操作都在复数域完成最后一步才取实部交给DAC。这也是为什么现代收发机的框图里数字部分永远画到“复基带”为止再往右就是模拟工程师的地盘了。生活化的类比复基带就像一张可以任意旋转、缩放的设计图IQ调制器则是那台把图纸打印成实物的机器。图纸可以画得无限精确机器的机械误差却决定了最终成品的精度。所有IQ链路的调试工作本质上都是在测量并且补偿这台机器的误差。1.4 零中频架构为什么离不开IQ顺带把架构选择这件事讲清楚因为它决定了后面所有问题的形态。超外差架构用两级甚至三级变频靠高Q值的声表或腔体滤波器把镜像滤掉代价是体积、成本和一堆杂散的频率规划。零中频架构直接把基带搬到载频一次变频搞定镜像问题理论上不存在了——因为信号就在本振频率上镜像就是它自己。但零中频立刻带来三个新麻烦本振泄漏会直接落在信号频带中心直流失调会在基带产生一个固定偏移而且I、Q两路的失配全部直接叠加在有用信号上没有任何滤波器可以帮忙。低中频架构是折中方案把信号放在本振旁边几MHz到几十MHz的位置镜像虽然回来了但距离足够远可以用数字滤波或者复数陷波干掉。架构镜像位置主要抑制手段典型难点超外差距离远可滤波高Q值模拟滤波器体积大、杂散规划复杂零中频与本振重合无法滤波只能靠校准本振泄漏、直流失调、IQ失配低中频距离近几十MHz内数字复数滤波需要更高的ADC采样率选哪条路取决于你的带宽和成本约束。宽带系统里低中频更常见因为几十MHz的数字滤波对现代FPGA来说几乎免费窄带低成本方案里零中频更常见因为省掉了一整套滤波器。但无论选哪条I、Q两路的匹配精度都是逃不掉的区别只是误差最终表现为镜像、边带还是EVM。2. 模拟链路上每一级都在悄悄破坏正交性2.1 增益失配和相位失配是怎么长出镜像的先把失配的数学模型建起来不然后面所有测量都没有参照。假设理想情况下 I 路和 Q 路完全一致但实际中Q路相对I路有幅度误差 ε 和相位误差 φ那么实际输出可以写成s(t) I(t)cos(ω_c t) − (1ε)·Q(t)·sin(ω_c t φ)把正弦展开用积化和差整理你会发现输出里除了想要的那个边带还多出了一个位于 −ω_c 附近的项其幅度正比于 √[(ε/2)² (φ/2)²]φ 用弧度。这个比值就是镜像抑制比 IRR工程上常用的近似公式是IRR(dB) ≈ −20·log₁₀( √[(ε/2)² (φ/2)²] )这个公式值得记在脑子里因为它能让你在动任何硬件之前先估算一下目标难度。举个具体的例子如果幅度失配做到1%ε0.01相位失配做到1度φ≈0.0175 rad代入得 √[(0.005)²(0.00875)²] ≈ 0.0101IRR ≈ 39.9 dB。也就是说1%和1度这两个数字基本对应40dB的镜像抑制水平。幅度误差 ε相位误差 φ近似 IRR0.1%0.1°约 60 dB0.5%0.5°约 46 dB1%1°约 40 dB2%2°约 34 dB5%5°约 26 dB这张表最实用的地方在于反向使用如果你的系统指标要求镜像抑制优于50dB你就知道单靠器件本身的匹配是不够的必须上校准。市面上多数集成IQ调制器的裸指标在35~45dB这个区间做到50dB以上基本都要靠数字预校正。注意这里的 ε 是相对幅度误差不是dB值。有人在表格里填了个“0.1dB增益差”就跑来算那要先换算0.1dB ≈ 1.16% 的幅度误差代入公式得到约38.7dB比直觉上的“0.1很小”要差得多。dB坐标对小数不敏感这是新手最容易误判的地方。2.2 本振泄漏零中频架构里最刺眼的那根谱线如果说镜像是“多出来一个不该有的峰”那本振泄漏就是“中间多了一根不该有的柱子”。它的成因非常朴素调制器内部的晶体管存在直流失调或者差分对不匹配导致本振信号没有被完全抵消直接从输出口漏了出去。在频谱仪上它表现为一个位于载频正中心、幅度与基带信号无关的窄峰。这根峰讨厌的地方在于它不随你的基带信号变化却会实实在在占用发射链路的功率余量还会在接收端抬高底噪。更要命的是在OFDM这类高峰均比系统里本振泄漏正好压在直流子载波上会直接破坏该子载波的解调。抑制它的手段分两层。模拟侧靠器件本身的载波抑制能力通常在30~40dBc数字侧靠“直流补偿”也就是在I、Q两路分别叠加一个可调的直流量把漏出去的那部分抵消掉。校准方法很直接把基带输出置零此时理论上输出应该什么都没有然后扫描 I_dc 和 Q_dc 两个补偿值让频谱仪上的中心峰幅度最小。这是一个二维搜索问题但实际操作中可以先固定Q扫I找到最小值再固定I扫Q两三轮就能收敛因为两个维度近似解耦。一个常见的坑直流补偿值会随温度和本振频率漂移尤其是本振频率改变时调制器内部的失配量会变之前标定的值可能完全失效。所以如果你的系统要跳频直流补偿表必须按频点分别存储不能只标一个点就用到底。2.3 IQ skew被忽略的第三个失配量除了增益和相位还有第三个量经常被漏掉就是I、Q两路之间的时间偏差行业内叫 IQ skew 或者时延失配。它的危害在于相位误差不是一个常数而是随频率线性增长的。因为相位 2πf·τ同样的时延差在不同频率上造成的相移完全不同。算一个具体的数如果两路PCB走线长度差导致 100 ps 的时延偏差在 200 MHz 处造成的相位误差是 2π × 2×10⁸ × 1×10⁻¹⁰ ≈ 0.126 rad也就是 7.2 度。这个数字已经很致命了单这一项就能把镜像抑制压到25dB左右。而在 20 MHz 处同样的时延只造成0.72度的误差。这解释了一个非常典型的现场现象窄带测试时镜像抑制很好一展宽带宽频谱两端的镜像就翘起来了中间还是干净的。很多人以为是滤波器的问题其实是IQ skew在作怪。处理办法有两种。一是物理上保证等长走线DAC到调制器的两路走线要做严格的长度匹配差分对内和差分对间都要匹配二是在数字域做分数延迟补偿用一个小型的分数延迟滤波器Farrow结构或者简单的多相插值在Q路上加一个可调的延迟量。后者的好处是可以随温度自适应代价是要多消耗一点逻辑资源。提示判断是不是skew问题有一个很省事的办法——观察镜像抑制随频率的变化趋势。如果镜像抑制在频带中心最好、两端对称变差几乎可以确定是时延失配如果是整个频带内均匀地差那更可能是增益或固定相位失配。2.4 重构滤波器和DAC的隐藏贡献很多人调IQ链路时只盯着调制器却忘了DAC后面的重构滤波器也是链路的一部分。这里的坑在于如果I、Q两路用了两颗独立的滤波器芯片哪怕型号相同批次间的群时延和通带波动也会有差异这种差异会直接转化成随频率变化的幅度和相位失配而且它跟调制器的失配叠加在一起很难区分来源。更隐蔽的一种情况是DAC本身的输出保持特性。DAC的零阶保持会在频域产生 sinc 滚降如果两片DAC的采样时钟相位有偏差或者其中一路的建立时间不同同样会在高频端引入额外的失配。实操上的建议是如果条件允许尽量选双通道集成DAC两路在同一个die上匹配度天然好一个数量级如果必须用分立方案至少保证两片DAC共用同一个时钟源和同一个参考电压并且在PCB上把两路的模拟走线做成镜像对称的布局而不是各自就近布线。3. 数字域的IQ那些看起来对、实际上错的地方3.1 NCO频率字的计算与一个常见的精度陷阱数字上变频的核心是一个数控振荡器结构通常是相位累加器加查找表。频率字的计算式很简单FTW round( f_out × 2^N / f_clk )其中 N 是相位累加器位宽f_clk 是采样时钟。举个具体例子32位累加器、100 MHz采样时钟、想产生10 MHz输出则 FTW 10⁷ × 2³² / 10⁸ 429496729.6取整后是 429496730。这里藏着一个新手常踩的坑取整带来的频率误差。上面这个例子里小数部分0.6对应的频率偏差只有约 1.4×10⁻⁵ Hz完全可以忽略。但如果你的目标频率和时钟频率之比恰好是一个分母很大的分数比如某些非整数倍的符号率取整误差可能累积到Hz甚至几十Hz量级。在窄带系统里这个偏差可能导致收发两端载波不同步表现为星座图缓慢旋转。解决办法有两种一是加大累加器位宽每增加一位频率分辨率翻倍二是用双模分频或者分数分频的思路在累加器里保留小数部分做抖动。对于绝大多数应用48位累加器已经足够把误差压到10⁻⁶ Hz量级代价只是多几个触发器。import math def calc_ftw(f_out, f_clk, acc_bits32): ftw round(f_out * (1 acc_bits) / f_clk) f_actual ftw * f_clk / (1 acc_bits) err f_actual - f_out return ftw, f_actual, err ftw, fa, e calc_ftw(10e6, 100e6, 32) print(fFTW {ftw} (0x{ftw:08X}), 实际输出 {fa/1e6:.9f} MHz, 误差 {e:.6f} Hz)这段代码可以直接抄去用注意 acc_bits 要和你的硬件实现保持一致否则算出来的频率字填进去会对不上。3.2 下变频之后频谱是复数的别拿实信号的直觉去套接收方向的坑比发射方向更多因为多了一步“共轭”的判断。数字下变频的过程是ADC采到的实信号乘上 e^{-jω_c n}然后低通得到复基带。此时频谱已经被搬到了零频附近但它是单边的——正频率分量和负频率分量不再对称这正是复数信号的特征。问题就出在这里如果NCO用的是 e^{jω_c n} 而不是 e^{-jω_c n}或者你在代码里对某一路取了反结果就是整个频谱被镜像翻转。表现是什么呢星座图的旋转方向反了或者是QAM符号的I、Q顺序颠倒了或者更隐蔽——单载波解调看起来一切正常但OFDM的频谱是倒过来的。判断方法很简单在基带注入一个已知的单音比如 1 MHz看它出现在频谱的哪个位置。如果出现在 1 MHz说明下变频方向正确如果跑到了 −1 MHz那就是共轭搞反了。这一步几乎是所有软件无线电入门者的必经之路我很建议在第一次跑通链路时就把这个测试固化成脚本每次改完代码都跑一遍比对着星座图猜要快得多。import numpy as np # 模拟下变频采样率 100 MHz本振 20 MHz输入单音在 21 MHz fs, flo, f_sig, N 100e6, 20e6, 21e6, 10000 n np.arange(N) x np.cos(2*np.pi*f_sig*n/fs) # 正确的下变频方向 lo np.exp(-1j*2*np.pi*flo*n/fs) baseband x * lo # 取平均频率位置 freq np.fft.fftfreq(N, 1/fs) spec np.abs(np.fft.fft(baseband)) peak freq[np.argmax(spec)] print(f下变频后单音落在 {peak/1e6:.3f} MHz) # 应输出 1.000 MHz把 lo 的负号去掉再跑一次你会看到峰值跑到 −1 MHz这就是共轭错误的直观样子。3.3 采样率、中频和带宽之间的三角制约低中频架构下中频频率的选择不是随便定的它同时受三个条件约束第一采样率必须满足奈奎斯特条件即 f_s 2(f_IF B/2)其中 B 是信号带宽这是为了避免混叠。第二中频不能太低否则镜像会落进信号带内一般要求 f_IF B。第三中频也不能太高否则对ADC的模拟输入带宽和采样率要求都会飙升。举个具体设计信号带宽20 MHz中频选70 MHz则最低采样率需要 2×(7010) 160 MHz。实际选型时通常留20%余量取 200 MHz 采样。此时ADC输出的频谱上20 MHz带宽的信号占据 60~80 MHz 的位置数字下变频把这个块搬到零频再用一个截止频率12 MHz的低通滤波器滤掉带外。参数取值约束来源信号带宽 B20 MHz系统需求中频 f_IF70 MHz需大于 B且镜像距离足够最低采样率160 MHz2×(f_IF B/2)实际采样率200 MHz留 25% 余量数字低通截止12 MHz略大于 B/2留过渡带这里有一个经常被忽略的细节数字低通滤波器的过渡带宽度决定了它需要多少阶。如果采样率200 MHz、通带10 MHz、阻带从15 MHz开始过渡带只有5 MHz归一化后是 5/200 0.025这个归一化过渡带很窄需要的阶数会明显上升。降低采样率或者提高中频都可以放宽这个要求但两者又互相制约需要一起权衡。3.4 宽带失配必须用频域校准一个复数系数救不了前面讲的增益和相位校准如果只用一个常数去修本质上假设失配在整个频带内是平的。这个假设在窄带几MHz内勉强成立带宽一旦上到几十上百MHz就彻底失效了——因为IQ skew和滤波器群时延波动会让失配量随频率变化。这时候正确的做法是把失配建模成一个频域上的传递函数比。具体来说在若干个频点上分别注入单音测量每个频点上Q路相对I路的幅度比和相位差得到一组 (ε(f), φ(f)) 数据然后设计一个复数FIR滤波器去拟合这个频率响应。工程上常用的是把校正滤波器放在I路或者Q路的基带末端用一个十几到几十阶的复数FIR把残余镜像压到60dB以下。校准流程大致是这样先在频带内均匀选16到32个频点每个频点注入一个单音用接收端的FFT测量镜像分量与主分量的比值反推出该频点的失配量然后用最小二乘拟合出校正滤波器的系数最后把系数烧进FPGA或者DSP再复测一遍所有频点确认收敛。import numpy as np def estimate_imbalance(freqs, irr_db): 由各频点的镜像抑制比反推幅度失配 epsilon 和相位失配 phi(rad) eps, phi [], [] for f, irr in zip(freqs, irr_db): # IRR -20log10(sqrt((eps/2)^2 (phi/2)^2))这里做等分假设 mag 10 ** (-irr / 20.0) eps.append(mag) # 保守估计全部归因于幅度 phi.append(mag) # 保守估计全部归因于相位 return np.array(eps), np.array(phi) freqs np.array([5e6, 10e6, 20e6, 40e6]) # 单位 Hz irr np.array([52.0, 48.0, 43.0, 38.0]) # 镜像抑制随频率下降 eps, phi estimate_imbalance(freqs, irr) for f, e, p in zip(freqs, eps, phi): print(f{f/1e6:5.1f} MHz 幅度失配估计 {e*100:.3f}% 相位失配估计 {np.degrees(p):.2f} deg)注意这段代码里的估计是保守的、把误差全部归到单一来源真实的分离需要分别测量幅度和相位这里只用于快速判断失配随频率的增长趋势是否符合skew特征。4. 用一台频谱仪把问题揪出来4.1 单音测试最简单也最容易做错的一步调试IQ链路的第一个动作几乎永远是打单音。原因是单音的频谱最干净镜像的位置和幅度一目了然。但这一步做错的人特别多主要错在三个地方。第一个错是忘了加窗或者没加对窗。如果直接用矩形窗看频谱泄漏会把你本来想看的弱镜像糊掉。看镜像时应该用Blackman-Harris这类旁瓣低的窗代价是主瓣变宽但镜像测量本来就只需要看幅度不需要看频率精度。第二个错是没有关掉基带端的其它处理模块。有些链路的数字部分默认开着削峰、预失真或者数字增益这些模块都会改变信号幅度导致测出来的镜像比失真。打单音之前一定要把整条链路的“除了上变频之外的所有模块”都旁路掉。第三个错更隐蔽单音的幅度设得太高DAC已经进入非线性区。这时候产生的谐波会落在镜像附近测出来的“镜像”其实是三次谐波的产物。判断方法很简单把单音功率降6dB再测一次如果那个分量下降超过6dB就不是线性镜像而是非线性产物。4.2 从频谱上读出镜像抑制并且算准它测得镜像幅度之后IRR的计算看起来只是两个数相减但实际有几个细节需要注意。首先镜像和主信号的幅度应该在同一个分辨率带宽下比较如果扫描时RBW设置不当两个峰的测量条件不一致结果是不可信的。正确做法是把RBW设到足够窄比如1kHz以下让两个峰都完全被分辨出来然后用峰值搜索读值。其次要区分“镜像抑制比”和“边带抑制比”。这两个概念在不同场景下混用得很厉害。镜像抑制比通常指在零中频或者低中频架构下由于IQ失配产生的那个对称分量的抑制程度边带抑制比通常指单边带调制时不想要的那个边带被压到多低。数学上它们是同一个量但测量方法略有差别前者关注的是相对载频对称的那个点后者关注的是相对信号偏移固定间隔的点。指标定义典型目标镜像抑制比镜像分量相对主信号的抑制 45 dB未校准边带抑制比不需要的边带相对需要边带的抑制 55 dB校准后载波泄漏中心谱线相对信号峰值 −35 dBcEVM误差矢量幅度视调制阶数而定4.3 星座图和EVM告诉你频谱看不出的东西频谱仪只能看到功率分布看不到调制质量。要判断IQ失配对解调的实际影响得看星座图和EVM。不同失配在星座图上的“指纹”是不一样的这是排查时最有用的一张对照表星座图表现对应问题整团点被拉成平行四边形固定相位失配正交度不够点云沿某个象限方向拉伸I/Q增益不平衡整体偏移出中心不落原点直流失调外围点比内侧点扩散更严重幅度压缩非线性点云随符号率缓慢旋转载波频偏频带边缘的符号误差明显更大频率相关失配skewEVM和镜像抑制之间有一个粗略的经验换算如果失配主要来自镜像那么 EVM(%) ≈ 100 × 10^(−IRR/20)。也就是说40dB的镜像抑制大约对应1%的EVM这个量级对64QAM要求EVM优于1%左右刚好卡在临界线上对256QAM就完全不够了。这也是为什么高阶调制必须做IQ校准不做根本跑不起来。提示测EVM时一定要先确认接收端的同步是好的。频偏没锁住、定时没对齐的情况下EVM读数会虚高好几倍你会误以为是IQ失配严重然后对着调制器一顿乱调。先看星座图是不是稳定不转再谈EVM的绝对值。4.4 一套可复现的排查顺序调了很多次之后我总结出一个比较省时间的顺序这里直接给出来第一步基带置零测中心谱线做直流补偿。这一步必须在打单音之前做否则本振泄漏会污染后续所有测量。第二步打低频单音比如1MHz测镜像。低频处skew影响最小此时测到的镜像基本反映纯增益和固定相位失配。如果这一步就差先修增益和相位。第三步扫频。在频带内选5到9个点逐点测镜像画出镜像抑制随频率的曲线。如果是平的说明只有固定失配如果是两端翘说明有skew或滤波器失配。第四步根据第三步的曲线决定要不要上频域校准滤波器。如果全带内都能做到45dB以上且你的调制阶数不高可以就此收手如果要跑高阶QAM继续做。第五步切换到真实调制信号看EVM和星座图确认前面几步的补偿在实际信号下没有引入新的问题比如补偿滤波器本身的量化噪声。这个顺序的核心思想是“从简到繁每步只引入一个变量”。反过来的做法——直接上真实信号然后对着EVM盲调——效率会低很多因为你无法区分误差来源。5. 不同场景下IQ玩法的差异5.1 高阶QAM对失配的容忍度是断崖式下降的同样是1%的EVM对QPSK来说几乎无感对1024QAM来说就是灾难。原因在于星座点之间的最小距离随阶数升高而急剧缩小。粗略地看M阶QAM的归一化最小距离正比于 1/√M也就是说从64QAM到256QAM距离缩小一半同样大小的误差矢量占最小距离的比例翻倍。这带来一个很实际的工程结论如果你的系统要支持多种调制阶数IQ校准的精度应该按最高阶来设计而不是按常用阶数。因为低阶模式下的裕量很大多花的那点校准开销完全值得。另外高阶QAM对相位噪声的要求也会同步提高这时候之前提到的“相位噪声是共模的”这个结论要打个补丁共模相位噪声虽然不产生镜像但它会让整个星座旋转而高阶QAM的判决边界很近旋转一点点就足以让边缘点越界。所以相位噪声和IQ失配是两个独立的约束不能互相抵消。5.2 OFDM的峰均比会把IQ链路的非线性放大OFDM信号的峰均比通常在10dB以上意味着功放和调制器必须留出足够的余量。在IQ链路里这个余量问题会以两种方式表现出来。第一种是DAC的削顶。如果I、Q两路的数字幅度没有做联合缩放某一个瞬间I路接近满量程而Q路很小那么合成后的矢量幅度其实还没到最大但I路已经削顶了。正确的做法是把I、Q作为一个复数矢量来做整体缩放和削峰而不是分别对两路做限幅——分别限幅会直接破坏相位关系产生带外辐射。第二种是调制器本身的压缩。集成IQ调制器的线性区通常比功放还窄输入功率稍高就会产生三阶交调产物落在邻近信道里。这时候测ACLR会发现指标明显恶化但EVM可能还没崩。判断方法是做功率扫描把基带幅度从低往高扫画出ACLR随输出功率的曲线找到拐点工作点要留在这个拐点以下至少3dB。5.3 雷达和音频这两个“非典型”场景反而把IQ用到了极致雷达是IQ调制最纯粹的应用之一因为它必须用复数。单通道实采样只能测出目标距离无法区分目标是靠近还是远离——多普勒频移的正负在实信号的频谱上是共轭对称的分不出来。用了IQ双通道之后复频谱不再对称速度方向立刻就能判断。这也是为什么几乎所有现代雷达前端都是IQ双通道下变频。在雷达里IQ失配的危害方式和通信不太一样它会让动目标检测出现“假目标”一个正在靠近的目标可能在对称的速度上产生一个鬼影。所以雷达系统对镜像抑制的要求往往比通信更严通常在55dB以上而且要求在整个瞬时带宽内都保持。音频领域的单边带是另一个极端。业余无线电和某些专业音频设备里用Hilbert变换产生90度相移的Q路再做单边带调制可以把语音带宽压缩一半。这里的难点不在射频而在Hilbert变换器本身——它要在整个音频带300Hz到3kHz跨度约3.3个倍频程内保持接近90度的相移用IIR做相位误差会很大通常得用FIR而且阶数不低。数字域做这件事比模拟域容易太多因为模拟的全通移相网络对元件精度极其敏感温度一变相位就飘。5.4 校准值要不要在线更新这是个成本问题最后一个绕不开的工程决策IQ校准是在产线做一次就固定下来还是运行中动态更新产线一次性校准的优点是简单不需要额外的监测通路缺点是温漂和老化会让校准值逐渐失效。对于工作在恒温环境、寿命要求不高的设备这是合理选择。但如果设备要在−40℃到85℃范围内工作或者本振要跳频静态校准几乎肯定不够。动态更新的做法是在发射链路里耦合一小部分输出送回接收通道做监测实时估计残余镜像并更新补偿系数。代价是要多一路耦合器和监测接收机成本上升明显。中间的折中方案是按温度分档存储多组校准系数用一个温度传感器做索引这样既不用实时监测又能覆盖主要的工作区间。绝大多数产品最后都选了这个折中方案因为它的性价比最高。需要提醒的是无论哪种方案校准系数的存储和加载路径本身也要被测到。我见过不止一次这样的情况校准算法本身没问题但系数在写入flash时字节序搞反了加载之后反而比不校准更差。所以每次改完校准流程务必用单音复测一遍别只看最终的EVM。最后分享一个我个人觉得最省事的习惯把“基带置零看中心峰、打单音看镜像、扫频看趋势”这三步写成一个自动化脚本每次改完代码或者换完硬件就无脑跑一遍把三条曲线存下来对比。IQ链路的问题绝大多数都能被这三张图暴露出来而且历史曲线放在一起看能立刻分辨出是“一直就差”还是“最近变差了”。这比凭记忆判断可靠得多尤其是在多人协作、硬件反复迭代的项目里。