<!-- title: 算得快修得对：通信两大内功 -->

# 算得快修得对：通信两大内功

> 说明：本轮网络抓取工具均不可用（搜索与抓取接口均被拒绝或配额耗尽），本文基于编码理论与数字信号处理的教科书共识写作；复杂度数字均为可直接验算的数学结果，参考来源为公认稳定的权威词条与原始论文出处。

一套无线通信系统，剥掉所有营销词汇，本质上只干两件事：**把信息“算”成适合飞行的波形发出去**，以及**把收到的波形“修”回正确的信息**。前者靠信号变换，后者靠信道编码。5G之所以能跑出今天这样的性能，靠的正是两件看似毫不相干的发明：一个来自1965年的快速算法（FFT），一个来自2009年的编码理论突破（Polar码），再配上一位沉睡三十年才被唤醒的老将（LDPC码）。

这篇文章把这两大内功拆开讲透：它们各自的原理是什么、为什么非这样设计不可、以及你日常调试时它们藏在哪里。

先看一张全景图——一个数据包从手机到基站的完整旅程，后文所有内容都挂在这条链路上：

```mermaid
flowchart TD
    SRC["信息比特"] --> CRC["补上CRC校验位"]
    CRC --> ENC["LDPC编码"]
    ENC --> RM["速率匹配"]
    RM --> MOD["QAM调制"]
    MOD --> IFFT["IFFT合成多载波波形"]
    IFFT --> CH["穿越无线信道"]
    CH --> FFT["FFT分离出每个子载波"]
    FFT --> DEMOD["QAM解调"]
    DEMOD --> DEC["LDPC迭代译码"]
    DEC --> CHK{"CRC通过吗"}
    CHK -->|通过| SINK["交付上层"]
    CHK -->|失败| RETX["整块打回重传"]
```

注意看链路的两个“重心”：**发出去之前靠IFFT把频谱想法变成真实波形，收错了之后靠LDPC把错误修回来**。一个管“算得快”，一个管“修得对”。

---

## 一、FFT：给信号做“成分分析”

### 1.1 DFT是一张“配方单”

任何一段信号，无论看起来多乱，都可以拆成一组不同频率的正弦波叠加——就像任何一种果汁都能写成一张成分表：水70%、糖15%、橙汁15%。

**离散傅里叶变换（DFT）就是计算这张成分表的机器**：给它N个时域采样点，它告诉你每个频率成分的“含量和相位”：

$$X[k]=\sum_{n=0}^{N-1}x[n]\,e^{-j\frac{2\pi}{N}kn}$$

读法：想知道第k号频率的成分，就拿信号x[n]去和频率为k的“探针”$e^{-j2\pi kn/N}$逐点相乘再求和——本质上是一次**相关运算**：信号里如果真藏着这个频率，乘积会同相累积出一个大值；如果没有，正负抵消趋近于零。

通信为什么离不开它？因为**频率域是无线系统的“行政管理区”**：每个用户占哪几个子载波、每个子载波上的信噪比多少、在哪里打孔在哪里灌功率——这些管理动作只有在频率域才能说清楚。而把频域“规划图”变成空中真实波形的工具，就是DFT的逆变换IFFT：

$$x[n]=\frac{1}{N}\sum_{k=0}^{N-1}X[k]\,e^{+j\frac{2\pi}{N}kn}$$

发射端在频域“画”出子载波排布，IFFT一口气合成出时域波形；接收端FFT再把每个子载波上的数据分离出来。OFDM的一切魔法，最后都落在这一对变换上。

### 1.2 痛点：直接算，算不过来

DFT的定义朴素直接，但按定义算代价惊人：N个频率点，每个点要和N个采样做复数乘法，总计约 **N² 次复数乘法**。

这在基带里是致命的。一个100MHz带宽的5G载波，一个IFFT点数是4096量级；基站几十上百根天线、每毫秒十几个OFDM符号，都要实时算完。如果每算一次4096点IFFT要做1600多万次复数乘法，全世界的电费都不够基站烧的。

