首页 › deep-tech › 叠着听才听得清:HARQ原理

无线信道是出了名的“坏脾气”:多径、衰落、干扰,让每一个比特在空中飞的时候都可能被打碎。工程师对付它有两件老武器——前向纠错(FEC)和自动重传请求(ARQ)。但真正把移动网络从“能上网”带到“能刷视频”的,是把这两件武器合起来用的第三件:混合自动重传请求(HARQ,Hybrid ARQ)。它藏在协议栈的MAC层与物理层之间,绝大多数用户从未听说过它,却几乎每一次上网、每一通VoNR电话都离不开它。

这篇文章不堆规范条文,只回答三个问题:HARQ为什么要存在?软合并和增量冗余到底“合”的是什么?现网调试时,你会在哪里跟它打交道?

一、两笔算不平的账:FEC与ARQ各自的困境

先把两件老武器各自的账本摊开。

FEC的账:发送端按预定的编码冗余把数据编码,接收端拿到带错的信号后自行纠错,不需要反馈。问题在于,码率必须按最坏信道设计。而无线信道的最坏情况(深衰落、强干扰)比平均情况恶劣得多——如果你按最坏情况把码率压到1/3,那么在信号好的时候,那三分之二的开销就全白烧了。对讲究频谱效率的移动宽带来说,这笔账平时亏得肉疼。

ARQ的账:发送端大胆地按好信道发送,接收端用校验码(如CRC)验货,坏了就喊“重发”。信号好时几乎零开销,很划算。但坏信道里它会陷入死循环:重发的包在同一片噪声里再飞一遍,大概率还是错的;而且第一次接收失败的信息被整个扔掉了——那些“听清了一半”的比特里其实藏着宝贵信息。

两个方案各有一个致命短板,而且短板恰好互补。于是工程师想到了“联姻”:平时按好信道发(保住吞吐),失败时不扔接收结果(保住信息),重传只补给足够的人(保住灵活性)。这就是HARQ的"Hybrid"。

二、第一块基石:失败的接收别扔,留着

理解HARQ,要先理解一个反直觉的事实:译码失败的接收数据,不是垃圾。

传统接收机做完判决,把每个比特判成0或1,这叫硬判决。判决之前,解调器其实手里有一个连续值——对数似然比(LLR),它表示“这个比特是1的可信程度”:LLR为很大的正数,说明几乎肯定是1;接近0,说明拿不准。硬判决相当于把这个连续值“咔嚓”一刀切成0/1,把可信度信息全部丢掉。

打个比方:两张复印件,一张字迹模糊、一张更模糊,单看哪张都读不出全文。硬判决的做法是每张都按“看起来像什么”抄一遍,抄错了还互相矛盾。而聪明的做法是把两张原件叠起来对光看——模糊的地方两张互相对照,大部分字就能认出来了。

HARQ软合并做的正是这件事:译码失败时,不扔掉软比特(LLR),存进接收缓存;重传到达后,把两次的LLR逐位叠加再译码。对重复发送的比特,LLR的叠加非常干净:

$$\Lambda_{合} = \Lambda_1 + \Lambda_2 + \cdots + \Lambda_M$$

直觉上,两次接收对同一比特给出的“证词”累加起来,证据就越垒越厚。

flowchart TD
    A["首传信号: 软比特LLR1"] --> C["软缓存"]
    B["重传信号: 软比特LLR2"] --> C
    C --> D["LLR逐位叠加"]
    D --> E["联合译码"]
    E --> F{CRC通过?}
    F -->|通过| G["ACK 交高层"]
    F -->|失败| H["软比特继续保留"]
    H --> C

这个循环就是HARQ的心脏:失败≠重来,失败=累积。

三、Chase合并:把能量叠起来

软合并最朴素的形式叫Chase合并(追赶合并),由D. Chase在1985年提出:重传时把一模一样的编码比特再发一遍,接收端对多次接收做最大比合并(MRC)——信噪比高的那份话语权大,低的也不浪费。

从能量角度看非常直白。每次接收的信噪比为 $\gamma_i$,合并后:

$$\gamma_{CC} = \sum_{i=1}^{M}\gamma_i$$

若每次接收质量接近,两次接收叠加等效于信噪比翻倍,约提升3 dB;四次约6 dB。Chase合并本质上等价于重复编码:每重传一次,就往这个比特上多砸一份能量。

