OFDM系统对子载波正交性的要求可以用一句话来概括只要频偏存在子载波之间的正交性就会被破坏。我这两年调试接收机的过程中在子载波映射这块踩过不少坑也积累了一些实际经验从最初误码动不动到1e-1到现在能把误码稳在1e-6以下中间的区别往往就在子载波映射的处理细节上。这篇文章就结合我自己调试的经历聊一下子载波映射对抗频偏的完整思路以及误码率优化的实际做法。1. 方案选型为什么子载波映射直接影响抗频偏能力很多朋友一开始不理解子载波映射不就是把数据放到对应的子载波位置上吗怎么就和频偏扯上关系了这要从OFDM系统最底层的原理说起。1.1 频偏对OFDM的破坏机制OFDM系统把整个宽带信道划分成若干个窄带子信道每个子信道对应一个子载波。子载波之间之所以能互不干扰是因为它们在频域上保持了严格的正交性。当接收端的本地振荡器频率和发送端不一致时信号频谱会发生整体搬移。频偏小时搬移量小于子载波间隔的一半子载波之间的正交性虽然被破坏但程度不严重频偏一旦超过子载波间隔的一半信号就会直接偏到相邻子载波的频带里这时不管你怎么处理都会出现严重的载波间干扰ICI。这里有一个直观的比喻子载波之间的正交性就像一排宽度固定的车位每辆车老老实实停在各自车位上。频偏就好比整条路发生位移如果位移量小于车位宽度的一半车还能勉强对上如果位移超过半个车位宽度再停车就压线了必然刮蹭。1.2 子载波映射方案对频偏敏感度的差异子载波映射主要有三种方式集中式映射、分布式映射和交错式映射。看起来只是数据放置位置的差别实际上对频偏的敏感度差别非常明显。集中式映射Localized Mapping把数据连续地放在一段频谱上占用的带宽集中。这种方式频谱效率高接收端的信道估计也比较简单但问题是对频偏特别敏感因为所有子载波都挤在一起一旦出现频偏互相之间的干扰会非常集中且严重。分布式映射Distributed Mapping把数据分散放到整个带宽的各个位置中间间隔着空子载波。由于数据子载波之间被空子载波隔开频偏导致的ICI主要作用在那些空子载波上对数据子载波的污染会明显降低。代价是频谱利用率下降调度也不够灵活。交错式映射Interleaved Mapping可以看成分布式映射的一种特殊形式数据子载波等间隔地分布在频谱上相邻数据子载波之间隔着固定数量的空子载波。这种方式在抗频偏方面表现更好因为数据子载波之间的距离拉大了频偏引起的干扰不会直接落在相邻数据子载波上。我在一个实际项目中做过对比实验同样的信道环境和频偏条件下集中式映射的误码率在频偏超过子载波间隔的4%时就明显恶化而交错式映射在频偏达到8%时仍能保持较好的性能。这个差距在宽带通信系统中是非常显著的。1.3 导频子载波与数据子载波的映射协同子载波映射不仅决定了数据放到哪里还决定了导频放到哪里。导频子载波的作用是估计信道响应和纠正残余频偏它的位置分布直接影响频偏估计的精度。如果在子载波映射时把导频放在和数据子载波相距很远的位置那么导频估计出来的信道响应就不能准确反映数据子载波处的信道状态因为无线信道是频率选择性的不同频段的衰减和相位偏移并不一致。我个人的做法是在满足导频设计准则的前提下尽量让导频子载波均匀分布在数据子载波之间。这样既能保证频偏估计有足够的观测量又能保证信道估计对不同频段的覆盖足够均衡。在一组突发传输系统中我通过重新设计导频映射位置把频偏估计的均方误差降低了约3dB误码性能也随之改善。2. 核心模块拆解接收端频偏估计与补偿链路子载波映射只是整个抗频偏方案中的一个环节接收端的频偏处理链路才是决定最终误码率的关键。一个完整的接收端频偏处理流程通常是这样的。2.1 整数倍频偏估计与补偿频偏可以拆成两部分整数倍频偏和小数倍频偏。整数倍频偏是指频偏大小是子载波间隔的整数倍它会导致整个调制星座在频域上发生子载波级别的偏移。如果不做纠正解映射出来的数据就会整体错位误码率直接变成接近0.5。整数倍频偏的估计通常利用导频子载波的相对位置关系。我常用的方法是在频域对接收信号和本地参考导频做相关运算遍历所有可能的整数倍频偏候选值找出相关峰最大的那个位置就是估计出来的整数倍频偏。这个方法的计算量不大工程实现很方便。一个容易忽略的细节是整数倍频偏补偿必须在FFT之后、解映射之前进行。因为子载波映射是在频域定义的只有在频域才能把偏掉的子载波索引纠正回来。2.2 小数倍频偏估计与补偿小数倍频偏是指频偏大小不足一个子载波间隔它是破坏子载波正交性的主要来源。小数倍频偏的估计通常在时域完成利用循环前缀CP和数据段的复相关来估计相位旋转速率从而得到频偏值。这里有个关键参数要考虑CP的长度。CP越长时域相关估计的精度越高但频谱效率越低。我做过一个工程权衡在CP长度为子载波间隔倒数1/4的情况下小数倍频偏估计的归一化均方误差大概在2e-3量级基本可以满足QPSK和16QAM的频偏补偿需求。如果调制阶数升到64QAM或256QAM对残余频偏的要求会更苛刻CP需要相应加长或者需要引入额外的频偏跟踪环路。2.3 残余频偏跟踪与相位校正经过整数倍和小数倍频偏补偿之后系统里还会存在残余频偏。这些残余频偏的来源有两个一是估计误差本身带来的残差二是收发两端时钟的长期漂移导致的缓慢频率变化。残余频偏体现在时域上就是每个OFDM符号上的公共相位误差。这个误差可以通过导频子载波来估计和消除。我在接收机里构建了一个基于导频的相位跟踪环路对每个OFDM符号都做一次相位校正把公共相位误差的影响降到最低。实际调试中我发现相位跟踪环路的时间常数需要仔细调。时间常数太大会导致跟踪速度跟不上频偏的快变时间常数太小又会引入额外的高频噪声。针对典型移动场景我曾经做过一组仿真对比时间常数为10个符号时残余频偏的方差比时间常数为50个符号时高了约60%。这个调参过程没有捷径要在具体系统中反复试。3. 仿真验证分析误码率性能如何随频偏变化前面讲的理论分析还需要通过仿真来验证。我搭建了一个完整的OFDM链路级仿真平台重点对比不同子载波映射方案和不同频偏处理策略下的误码率表现。3.1 不同子载波映射方案的误码率对比仿真参数设置如下系统带宽设为5MHzFFT点数为256子载波间隔为19.5kHz调制方式为QPSK和16QAM信道为典型城市多径衰落信道移动速度为30km/h对应的多普勒频移约为55Hz。首先测试在无频偏情况下的误码率基线。三种映射方案的误码率性能几乎一致这说明子载波映射本身不会引入额外损失。然后分别注入归一化频偏为2%、4%、6%、8%的载波频偏对比三种方案的误码率表现。结果和分析预期一致集中式映射在频偏为2%时误码率就开始恶化4%时误码率已经超过系统可容忍的门限分布式映射在4%频偏时仍能工作但6%时性能明显下降交错式映射在8%频偏时仍然保持了相对可接受的误码率。这个结果说明一个规律子载波之间的频谱距离越远频偏的破坏力就越弱。这是交错式映射抗频偏的物理本质。3.2 频偏补偿前后的误码率对比进一步做了一组补偿算法有效性的对比仿真。在归一化频偏为5%的条件下分别测试以下三种情况不做任何频偏补偿、仅做整数倍频偏补偿、完整做整数倍加小数倍加残余相位跟踪补偿。结果很明显不做补偿时误码率约为3.2e-1基本等于随机猜测只做整数倍频偏补偿误码率下降到2.8e-2说明错位问题解决了但正交性破坏依然严重完整补偿后误码率下降到8.5e-5基本接近无频偏时的基线水平。这说明频偏补偿链路中每一级都有不可替代的作用。缺了任何一级误码率都会存在瓶颈。3.3 调制阶数对频偏敏感度的影响还有一个值得注意的现象调制阶数越高系统对频偏越敏感。在同样的归一化频偏为3%条件下QPSK调制下的误码率约为1.4e-416QAM调制下约为5.6e-364QAM调制下已经超过1e-2。原因在于高阶调制星座点之间的距离更小同样的相位偏移造成的星座点混淆概率更大。这对子载波映射方案提出更高要求如果你准备用64QAM或256QAM那么抗频偏设计不能差不多就行必须把每一步的频偏估计精度做到位否则误码率会非常难看。4. 实际工程中的处理技巧与易错点理论仿真做完了回到实际系统调试。以下这些坑是我自己踩过的也看到同行们反复踩的梳理一下供大家参考。4.1 映射方案不能只调一处有些朋友在优化误码率时只盯着子载波映射这一个模块调发现效果不明显就怀疑方案本身不行。但其实子载波映射的抗频偏效果需要在接收端配合完整的频偏补偿链路才能体现。只改映射方案不改进频偏估计算法或者反之都很难达到理想效果。我自己的经验是子载波映射方案、导频设计、频偏补偿算法这三者要一起优化形成一个铁三角。缺少任何一环整体性能都上不去。特别是在系统方案设计的前期就要把三者放在一起统筹考虑而不是等到联调阶段再发现问题。4.2 导频开销要算清楚导频子载波占用的资源不是免费的。增加导频密度可以提高频偏估计精度但会降低有效数据的传输速率。这个平衡需要根据实际需求来掌握。在仿真中我做过一个计算导频密度从1/8提升到1/4频偏估计的均方误差下降了约2.5dB但有效吞吐率下降了12.5%。对于吞吐率优先的系统这个代价可能不可接受但对于可靠性优先的系统这笔开销是值得的。建议在系统设计阶段对不同导频密度下的误码率性能和吞吐率性能分别建立评估曲线再根据项目需求做折中选择。不要凭感觉定导频密度那样很容易到后期陷入两难境地。4.3 硬件实现时的量化精度问题软件仿真里用的浮点运算到FPGA或者DSP实现时都要换成定点运算这一步带来的性能损失不可忽视。特别是频偏估计模块涉及复数相关运算和反正切函数量化精度不足会直接导致估计精度下降。我实际遇到过一个问题频偏估计中相关累加器的位宽从16bit缩减到12bit后频偏估计的均方误差恶化了约2dB最终导致整机灵敏度下降了1dB以上。后来通过调整定点格式把累加器的整数位增加4bit性能才恢复到可接受水平。这里提醒大家在做硬件实现时务必对频偏估计模块做单独的定点仿真验证确认量化方案对整体误码率没有不可接受的恶化再进入RTL编码阶段。4.4 特殊场景下的频偏变化率还遇到过一个比较特殊的情况用户设备在高动态运动场景下多普勒频移变化率非常快导致频偏在短时间内快速变化。这种情况下前面说的慢速场景下的频偏跟踪策略就不够用了。针对这种场景需要引入重复导频结构的OFDM符号设计以及多符号联合的频偏估计方法。这种方案对快变频偏的跟踪能力明显优于传统的单符号估计方案但在无频偏或慢速场景下的性能会略差。实际系统往往需要做成自适应的先判读频偏变化率再选择对应的估计模式。我在某演示系统中采用这种方式后在归一化频偏变化率为5%每毫秒的场景下接收机灵敏度比固定模式方案提升了约2.3dB。这种自适应策略的代价是控制逻辑变得更复杂但换取到的性能提升是值得的。5. 测试验证流程建议做完整套方案后测试验证是最后一道关也是最容易出问题的环节。5.1 建立完整测试矩阵我建议把测试矩阵按照以下维度展开频偏大小覆盖从0到8%以上、调制方式覆盖从QPSK到64QAM、信道环境覆盖从AWGN到典型多径衰落、移动速度覆盖从低速到高速。每个维度的组合都记录误码率、吞吐率、灵敏度三项指标。这样做的目的有两个一是全面评估方案在不同条件下的鲁棒性二是建立一套回归基线后续任何参数调整都可以用这套矩阵来快速验证性能变化。5.2 预留性能余量在做系统设计时要考虑实际设备之间晶振的偏差。如果你的系统要求支持50ppm的晶振精度在2.4GHz频段这对应的最大频偏可达120kHz。如果子载波间隔只有15kHz这个频偏相当于8个子载波间隔对系统的影响非常大。从一开始就要把晶振精度、子载波间隔、频偏补偿范围这几个参数放一起核算确认接收端的频偏处理能力覆盖最恶劣情况并额外预留20%到30%的性能余量。否则到外场测试时碰到晶振偏差较大的设备误码率会突然劣化排查起来费时费力。5.3 实测数据与仿真数据的对标最后把实测结果和仿真结果做对标两者差距应该控制在合理范围内。理论上讲实测性能会比仿真差一些差距主要来自射频前端非理想特性、时钟抖动、ADC量化噪声等实现损耗。如果实测性能明显差于仿真预期就说明实现环节存在需要优化的地方。比如我经历过一次实测灵敏度比仿真差了超过4dB的情况最终排查发现是接收机自动增益控制AGC的收敛时间设置不合理导致频偏估计模块输入端信号幅度波动过大影响了估计精度。这类问题在纯仿真中是看不出来的只有标对实测和仿真的差距才能暴露。