直接法和快速算法的差距有多大，看这张表（复数乘法次数，FFT按Cooley–Tukey算法的(N/2)·log₂N计）：

| 变换点数 N | 直接计算 DFT（约N²次） | FFT 算法（约N/2·log₂N次） | 提速倍数 |
|---|---|---|---|
| 64 | 4,096 | 192 | ≈ 21 倍 |
| 256 | 65,536 | 1,024 | ≈ 64 倍 |
| 1,024 | 1,048,576 | 5,120 | ≈ 205 倍 |
| 4,096 | 16,777,216 | 24,528 | ≈ 684 倍 |

差距随点数增大**指数级拉大**——这就是为什么1965年Cooley和Tukey发表快速算法后，整个数字信号处理学科才算真正起飞。

### 1.3 分而治之：FFT的聪明之处

首先要澄清一个最常见的误解：**FFT不是一种新变换，它就是DFT，只是算得更快的算法**。输入输出完全一样，数学上一字不差，区别仅在计算路径。

FFT的核心洞察只有一句话：**一个N点DFT，可以由两个N/2点DFT拼出来**。

把输入按下标奇偶分成两半——偶数下标的一组、奇数下标的一组。分别做N/2点DFT得到E[k]和O[k]，然后利用旋转因子$e^{-j2\pi/N}$的**周期性和对称性**，把两半的结果交叉合并：

$$X[k]=E[k]+W_N^k\,O[k]$$

$$X[k+N/2]=E[k]-W_N^k\,O[k]$$

注意这个合并的精妙之处：算出$E[k]+W\cdot O[k]$之后，**后一半结果几乎是白送的**——同一个乘积$W\cdot O[k]$，一加一减，两个输出就都有了。这个“乘一次、加减两次”的基本单元，画出来像一只蝴蝶，所以叫**蝶形运算**。

而那两个N/2点的DFT，又能各自继续往下拆，一直拆到2点DFT（它本身就是一次蝶形）。整个计算变成一棵自底向上的树：

```mermaid
flowchart TD
    A["8点DFT"] -->|"按下标奇偶拆分"| B["偶数项 4点DFT"]
    A -->|"按下标奇偶拆分"| C["奇数项 4点DFT"]
    B --> B1["2点DFT"]
    B --> B2["2点DFT"]
    C --> C1["2点DFT"]
    C --> C2["2点DFT"]
    B1 --> M["蝶形合并"]
    B2 --> M
    C1 --> M2["蝶形合并"]
    C2 --> M2
    M --> F["合成8点结果"]
    M2 --> F
```

每一层只有N/2个蝶形，共log₂N层，所以总计算量是$\frac{N}{2}\log_2 N$量级，把N²压成了**N log N**。这就是表1里几百倍提速的全部来源。

IFFT几乎不用单独设计：对比两个公式，IDFT只是把指数变号、结果除以N。工程上最常用的取巧办法是**把输入共轭一下做FFT、输出再共轭一次**，或者直接改用带正指数的FFT硬件——所以你看到的基带芯片里，“IFFT模块”往往就是FFT模块换了个接线方式。

### 1.4 一个新手陷阱：IFFT点数 ≠ 子载波数

现网调参时经常有人困惑：4096点IFFT，怎么只有3300个子载波？答案是：**IFFT点数是计算的“画布大小”，实际子载波是画布上真正落笔的部分**。带宽配置决定的活跃子载波被放上去，两边大量保护子载波直接置零，直流子载波通常也空着。点数选2的幂是为了FFT算得快，子载波数由带宽和子载波间隔决定，两者本来就是两回事。

---

## 二、信道编码：让错误“修得回来”

### 2.1 一切从香农的一句话开始

无线的世界没有“干净”二字：噪声、衰落、邻区干扰随时在翻转你的比特。1948年香农给出了那个改变一切的结论：

$$C=B\log_2\left(1+\frac{S}{N}\right)$$

