想象你通过快递寄一份100页的合同给客户。有两种策略保证客户收到完整内容:
策略A(ARQ):先寄100页,客户收到后逐页检查,发现第37页有污渍,打电话告诉你"第37页坏了,请重发"。你重新寄第37页。问题在于——每次往返都需要时间,而且重发的还是同样可能有污渍的纸。
策略B(FEC):你学聪明了,给每页合同额外附上3页"校验页"。即使有几页被污损,客户也能用校验页恢复原文。问题在于——不管有没有污损,校验页都要寄,白白浪费了快递费。
策略C(HARQ):把两种策略结合起来。第一次只附少量校验页(省快递费);如果客户发现确实有污损且校验页不够恢复,再针对性地补发更多校验页。而且,客户不会把第一次收到的那份扔掉——他会把"有污渍的原文"和"新补的校验页"放在一起恢复。这就是HARQ(混合自动重传请求)的核心思想:FEC + ARQ + 软信息保留合并。
在深入HARQ之前,我们需要理解无线通信中为什么会需要这么复杂的机制。无线信道是个极其恶劣的传输环境——信号会被建筑物反射、被雨雾吸收、被其他用户干扰。误码是常态,不是意外。
flowchart TD
A["ARQ<br/>纯重传"] --> C["HARQ<br/>FEC + ARQ + 软合并"]
B["FEC<br/>纯前向纠错"] --> C
A1["发现错误 → 丢弃 → 重传<br/>简单但慢"] --> A
B1["预先加冗余 → 接收端自行纠正<br/>快但浪费带宽"] --> B
C1["先少加冗余<br/>不够再补,且保留软信息合并"] --> C
style C fill:#e1f5fe,stroke:#0288d1,stroke-width:3px
style C1 fill:#e1f5fe,stroke:#0288d1
三者的核心区别:
| 特性 | ARQ | FEC | HARQ |
|---|---|---|---|
| 纠错方式 | 重传原始数据 | 预加冗余自行纠正 | 冗余 + 重传 + 合并 |
| 时延 | 高(多次往返) | 低(一次传输) | 中等(首次快,需要时补) |
| 带宽效率 | 好(信道好时不浪费) | 差(始终带冗余) | 好(按需增加冗余) |
| 可靠性 | 依赖信道质量 | 受限于冗余量 | 渐进增强,很高 |
| 适用场景 | 有线网络 | 卫星广播 | 蜂窝移动通信 |
为什么移动通信选择HARQ? 因为无线信道的质量是动态变化的——一秒钟前信号很好,下一秒可能因为用户转了个弯就变差了。FEC按最差情况预留冗余太浪费,ARQ每次只重传原始数据效率太低。HARQ则巧妙地做到了"按需增强"——好信道时几乎零开销,差信道时逐步加码。
HARQ的"Hybrid"(混合)体现在它把FEC和ARQ融合在了一起,而它最精妙的地方在于软合并(Soft Combining)——接收端不会丢弃之前解码失败的数据,而是保留"软信息"与重传数据合并后再解码。
当接收端收到一个比特的模拟信号时,它不是简单地判定为0或1(硬判决),而是保留一个对数似然比(LLR):
$$LLR(b_i) = \ln\frac{P(b_i=0|\mathbf{y})}{P(b_i=1|\mathbf{y})}$$
其中 $\mathbf{y}$ 是接收到的信号。LLR的绝对值越大,表示这个比特越确信是0或1;绝对值越小,表示越不确定。这些"不确定"的比特正是出错的地方。软合并就是要把多次传输的LLR加在一起,让不确定的比特逐渐变确定。
这是最简单的软合并方式,由David Chase在1985年提出。
原理:重传与初次传输发送完全相同的编码比特(即相同的冗余版本RV=0)。接收端将两次接收的LLR逐比特相加。
$$LLR_{combined}(b_i) = LLR_1(b_i) + LLR_2(b_i)$$
类比:照片在雾天拍的太模糊。你把相机固定在三脚架上,同一场景连拍两张,然后把两张照片的像素值平均——噪声被平均掉了,信号保持不变,等效信噪比(SNR)提升了约3dB。
效果:相当于将编码速率不变的前提下,将有效SNR提升了 $10\log_{10}N$ dB(N为传输次数)。
这是性能更优的方式,也是5G NR默认采用的HARQ方案。
原理:重传时发送不同于初次传输的编码比特——即不同的冗余版本(RV)。接收端将不同RV的LLR拼接在一起,等效于降低了编码速率,获得了额外的编码增益。
类比:你第一次寄合同,附了1页校验摘要。客户说不够恢复,你这次不重寄原合同了,而是补寄2页更详细的校验信息。客户手头有了原始合同 + 两轮校验信息,纠正能力大大增强。
效果:不仅获得了SNR增益,还获得了编码增益。编码速率从第一次传输的 $R$ 降低到 $\frac{R}{N}$(N次传输后),纠错能力随传输次数显著增强。
| 对比维度 | Chase Combining | Incremental Redundancy |
|---|---|---|
| 重传内容 | 与初传完全相同 | 不同的冗余版本 |
| 合并方式 | LLR逐比特相加 | LLR拼接(补充新比特) |
| 增益来源 | 仅SNR增益(信号累加) | SNR增益 + 编码增益 |
| 等效码率 | 不变 | 逐次降低 |
| 实现复杂度 | 低(无需管理RV) | 高(需管理RV和循环缓冲区) |
| 性能 | 好(尤其在中等SNR) | 更好(尤其在低SNR区域) |
| 适用场景 | 简单系统 | 5G NR / LTE |
flowchart LR
subgraph CC["Chase Combining(追赶合并)"]
direction TB
CC1["初传: [A B C D]<br/>RV=0"]
CC2["重传: [A B C D]<br/>RV=0(完全相同)"]
CC3["合并: [A+A B+B C+C D+D]<br/>SNR提升,码率不变"]
CC1 --> CC3
CC2 --> CC3
end
subgraph IR["Incremental Redundancy(增量冗余)"]
direction TB
IR1["初传: [A B C D]<br/>RV=0(系统比特+少量校验)"]
IR2["重传: [E F G H]<br/>RV=2(新的校验比特)"]
IR3["合并: [A B C D E F G H]<br/>码率减半,编码增益+SNR增益"]
IR1 --> IR3
IR2 --> IR3
end
style CC fill:#fff3e0
style IR fill:#e8f5e9
增量冗余的核心问题是:重传时应该发送哪些编码比特? 5G NR用一种优雅的机制来解决这个问题——循环缓冲区(Circular Buffer)。
以5G NR数据信道使用的LDPC码为例,一个传输块(TB)经过以下处理链:
LDPC编码器输出的比特被写入一个环形缓冲区。不同的冗余版本(RV)对应缓冲区中的不同起始位置:
$$RV\text{ 起始位置} = k_0 \cdot N_{cb}$$
其中 $k_0$ 是由RV值决定的归一化偏移, $N_{cb}$ 是循环缓冲区的大小。
5G NR定义了4个冗余版本:
| RV值 | 典型用途 | 在循环缓冲区中的位置 | 特点 |
|---|---|---|---|
| RV 0 | 初次传输 | 缓冲区起始位置(0) | 包含完整系统比特,自可解码 |
| RV 2 | 第一次重传 | 约1/3处 | 包含新校验比特 |
| RV 3 | 第二次重传 | 约2/3处 | 包含更多新校验比特 |
| RV 1 | 第三次重传 | 约1/6处 | 补充遗漏的校验比特 |
"自可解码"是什么意思? 意味着即使没有之前的传输,仅凭RV 0本身就能独立解码(因为它包含完整的系统信息比特)。这在某些场景下非常重要——比如UE错过了之前的传输,直接收到了重传。
flowchart TD
subgraph CB["循环缓冲区(Circular Buffer)"]
direction LR
B0["系统比特<br/>(原始数据)"] --> P1["校验比特1<br/>(LDPC校验)"]
P1 --> P2["校验比特2"]
P2 --> P3["额外校验"]
P3 --> B0
RV0["|← RV 0 从这里开始 →|"]
RV2[" |← RV 2 从这里开始 →|"]
RV3[" |← RV 3 从这里开始 →|"]
end
subgraph Select["速率匹配选取"]
S1["初传 (RV=0): 选取 [系统比特 + 部分校验1]<br/>码率较高,如 0.5"]
S2["重传1 (RV=2): 选取 [校验比特2 + 部分额外校验]<br/>新增冗余信息"]
S3["合并后: [系统比特 + 校验1 + 校验2 + 部分额外校验]<br/>等效码率降低至 ~0.25"]
end
B0 -.-> S1
P2 -.-> S2
B0 -.-> S3
P1 -.-> S3
P2 -.-> S3
style B0 fill:#bbdefb
style P1 fill:#c8e6c9
style P2 fill:#fff9c4
style P3 fill:#ffccbc
你可能好奇为什么不是简单的0→1→2→3。这是因为5G NR经过优化设计:
这种非等间隔选取确保了每次重传都能最大化新增的编码增益,而不是简单地均匀扫描缓冲区。
HARQ本质上是一个停等协议(Stop-and-Wait)——发送方发完数据后必须停下来等待接收方的ACK/NACK反馈。如果只有一个HARQ进程,数据传输的时间线是这样的:
时间 → |发送数据| 等待解码 | 等待反馈 | 再发送 | ...
████████ ░░░░░░ ░░░░░░ ████████
大量时间被浪费在"等待"上。在5G NR的典型配置中,从PDSCH发送到收到HARQ-ACK反馈需要约4-8个时隙(取决于K1参数配置),这意味着如果只有一个HARQ进程,信道的利用率可能不到20%。
5G NR的解决思路和CPU流水线一样——并行处理。定义多个独立的HARQ进程(5G NR最多支持16个),每个进程独立地执行"发送→等待反馈→重传/新传"的循环。
进程0: |发送| 等待 |等待| 收到ACK |新传| 等待 |...
进程1: |发送| 等待 |等待| 收到ACK |新传| ...
进程2: |发送| 等待 |等待|收到NACK|重传|...
...
进程15: |发送| 等待 |...
这样,虽然每个进程都在"停等",但多个进程交织在一起,信道始终被充分利用。
每个HARQ进程有一个唯一的编号(0~15)。基站通过DCI(下行控制信息)告诉UE当前调度的是哪个HARQ进程号,以及两个关键标志位:
| DCI字段 | 含义 | 值与操作 |
|---|---|---|
| NDI(New Data Indicator) | 新数据指示 | 翻转=新传;不变=重传 |
| RV(Redundancy Version) | 冗余版本 | 0/1/2/3,指示当前传输的RV |
| HARQ Process Number | 进程号 | 0~15 |
NDI是一个巧妙的设计:每次新传时NDI翻转(0→1或1→0),重传时NDI不变。UE通过检测NDI是否翻转来判断"这是一次新传还是重传",同时也会触发UE清空该进程的软缓冲区——因为新数据和旧数据不能混在一起合并。
5G NR的下行HARQ时序由几个关键参数控制:
sequenceDiagram
participant gNB as 基站(gNB)
participant UE as 手机(UE)
Note over gNB,UE: K0=0: PDCCH与PDSCH同时隙
gNB->>UE: PDCCH (DCI调度, RV=0, NDI翻转)
gNB->>UE: PDSCH (数据, slot n)
Note over gNB,UE: K1=4: PDSCH后第4个slot反馈
Note over UE: UE解码PDSCH (slot n ~ n+3)
UE->>UE: 解码失败 → 生成NACK
UE->>gNB: PUCCH: NACK (slot n+K1)
Note over gNB,UE: 基站收到NACK,调度重传
gNB->>UE: PDCCH (DCI调度, RV=2, NDI不变)
gNB->>UE: PDSCH (重传数据, slot m)
Note over UE: UE软合并: LLR(RV=0) + LLR(RV=2)
Note over UE: 合并后解码成功 → 生成ACK
UE->>gNB: PUCCH: ACK (slot m+K1)
关键参数:
| 参数 | 含义 | 配置方式 | 典型值 |
|---|---|---|---|
| K0 | PDCCH到PDSCH的时隙偏移 | RRC参数 k0 |
0(同时隙) |
| K1 | PDSCH到HARQ-ACK反馈的时隙偏移 | RRC参数 dl-DataToUL-ACK |
1~15,常见4~8 |
| K2 | DCI到PUSCH的时隙偏移(上行) | RRC参数 k2 |
2~32 |
| 对比维度 | LTE | 5G NR |
|---|---|---|
| 下行HARQ | 异步、自适应 | 异步、自适应(相同) |
| 上行HARQ | 同步(固定时序) | 异步(灵活调度) |
| HARQ进程数 | 下行8个(FDD) | 最多16个 |
| ACK/NACK时序 | 固定(4ms for FDD) | 灵活(K1由RRC配置) |
| 重传粒度 | 仅TB级 | TB级 + CBG级 |
| 信道编码 | Turbo码 | LDPC码(数据)/ Polar码(控制) |
5G NR最大的改进是上行也采用异步HARQ。在LTE中,上行HARQ是同步的——如果PHICH返回NACK,UE必须在固定的时间窗口重传,基站不能灵活调度。5G NR取消了这一限制,基站可以通过DCI灵活调度上行重传的时频资源和MCS,对TDD等非对称帧结构更友好。
在5G NR中,一个传输块(TB)可能非常大(eMBB场景下可达数十万比特)。TB被分割成多个码块(CB),每个CB独立编码并添加CRC。
问题来了:如果100个CB中只有2个解码失败了,传统的TB级重传会把100个CB全部重发——98%是浪费!
5G NR引入了码块组(CBG)的概念:
| 参数 | 取值 | 说明 |
|---|---|---|
maxCodeBlockGroupsPerTransportBlock |
1/2/4/8 | 每个TB最多分几个CBG |
| CBGTI(DCI字段) | 位图 | 指示哪些CBG被(重)传输 |
| CBGFI(DCI字段) | 0/1 | 指示UE是否清空对应CBG的软缓冲区 |
举例:一个TB被分成8个CB,配置为4个CBG(每组2个CB)。如果只有CBG#2解码失败,DCI中的CBGTI=0100,表示只重传CBG#2的2个CB。资源开销仅为全TB重传的25%。
天下没有免费的午餐。CBG级重传带来了以下代价: - DCI开销增加:需要CBGTI位图字段,DCI负载增大 - HARQ-ACK码本增大:从1bit/TB变成N bit/TB - 软缓冲区管理更复杂:需要按CBG管理软信息
因此,CBG主要适用于大TB、高MCS、eMBB场景。对于小包(URLLC),TB本身就不大,CBG带来的收益有限。
| 场景 | 与HARQ的关系 |
|---|---|
| 吞吐量异常排查 | 高重传率会严重拉低有效吞吐量。检查HARQ重传统计是排障第一步 |
| 小区边缘优化 | 边缘用户SNR低,HARQ重传频繁。优化功率控制或切换阈值 |
| 时延敏感业务调优 | URLCC业务对重传次数有严格要求。需要优化MCS选择策略(外环链路自适应) |
| Massive MIMO场景 | 多用户配对时,MU干扰可能导致突发性解码失败,HARQ是兜底机制 |
| TDD配比优化 | 上下行配比影响K1时序选择,进而影响HARQ往返时间 |
NDI误解导致的软缓冲区污染:如果UE误将重传判断为新传(比如NDI因DCI丢失被误判翻转),会清空软缓冲区,导致之前积累的软信息全部丢失。在log分析中,检查NDI翻转序列是否合理是基本操作。
K1配置不当导致ACK/NACK错位:K1值必须与UE的处理能力匹配。如果K1设置太小(如设为1),UE可能来不及完成PDSCH解码就要求反馈,导致虚假NACK。5G NR引入了UE能力等级(UE Capability)来约束最小K1。
CBG重传中的CBGFI遗漏:如果基站设置了CBGFI=0(不清空软缓冲区),但之前该CBG的软信息已经被后续新传覆盖,会导致合并了不相关的软信息,解码必然失败。
软缓冲区溢出:UE的HARQ软缓冲区大小是有限的(由UE能力决定)。如果同时有太多HARQ进程处于活跃状态,软缓冲区可能不够用,导致部分软信息被丢弃。
在分析5G NR HARQ问题时,关注以下字段:
假设每次传输经历独立的瑞利衰落,第 $i$ 次传输的接收信号为:
$$y_i = h_i \cdot x + n_i$$
其中 $h_i$ 是信道增益,$n_i$ 是噪声。Chase Combining后的等效LLR为:
$$LLR_{CC} = \sum_{i=1}^{N} \frac{|h_i|^2}{\sigma^2} \cdot x$$
等效SNR为各次传输SNR之和:
$$SNR_{CC} = \sum_{i=1}^{N} SNR_i$$
如果是理想情况(各次SNR相同),N次传输后SNR提升 $10\log_{10}N$ dB。但注意——编码速率没有改变,所以纠错能力的提升完全来自于信号质量的改善。
IR合并后,等效编码速率为:
$$R_{eq} = \frac{K}{N_{total}} = \frac{K}{\sum_{i=1}^{N} E_i}$$
其中 $K$ 是信息比特数, $E_i$ 是第 $i$ 次传输的编码比特数。
当等效码率降低到信道容量以下时,香农定理保证了解码成功:
$$R_{eq} < C = \log_2(1 + SNR)$$
这就是IR的核心优势——它不仅增强了信号,还增加了冗余,从两个维度逼近信道容量。在低SNR区域,编码增益远比SNR增益重要,IR的性能优势可达2-4dB。
Q1: HARQ和RLC层ARQ有什么区别? A: HARQ工作在MAC层/物理层,处理的是物理传输错误,时延极短(毫秒级),但重传次数有限(通常3-4次)。RLC ARQ工作在RLC层(AM模式),处理的是HARQ之后仍残留的错误,时延较长,但可以无限重传直到成功。两者是串行的——HARQ先快跑几轮纠错,剩下的漏网之鱼交给RLC ARQ慢慢收拾。对于大多数场景,HARQ已经能解决95%以上的传输错误。
Q2: 为什么5G NR最多16个HARQ进程? A: 这是在时延和缓冲区之间取平衡。进程数太少,流水线填不满,信道利用率低;进程数太多,UE需要维护大量软缓冲区,硬件成本上升。16个进程在典型配置下能保证绝大多数场景的信道利用率超过90%。对于URLLC等低时延场景,进程数可能配置得更少(如4-8个),因为低时延业务不允许等太多轮HARQ。
Q3: 5G NR为什么上行也用异步HARQ? A: LTE上行用同步HARQ是为了简化UE操作——UE收到NACK后自动在固定位置重传,不需要额外的DCI调度。但同步HARQ在TDD帧结构下非常不灵活——固定时序可能与上下行配比冲突。5G NR统一采用异步HARQ,基站通过DCI灵活调度上行重传的时频位置、MCS和RV,这对TDD和各种非对称配比更友好。
Q4: 实际网络中HARQ重传率多少算正常? A: 初传BLER(Block Error Rate)目标通常设计在10%~30%之间——这不是系统不好,而是故意为之。AMC(自适应调制编码)会选择一个较高的MCS使得初传BLER在目标值附近,这样能最大化频谱效率。HARQ重传就是这个策略的"安全网"。如果重传后(通常1-2次)残余BLER仍高于1%,说明可能存在覆盖问题或干扰问题,需要排查。
Q5: CBG级重传在实际网络中部署广泛吗? A: 目前CBG主要在eMBB高吞吐场景(如毫米波频段、大规模MIMO)中有实际部署价值。在中低频段、中小TB场景下,CBG带来的DCI开销和ACK码本开销可能超过其收益。随着5G-Advanced和6G中TB尺寸的进一步增大,CBG的重要性会越来越高。
本文由「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 等场景全覆盖。
