想象你给朋友念一段电话号码。朋友没听清,让你再说一遍——但聪明的是,他不是把第一次听的直接扔掉,而是把两次听到的内容"叠加"起来,互相印证,拼出完整号码。这就是 HARQ(混合自动重传请求) 的核心思想:重传不是简单的"再来一次",而是"累积信息、逐步逼近正确结果"。
无线通信面临一个根本矛盾:电磁波在空气中传播时,会被建筑遮挡、被其他信号干扰、被接收机的噪声淹没。结果就是——数据包到达接收端时,可能已经面目全非。
解决数据出错,经典思路有两条路:
| 方案 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 前向纠错(FEC) | 发送时加入冗余校验位,接收端自行纠错 | 不需要反馈,延迟低 | 冗余固定,信道好时浪费带宽,信道差时可能纠不过来 |
| 自动重传(ARQ) | 接收端发现错误后请求重传 | 按需重传,不浪费带宽 | 需要等待反馈,延迟高;丢弃旧包,不利用已有信息 |
HARQ = FEC + ARQ 的合体进化版。它既发送冗余校验位(FEC的功劳),又在出错时重传(ARQ的功劳),更关键的是——它把每次传输的"软信息"都保留下来,合并使用。这就是"Hybrid"(混合)的真正含义。
误块率(BLER) vs SNR 对比示意:
BLER
1.0 | ARQ(无合并,每次独立解码)
| \
| \
0.5 | \
| \ HARQ(软合并,累积增益)
| \________
0.1 | \ \________
| \ \________
0.0 |________________\_______________________ SNR
0 5 10 15 20 (dB)
→ HARQ通过软合并,在相同SNR下获得更低的误块率
把数据传输想象成快递送货:
sequenceDiagram
participant 发送端 as 发送端(基站/UE)
participant 接收端 as 接收端(UE/基站)
Note over 发送端,接收端: 第1次传输(初传)
发送端->>接收端: 发送编码后的数据包(Transport Block)
Note right of 接收端: 1. 接收信号并存入软缓冲区<br/>2. 尝试解码<br/>3. CRC校验 → 失败❌
接收端-->>发送端: NACK(否定确认)
Note over 发送端,接收端: 第2次传输(重传)
发送端->>接收端: 发送冗余版本(不同编码比特)
Note right of 接收端: 1. 接收重传信号<br/>2. 与软缓冲区数据合并<br/>3. 合并后重新解码<br/>4. CRC校验 → 成功✅
接收端-->>发送端: ACK(确认)
Note over 发送端,接收端: 传输完成,释放HARQ进程
关键细节拆解:
工程直觉:这就好比你听一段录音,第一次有噪音听不清,录下来;第二次播放时你把两段录音叠加,噪音部分随机抵消,有用信号叠加增强,信噪比提高了。
软合并是HARQ的灵魂。它有两种实现方式,效果差异显著。
原理:重传时发送完全相同的编码比特。接收端把多次收到的同一组比特的软值相加。
$$\text{LLR}{\text{combined}}(i) = \sum_k(i)$$}^{K} \text{LLR
其中 $K$ 是传输次数,$\text{LLR}_k(i)$ 是第 $k$ 次传输中第 $i$ 个比特的对数似然比。
效果:纯粹提高信噪比(SNR),相当于 $\sqrt{K}$ 倍的功率增益。两次传输约获得 3 dB 的SNR增益。
类比:同一张模糊的照片,多拍几次然后叠加——每张照片的信号一致,噪点随机,叠加后信噪比提升。
原理:重传时发送不同的编码比特(不同的冗余版本,Redundancy Version, RV)。每次重传携带新的校验信息。
效果:不仅获得SNR增益,还获得编码增益——因为等效码率降低了。
$$R_{\text{effective}} = \frac{K \times \text{信息比特数}}{\text{总发送比特数}}$$
每次重传都往"分母"加比特,等效码率持续下降,纠错能力持续增强。
类比:第一次给你看一张低分辨率图片(信息+少量校验),第二次不是重复发同一张图,而是额外发一张不同角度的高频细节图——两次叠加后,你得到的不是简单的亮度增强,而是清晰度的质变。
| 对比维度 | Chase合并(CC) | 增量冗余(IR) |
|---|---|---|
| 重传内容 | 与初传完全相同 | 不同的冗余版本(新校验比特) |
| 增益类型 | 仅SNR增益(~3dB/次) | SNR增益 + 编码增益 |
| 总增益 | 较低(约2-3dB) | 较高(比CC高约2dB) |
| 软缓冲区需求 | 较小(同一段数据重复覆盖) | 较大(需要累积不同版本的比特) |
| 实现复杂度 | 低 | 高(需要管理冗余版本和循环缓冲区) |
| LTE/5G中的使用 | 辅助方式 | 主流方式 |
为什么5G主要用IR? 因为频谱效率。IR每次重传都带来"新信息",而CC只是简单重复。在宝贵的无线频谱上,每一次传输都应该物尽其用。
增量冗余之所以能发送"不同的编码比特",背后靠的是一个精巧的设计:循环缓冲区(Circular Buffer)。
flowchart TD
A["原始信息比特<br/>(Transport Block)"] --> B["添加CRC"]
B --> C["码块分段<br/>(Code Block Segmentation)"]
C --> D["LDPC编码<br/>(母码率 1/3 ~ 1/5)"]
D --> E["写入循环缓冲区<br/>(Circular Buffer)"]
E --> F["按RV选取比特<br/>(Rate Matching)"]
F --> G["调制映射<br/>(QPSK/16QAM/64QAM)"]
G --> H["发射信号"]
style E fill:#ff9,stroke:#333
style F fill:#f96,stroke:#333
关键步骤解释:
LDPC编码:5G NR的数据信道使用LDPC码。编码器输出的码率很低(母码率约1/3或1/5),产生大量的校验比特。比如100个信息比特,编码后可能产生300-500个编码比特。
循环缓冲区:所有编码比特被依次写入一个环形缓冲区。结构如下:
循环缓冲区结构示意:
位置: [0 ............ N/3 ............ 2N/3 ............ N]
| 系统比特 | 校验1 | 校验2 |
| (原始信息) | (Parity 1) | (Parity 2) |
↑ ↑ ↑ ↑
RV=0起始 RV=1起始 RV=2起始 RV=3起始
| 冗余版本 | 起始位置 | 主要内容 | 典型用途 |
|---|---|---|---|
| RV0 | 缓冲区起始 | 系统比特为主(信息比特) | 初传 |
| RV2 | ~1/3处 | 混合比特 | 重传可选 |
| RV3 | ~2/3处 | 混合比特 | 重传可选 |
| RV1 | ~末尾 | 校验比特为主 | 重传(提供新冗余) |
初传 (RV0): 发送 [系统比特 + 部分校验1]
重传 (RV1): 发送 [校验2 + 部分校验1]
合并后: 相当于发送了 [系统比特 + 校验1 + 校验2] 的完整母码
等效码率: 从初传的 0.5 → 合并后的 0.25(纠错能力翻倍!)
工程调试技巧:在路测log中,如果你看到连续多次NACK后最终ACK,通常说明信道条件差,HARQ在"积攒"冗余信息。如果频繁出现4次以上重传,需要检查覆盖或干扰问题。
如果HARQ只是简单的"发→等反馈→重传",那每次重传之间都要"干等"反馈,吞吐量会暴跌。解决方案是:多个HARQ进程并行工作。
每个HARQ进程本质上是一个停等协议(Stop-and-Wait):
sequenceDiagram
participant TX as 发送端
participant RX as 接收端
Note over TX,RX: HARQ进程 #0
TX->>RX: 数据包 #0(初传)
Note over TX: 等待反馈...<br/>这段时间不能发新数据!
RX-->>TX: NACK
TX->>RX: 数据包 #0(重传)
RX-->>TX: ACK
Note over TX,RX: 进程 #0 结束,才能开始下一个
问题:从发送到收到ACK/NACK,中间有RTT(Round Trip Time)的等待。在5G NR中,这个等待时间约为几个时隙(slot)。如果只用一个进程,信道利用率极低。
解决方案:启动多个独立的HARQ进程,当一个进程在等反馈时,其他进程继续发送新数据。就像工厂流水线:
gantt
title HARQ多进程并行传输时序(5G NR示例)
dateFormat X
axisFormat %s
section 进程0
初传 TB#0 :p0_1, 0, 1
等待反馈 :p0_w, 1, 4
重传 TB#0 :p0_2, 4, 5
section 进程1
初传 TB#1 :p1_1, 1, 2
等待反馈 :p1_w, 2, 5
section 进程2
初传 TB#2 :p2_1, 2, 3
等待反馈 :p2_w, 3, 6
section 进程3
初传 TB#3 :p3_1, 3, 4
等待反馈 :p3_w, 4, 7
| 系统 | 最大HARQ进程数 | 反馈时序 |
|---|---|---|
| LTE FDD | 8 | 固定4ms后反馈 |
| LTE TDD | 4-15(取决于上下行配比) | 随配比变化 |
| 5G NR | 最多16 | 灵活可配(DCI指示K1值) |
5G NR的关键改进:反馈时序不再是固定值,而是由DCI(下行控制信息)中的 PDSCH-to-HARQ_feedback timing indicator 字段动态指示。这使得5G能根据业务需求和调度策略灵活调整HARQ时序。
相比4G LTE,5G NR在HARQ方面做了三个关键改进,每一个都直指实际工程痛点。
在4G LTE中,如果一个大传输块(TB)中只有一小部分出错,也必须重传整个TB。这就像一本100页的文档只有第37页有个错别字,你却要重印整本——浪费严重。
5G NR引入了 CBG(Code Block Group,码块组) 概念:
传输块(TB)结构:
┌─────────────────────────────────────────────────┐
│ Transport Block (TB) │
├──────────┬──────────┬──────────┬────────────────┤
│ CBG #0 │ CBG #1 │ CBG #2 │ CBG #3 │
│┌──┬──┬──┐│┌──┬──┬──┐│┌──┬──┬──┐│┌──┬──┐ │
││CB│CB│CB│││CB│CB│CB│││CB│CB│CB│││CB│CB│ │
│└──┴──┴──┘│└──┴──┴──┘│└──┴──┴──┘│└──┴──┘ │
└──────────┴──────────┴──────────┴────────────────┘
✅ ❌ ✅ ✅
只重传这个CBG!
工作机制: - TB被分段为多个码块(CB),CB被分组为码块组(CBG) - 接收端为每个CBG独立反馈ACK/NACK - 重传时只发送失败的CBG,而非整个TB
效率提升:假设一个TB有8个CBG,只有1个出错。传统方式重传整个TB需要100%资源,CBG方式只需 12.5% 的资源。
调试场景:在5G基站日志中查看HARQ反馈时,如果开启了CBG模式,你会看到一组bitmap(如
1011 0111),每个bit对应一个CBG的ACK/NACK状态。如果某个CBG频繁NACK,可能指向该频段的局部干扰。
4G LTE的HARQ反馈时序是硬编码的(FDD固定4ms),5G NR改为动态可配:
$$\text{反馈时刻} = \text{PDSCH时隙} + K_1$$
其中 $K_1$ 由DCI动态指示,取值范围1-15个时隙。
为什么这样设计? - URLLC场景:$K_1$ 设小(如1-2个时隙),快速反馈,满足低延迟要求 - eMBB场景:$K_1$ 设大(如8-15个时隙),给接收端更多处理时间,提高解码成功率 - TDD灵活配比:不同上下行配比下,都能找到合适的反馈时机
4G LTE的下行HARQ是同步的——重传必须发生在固定的子帧位置。5G NR改为异步HARQ——调度器可以在任意时隙发起重传。
好处: - 调度器有完全的自由度,可以结合信道状态选择最佳重传时机 - 支持优先级调度:如果有更紧急的数据,可以推迟重传 - 配合mini-slot(迷你时隙),可以实现超快速重传
在协议栈中,HARQ不是孤军奋战的。它和RLC层的ARQ构成了两道防线:
flowchart TB
subgraph "第一道防线:MAC层 HARQ"
A["数据传输"] --> B{"CRC校验"}
B -->|通过| C["ACK → 完成"]
B -->|失败| D["NACK → 重传<br/>(软合并解码)"]
D --> E{"合并解码"}
E -->|通过| C
E -->|失败,<br/>达到最大次数| F["放弃,交给RLC层"]
end
subgraph "第二道防线:RLC层 ARQ"
F --> G["RLC检测SN缺口<br/>或收到STATUS PDU"]
G --> H["RLC ARQ重传<br/>(不合并,完全重发)"]
H --> I{"RLC重传成功?"}
I -->|是| J["数据完整交付"]
I -->|否,<br/>达到最大重传| K["触发RRC重建立<br/>或无线链路失败"]
end
style A fill:#4CAF50,color:#fff
style F fill:#FF9800,color:#fff
style K fill:#F44336,color:#fff
| 对比维度 | MAC层HARQ | RLC层ARQ |
|---|---|---|
| 工作层级 | MAC子层(物理层协助) | RLC子层 |
| 反馈方式 | 单比特ACK/NACK(PUCCH/PUSCH) | STATUS PDU(携带SN号段) |
| 重传单位 | Transport Block或CBG | RLC PDU |
| 合并方式 | 软合并(累积信息) | 不合并(丢弃旧包,完全重发) |
| 延迟 | 极低(1-4个时隙) | 较高(需要等STATUS报告) |
| 最大重传次数 | 通常3-4次 | 可配置(如32次) |
| 适用模式 | 所有数据传输 | 仅RLC AM(确认模式) |
为什么需要两道防线?
类比:HARQ是急诊室的医生,快速处理大部分病例;RLC ARQ是专科医院,处理急诊室解决不了的疑难杂症。
把视角拉远,看看HARQ在整个5G下行数据传输链路中处于什么位置:
完整的数据传输处理链路:
应用层数据
↓
PDCP层(头压缩、加密)
↓
RLC层(分段/级联、ARQ重传)← 第二道防线
↓
MAC层(调度、HARQ)← 第一道防线在这里
↓
├── 添加MAC头和CRC
├── HARQ实体管理(进程分配)
↓
物理层处理
├── 传输块添加CRC
├── 码块分段 + 每个CB添加CRC
├── LDPC信道编码(母码率1/3~1/5)
├── 速率匹配(循环缓冲区 + RV选择)← 软合并的关键
├── 调制(QPSK/16QAM/64QAM/256QAM)
├── 层映射 + 预编码(MIMO)
├── 资源元素映射(RE Mapping)
├── OFDM信号生成
↓
天线发射 → 无线信道 → 接收端
↓
接收端逆向处理 + 软合并解码 → CRC校验 → ACK/NACK
在路测工具(如TEMS、鼎利Pilot)中,你会看到 BLER(Block Error Rate) 和 HARQ重传次数 的统计。正常的初始BLER应在10%左右(这是AMC自适应编码的目标值),经过1-2次HARQ重传后残余BLER应接近0。
异常排查: - 初始BLER > 30% → 覆盖问题或强干扰,检查RSRP/RSRQ/SINR - HARQ重传4次仍失败率高 → 深衰落区域,可能需要增加基站或调整天线 - 重传成功率低但初始BLER正常 → 可能是软缓冲区溢出或调度器配置问题
在gNB的HARQ相关参数配置中,常见的可调项包括:
| 参数 | 含义 | 典型值 | 调优建议 |
|---|---|---|---|
| maxHarqTx | HARQ最大重传次数 | 3-4 | 业务对延迟敏感时设小,对可靠性敏感时设大 |
| harq-CodebookSize | HARQ码本大小(ACK/NACK位数) | 1-16 | CBG模式下需要更大码本 |
| nrofHARQ-Processes | HARQ进程数 | 8-16 | 大带宽、高负载时可增大 |
| maxCBGperTB | 每TB的最大CBG数 | 2/4/6/8 | 大TB时增大CBG粒度提高效率 |
上行HARQ与下行有一个关键区别:基站控制上行重传的调度。如果UE的上行HARQ反馈NACK,基站必须在DCI中重新调度该UE的上行重传资源。
常见问题:UE上行BLER高,但基站似乎没有及时调度重传。排查方向: - 检查PHR(Power Headroom Report)——UE可能功率不足 - 检查BSR(Buffer Status Report)——UE是否有数据待发 - 检查DCI format 0_1中的NDI(New Data Indicator)——如果NDI翻转了,说明基站认为前一个数据已经成功,没有触发重传
NDI是HARQ协议中一个精巧的信号:
| NDI状态 | 含义 |
|---|---|
| 与上次相同(Toggle=0) | 这是一个重传,接收端应进行软合并 |
| 与上次不同(Toggle=1) | 这是一个新数据,接收端应清空软缓冲区 |
调试陷阱:如果看到路测log中NDI频繁翻转但CRC一直失败,不要误以为是"新数据一直在失败"——每次NDI翻转意味着前一次HARQ进程被强制释放(可能是调度器超时),新的TB使用了该进程。需要检查为什么前一次传输未被正确反馈。
软合并的增益可以用一个简化的公式理解:
Chase合并的SNR增益:
$$\text{SNR}{\text{combined}} = \sum$$}^{K} \text{SNR}_k \approx K \cdot \overline{\text{SNR}
两次传输约获得 3 dB 增益($10\log_{10}(2) \approx 3\text{dB}$),三次约 4.8 dB。
增量冗余的额外编码增益:
$$\text{FER}{\text{IR}} \approx f\left(\frac{E_b}{N_0}, R\right)$$}
其中等效码率 $R_{\text{eff}} = R_0 / K$($R_0$为初传码率,$K$为传输次数)。码率每降低一半,编码增益约增加 1-2 dB。
综合来看:
| 传输次数 | Chase合并增益 | 增量冗余增益 |
|---|---|---|
| 1次(初传) | 0 dB | 0 dB |
| 2次 | ~3 dB | ~5 dB |
| 3次 | ~4.8 dB | ~7.5 dB |
| 4次 | ~6 dB | ~9 dB |
IR比CC多出的2-3dB,在小区边缘区域就是"能上网"和"断线"的区别。
| 特性 | LTE (4G) | NR (5G) |
|---|---|---|
| 信道编码 | Turbo码 | LDPC码 |
| 下行HARQ | 异步(FDD异步,TDD同步) | 异步 |
| 上行HARQ | 同步 | 异步 |
| 最大进程数 | 8 | 16 |
| 反馈时序 | 固定(FDD 4ms) | 灵活(DCI指示 $K_1$) |
| 重传粒度 | 整个TB | TB或CBG |
| HARQ-ACK码本 | 半静态 | Type 1(半静态)/ Type 2(动态) |
| 软缓冲区管理 | 较简单 | 支持按CBG缓冲,更高效 |
Q1: HARQ和ARQ到底是什么关系?是替代还是互补?
A: 是互补关系,不是替代。HARQ工作在MAC层,提供快速的物理层重传(1-4个时隙级);ARQ工作在RLC层,是兜底机制。HARQ能解决90%以上的传输错误,剩下的交给ARQ。两者协同确保端到端数据完整性。
Q2: 为什么5G用LDPC码替代了4G的Turbo码?这对HARQ有什么影响?
A: LDPC码在长码块(大TB)场景下性能优于Turbo码,且并行度更高,更适合5G的大带宽高速率需求。对HARQ的影响是:LDPC支持更灵活的码块分段和CBG粒度,使得5G的CBG级重传更高效。LDPC的两个基图(Base Graph 1和2)分别针对大块和小块数据优化。
Q3: 软缓冲区溢出会怎样?
A: 接收端的软缓冲区大小是有限的(UE能力上报中包含)。如果TB过大或重传次数过多,软缓冲区可能装不下。此时较早的软比特会被覆盖丢弃,导致合并增益下降。5G通过限制最大CB数量和CBG粒度来管理缓冲区开销。
Q4: 实际网络中HARQ重传概率大概是多少?
A: 正常情况下,AMC(自适应调制编码)会将初始BLER控制在10%左右——也就是说大约10%的TB需要第一次HARQ重传。经过1次重传后残余错误率通常降到1%以下。如果重传率持续超过20%,通常意味着覆盖或干扰问题。在高速移动场景(高铁、车载)中,重传率会显著上升。
Q5: TDD网络中HARQ时序为什么比FDD复杂?
A: 因为TDD的上下行切换不是连续的——下行数据发送后,可能要等好几个时隙才轮到上行(用于发ACK/NACK),反之亦然。不同的上下行配比(如DDDSU、DSDDDSUU等)会导致不同的HARQ时序。5G NR通过灵活的 $K_1$ 指示解决了这个问题,但配置错误可能导致ACK/NACK无法及时发送,影响吞吐量。
本文由「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 等场景全覆盖。