只要传输速率低于信道容量C，**理论上存在一种编码方式，能把误码率压到任意低**——不需要升级硬件，靠数学就行。

但香农只证明了这种码“存在”，没告诉你它长什么样。于是接下来半个世纪，编码理论的主线任务只有一条：**找到既逼近香农极限、又能用现实硬件译码的构造**。5G的答案是一对组合：LDPC管数据，Polar管控制。

### 2.2 编码的直觉：用多余的线索包住信息

先忘掉一切术语，想想最原始的做法：报电话号码时报两遍，对方对照着听，两遍不一致就知道出错了。重复就是最古老的编码——用冗余换可靠。

代价同样直白：报两遍，效率减半。**编码理论的一切，都是在回答同一个问题：怎样花最少的冗余，修最多的错，还能让接收端算得动**。

LDPC和Polar给出了两个风格迥异、却都逼近极限的答案。

### 2.3 LDPC：让校验方程互相“打小报告”

LDPC（低密度奇偶校验码）的原始思想简单到可以写在便签上：设计一批校验方程，比如

$$v_1 \oplus v_2 \oplus v_3 = 0$$

$$v_2 \oplus v_3 \oplus v_4 = 0$$

（⊕是模二加，即异或）。发送端让数据满足所有方程；接收端收到后逐条检查，不满足的方程就是“案发现场”。关键设计在于“低密度”三个字：**每个方程只牵扯少数几个比特，每个比特也只出现在少数几个方程里**。把这套关系画成图，就是著名的Tanner图——圆点是变量节点（比特），方块是校验节点（方程）：

```mermaid
flowchart TD
    V1["比特v1"] --> C1["校验方程A"]
    V2["比特v2"] --> C1
    V3["比特v3"] --> C1
    V2 --> C2["校验方程B"]
    V3 --> C2
    V4["比特v4"] --> C2
```

这张图解释了LDPC为什么强：假设v2在空中被翻转了，那么方程A和方程B会**同时报警**，而两条线索的交集精确指向v2——一次错误被多个独立证人从不同角度夹住了。比特被越多条“线索链”覆盖，能修的错就越多，这正是“好码”的图论本质。

译码采用**置信传播**：变量节点和校验节点沿着边互相传“纸条”，每张纸条写着我判断你是0还是1、置信度几何。每一轮迭代，每个节点综合所有邻居的意见更新自己的判断，再传给下一轮。好比一个侦探委员会交叉质证：第一轮各说各的疑点，几轮之后真伪自然浮现——即使某些比特的初判是错的，邻居们的集体证据也会把它掰回来。所有节点可以**同时并行**工作，这是LDPC吞吐率碾压群雄的根本原因。

它的命运也颇富戏剧性：Gallager在1963年的博士论文里提出它，因当时算力无法支撑译码而被雪藏近三十年；九十年代MacKay等人重新发现它，一发不可收——今天的WiFi、以太网、卫星通信和5G数据信道，全是LDPC的地盘。

5G用的是它的**准循环（QC-LDPC）**变体：校验矩阵由循环移位的小方块拼成，硬件上用移位寄存器就能实现，并行度和芯片友好度极高。标准还准备了两张“底版”（Base Graph）：大包、高码率的业务用一张，小包、低码率的用另一张，再通过打孔和重复实现任意码长与码率的无级调节——调度器给什么MCS，编码器就能织出什么形状的网。

### 2.4 Polar：把烂信道“极化”成好信道

LDPC逼近极限靠的是大量方程的群体智慧，而2009年Arikan提出的Polar码走了一条更“数学家”的路：**既然单条信道不够好，那就用线性变换把N条平庸信道“洗牌”，洗出少数几条近乎完美的**。

核心操作出奇地简单：把两条一样的信道交叉组合一次，结果分裂成两条**不一样**的信道——一条更差，一条更好。用极化核表示：

$$G_2=\begin{bmatrix}1&0\\1&1\end{bmatrix}$$