它的好处是实现简单、缓存省;短处也明显——每次重传的都是同样那批比特,接收端获得的只是“能量累积”,没有新的编码信息进来。

四、增量冗余:重传不一样的比特

更聪明的做法叫增量冗余(IR,Incremental Redundancy):重传时不发重复比特,而是发同一份数据经低码率母码编码后的、上一轮没发过的校验比特。接收端每多收一次,手里关于这包数据的编码约束就多一层,等效码率随之下降。

它的工程实现是理解5G/4G空口的关键一环,值得拆开讲:

  1. 信息比特(K个)先做低码率母码编码(如母码率1/3的Turbo码或LDPC码),产生系统位加两路校验位;
  2. 这些编码比特整体写入一个循环缓冲区;
  3. 发送时按冗余版本(RV,Redundancy Version)从缓冲区的不同起点读取一段、打孔成型后发出。RV0从系统位开头,保证首传可自解码;RV2、RV3、RV1从不同偏移起读,带出的校验位比例更高;
  4. 重传时轮换RV,接收端把各次收到的软比特按位置拼回码字,联合译码。
flowchart TD
    A["信息比特K个"] --> B["低码率母码编码"]
    B --> C["系统位加校验位"]
    C --> D["写入循环缓冲区"]
    D --> E["RV0: 从系统位起读"]
    D --> F["RV2: 换起点多带校验"]
    D --> G["RV3与RV1: 再换起点"]
    E --> H["速率匹配后发送"]
    F --> H
    G --> H
    H --> I["接收端拼接软比特"]
    I --> J["有效码率逐次下降"]

经过 $M$ 次传输后,接收端掌握的编码比特总数是各次之和,有效码率变成:

$$R_{eff} = \frac{K}{N_1 + N_2 + \cdots + N_M}$$

比如母码率1/3,首传只发到等效码率0.75(快信道不亏),失败两次后有效码率降到0.25——相当于接收端“自动”获得了一个更抗错的高冗余码字。信道越差,码率自动变得越低,这正是FEC按最坏信道设计所付出的代价,被HARQ用“按需补给”的方式省下来了。

两种合并怎么选?对HSDPA的经典仿真比较表明:增量冗余几乎总是优于Chase合并,代价是复杂度更高(见参考来源[3])。所以现网系统都以IR为主,Chase合并可视为IR的一个特例(RV不轮换时两者重合)。

维度 Chase合并 增量冗余(IR)
重传内容 与首传完全相同的编码比特 母码中尚未发过的比特,多为校验位
合并方式 最大比合并,能量叠加 软比特拼接后联合译码
增益来源 能量累积(等效SNR提升) 能量累积 + 编码增益(有效码率下降)
接收端缓存 可只需保存一份软比特 需累积多份软比特,消耗软缓存
首传设计 无额外要求 需低码率母码与速率匹配
弱信道表现 有效 显著更优,低码率区优势大
实现复杂度 低 高(循环缓冲、RV管理)

五、等不起的等待:停等协议与多进程流水线

有了软合并和IR,还差最后一块拼图:反馈要等,但信道不能闲着。

最基本的HARQ是停等式(Stop-and-Wait):发一包,停下来等ACK/NACK,收到反馈再发下一包。机制最简单,但等待期间信道完全空转。经典的数据链路层公式告诉我们,单进程停等的信道利用率是:

$$\eta = \frac{1}{1+2a}, \quad a = \frac{T_p}{T_s}$$

其中 $T_p$ 是往返传播与处理时延,$T_s$ 是发送时延。无线网络里一个子帧才1毫秒量级,而收发反馈、译码处理动辄几个毫秒——停等的利用率会难看到没法接受。

解决办法出奇地朴素:开N个停等进程并行轮转。进程0在等反馈时,进程1、2、3……接连发送;某个进程的反馈回来了,若NACK就插队重传,若ACK就发新数据。只要进程数足够填满“发送—反馈—重传”的时间圈,信道就能一直满负荷。

sequenceDiagram
    participant gNB
    participant UE
    Note over gNB,UE: 停等式: 等反馈时信道空转
    gNB->>UE: 进程0 发送
    UE-->>gNB: NACK
    gNB->>UE: 进程0 重传
    UE-->>gNB: ACK
    Note over gNB,UE: 流水线式: 等待期间继续发新数据
    gNB->>UE: 进程0 发送
    gNB->>UE: 进程1 发送
    gNB->>UE: 进程2 发送
    UE-->>gNB: 进程0 反馈NACK
    gNB->>UE: 进程0 重传
    UE-->>gNB: 进程1 反馈ACK

