想象你坐在音乐厅里,钢琴家同时按下三个键。传到你耳朵里的,只是一条随时间起伏的气压曲线——一个混在一起的“时域信号”。但你的耳朵和大脑却能毫不费力地把它拆解成三个音符:低音do、中音mi、高音sol。
这就是人类与生俱来的频谱分析能力:从“随时间变化的波形”中听出“由哪些频率成分组成”。
傅里叶变换就是把这种“听音辨调”的能力数学化:时域和频域是同一份数据的两种看法,傅里叶变换是两者之间自由往返的桥梁。
现在把场景搬进手机。5G下行链路上,基站把成百上千个子载波“叠”在一起发给你——空中的电波就是一条复杂的“和弦”。你的手机基带芯片要做的第一件大事,就是充当那只“数字耳朵”:把采样到的时域波形拆回一张张子载波。承担这项工作的算法,就是快速傅里叶变换(FFT);而在发射端,把频域子载波“合成”为时域波形的,是它的孪生兄弟——逆快速傅里叶变换(IFFT)。
IEEE期刊《Computing in Science & Engineering》在2000年评选“20世纪十大算法”时,FFT赫然在列;数学家Gilbert Strang在1994年更是称它为“我们这个时代最重要的数值算法”。一部4G/5G基带芯片,每一毫秒都要做几十次甚至上百次几千点的FFT/IFFT——说它是数字通信的数学心脏,毫不夸张。
先看离散傅里叶变换(DFT)的定义。给你N个时域采样点 $x_0, x_1, \dots, x_{N-1}$,DFT帮你算出N个频率分量:
$$X_k = \sum_{n=0}^{N-1} x_n \, e^{-j 2\pi kn/N}, \qquad k = 0, 1, \dots, N-1$$
用大白话解读:想知道“第k号频率成分有多少”,就拿N个采样点分别与“该频率的标准旋转参考”做比对(相乘),再把N个结果加起来。频率对上了,加出一个大数;频率对不上,正负抵消趋于零。这就是“拆和弦”的全部数学。
问题出在代价上。N个输出点,每个要做N次复数乘法——直接按定义硬算,需要:
$$\text{直接DFT:} \; N^2 \text{ 次复数乘法}$$
5G里一个常见配置是4096点FFT。$4096^2 \approx 1678$万次复数乘法,而基带要在33微秒(一个OFDM符号的时长)内算完,还得留出时间给均衡、译码……按定义硬算,芯片会直接“累死”。上世纪60年代,这确实是制约信号处理发展的真实瓶颈。
破局者是一篇发表于1965年的论文——Cooley与Tukey的《An algorithm for the machine calculation of complex Fourier series》。这篇论文的核心洞见只有一句话:当N是合数时,一个大DFT可以拆成若干小DFT来算,总工作量急剧下降。
用一个类比来理解。假设有8名棋手要两两比出所有胜负关系(类似直接DFT让每个点与每个点都“配对”),需要打$8 \times 8 = 64$场。但如果你真正想要的只是“排出名次”(相当于求出全部频率分量),淘汰赛制度就够了:8人打淘汰赛只需3轮、每轮4场,总共12场比赛——因为很多配对是冗余的,其结果可以从别的配对结果中复用。
Cooley–Tukey算法正是这样递归地“按奇偶拆半”:一个N点DFT拆成两个N/2点DFT(一个只含偶数下标样本,一个只含奇数下标样本),再逐级合并。对8点DFT:
flowchart TD
A["8点DFT<br/>直接算: 8 x 8 = 64 次复乘"] -->|"按奇偶拆半"| B["两个4点DFT<br/>2 x 16 = 32 次复乘"]
B -->|"继续拆"| C["四个2点DFT<br/>4 x 4 = 16 次复乘"]
C --> D["拆到底: 8个1点DFT<br/>乘法次数 = 0"]
D --> E["反向逐级合并<br/>3级, 每级4个蝶形"]
E --> F["总计 12 次蝶形乘法<br/>vs 直接法的 64 次"]
递归下去,总复杂度从 $N^2$ 降为:
$$\text{FFT:} \; \frac{N}{2}\log_2 N \; \text{次复数乘法} \quad \text{(radix-2,N为2的幂)}$$
两者的差距随N增大而拉大:
| FFT点数 N | 直接DFT乘法 N² | FFT乘法 (N/2)·log₂N | 加速倍数(约) |
|---|---|---|---|
| 64 | 4,096 | 192 | 21× |
| 1024 | 104.9万 | 5,120 | 205× |
| 2048 | 419.4万 | 11,264 | 372× |
| 4096 | 1,677.7万 | 24,576 | 683× |
某百科的FFT词条算过一笔更全面的账(含加法、剔除乘1等平凡运算):对N=4096,直接按定义算约需3000万次运算,而Cooley–Tukey算法只需约7万次——四百多倍的差距。这就是“快速”二字的含金量。
三个有趣的历史注脚(均见于某百科FFT词条及其引文):
Cooley–Tukey算法逐级合并的基本运算单元叫蝶形(butterfly):两个数进出,两个数出,中间夹一次与“旋转因子”(twiddle factor,即 $e^{-j2\pi k/N}$)的复乘。8点FFT需要3级、每级4个蝶形。数据自左向右流过蝶形阵列,就完成了时域到频域的旅程:
flowchart TD
subgraph IN["输入: 位反转排列"]
direction LR
x0["x(0)"]
x4["x(4)"]
x2["x(2)"]
x6["x(6)"]
x1["x(1)"]
x5["x(5)"]
x3["x(3)"]
x7["x(7)"]
end
subgraph S1["第1级: 4个2点蝶形"]
b11(("×"))
b12(("×"))
b13(("×"))
b14(("×"))
end
subgraph S2["第2级: 4个蝶形 + 旋转因子"]
b21(("×"))
b22(("×"))
b23(("×"))
b24(("×"))
end
subgraph S3["第3级: 4个蝶形 + 旋转因子"]
b31(("×"))
b32(("×"))
b33(("×"))
b34(("×"))
end
subgraph OUT["输出: 自然顺序"]
X0["X(0)"]
X1["X(1)"]
X2["X(2)"]
X3["X(3)"]
X4["X(4)"]
X5["X(5)"]
X6["X(6)"]
X7["X(7)"]
end
IN --> S1 --> S2 --> S3 --> OUT
两个工程细节值得工程师记住:
OFDM发射机的思路是反过来的:调度器已经决定了“哪些子载波、各承载哪个QAM星座点”——这相当于在频域把一张频谱图画好了。现在需要把这张“频谱图”变成真正可以发射的时域波形。这正是逆变换的职责:
$$x_n = \frac{1}{N}\sum_{k=0}^{N-1} X_k \, e^{+j2\pi kn/N}$$
IFFT和FFT在数学上几乎是同一个东西,只差指数符号和一个 $1/N$ 因子。存在一个优美的恒等式:
$$x_n = \frac{1}{N}\,\overline{\;\text{DFT}\left(\overline{X_k}\right)\;}$$
即共轭→做FFT→再共轭→除以N,就得到IFFT。所以工程上发射机和接收机往往复用同一套FFT硬件,通过“共轭+定标”开关切换角色——这是基带芯片省门 Areas的经典手法。
一句话总结这条设计哲学:OFDM之所以能被实用化,正是因为“多载波调制”这个原本需要几百个振荡器的模拟难题,被一次IFFT变成了纯数字运算。子载波的正交性不再是物理上“摆”出来的,而是数学上“算”出来的。
这里有一个初学者最容易忽略的深层问题:FFT的频域“乘法定理”说的是圆周卷积对应频域相乘;而真实的多径无线信道做的是线性卷积。两者天然不等价——如果不做任何处理,前一个符号的“拖尾”(多径回声)会污染后一个符号,子载波正交性被破坏,产生符号间干扰(ISI)和载波间干扰(ICI)。
5G的解法优雅至极:在每个符号前复制一段该符号尾部的样本,作为循环前缀(CP),只要CP长度不小于信道最大时延扩展,多径回声就会全部落在CP区间内被丢弃,剩余的“稳态”部分在数学上恰好等效于圆周卷积。于是接收端FFT之后,信道对每个子载波的作用退化为一个复数增益:
$$Y_k = H_k \, X_k \quad\Longrightarrow\quad \hat{X}_k = \frac{Y_k}{H_k}$$
原本需要时域卷积才能完成的均衡,被简化为每个子载波上“一乘一除”的单抽头均衡。这正是OFDM战胜单载波均衡器的根本原因,也是CP存在的全部意义——CP不是为了“抗干扰”这个笼统说法,而是专门为了让FFT的圆周卷积定理在多径信道上依然成立。它的代价是约7%的速率开销(例如15kHz子载波间隔下,CP占4.69微秒,符号总长71.35微秒)。
flowchart TD
TX["发送符号: CP + N点有效数据"] --> CH{"多径信道<br/>最大时延扩展 tau"}
CH -->|"CP长度 >= tau"| OK["回声全部落在CP内<br/>有效段等效圆周卷积"]
CH -->|"CP长度 < tau"| BAD["前符号拖尾入侵<br/>ISI + 子载波ICI"]
OK --> RX["接收端去CP后做FFT"]
RX --> EQ["频域单抽头均衡<br/>Xk = Yk / Hk<br/>一乘一除搞定多径"]
BAD --> ERR["星座发散<br/>EVM恶化 / 吞吐骤降"]
理解了FFT,5G物理层的一堆“神秘常数”会突然变得透明。核心是一个恒等式:
$$f_s = N_{\text{FFT}} \times \Delta f$$
采样率 = FFT点数 × 子载波间隔。因为N点FFT恰好把采样率均分为N份,每份就是一个子载波。用这个恒等式一验,教科书里的数字立刻“活”了:
| 系统 | 典型配置 | FFT点数 | 子载波间隔 | 采样率 |
|---|---|---|---|---|
| LTE 20MHz | 单一参数集 | 2048 | 15 kHz | 2048×15k = 30.72 Msps |
| 5G Sub-6 100MHz | μ=1 | 4096 | 30 kHz | 4096×30k = 122.88 Msps |
| 5G毫米波(按同一恒等式) | μ=3 | 4096 | 120 kHz | 4096×120k = 491.52 Msps |
更妙的是,5G整个时间网格的“原子单位”也直接锚定在4096点FFT上:基本时间单位 $T_c = 0.509$ 纳秒,恰好等于“最大子载波间隔480kHz配4096点FFT时单个采样的时长”($1/(480\,\text{kHz} \times 4096) \approx 0.509\,\text{ns}$)。全网的时间刻度,本质上是“最宽参数集下FFT采样间隔”的整数倍——FFT在这套标准里的地基地位可见一斑。
5G引入可扩展参数集(Numerology)后,FFT/IFFT框架不变,只换“点数×子载波间隔”的组合(据ShareTechnote整理的NR帧结构参数):
| 参数集 μ | 子载波间隔 | 有效符号时长 | CP时长 | 符号+CP | 每子帧slot数 | slot时长 |
|---|---|---|---|---|---|---|
| 0(同LTE) | 15 kHz | 66.67 μs | 4.69 μs | 71.35 μs | 1 | 1 ms |
| 1 | 30 kHz | 33.33 μs | 2.34 μs | 35.68 μs | 2 | 0.5 ms |
| 2 | 60 kHz | 16.67 μs | 1.17 μs | 17.84 μs | 4 | 0.25 ms |
| 3 | 120 kHz | 8.33 μs | 0.57 μs | 8.92 μs | 8 | 0.125 ms |
| 4(仅同步用) | 240 kHz | 4.17 μs | 0.29 μs | 4.46 μs | 16 | 62.5 μs |
这张表背后是两组“为什么”:
把整条链路串起来,一只手机的下行“数学心脏”全貌如下:
flowchart TD
B["比特流"] --> MOD["编码 + QAM调制<br/>得到频域星座点"]
MOD --> MAP["资源映射<br/>分配到各子载波"]
MAP --> IFFT["N点IFFT<br/>频谱图 → 时域波形"]
IFFT --> ADDCP["加循环前缀<br/>复制符号尾部"]
ADDCP --> RF["DAC + 射频上变频"]
RF ==空口多径信道==> RRF["射频下变频 + ADC"]
RRF --> RMCP["去CP: 丢弃前段"]
RMCP --> RFFT["N点FFT<br/>数字耳朵: 波形 → 子载波"]
RFFT --> CHEQ["信道估计 + 单抽头均衡<br/>Xk = Yk/Hk"]
CHEQ --> DEMOD["解调 + 译码"]
DEMOD --> RB["还原比特"]
FFT原理不是纸面知识,它是日常调测的“透视镜”。几个高频场景:
一个常见的认知误区也顺带纠正:FFT和IFFT不是两个“模块”,而是同一枚硬币的两面。理解了“共轭+定标即可互换”这一恒等式,你就明白为什么基带芯片里FFT硬件可以收发共用、为什么实验室里用一块FPGA就能既当“迷你基站”又当“终端”。
回到开头那只“数字耳朵”。从1805年高斯的手稿,到1965年为监测核试验而生的论文,再到今天每部5G手机每毫秒数十次的常规操作——FFT的故事告诉我们:通信标准里最深刻的设计,往往是最优雅的数学在工程上的投影。IFFT让“几百个子载波”从模拟难题变成一次数字运算;循环前缀让FFT的圆周卷积定理在多径信道上依然成立;可扩展参数集让同一套FFT框架同时服务浅覆盖广度和相位噪声恶劣的毫米波。看懂了这条主线,5G物理层的大半参数表都会从“要背的数字”变成“必然的推论”。
Q: FFT和DFT到底是什么关系? A: DFT是数学变换的定义(一个N×N矩阵乘法),FFT是计算这个变换的高效算法家族(Cooley–Tukey是其中最著名的一种)。两者结果完全相同,但FFT把运算量从 $N^2$ 降到 $N\log N$。打个比方:DFT是“要去的目的地”,FFT是“通往那里的高速公路”。
Q: 为什么发射端用IFFT、接收端用FFT,而不是反过来? A: 因为信息原始形态是“每个子载波上一个QAM点”,天然是频域数据;发射需要“频域→时域”,即逆变换。但由于IFFT可以用“共轭→FFT→共轭→除N”实现,两者在工程上可互换,硬件常常复用。约定俗成用IFFT,只是让“赋值子载波”这个动作在数学书写上更直观。
Q: FFT点数为什么总大于实际占用的子载波数? A: 剩下的是“保护带”和过采样。例如100MHz信道、30kHz子载波间隔时4096点FFT最多可容纳4096个子载波,实际只占用中央约3276个(273个资源块),两侧留白抑制带外泄漏、给滤波器滚降留余量。点数取2的幂是为了radix-2蝶形结构最规整。
Q: 循环前缀填零不行吗,为什么要复制符号尾部? A: 填零破坏了信号的周期性,多径卷积后就不是圆周卷积,FFT后的频域单抽头均衡公式不再成立。复制尾部恰好让有限长信号“首尾相接”等效于周期延拓,多径回声落入CP段被丢弃后,剩余部分在数学上严格等于圆周卷积——这是“复制”而非“填零”的根本原因。
Q: 子载波间隔越宽越好吗? A: 不是,这是一组三角权衡。宽间隔抗相位噪声和多普勒、slot更短利于低时延,但CP相对开销上升、抗长时延扩展能力变差(CP时长从4.69μs缩到0.57μs);窄间隔则相反,适合低频大覆盖。5G用可扩展参数集让运营商按频段和业务各取所需,而不是“一种尺寸走天下”。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