把N条信道递归地两两组合、组合再分裂，log₂N轮之后，原本整齐划一的N条信道被彻底拉开档次：极少数信道质量趋近完美（差错概率趋近0），大多数信道烂得没法用。这像一杯“信道极化”的实验：**两杯温水倒腾来倒腾去，总热量一点没变，最后却得到一杯热水和一杯冰水**——总量守恒，分布分化。这个分化不是近似，而是被Arikan严格证明的数学定理，这也是Polar码成为**第一个被证明能达到信道容量的构造性编码**的原因——香农1956年许下的诺言，五十年后第一次有人拿出了可施工的图纸。

用法随之清晰，叫**信道分配的“嫌贫爱富”**：

```mermaid
flowchart TD
    IN["N条同样平庸的信道"] --> G["极化变换：两两交叉组合"]
    G --> S1["一部分变得更好"]
    G --> S2["一部分变得更差"]
    S1 --> G2["好信道继续递归组合"]
    S2 --> G2b["差信道继续递归组合"]
    G2 --> OUT1["少数极好信道"]
    G2b --> OUT2["多数极差信道"]
    OUT1 --> INFO["放真实信息比特"]
    OUT2 --> FROZ["放冻结比特"]
```

**信息比特只放好信道；烂信道统一塞“冻结比特”**——也就是收发双方都预先知道的固定值（通常是0）。烂信道上根本不放信息，传错了也无所谓，接收端直接丢弃。可靠性问题被转化成了一个“选址”问题：与其在烂地基上加固房子，不如一开始就把房子盖在好地基上。

译码用**连续消去（SC）**：按顺序逐比特判决，判完第1位，把它的结论用于帮助判决第2位，像推理小说一样层层递进。SC单路性能一般，工程上用**列表译码（SCL）**补救——同时保留L条候选推理路径，最后用CRC当裁判选出最像的一支。这个“Polar+CRC”的组合拳，让几十比特的小码块也能把可靠性推到极高。

### 2.5 为什么5G让两兄弟分了工

LDPC和Polar不是替代关系，而是按岗分工：

| 维度 | LDPC | Polar |
|---|---|---|
| 诞生 | 1963年提出，1990年代重生 | 2009年提出 |
| 核心思想 | 稀疏校验 + 迭代消息传递 | 信道极化 + 冻结比特 |
| 译码方式 | 全并行置信传播 | 串行判决 / 列表搜索 |
| 强项 | 长码、高吞吐、低时延 | 短码、极高可靠性 |
| 弱项 | 短码性能一般 | 串行译码吞吐受限 |
| 5G岗位 | 数据业务信道（大码块） | 控制信令与广播（小码块） |

道理很直白：**数据业务**动辄几千上万比特一个码块，追求的是吞吐和时延，LDPC的全并行译码恰好是吞吐之王；**控制信令**只有几十个比特，却承担着“指挥调度”的重任，错一个DCI，后面整块数据全白搭，可靠性要求苛刻，而Polar恰好在短码区间增益最大。4G时代用Turbo码兼顾两头，5G用LDPC+Polar各取所长——这不是喜新厌旧，是按场景配置最优工具。

---

## 三、现网里的影子：工程师在哪里遇到它们

**看MCS就是在看编码**。调度器下发MCS，等于同时指定了调制阶数和目标码率；码率一变，LDPC选哪张底版、打孔打到哪里，全部随之确定。看小区级MCS分布异常偏低时，除了怀疑信道质量，也要想到是不是码块过大导致码率损失（码块分割会补入额外的码段CRC）。

**看BLER就是在看译码战况**。外环链路自适应通常把初始传输BLER目标维持在10%左右：译码失败不是事故，而是反馈链路的正常燃料——失败触发的重传本身携带着增量信息（软合并），系统靠它校准MCS。真正要报警的是BLER长期偏离目标带，或重传收敛慢。

**三个常见调试陷阱**：