算一笔LTE FDD的账:数据到反馈固定隔4毫秒,反馈到达后重传最早也在再下一轮,一个来回8毫秒。单进程利用率只有八分之一左右;8个进程轮转,正好把每个子帧都填满——这就是LTE FDD典型配置8个下行HARQ进程的原因,不是拍脑袋,是除法除出来的。NR里进程数可配置,最多16个,未配置时默认8个;NR的调度更灵活,数据到反馈的间隔k1不再固定,由无线资源控制预先下发的候选表配合每次调度的现场指示共同决定。

六、时序设计:同步与异步之争

HARQ重传有“同步”与“异步”两种流派,这个设计选择的背后是调度自由度与控制开销的权衡。

同步HARQ:重传发生在固定时序上(比如首传后第8个子帧),接收端按时间就知道“这是哪一包的重传”,不需要额外信令指示进程号,但调度器被锁死——重传时隙哪怕信道条件再差也不能挪。

异步HARQ:重传何时发生完全由调度器决定,调度指令里必须显式带上HARQ进程号和新的RV,信令开销略大,换来的是调度器可以等信道好的时候再重传,还能做自适应重编码。

LTE采用折中:下行异步自适应(基站调度自由优先),上行同步(省上行控制信令,终端实现简单)。NR则统一为上下行全异步,上下行调度指令都携带进程号字段;另外一个容易被忽略的变化是——NR的PUSCH没有显式的ACK/NACK反馈,终端靠“一段时间内没收到重传调度”来推断上行数据已被正确接收。调试上行问题时,这是一条重要的背景知识。

维度 LTE NR
下行HARQ 异步、自适应 异步
上行HARQ 同步、固定时序 异步
反馈指示 专用物理反馈信道 无专用反馈信道,靠调度指令推断
数据到反馈时延 FDD固定4毫秒 k1灵活可配
HARQ进程数 FDD典型8个 可配2至16,默认8
重传粒度 传输块 传输块,可选码块组

最后一行值得展开:NR为了支持低时延业务,引入了按码块组(CBG)重传的能力——一个大传输块被拆成若干码块组,哪组译码失败就只重传哪一组,不必整块重来。这是“重传粒度越细,浪费越少,信令越复杂”权衡的又一个体现。

七、两层重传:HARQ与RLC ARQ的分工

细心的人会问:既然MAC层有HARQ,为什么RLC层还留着一套ARQ?这不是重复建设,而是分层兜底的经典设计。

flowchart TD
    A["PDCP 层"] --> B["RLC层: 慢速可靠重传"]
    B --> C["MAC层: HARQ快速重传"]
    C --> D["物理层: 软合并译码"]
    D --> E{HARQ译码成功?}
    E -->|是| F["反馈ACK 交高层"]
    E -->|否且次数未满| G["反馈NACK 触发重传"]
    E -->|否且次数用尽| B
    G --> D
维度 MAC层HARQ RLC层ARQ
重传对象 软比特(译码之前) 协议数据单元(译码之后)
反馈速度 毫秒级,贴着帧走 慢一个量级,靠状态报告
目标残余误码 首传误块率约百分之十 接近零
是否保序 不保序,靠PDCP重排序 严格保序
失败后去向 重传次数用尽,上交RLC 仍失败则触发更上层处理

分工的逻辑是时延与可靠性的解耦:HARQ贴着物理层,反馈周期毫秒级,专治高频小错误,所以它可以容忍10%的首传失败率——反正下一毫秒就能修;RLC ARQ处理HARQ次数用尽的“钉子户”,慢一点无所谓,反正比例极小。两层叠加后,用户看到的是“既快又几乎不出错”的链路。

那为什么首传误块率偏偏定在10%附近,而不是1%甚至0.1%?把链路自适应的曲线想一遍就通了:要把首传误码压到接近零,MCS必须大幅降阶,每个符号携带的有用比特变少,每个正确传输都要付昂贵的编码税;而把目标放到10%,MCS可以高很多,失败的10%由HARQ用一两次重传快速修复——重传只发生在真正遇到坏信道的用户身上,是好信道用户不用摊的账。两相权衡,首传10%误块率 + 快速IR重传的混合策略总吞吐最高。这也是为什么路测工具里看到10%上下的初传BLER属于“健康”,看到0%反而不常见。

