想象你从网上买了一箱玻璃杯,快递送到时摔碎了一个。你有两种处理方式:
HARQ是5G无线接入网中最关键的可靠性机制之一。它不是简单的"重传",而是把前向纠错(FEC)和自动重传请求(ARQ)合二为一,再加上软合并,构成一个毫秒级的快速纠错闭环。本文将从"为什么需要HARQ"出发,逐步拆解其核心原理。
无线信号从基站到手机,要经历三重劫难:
| 挑战 | 描述 | 后果 |
|---|---|---|
| 路径损耗 | 信号随距离指数衰减 | 远处用户信号弱 |
| 多径衰落 | 信号经反射/折射到达接收端,相位叠加可能相消 | 信号忽强忽弱 |
| 干扰 | 邻区基站、其他用户的信号叠加 | 信噪比恶化 |
在4G/5G典型的城市环境中,下行传输的初始误块率(BLER)通常设计在10%左右——也就是说,每发10个数据包,大约有1个会解码失败。这并非系统设计失败,而是一个刻意为之的折中:如果把初始BLER压到0.1%,意味着保守的调制编码方案(MCS),频谱效率会大幅下降。
所以核心思路是:允许初始传输有一定错误率,用快速重传来兜底。
flowchart TD
subgraph 第一代["ARQ - 自动重传"]
A1["发送数据"] --> A2["接收端CRC校验"]
A2 -->|失败| A3["请求重传"]
A3 --> A1
A2 -->|成功| A4["完成 ✓"]
end
subgraph 第二代["FEC - 前向纠错"]
B1["编码添加冗余位"] --> B2["发送"]
B2 --> B3["接收端解码纠错"]
B3 --> B4["成功 ✓"]
end
subgraph 第三代["HARQ - 混合重传"]
C1["FEC编码"] --> C2["发送"]
C2 --> C3["接收解码"]
C3 -->|失败| C4["保存软信息<br/>发送NACK"]
C4 --> C5["重传(不同冗余版本)"]
C5 --> C6["软合并再解码"]
C6 -->|成功| C7["完成 ✓"]
C6 -->|失败| C4
C3 -->|成功| C8["发送ACK ✓"]
end
第一代 --> 第二代 --> 第三代
| 机制 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| ARQ | 检错后重传,丢弃错误数据 | 简单可靠 | 延迟大,浪费已接收信息 |
| FEC | 提前加冗余,接收端自纠 | 不需反馈,单向传输 | 冗余固定,好信道时浪费带宽 |
| HARQ | FEC + ARQ + 软合并 | 快速纠错,频谱效率高 | 需要软缓冲区,实现复杂 |
HARQ的"混合"二字,正是来自它同时利用了FEC的纠错能力和ARQ的重传能力,并在重传时做了一件关键的事——不丢弃失败的数据,而是与重传数据合并后再解码。
当接收端收到一个PDSCH数据块并尝试解码时,LDPC解码器处理的不是硬判决(0或1),而是对数似然比(LLR):
$$\text{LLR}(b_i) = \ln\frac{P(b_i=0|\mathbf{y})}{P(b_i=1|\mathbf{y})}$$
其中 $\mathbf{y}$ 是接收到的信号。LLR的物理含义是:
| LLR值 | 含义 |
|---|---|
| LLR >> 0 | 非常确定这个比特是0 |
| LLR << 0 | 非常确定这个比特是1 |
| LLR ≈ 0 | 不确定,可能是0也可能是1 |
关键洞察:解码失败的包并不意味着所有比特都是"垃圾"。大部分LLR其实是正确的,只有少数比特因为噪声而模糊(LLR接近0)。如果直接丢弃,这些有效信息就浪费了。
HARQ的软合并分为两种方式,它们的核心区别在于重传时发送的内容是否与初次传输相同:
基站重传与初次传输完全相同的编码比特(相同的冗余版本RV)。接收端将两次接收的LLR逐比特相加:
$$\text{LLR}_{\text{combined}}(b_i) = \text{LLR}_1(b_i) + \text{LLR}_2(b_i)$$
这等价于提升有效信噪比。直观理解:两次传输经历的是独立的噪声,LLR相加后噪声项趋向抵消(零均值),而信号项叠加增强。理论上,一次重传可带来约3 dB的信噪比增益。
类比:就像你拍了一张模糊的照片,再拍一张同样场景但模糊位置不同的照片。把两张照片叠加,模糊会减轻,画面更清晰。
基站重传时使用不同的冗余版本(不同RV),发送的是初次传输中未包含的校验比特。接收端将新旧信息拼接,形成更低码率的码字。
$$R_{\text{eff}} = \frac{K}{N_1 + N_2 + \cdots}$$
其中 $K$ 是信息比特数,$N_i$ 是第 $i$ 次传输的编码比特数。每次重传都增加了分母(更多校验位),有效码率降低,纠错能力增强。
类比:第一次考试你只带了铅笔(基本工具),考砸了;补考时你带了铅笔+橡皮+尺子(更多辅助工具),工具更完备,通过概率大增。
flowchart TB
subgraph 发送端处理流程
TB["传输块 TB"] --> CRC["附加CRC"]
CRC --> CB["码块分割"]
CB --> LDPC["LDPC编码<br/>(信息位+校验位)"]
LDPC --> RM["速率匹配<br/>(选择RV版本)"]
RM --> MOD["调制映射"]
end
subgraph RV选择策略
direction LR
RV0["RV0: 系统位为主<br/>首次传输<br/>可自解码"]
RV2["RV2: 校验位为主<br/>第1次重传"]
RV3["RV3: 额外校验位<br/>第2次重传"]
RV1["RV1: 补充校验位<br/>第3次重传"]
RV0 --> RV2 --> RV3 --> RV1
end
RM -.->|"选择RV"| RV0
subgraph 接收端合并策略
direction TB
RX["接收信号→LLR"] --> DEC{"LDPC解码"}
DEC -->|成功| ACK["发送ACK"]
DEC -->|失败| BUF["存入软缓冲区"]
BUF --> WAIT["等待重传"]
WAIT --> COMB["与新LLR软合并"]
COMB --> DEC2{"再次解码"}
DEC2 -->|成功| ACK2["发送ACK"]
DEC2 -->|失败| BUF2["更新软缓冲区"]
end
MOD -->|"无线信道"| RX
| 维度 | Chase Combining | Incremental Redundancy |
|---|---|---|
| 重传内容 | 完全相同的编码比特 | 不同的校验比特 |
| 合并方式 | LLR逐比特相加 | 新旧信息拼接(码率降低) |
| 信噪比增益 | ~3 dB/次重传 | 最高可达6 dB/次重传 |
| 频谱效率 | 较低(重复信息) | 较高(每次传新信息) |
| 软缓冲区需求 | 较小 | 较大 |
| 实现复杂度 | 低 | 较高 |
| 5G中的使用 | 高码率时退化为CC | 默认首选方式 |
为什么5G偏好IR? 因为IR的每次重传都在传递"新知识"(新的校验位),而Chase只是在重复"旧知识"。在高码率场景下(如0.93),可用的校验位本来就少,不同RV之间会重叠,IR退化为Chase Combining——这也是为什么说Chase是IR的特例。
最简单的重传协议是停等式(Stop-and-Wait):发一个包,等ACK/NACK,再发下一个。问题在于:从发送到收到反馈需要一定时间(往返时延RTT),这期间无线信道是空闲的——白白浪费了宝贵的频谱资源。
$$\eta_{\text{SAW}} = \frac{T_{\text{传输}}}{T_{\text{传输}} + T_{\text{等待ACK}} + T_{\text{处理}}}$$
假设传输一个时隙(0.5ms),等待ACK反馈需要4个时隙(2ms),处理时间1个时隙,则效率只有 $\frac{0.5}{0.5+2+0.5} \approx 16.7\%$。
解决方案是多个停等进程并行运行。就像超市收银台——一个收银台在等你找钱包时,另一个收银台已经在为下一位顾客服务了。
sequenceDiagram
participant gNB as 基站 gNB
participant P0 as HARQ进程0
participant P1 as HARQ进程1
participant P2 as HARQ进程2
participant P3 as HARQ进程3
Note over gNB,P3: 时隙0: 发送TB0到进程0
gNB->>P0: TB0 (RV0)
Note over gNB,P3: 时隙1: 发送TB1到进程1
gNB->>P1: TB1 (RV0)
Note over gNB,P3: 时隙2: 发送TB2到进程2
gNB->>P2: TB2 (RV0)
Note over gNB,P3: 时隙3: 发送TB3到进程3
gNB->>P3: TB3 (RV0)
Note over gNB,P3: 时隙4: 进程0收到NACK
P0->>gNB: NACK (TB0失败)
Note over gNB,P3: 时隙4: 同时发送TB4到进程0(新数据)
gNB->>P0: TB4 (RV0, 新数据)
Note over gNB,P3: 时隙4: 进程1收到ACK
P1->>gNB: ACK (TB1成功)
Note over gNB,P3: 时隙5: 进程0的TB0重传
gNB->>P1: TB0重传 (RV2)
5G NR支持最多16个HARQ进程(上下行各16个)。每个进程独立维护自己的软缓冲区、冗余版本状态和新数据指示(NDI)。
| 参数 | 4G LTE | 5G NR |
|---|---|---|
| 最大HARQ进程数(下行) | 8 | 16 |
| 最大HARQ进程数(上行) | 8 | 16 |
| 下行HARQ类型 | 同步 | 异步 |
| 上行HARQ类型 | 同步 | 异步 |
| 反馈时序 | 固定(4ms) | 灵活配置(K1参数) |
| CBG级重传 | 不支持 | 支持(R16+) |
4G LTE的下行HARQ是同步的——重传必须在固定的时序位置发生。这虽然简单,但缺乏调度灵活性。
5G NR上下行均采用异步HARQ:基站可以在任意时隙调度重传,通过DCI(下行控制信息)中的HARQ进程号和新数据指示(NDI)来标识。这给了调度器更大的自由度,可以根据信道状态和资源 availability 灵活安排重传。
NDI(New Data Indicator)的巧妙设计:每个HARQ进程有一个1比特的NDI翻转标志。当基站发送新数据时,NDI翻转(0→1或1→0);当发送重传时,NDI不变。UE通过检测NDI是否翻转来判断这是新数据还是重传。
5G NR定义了4个冗余版本:RV0、RV1、RV2、RV3。它们对应LDPC编码输出中不同起始位置的比特选择。
LDPC编码器的输出可以看作一个很长的环形缓冲区,前面是系统位(原始数据),后面是校验位。速率匹配时,从缓冲区中按一定规则选取一段比特发送。
| RV索引 | 起始位置(相对值) | 典型用途 |
|---|---|---|
| RV0 | 0(系统位开头) | 首次传输,包含完整系统位,可自解码 |
| RV2 | ~2/3(校验位区域) | 第1次重传,补充校验位 |
| RV3 | ~1/3(校验位区域) | 第2次重传 |
| RV1 | ~5/6(校验位区域) | 第3次重传 |
标准推荐的RV序列是 0→2→3→1,这个顺序经过精心设计,确保每次重传都能最大化增量冗余增益。
RV0包含完整的系统位(原始数据比特),这意味着即使UE没有收到之前任何传输,仅凭RV0也能尝试独立解码。这对于以下场景至关重要:
而RV1/2/3主要包含校验位,单独无法恢复原始数据——它们的价值在于与RV0组合后降低有效码率,增强纠错能力。
一个传输块(TB)可能包含数千甚至数万个比特。如果整包解码失败,实际上可能只是其中一小部分(某个码块CB)出了问题。如果整包重传,浪费了大量频谱资源。
这就像一份100页的报告中只有第37页有个错别字——你不需要重新打印整份报告,只需补发第37页。
5G R16引入了CBG级HARQ反馈:将一个TB分成多个码块组(CBG),UE可以针对每个CBG独立反馈ACK/NACK,基站只重传出错的CBG。
$$\text{CBG数量} = \min(N_{\text{CB}}, 2, 4, 6, 8)$$
其中 $N_{\text{CB}}$ 是码块数量,具体值由RRC参数配置。
| 场景 | TB级重传 | CBG级重传 |
|---|---|---|
| TB大小 | 100,000比特 | 100,000比特 |
| 码块数 | 20个CB | 20个CB |
| 失败CB数 | 1个 | 1个 |
| 重传数据量 | 100,000比特 | ~5,000比特 |
| 频谱效率损失 | 100% | 5% |
对于高速率场景(4层×256QAM×100MHz),CBG级重传可以带来5-10倍的重传效率提升。
5G NR中,UE收到PDSCH后,并非在固定时隙反馈ACK/NACK,而是通过DCI中的PDSCH-to-HARQ_feedback定时指示(即K1值)来确定反馈时机。
$$n_{\text{PUCCH}} = n_{\text{PDSCH}} + K_1$$
K1的取值范围为1~15个时隙,由RRC配置候选集合,DCI从中选择。这种灵活设计带来的好处是:
| K1值 | 适用场景 |
|---|---|
| 小值(1-2) | 低延迟业务(URLLC),快速反馈 |
| 中值(3-6) | 典型eMBB业务,平衡处理时间和调度效率 |
| 大值(7-15) | 远端UE或复杂调度场景 |
当UE需要在一个PUCCH上反馈多个PDSCH的ACK/NACK时,需要一种机制来告诉基站"这个反馈位对应哪个PDSCH"。这就是HARQ-ACK码本。
5G支持两种码本类型:
Type 1(半静态码本):反馈位数固定,基于RRC配置的时隙绑定窗口大小。即使某些时隙没有PDSCH调度,也保留对应的反馈位。
Type 2(动态码本):反馈位数动态变化,基于实际收到的DCI调度信息生成。每个DCI中包含一个计数器DAI(Downlink Assignment Index),帮助UE确认是否遗漏了某个调度。
| 特性 | Type 1半静态码本 | Type 2动态码本 |
|---|---|---|
| 反馈位数 | 固定 | 动态 |
| 开销 | 可能较大(含无效位) | 紧凑高效 |
| 复杂度 | 低 | 较高(需DAI机制) |
| 适用场景 | 简单配置、TDD | 载波聚合、FDD |
HARQ位于MAC层,提供毫秒级的快速纠错。但它并不能保证100%可靠——当达到最大重传次数(通常4次)后仍然失败,就把问题交给RLC层的ARQ机制来处理。
flowchart TB
subgraph 协议栈纠错层级
direction TB
PHY["物理层<br/>FEC编解码<br/>(LDPC/Polar)"]
MAC_HARQ["MAC层<br/>HARQ快速重传<br/>延迟: ~1-4ms<br/>最大重传: 4次"]
RLC_ARQ["RLC层<br/>ARQ可靠重传<br/>延迟: ~10-100ms<br/>最大重传: 由RRC配置"]
PDCP["PDCP层<br/>完整性保护/加密<br/>辅助重排序"]
end
PHY -->|"残余错误"| MAC_HARQ
MAC_HARQ -->|"HARQ失败"| RLC_ARQ
RLC_ARQ -->|"RLC失败<br/>(极端情况)"| PDCP
subgraph 各层保障
D1["BLER目标: ~10%"]
D2["HARQ后残余BLER: ~0.1%"]
D3["RLC后残余错误: ~0.00001%"]
end
PHY -.-> D1
MAC_HARQ -.-> D2
RLC_ARQ -.-> D3
这个分层设计体现了一个重要原则:快速但不完美的纠错(HARQ)在前,慢速但完美的纠错(RLC ARQ)在后。大部分错误在HARQ阶段就解决了(约99.9%),RLC只处理极少数残余错误。
| 只用HARQ的问题 | 只用RLC的问题 |
|---|---|
| 最大4次重传后放弃 | 反馈延迟太大(10-100ms) |
| 不适合高可靠性业务(99.999%) | 无法满足URLLC时延要求 |
| 软缓冲区溢出时丢数据 | 无法利用软合并增益 |
两者的配合使得5G能够同时满足eMBB的高速需求和URLLC的超可靠低延迟需求。
当你在分析UE日志时,以下信息是HARQ分析的关键:
| 日志字段 | 含义 | 异常判断 |
|---|---|---|
| HARQ Process ID | 当前进程号 | 应在0~15之间轮转 |
| NDI | 新数据指示 | 新数据时翻转,重传时不变 |
| RV | 冗余版本 | 首传应为0,重传应变化(0→2→3→1) |
| ACK/NACK | 反馈结果 | 连续NACK说明信道质量差 |
| MCS | 调制编码方案 | 频繁重传时MCS应自适应降级 |
常见日志诊断场景:
HARQ重传会直接降低用户吞吐量。在正常网络中,下行HARQ重传率应低于5%。如果重传率超过10%,需要排查:
陷阱一:看到NACK就认为信道质量差。实际上,10%的初始BLER是设计目标,并非异常。只有重传后仍然NACK才说明问题严重。
陷阱二:忽略HARQ进程号。不同进程的NACK可能是不同TB的问题,需要按进程分别分析。
陷阱三:混淆HARQ重传和RLC重传。HARQ重传在MAC层(微秒级),RLC重传更高层(毫秒级)。日志中需要区分两者的计数器。
Q: HARQ和ARQ到底有什么区别? A: HARQ在MAC层,利用软合并实现毫秒级快速纠错;ARQ在RLC层,只做简单重传(不合并),延迟更大但保证最终可靠性。HARQ是"又快又好但可能失败",ARQ是"慢但一定成功"的兜底机制。
Q: Chase Combining和Incremental Redundancy哪个更好? A: IR更好。IR每次重传都传递新的校验位,有效码率逐次降低,单次重传增益可达6 dB,远高于Chase的3 dB。但在高码率场景下,IR可用的额外校验位有限,会退化为Chase Combining。实际网络中,基站调度器通常默认使用IR。
Q: 5G为什么把HARQ进程数从4G的8个增加到16个? A: 5G NR支持更灵活的参数集(更大的子载波间隔意味着更短的时隙)和更长的反馈时延(尤其在TDD配置下),需要更多并行进程来保持信道利用率不下降。此外,载波聚合场景下每个载波独立维护HARQ进程,16个进程提供了更大的调度灵活性。
Q: CBG级HARQ有什么实际好处? A: 对于大包传输(如4层256QAM),一个TB可能包含几十个码块。如果只有1个码块出错,传统TB级重传需要重传整个TB(几十KB),而CBG级只重传出错的码块(几KB),频谱效率提升5-10倍。这对于高吞吐量场景(eMBB)尤其重要。
Q: 如果HARQ达到最大重传次数还是失败怎么办? A: MAC层HARQ放弃后,错误交给RLC层的ARQ机制处理。RLC会重新分段并请求重传,延迟会增大但最终能保证数据可靠送达。如果RLC也失败了(极端情况),PDCP层会触发无线链路失败(RLF)流程,UE可能需要进行RRC重建或切换。
本文由「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 等场景全覆盖。
