
1. 为什么我们非得聊OFDM不可搞通信的人聚在一起三句话绕不开OFDM。你手机连的Wi-Fi、看的数字电视、用的4G/5G网络底层全是它在撑着。但很多人对这个概念的理解一直停在“正交频分复用”这六个字上再往下问一句“正交到底怎么个正交法”“循环前缀为什么能抗多径”就卡壳了。我自己刚入行那会儿也是这样。课本上画一堆子载波频谱图看着像梳子一样排列每个子载波的峰值正好落在其他子载波的零点上然后告诉你这叫“正交”。当时我就想这不就是数学上凑巧吗实际系统里载波频率稍微偏一点整个不就乱了后来做项目调板子频谱仪上亲眼看到子载波间隔偏了不到1%误码率直接飙上去才真正理解“正交”这两个字的分量。这篇内容就是把我这些年对OFDM的理解重新捋一遍。从正交子载波到底怎么实现、FFT在里面扮演什么角色、循环前缀为什么能解决多径问题到实际工程中子载波间隔怎么选、频谱泄露怎么处理全部用大白话讲清楚。不管你是刚学通信原理的学生还是做了几年基带但没深究过细节的工程师看完应该都能有收获。2. 正交子载波不是数学巧合是精心设计2.1 正交到底是什么意思先把这个词拆开看。“正交”在数学上的定义是内积为零。两个信号在一个周期内相乘再积分结果等于零就说它们正交。放到OFDM里假设有两个子载波频率分别是f1和f2在一个符号周期T内如果满足(f1 - f2) × T 整数那这两个子载波就是正交的。最直观的理解方式你想象一个周期内两个正弦波一个快一个慢快的那个正好比慢的多跑了整数圈。它们乘在一起正半周和负半周刚好抵消积分出来就是零。OFDM就是精心挑选了一组频率让它们两两之间都满足这个条件。具体来说如果子载波间隔Δf 1/T其中T是OFDM符号的有效时长那么第k个子载波的频率就是k × Δf。任意两个不同子载波之间的频率差是Δf的整数倍乘上T就是整数正交条件自然满足。注意这里的T是有效符号时长不包括循环前缀。循环前缀是后面额外加上的不参与正交性的计算。2.2 频域上看正交是什么样子时域上理解正交是一回事频域上看更直观。每个子载波在频域上是一个sinc函数形状像中间高两边逐渐衰减的波浪。sinc函数的零点位置在1/T、2/T、3/T这些地方。而相邻子载波的峰值正好落在这些零点上。这就是为什么OFDM的频谱看起来像一把梳子——每个子载波的峰值处其他所有子载波的值都是零。接收端在峰值点采样就完全不受其他子载波干扰。这种特性叫“子载波间无干扰”是OFDM最核心的优势之一。但这里有个前提接收端必须精确知道每个子载波的峰值位置。如果频率有偏移采样点偏离了峰值其他子载波的sinc函数在这一点就不是零了干扰就进来了。这就是为什么OFDM对频率同步要求特别高也是实际工程中频偏估计和校正必须做好的原因。2.3 子载波间隔怎么定子载波间隔Δf 1/T这个公式看着简单但实际选的时候要考虑的东西不少。T越大Δf越小频谱效率越高但符号时长变长对时间选择性衰落的抵抗能力就弱。反过来T越小Δf越大抗多普勒频移能力强但频谱效率降低。实际系统中子载波间隔的选择跟应用场景强相关。举几个例子系统子载波间隔典型场景Wi-Fi (802.11a/g/n/ac)312.5 kHz室内低速移动LTE15 kHz广覆盖蜂窝5G NR (FR1)15/30/60 kHz灵活配置5G NR (FR2)60/120 kHz毫米波高速DVB-T1.1~4.4 kHz广播大覆盖从表里能看出来频率越高、移动速度越快子载波间隔就选得越大。5G毫米波频段用120 kHz就是因为高频段多普勒频移大必须用大的子载波间隔来保证子载波间不互相干扰。实操心得做系统设计时子载波间隔不是拍脑袋定的。先看载波频率和最大移动速度算出最大多普勒频移然后保证子载波间隔至少是多普勒频移的10倍以上再结合覆盖需求和频谱效率折中。2.4 为什么不用单载波有人可能会问既然OFDM这么多讲究为什么不用单载波单载波没有子载波间干扰问题峰均比也低实现简单。但单载波在宽带传输时遇到频率选择性衰落就很麻烦——信道在某些频点衰减特别大整个信号就废了。OFDM的思路是把一个宽带信道切成很多窄带子信道。每个子信道带宽很窄窄到可以认为在这个子信道内信道是平坦的。这样每个子载波经历的就是平坦衰落均衡器只需要一个复数乘法就能搞定复杂度大大降低。打个比方单载波就像一条大水管中间有一段被压扁了整条管子的水流都受影响。OFDM就像把大水管分成很多根小细管压扁的那段只影响其中几根小管其他管子照常流水。接收端只需要把受损的那几根管子单独处理就行。3. FFT和IFFTOFDM的发动机3.1 为什么OFDM离不开FFT理论上OFDM可以用一组振荡器来产生每个子载波接收端用一组滤波器来分离。但这样做硬件成本高得离谱一个子载波一套设备几百个子载波就是几百套根本不现实。FFT的出现改变了这一切。FFT是DFT的快速算法能把N点DFT的运算量从O(N²)降到O(N log N)。在OFDM里IFFT在发射端把频域数据变成时域信号FFT在接收端把时域信号变回频域数据。一组FFT就能同时处理所有子载波硬件成本直接降了几个数量级。具体来说发射端把N个QAM符号放到N个频点上做一次N点IFFT出来的就是N个时域采样点。接收端做一次N点FFT就能把这N个符号恢复出来。整个过程只需要一个FFT处理器跟子载波数量无关。3.2 IFFT在发射端做了什么IFFT的数学表达式是x[n] (1/N) × Σ X[k] × e^(j2πkn/N)其中X[k]是第k个子载波上的调制符号x[n]是输出的时域采样点。这个公式本质上就是把每个子载波上的符号调制到对应的频率上然后叠加起来。换个角度理解IFFT把频域上并排排列的N个符号一次性转换成时域上的一个OFDM符号。频域上每个点对应一个子载波时域上每个点对应一个采样时刻。IFFT就像一台“频域到时域的批量转换机”一次操作搞定所有子载波。实际实现时IFFT的点数N通常是2的整数次幂比如64、128、256、1024、2048等。这样做是为了用基2-FFT算法运算效率最高。但有些系统也会用混合基FFT比如N1536这种兼顾灵活性和效率。3.3 FFT在接收端怎么恢复数据接收端收到时域信号后做N点FFTX[k] Σ x[n] × e^(-j2πkn/N)这一步把时域采样点变回频域符号。由于子载波之间正交每个X[k]只包含第k个子载波上的信息其他子载波贡献为零。这就是OFDM接收端解调的核心原理。但实际接收到的信号不是理想的x[n]而是经过了信道卷积、加了噪声、可能有频偏的版本。FFT之后每个子载波上的符号会有一个幅度和相位的变化这个变化就是信道响应。均衡器的作用就是把这个变化除掉恢复出原始符号。注意FFT之后得到的是频域数据每个点对应一个子载波。但子载波的实际物理频率是k×Δf不是FFT的bin频率。这两者的对应关系在系统设计时必须搞清楚否则解调出来的数据全是乱的。3.4 FFT点数怎么选FFT点数N决定了OFDM符号的有效时长T N × Ts其中Ts是采样周期。采样率fs 1/Ts所以T N/fs。子载波间隔Δf 1/T fs/N。选N的时候要考虑几个因素系统带宽N × Δf 占用带宽。带宽定了Δf定了N就定了。采样率fs必须大于等于占用带宽通常取fs N × Δf。运算复杂度N越大FFT运算量越大但频谱效率越高。循环前缀开销CP长度跟N无关但CP开销比例是CP长度/(NCP长度)。N越大CP开销比例越小。举个例子LTE系统带宽20 MHz子载波间隔15 kHz占用带宽18 MHz两边留保护带N 18 MHz / 15 kHz 1200。实际取N 2048其中1200个子载波传数据其他是保护子载波和直流子载波。参数数值说明系统带宽20 MHz总频谱资源占用带宽18 MHz实际使用的带宽子载波间隔15 kHz固定值FFT点数20482的幂次有效子载波数1200传数据的子载波采样率30.72 MHz2048 × 15 kHz实操心得FFT点数选2的幂次是为了用基2算法但实际系统中经常遇到非2的幂次的情况。比如DVB-T用2048、4096、8192都是2的幂次。但有些系统用1536点这时候就得用混合基FFT。混合基FFT实现复杂一些但灵活性更高。4. 循环前缀多径的克星4.1 多径到底带来什么问题无线信号从发射端到接收端往往不止一条路径。直射路径、反射路径、散射路径信号到达接收端的时间不一样。后到的信号就是前面信号的延迟副本叠加在一起就产生了符号间干扰。具体来说如果前一个OFDM符号的延迟副本落到了当前符号的FFT窗口内就会干扰当前符号的解调。延迟越大干扰越严重。更麻烦的是这种干扰不是简单的加性噪声而是跟信号相关的没法用增加发射功率来解决。传统单载波系统用均衡器来对抗多径但宽带信道的均衡器阶数很高复杂度大。OFDM用循环前缀来解决这个问题思路非常巧妙。4.2 循环前缀是怎么工作的循环前缀的做法很简单把OFDM符号末尾的一段复制到符号开头。假设有效符号时长是T复制长度为Tg那么实际发射的符号长度是T Tg。接收端做FFT的时候只取有效符号部分也就是去掉循环前缀之后的部分。如果多径延迟不超过Tg那么前一个符号的延迟副本只会落到当前符号的循环前缀区域不会进入FFT窗口。这样符号间干扰就被消除了。更妙的是循环前缀不仅消除了符号间干扰还把线性卷积变成了循环卷积。线性卷积和循环卷积的区别在于线性卷积的结果长度是NM-1循环卷积的结果长度是N。在频域上循环卷积对应的是乘法而线性卷积对应的是更复杂的运算。循环前缀把信道的影响变成了频域上的简单乘法均衡器只需要一个复数除法就能搞定。用生活化的类比循环前缀就像给每个OFDM符号加了一个“缓冲垫”。多径信号撞到这个缓冲垫上不会撞到下一个符号。接收端把缓冲垫扔掉只取中间干净的部分。4.3 循环前缀长度怎么定CP长度Tg必须大于信道的最大时延扩展。时延扩展是无线信道的一个重要参数跟环境有关环境类型典型时延扩展建议CP长度室内办公50~100 ns0.8 μs城市微蜂窝0.5~1 μs1.6~2.4 μs城市宏蜂窝1~3 μs4.7~16.7 μs山区/农村3~10 μs16.7~33.3 μsLTE的常规CP长度是4.7 μs扩展CP是16.7 μs。5G NR的CP长度跟子载波间隔相关子载波间隔越大CP越短。比如15 kHz对应4.7 μs120 kHz对应0.59 μs。CP长度不是越长越好。CP本身不携带信息是纯开销。CP越长开销越大频谱效率越低。所以要在抗多径能力和频谱效率之间折中。注意CP长度必须大于最大时延扩展但也不能太大。如果CP太长不仅浪费频谱还会增加峰均比对功放要求更高。实际系统中CP长度通常取最大时延扩展的1.5~2倍。4.4 循环前缀的工程实现细节实际实现循环前缀的时候有几个细节要注意第一CP是复制末尾还是复制开头标准做法是复制末尾。因为末尾的数据在时间上最靠近下一个符号复制到开头后接收端去掉CP剩下的部分正好是一个完整的周期。如果复制开头去掉CP后剩下的部分就不是完整周期了正交性会被破坏。第二CP长度可以动态调整吗有些系统支持动态CP根据信道条件调整CP长度。但动态调整需要接收端知道CP长度否则没法正确去CP。实际系统中CP长度通常是半静态配置的通过控制信令通知接收端。第三CP和窗函数的关系。为了减少带外辐射OFDM符号通常会加窗。加窗之后CP区域会被窗函数影响。如果窗函数设计不当CP的抗多径能力会下降。实际系统中窗函数通常只影响CP的一小部分不影响有效符号区域。5. 从理论到实践OFDM系统设计中的关键取舍5.1 峰均比问题怎么破OFDM最大的缺点之一就是峰均比高。因为多个子载波叠加时域信号的幅度可能很高也可能很低。高峰均比对功放的线性度要求很高功放回退大效率低。解决峰均比问题有几种思路限幅直接把超过阈值的信号削掉。简单粗暴但会引入带内失真和带外辐射。压扩对小幅信号放大大幅信号压缩。能降低峰均比但会引入非线性失真。编码用特定的编码方式避免高峰均比的符号组合。能降低峰均比但会降低频谱效率。预留子载波留一些子载波不传数据专门用来降低峰均比。会降低频谱效率。实际系统中通常组合使用多种方法。比如LTE用限幅加滤波5G NR用预留子载波加编码。实操心得峰均比问题在基站侧相对好解决因为基站功放可以做得很大。但在终端侧功放成本敏感峰均比问题就很突出。所以上行链路通常用SC-FDMA单载波频分多址本质上是DFT扩展OFDM峰均比低很多。5.2 频谱泄露怎么处理FFT频谱泄露是另一个常见问题。理论上OFDM符号是周期的但实际信号不可能无限长截断之后频谱就会泄露。泄露会导致子载波间干扰影响解调性能。处理频谱泄露的方法加窗在符号边缘加平滑窗减少截断效应。常用的窗有升余弦窗、汉宁窗等。过采样用比必要更高的采样率减少频谱混叠。保护子载波在频带边缘留保护子载波不传数据吸收泄露。实际系统中加窗是最常用的方法。但加窗会影响CP区域需要仔细设计窗函数和CP长度的关系。5.3 同步问题有多重要OFDM对同步非常敏感。时间同步偏差会导致FFT窗口偏移频率同步偏差会导致子载波间干扰。同步没做好后面所有处理都是白搭。时间同步的目标是找到FFT窗口的起始位置。常用方法是用前导序列做互相关找到相关峰的位置。频率同步的目标是估计并校正载波频偏。常用方法是用前导序列的相位差来估计频偏。实际系统中同步通常分两步粗同步和细同步。粗同步用前导序列精度要求不高但范围要大。细同步用导频信号精度要求高但范围小。注意频偏估计的精度要求跟子载波间隔有关。子载波间隔越小对频偏越敏感。比如子载波间隔15 kHz频偏要求通常在几百Hz以内。子载波间隔120 kHz频偏要求可以放宽到几千Hz。5.4 信道估计和均衡怎么做OFDM接收端需要知道每个子载波上的信道响应才能做均衡。信道估计的方法有导频辅助在特定子载波上发送已知符号接收端根据接收到的导频符号估计信道。盲估计利用信号的统计特性估计信道不需要导频。但复杂度高精度低。半盲估计结合导频和盲估计折中精度和复杂度。实际系统中导频辅助是最常用的方法。导频的图案设计很关键要保证在时域和频域都有足够的密度能跟踪信道的时变和频变。均衡就是把接收到的符号除以信道估计值。如果信道估计准确均衡后的符号就恢复了原始星座点。但信道估计总有误差误差会直接影响解调性能。信道估计方法精度复杂度频谱效率导频辅助高低中盲估计低高高半盲估计中中中高6. 常见问题与排查技巧实录6.1 子载波间干扰怎么排查子载波间干扰是OFDM系统最常见的问题之一。表现是误码率偏高星座图发散。排查思路第一步检查频率同步。频偏是子载波间干扰的主要原因。用频谱仪看接收信号的频谱如果子载波峰值不在预期位置就是频偏问题。校正频偏后干扰应该消失。第二步检查时间同步。时间同步偏差会导致FFT窗口偏移也会引入子载波间干扰。用相关器看相关峰的位置如果偏离预期就是时间同步问题。第三步检查相位噪声。相位噪声会破坏子载波正交性。用相位噪声分析仪看本振的相位噪声指标如果超标需要换本振或加相位噪声校正。第四步检查CP长度。如果CP长度不够多径延迟超过CP也会引入子载波间干扰。用信道探测仪看时延扩展如果超过CP长度需要加长CP。6.2 峰均比过高怎么处理峰均比过高会导致功放饱和信号失真。排查思路第一步看峰均比指标。用峰均比分析仪看信号的CCDF曲线如果峰均比超过功放的回退能力就是峰均比问题。第二步检查子载波配置。如果所有子载波都传数据峰均比会很高。留一些预留子载波峰均比会降低。第三步检查调制方式。高阶调制如64QAM、256QAM的峰均比更高。如果峰均比超标可以降阶调制。第四步检查限幅配置。如果限幅阈值设得太高峰均比降不下来。如果设得太低带外辐射超标。需要折中。6.3 频谱泄露怎么排查频谱泄露表现为带外辐射超标或者相邻子载波干扰。排查思路第一步看频谱模板。用频谱仪看发射信号的频谱如果带外辐射超过模板就是频谱泄露问题。第二步检查窗函数。如果窗函数设计不当频谱泄露会很大。换一个窗函数试试。第三步检查CP长度。CP长度跟窗函数有关系。如果CP太短窗函数会影响有效符号区域导致频谱泄露。第四步检查过采样率。如果过采样率不够频谱混叠会导致频谱泄露。提高过采样率试试。6.4 常见问题速查表问题现象可能原因排查方法解决方案误码率高频偏看频谱峰值位置校正频偏星座图发散相位噪声看相位噪声指标换本振或加校正带外辐射超标频谱泄露看频谱模板加窗或提高过采样率功放饱和峰均比高看CCDF曲线限幅或降阶调制符号间干扰CP不足看时延扩展加长CP解调失败时间同步偏差看相关峰位置重新同步实操心得排查OFDM问题顺序很重要。先看同步再看信道估计最后看峰均比和频谱泄露。同步没做好后面所有排查都是白费功夫。我见过太多人一上来就调均衡器结果发现是同步偏了白折腾半天。7. 一些容易被忽略的细节7.1 直流子载波为什么不传数据OFDM频谱中间的那个子载波k0通常不传数据叫直流子载波。原因是接收端做FFT之前通常会有直流偏移校正。如果直流子载波传了数据直流偏移校正会把数据也一起校正掉。所以干脆不传数据留空。7.2 保护子载波的作用频谱两端的子载波通常也不传数据叫保护子载波。作用是防止带外辐射干扰相邻频段。保护子载波的宽度取决于滤波器的滚降特性。滤波器滚降越陡保护子载波可以越窄。7.3 导频密度怎么定导频密度取决于信道的时变和频变特性。时变越快时域导频越密。频变越快频域导频越密。实际系统中导频密度通常取信道相干时间和相干带宽的倒数再乘一个系数。7.4 采样率偏差的影响采样率偏差会导致子载波间隔偏差进而导致子载波间干扰。采样率偏差通常由晶振精度决定。晶振精度越高采样率偏差越小。实际系统中晶振精度通常在ppm级别对应的采样率偏差很小但累积起来也会影响解调性能。7.5 循环前缀和窗函数的关系循环前缀和窗函数是配合使用的。窗函数在符号边缘平滑过渡循环前缀提供过渡区域。如果窗函数太长会侵入有效符号区域破坏正交性。如果窗函数太短带外辐射降不下来。实际系统中窗函数的过渡区域通常只占CP的一小部分。8. 写在最后OFDM这套东西理论看着复杂但核心思想就几条用正交子载波把宽带变窄带用FFT/IFFT降低实现复杂度用循环前缀对抗多径。把这三条吃透了剩下的都是工程细节。我自己的经验是学OFDM最好的方法不是死磕公式而是动手仿真。用MATLAB或者Python搭一个简单的OFDM链路发射端做IFFT加CP接收端去CP做FFT加均衡然后加多径和噪声看误码率曲线。仿真跑通了理论自然就懂了。仿真的时候可以试试这几个实验改变CP长度看误码率变化改变子载波间隔看频偏敏感度改变调制阶数看峰均比变化。这几个实验做下来对OFDM的理解会比看十篇论文都深。最后说一个我踩过的坑刚开始做OFDM仿真的时候总是忘记加保护子载波结果频谱泄露严重误码率一直下不来。后来加了保护子载波问题就解决了。保护子载波看着不起眼但实际系统中必不可少。