八、现网实战:调试时你会在哪里遇到它

看指标的姿势。路测与网管的KPI里,HARQ重传率、初传/合并后BLER、ACK/NACK占比是链路质量的“心电图”。正确的读法是分层归因:

抓空口日志的技巧。分析HARQ问题的标准动作是:在调度指令里锁定HARQ进程号,跟着同一个进程号走完“首传→反馈→重传→ACK”整个生命周期;同时盯住三个字段——新数据指示(NDI,翻转代表新包)、RV(首传应为RV0)、k1(反馈时序)。NDI没翻但RV换了,就是一次重传;NDI翻了,是新数据。这一招在分析卡顿、上传慢等问题时能直接定位“卡在物理层反复重传”还是“上层根本没发够数据”。

三个常见误解:

  1. “HARQ重传=丢包”。错。HARQ重传是设计的正常工作机制,恰恰说明纠错在生效;真正的丢包要看PDCP层及以上的计数。
  2. “重传率高就该调参数”。多数时候重传率高是射频侧问题(覆盖、干扰、驻波)在协议栈上游的表现,先查无线环境,再动参数。
  3. “软缓存是无限的”。UE的软缓存是有限资源,按进程、按载波、按MIMO层分摊。大流量场景下多载波并发,软缓存被摊薄,IR可用的合并深度下降——这解释了为什么某些高负载终端在弱场的重传收敛明显变慢。这是终端能力等级决定的硬件属性,不是参数能调出来的。

一个跨层连锁的真实案例:小区边缘用户MCS偏高,HARQ连续NACK,重传次数耗尽上抛RLC;RLC重传排队加大时延;TCP把时延和丢包解读为拥塞,主动降窗——空口一个10%的误块率目标,最终在应用层表现为“网速莫名掉底”。看到这种跨层传导时,下手的地方在链路自适应与无线环境,而不是去“优化”TCP。

常见问题

Q: HARQ和ARQ都在重传,为什么两层都要留着? A: 因为它们重传的东西本质不同。HARQ重传的是译码失败后的软信息合并机会,反馈周期毫秒级,负责高频小错;RLC ARQ重传的是已经译成数据包的PDU,负责HARQ修不好的极少数顽固错误并保证按序交付。砍掉任何一层,要么时延暴涨,要么残余误码失控。

Q: Chasae合并和增量冗余,网络实际用哪个? A: 现网以增量冗余为主。研究早已表明IR几乎总比CC好,尤其低码率区;CC可看作RV不轮换时的特例。两者并不互斥——重传时若复用同一RV,行为就退化为Chase合并。

Q: 为什么LTE上行用同步HARQ,到了NR反而全改成异步? A: 同步HARQ省信令——重传时序固定,不用指示进程号,适合LTE上行控制开销敏感的设计。NR把时序全面放开(灵活时隙配比、灵活k1),同步的“固定时刻”在NR里反而碍事,所以统一异步,用调度指令里的进程号字段换回调度自由。

Q: 重传的包和原来那一包是同一个吗? A: 承载的是同一份数据,但比特内容通常不同。首传RV0以系统位开头可独立译码;重传轮换RV,从循环缓冲区不同起点取比特,带出更多校验位。接收端把各次软比特拼回完整码字再译码——这就是有效码率随重传次数下降的机制。

Q: 首传误块率为什么故意放任10%,追求0%不是更好吗? A: 追求0%意味着MCS大幅降阶,所有用户都为极小概率的坏信道付编码税;10%的目标让好信道用户跑高MCS,坏的那10%由HARQ重传廉价修复。系统总吞吐在这个操作点附近最大,这是链路自适应与HARQ联合设计的核心结论。

参考来源

  1. Hybrid automatic repeat request - Wikipedia — Type I/II HARQ、软合并、Chase合并与增量冗余的定义与机制对比
  2. 5G/NR - HARQ | ShareTechnote — NR的HARQ特性:全异步、k1灵活配置、RV机制、进程数配置与实测日志示例
  3. Performance comparison of HARQ with Chase combining and incremental redundancy for HSDPA (IEEE VTC 2001 Fall) — 两种软合并方式的经典性能比较,结论为IR几乎总优于CC
  4. Dahlman, Parkvall, Sköld 等《3G Evolution: HSPA and LTE for Mobile Broadband》— HARQ软合并与多进程设计的教科书级推导(第4章相关节)

本文由「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学通信知识星球海报-扫码加入