1. **CRC失败扎堆，先分清是“网”还是“码”**。干扰、弱覆盖导致的失败，伴随低SINR；而打孔位置附近的码块连续失败、换MCS后异常消失的，更可能是速率匹配边界问题。先看SINR分布再怪编码，别倒因为果。
2. **频偏是FFT的天敌**。子载波正交性建立在FFT窗对齐、载波频率精确对准之上；频偏会让FFT“看串门”，产生子载波间干扰，表现为星座点整体旋转发散。看到星座发散，除了想相噪，先查频偏跟踪。
3. **FFT窗同步错位，错的是一整块**。符号定时偏移叠加多径时，FFT窗口会切进相邻符号，造成符号间干扰。这类错误不是随机比特错，而是成片码块崩塌——现象模式本身就在提示你该看同步还是该看信道。

至于日常工具，频谱仪屏幕上每一帧刷新的频谱，背后都是一次FFT；你用手机拍照时的JPEG压缩、语音识别的前端降噪，用的也是同一个1965年的算法。**好算法的寿命，比它服务的制式长得多**。

---

## 常见问题

**Q1: FFT和DFT到底是什么关系？**
A: DFT是数学定义，FFT是计算这个定义的快速算法。两者输入输出完全等价，FFT只是利用旋转因子的周期性对称性，把N²次乘法压缩到N log N。说“用了FFT”和说“做了DFT”指的是同一个变换，区别只是算得快不快。

**Q2: 4G用Turbo码好好的，5G为什么换成LDPC加Polar？**
A: 三分天下不是喜新厌旧：Turbo译码的串行结构在高速率下时延和功耗吃紧；LDPC支持全并行译码且打孔重复天然适配灵活码率，接管大数据块；Polar在短码上理论增益显著，接管控制信令。各制式选择都是场景最优解的组合。

**Q3: 有了这么强的信道编码，为什么还会有丢包重传？**
A: 编码能修的是“量变”错误，修不了“质变”深度衰落——当一段时隙内错误超出码的纠错能力，CRC会果断判负并丢弃，交给HARQ和上层重传兜底。编码负责把90%以上的错误就地消化，剩下极少数用重传解决，这是分层设计而非缺陷。

**Q4: Polar码理论上能达容量，为什么不全面取代LDPC？**
A: Polar的理论优势集中在短码；它的SC译码是串行的，长码吞吐拼不过全并行的LDPC。数据信道要的是每秒Tbbit级的处理能力，控制信令要的是小码块的极致可靠——各守各的最优区间，谁也吃不掉谁。

**Q5: 为什么IFFT点数总选2的幂（512/1024/2048/4096）？**
A: 因为Cooley–Tukey FFT的分治结构对2的幂最优雅，硬件流水线也最规整。带宽决定的活跃子载波数不满2的幂没关系——多余子载波置零即可，画布大一点不碍事，但算法必须顺着2的幂走才跑得最快。

---

## 参考来源

1. [Fast Fourier transform — Wikipedia](https://en.wikipedia.org/wiki/Fast_Fourier_transform) — FFT算法历史（Cooley–Tukey 1965）与蝶形结构的权威综述
2. [Low-density parity-check code — Wikipedia](https://en.wikipedia.org/wiki/Low-density_parity-check_code) — LDPC的Gallager起源、Tanner图与置信传播译码、5G采用情况
3. [Polar code (coding theory) — Wikipedia](https://en.wikipedia.org/wiki/Polar_code_(coding_theory)) — Arikan极化码原理、冻结比特机制与5G控制信道应用
4. [Cooley & Tukey, "An algorithm for the machine calculation of complex Fourier series", Math. Comp. 19 (1965)](https://doi.org/10.1145/321239.321274) — FFT原初论文
5. [Arikan, "Channel Polarization", arXiv:0807.3917](https://arxiv.org/abs/0807.3917) — 极化码理论奠基论文（后刊于IEEE Trans. Inf. Theory, 2009）

---
> 本文由「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 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
