想象你在嘈杂的餐厅里接电话,对方说了一句关键信息你没听清。你有三种选择:
第三种做法,就是本文的主角 HARQ(Hybrid Automatic Repeat reQuest,混合自动重传)。
它是现代移动通信(HSPA、LTE、5G NR)中物理层与 MAC 层之间最重要的纠错机制,直接决定了你在弱信号环境下“网速掉不掉底”“视频卡不卡”。理解了 HARQ,你就理解了无线链路自适应体系的最后一道、也是最经济的一道防线。
要理解 HARQ 为什么是"Hybrid(混合)",得先看它的两个父辈各自的缺陷。
ARQ(自动重传请求):接收端用 CRC 校验数据,错了就扔掉这个数据块,请求重发。
FEC(前向纠错):发送端加入大量冗余校验位(Turbo/LDPC 码),接收端直接纠错,不用重传。
无线信道恰恰是时变的:手机在基站旁边时 SNR 可能是 30dB,走到电梯里瞬间掉到 0dB。按最差信道做 FEC,好信道时吞吐量被冤枉地砍半;只做 ARQ,差信道时重传一次错一次,永远传不过去。
HARQ 的设计哲学:让两者各干各擅长的事——
flowchart LR
subgraph ARQ方式
A1[发送数据块] --> A2[接收+CRC校验]
A2 -->|错| A3[丢弃信号<br/>请求重发]
A3 --> A1
end
subgraph FEC方式
B1[发送前加入大量冗余位] --> B2[接收端直接译码纠错]
B2 -->|超过纠错能力| B3[失败<br/>仍需上层重传]
end
subgraph HARQ方式
C1[发送适度编码的数据块] --> C2[接收+译码+CRC]
C2 -->|错| C3[信号存入软缓存<br/>反馈NACK]
C3 --> C4[重传与新接收合并后再译码]
C4 --> C2
C2 -->|对| C5[成功交付]
end
一句话总结:ARQ 花几个百分点换可靠性,FEC 花一半容量换可靠性,HARQ 只在需要时才花 FEC 的钱。
按“重传内容里有没有新信息”划分,HARQ 有三种经典形态:
| 类型 | 重传内容 | 接收端处理 | 信道好时开销 | 典型应用 |
|---|---|---|---|---|
| Type I | 每次都是完整独立的编码块(含全部纠错冗余) | 各次独立译码,失败可丢弃或简单合并 | 较高(每次都带满配 FEC) | Wi-Fi 类简单系统、ITU-T G.hn |
| Type II | 首传只带 CRC 检错,重传才补发不同的校验位 | 两次传输可组合纠错 | 极低(好信道时≈纯 ARQ) | HSDPA、LTE、NR 的基本思想 |
| Type III(部分增量冗余) | 每次重传都包含系统位,自可解码 | 每次都能单独译码,合并后更强 | 中等 | 各系统的鲁棒模式 |
Type II 的精髓在于:第一传就是“赌”信道好——如果一次成功,FEC 校验位根本不用上信道,吞吐量等同纯 ARQ;只有信道“打脸”了,才追加校验位。这就是 Wikipedia 中"good signal conditions 时 Type II 与标准 ARQ 容量相同,poor signal conditions 时与标准 FEC 灵敏度相同"的含义。
HARQ 最反直觉、也最漂亮的一步是:为什么两次“半错”的接收叠在一起就“全对”了?
答案是软判决译码中的 LLR(对数似然比)。接收端解调后,对每一个比特 $b$,得到的不是一个硬判的 0 或 1,而是一个“证据值”:
$$ LLR(b) = \ln\frac{P(b=1 \mid y)}{P(b=0 \mid y)} $$
其中 $y$ 是接收到的复数符号。对于 BPSK 调制、加性高斯白噪声(方差 $\sigma^2$)信道,可以推导出:
$$ LLR(b) \approx \frac{2y}{\sigma^2} $$
关键性质:LLR 是可加的。 同一个比特经过两次独立传输,接收到的两个 LLR 直接相加:
$$ LLR_{merged} = LLR_1 + LLR_2 $$
这在概率论上就是贝叶斯证据叠加:两个相互独立的“证人”对同一事实的证词,对数域直接累加。第一次接收时这个比特“疑似是 1”(LLR=+3),第二次接收“更疑似是 1”(LLR=+5),合并后 LLR=+8,置信度大幅提高。如果第二次证据方向相反(LLR=-2),合并后只剩 +3——噪声互相抵消,也不会被误导。
对 Chase 合并来说,这个加法还有一个物理直觉:两次传输的能量相加,等效于把接收信噪比 $E_b/N_0$ 提高了约 3dB(两次等能量传输时),这正是最大比合并(MRC)的思想——信号能量线性累加,噪声功率因为不相关只按平方和增长。
flowchart TD
R[收到重传数据] --> D[解调得到软比特 LLR]
D --> Q{软缓存中有<br/>历史失败接收?}
Q -->|无| DD[直接送入译码器]
Q -->|有| M[按比特位置对齐<br/>LLR逐位相加合并]
M --> DD
DD --> E[信道译码 Turbo/LDPC]
E --> F{CRC校验通过?}
F -->|是| OK[清空软缓存<br/>上报ACK]
F -->|否| N[本次LLR写入软缓存<br/>上报NACK等待重传]
工程注脚:存储 LLR 而非硬判比特,就是“软缓存(soft buffer)”名字的由来。每个 LLR 需要若干比特量化存储,所以终端的软缓存大小是一项重要的终端能力——缓存越大,能支撑的合并次数和码率范围越大。这也是为什么弱信号用户的吞吐量极限,有时不是信道决定的,而是终端软缓存决定的。
HARQ 软合并有两大流派:
| 维度 | Chase 合并(CC) | 增量冗余(IR) |
|---|---|---|
| 重传内容 | 与首传完全相同的比特序列 | 不同的校验位组合(打孔图案不同) |
| 接收端操作 | 最大比合并,LLR 加权叠加 | 把新比特填入此前缺失的位置,逐步降低有效码率 |
| 信息增量 | 无新信息,只是能量叠加 | 每次重传都带来新的校验信息 |
| 译码码率变化 | 不变(等效 $E_b/N_0$ 提升) | 首传高码率 → 合并后逐渐逼近母码码率 |
| 缓存要求 | 低 | 高(需存多次不同比特) |
| 实现复杂度 | 低 | 高(需要速率匹配与软缓存管理) |
| 性能 | 弱信号下增益有限 | 几乎总是优于 CC(Frenger 等人在 VTC 2001 用 HSDPA 验证) |
Wikipedia 的结论很明确:尽管 HSDPA 标准同时支持两种方式,增量冗余几乎总是性能更好,代价是复杂度增加。所以现代系统(HSPA/LTE/NR)全部以 IR 为主。
用一个考试类比理解两者的差别:
IR 的工程实现依赖速率兼容打孔(rate-compatible puncturing):编码器(如 1/3 码率的 Turbo/LDPC 母码)输出系统位 + 两路校验位,但不全部发送,而是写入一个环形缓冲区,由一个读指针从不同起点循环读出固定数量的比特上信道。
这些不同起点,就是 RV(Redundancy Version,冗余版本)。LTE/NR 中 PDSCH 定义了 RV0~RV3 四个取值:
flowchart TD
subgraph 编码侧
K[信息位 K] --> E2[1/3母码编码<br/>K + 2K 校验位]
E2 --> CB[写入环形缓冲区]
CB -->|RV0 从头读| T1[第一次发送<br/>高码率 自含系统位]
CB -->|RV2 换起点| T2[第一次重传<br/>送出新的校验位]
CB -->|RV3 再换起点| T3[第二次重传<br/>再送新的校验位]
end
subgraph 接收侧软缓存
T1 --> SB[软缓存]
T2 --> SB
T3 --> SB
SB --> DEC[有效码率逐步降低<br/>合并后联合译码]
end
随着重传次数增加,接收端“攒齐”的编码比特越来越多,有效码率从首传的高码率(如 3/4)一路滑向母码的 1/3。理论上,如果信道持续恶劣,IR 最终等价于用完整的 1/3 码率译码——这就是弱信号下“传三四次总能对”的数学保证。
有了软合并,还差一个工程问题:反馈期间信道干什么?
最简单的 ARQ 协议是停等(Stop-and-Wait):发一块 → 停下来等 ACK → 收到 ACK 再发下一块。实现简单到极致,但代价是信道空转。无线信道的传播时延 + 处理时延,意味着“等”的时间是毫秒级——对一个每毫秒发一帧的系统,纯停等会让一半以上的吞吐量白白蒸发。
解决方案优雅而简单:并行运行多个停等进程。当 1 号进程在等 ACK 时,信道立刻分配给 2 号进程发新数据;2 号等的时候,1 号的 ACK 也该回来了。Wikipedia 对此的表述是:"multiple stop-and-wait HARQ processes are often done in parallel in practice"。
LTE FDD 把这套流水线做到了教科书级的规整(以下为 Dahlman《3G Evolution》等经典教材中的标准时序):
sequenceDiagram
participant BS as 基站
participant UE as 终端
Note over BS,UE: FDD LTE:8进程流水线,HARQ RTT = 8ms
BS->>UE: 子帧0:进程#1 发送新数据
BS->>UE: 子帧1:进程#2 发送新数据
BS->>UE: 子帧2:进程#3 发送新数据
BS->>UE: 子帧3:进程#4 发送新数据
BS->>UE: 子帧4:进程#5 发送新数据
BS->>UE: 子帧5:进程#6 发送新数据
BS->>UE: 子帧6:进程#7 发送新数据
BS->>UE: 子帧7:进程#8 发送新数据
UE-->>BS: 子帧4:#1 的ACK/NACK(PUCCH)
UE-->>BS: 子帧5:#2 的ACK/NACK
Note over BS,UE: 收到NACK的进程最早在n+8重传,<br/>期间信道始终有活干,零空转
为什么是 8 个进程而不是 16 个或 4 个? 进程数 = RTT 内能填满信道的帧数。少了一个,流水线出现气泡;多一个也没用,因为没有空子帧可分配。这是典型的“时延决定并行度”的设计。
5G NR 对 HARQ 做了一轮“松绑”改造,核心动机是适配灵活的numerology(子载波间隔)和更低的时延目标:
| 维度 | LTE | 5G NR |
|---|---|---|
| 同步性 | 下行异步、上行同步(重传时刻固定) | 上下行全异步 |
| 重传调度 | 隐式:按固定时序自动重传 | 显式:由 PDCCH/DCI 重新调度,可换 MCS、换资源 |
| ACK 时序 | 固定(FDD 下 n+4) | 灵活:DCI 中 K1 参数动态指示 PDSCH 与 ACK 的时隙间隔 |
| HARQ 进程数 | FDD 固定 8 个 | 可配置,最多 16 个 |
| 上行反馈信道 | PHICH(专用物理信道) | 取消专用信道,统一由 PDCCH 承载重传调度 |
| 反馈/重传粒度 | 传输块 / 码字 | 传输块之外还支持 CBG(码块组) 级重传 |
几个“为什么”值得展开:
为什么 NR 全面异步化? LTE 上行同步 HARQ 把重传时刻写死,好处是终端省电、无需重新调度;坏处是重传必须用和首传相同的资源与 MCS。如果干扰突然增大,原样重传大概率还是错。NR 改为:重传也走完整的 DCI 调度,基站可以给这次重传换一个更稳的 MCS、换一段更干净的频谱——把“重传”变成“重新排兵布阵”。代价是终端必须持续监听 PDCCH,复杂度和功耗上升。
为什么有 K0/K1/K2 这样的显式时序参数? NR 支持 15/30/60/120kHz 多种子载波间隔,时隙长度相差 16 倍,固定的“n+4”时序无法适配所有场景。于是把每一跳的时延都变成 DCI 里的字段:K0(调度命令→PDSCH)、K1(PDSCH→ACK)、K2(调度命令→PUSCH)。这本质上是把 LTE 的“协议写死”改成 NR 的“基站可调”,为超低时延(调小 K 值)和大容量(调大 K 值换取调度灵活性)留出旋钮。
为什么引入 CBG 重传? NR 大带宽下传输块可能包含几十个码块。整块重传太浪费——也许只有 2 个码块错了。把码块分组,NACK 里指出哪一组错了,只重传那一组。这是在“反馈精度”与“反馈开销”之间又做了一次权衡。
一次完整的数据可靠交付,实际由两层重传构成,它们的时延尺度和分工完全不同:
flowchart TD
TX[数据流] --> MAC[HARQ:MAC层重传]
MAC -->|NACK 超限或DTX| RLC[RLC AM:ARQ重传]
RLC -->|RLC重传仍失败| PDCP[PDCP/上层<br/>应用层超时]
MAC -.->|时延尺度 ~8ms级| T1[快 重传次数有限<br/>反馈可能丢失]
RLC -.->|时延尺度 数十ms级| T2[慢 有状态报告机制<br/>可靠兜底]
这套分层的合理性在于概率分工:HARQ 用软合并把单次误块率从百分之几十压到 10% 以下(LTE/NR 的初传 BLER 运营目标通常取 10%),RLC 再把这 10% 压到接近零。每一层只处理自己性价比最高的那部分错误。
1. 看 HARQ 重传率定位覆盖问题,但先分清 NACK 和 DTX。 网管统计中“HARQ 重传次数/初传次数”高,有两种截然不同的可能:终端收到了调度但译码失败(NACK),或终端根本没收到调度、反馈缺失(DTX)。前者查覆盖/MCS 是否虚高,后者查 PDCCH 聚合级别、上行功控。把 DTX 当 NACK 优化 MCS,方向就全错了——这是新手最常见的调试陷阱。
2. CQI 上报与 BLER 目标共同决定初传 MCS。 链路自适应选 MCS 的逻辑是“让初传 BLER 落在 10% 左右”,刻意留出 HARQ 的用武之地。若现网初传 BLER 长期接近 0,说明 MCS 保守,吞吐量被浪费;长期 20% 以上,HARQ 重传吃掉的带宽会拖垮调度其他用户。BLER 逼近 10% 反而是“健康”状态——这与直觉相反。
3. 弱信号用户看软缓存与重传次数上限。 边缘用户重传 3 次后仍失败,数据被丢给 RLC,端到端时延陡增、TCP 超时重传雪崩。此时调大 HARQ 最大重传次数(利用 IR 继续降码率)往往比单纯加大功率更有效。
4. NR 参数优化绕不开 K 值。 URLLC 场景调小 K1(ACK 快回)压缩时延;大流量场景适当放宽 K 值,换取基站更从容的调度缓冲。读懂 DCI 里的 K0/K1/K2,是分析 NR 调度时延的第一步。
Q: HARQ 和普通 ARQ 的本质区别是什么? A: 普通 ARQ 译码失败就把接收信号扔掉,重传只是“再来一次”;HARQ 把失败的软信息(LLR)存在软缓存里与新重传合并,重传是“信息叠加”。前者每次成功概率独立,后者成功率随重传单调上升——这是吞吐量差异的根源。
Q: Chase 合并和增量冗余该怎么选? A: 研究结论(Frenger 等人,VTC 2001)是增量冗余几乎总是更好,现代蜂窝系统全部以 IR 为主。CC 只在硬件极简、缓存受限的场景(一些 Wi-Fi/IoT 系统、G.hn 类标准)保留,换取实现简单。
Q: 为什么 LTE FDD 是 8 个 HARQ 进程、5G NR 最多 16 个? A: 进程数由“RTT 内能塞满多少帧”决定:LTE FDD 的固定时序推导出 8ms RTT、每毫秒一帧,正好 8 个进程。NR 时隙更短且时序可变,为在大子载波间隔(时隙仅零点几毫秒)下仍能填满流水线,进程池扩到 16 个,由高层信令配置。
Q: HARQ 重传和 TCP 重传是什么关系?会冲突吗? A: 三层嵌套:HARQ(毫秒级)兜 RLC(几十毫秒级),RLC 兜 TCP(秒级)。层级越低重传越快、成本越低。设计目标就是让 99.9% 的错误终结在 HARQ/RLC,永远惊动不了 TCP——否则 TCP 会误判网络拥塞而降窗,吞吐量断崖式下跌。
Q: 终端漏检了调度指令(DTX),会发生什么? A: 终端既不收数据也不发反馈。基站等待超时后把这次传输按“失败”处理(取决于实现,可能直接重传)。由于 DTX 和 NACK 在反馈信道上不可靠区分,基站侧的稳健做法是结合 NDI 与 RLC 状态报告做二次确认,这也是为什么 PDCCH 漏检率(聚合级别配置)是弱场优化的重点。
本文由「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 等场景全覆盖。
