首页 › ran › NR HARQ-ACK动态码本与DAI机制

NR HARQ-ACK动态码本构造与DAI二维计数机制深度解析

规范依据:TS 38.213 V18.7.0 §9.1.2 / §9.1.2a / §9.2.5 / §9.3
关键词:Type 2 HARQ-ACK Codebook, Counter DAI, Total DAI, dl-DataToUL-ACK, PUCCH Resource Set


1 引言:为什么动态码本是RAN优化的核心战场?

在5G NR系统中,下行HARQ-ACK反馈是保证数据传输可靠性的最后一道防线。与LTE固定4ms的HARQ-ACK时序不同,NR引入了灵活的K1时序和两种码本构造方式(Type 1半静态 / Type 2动态),使得基站可以在时域、频域、空域三个维度上调度PDSCH,同时要求UE在一个PUCCH时隙内准确反馈所有已调度PDSCH的ACK/NACK状态。

动态码本(Type 2 HARQ-ACK Codebook) 的核心思想是:码本大小不固定,而是由DCI中携带的DAI(Downlink Assignment Index) 实时指示。这在TDD部署场景下具有决定性优势——当上下行配比为DDDSU或DDDDDDSUUU时,多个下行时隙的PDSCH需要在同一个上行时隙反馈HARQ-ACK,如果采用半静态码本,码本尺寸将膨胀到覆盖所有可能的PDSCH位置,造成PUCCH资源的大量浪费。

从行业影响角度来看,动态码本直接关系到: - 频谱效率:TDD网络中PUCCH开销可降低30%~50%(对比Type 1半静态码本) - 终端复杂度:DAI二维计数算法要求UE维护跨载波、跨监听时机的状态矩阵 - 互操作性:不同厂商基站对DAI计数策略的实现差异可能导致终端兼容性问题 - 网络优化:K1参数的配置直接影响HARQ RTT和系统吞吐量


2 规范框架:TS 38.213 §9.1.2核心机制

2.1 HARQ-ACK码本类型选择

UE通过RRC参数 pdsch-HARQ-ACK-Codebook 选择码本类型:

RRC参数值 码本类型 规范章节 典型部署场景
semi-static Type 1(半静态) §9.1.1 FDD、低负载TDD
dynamic Type 2(动态) §9.1.2 TDD高负载、CA场景
enhanced (Rel-18) Type 3(增强) §9.1.2a XR/URLLC多TRP

RRC信令结构如下(简化):

PDSCH-Config ::= SEQUENCE {
    pdsch-HARQ-ACK-Codebook            ENUMERATED {semi-static, dynamic},
    maxNrofCodeWordsPerSCell            ENUMERATED {n1, n2},
    ...
}
PUCCH-Config ::= SEQUENCE {
    dl-DataToUL-ACK                     SEQUENCE (SIZE (1..16)) OF INTEGER (0..15),
    ...
}

2.2 DAI:动态码本的"计数器"

DAI是Type 2码本的核心控制字段,分为两个维度:

DAI类型 DCI字段名 作用 取值范围
Counter DAI (C-DAI) DAI in DCI 1_0/1_1 累计已调度的PDSCH数量(按服务小区+监听时机二维计数) 0~3(2 bit循环)
Total DAI (T-DAI) DAI in DCI 1_1/1_2(仅Format 1_1/1_2) 当前PDCCH监听时机之前的累计PDSCH总数 0~3(2 bit循环)

关键区别:DCI Format 1_0仅携带C-DAI,不携带T-DAI;DCI Format 1_1/1_2同时携带C-DAI和T-DAI。这意味着当网络混合使用DCI Format 1_0和1_1调度时,UE需要特别注意T-DAI的缺失情况。

2.3 二维计数矩阵

DAI计数在两个维度上展开,形成二维矩阵:

DAI_counter(serving_cell, PDCCH_monitoring_occasion)

图表1

图表 1


3 动态码本构造:从DAI到HARQ-ACK比特序列

3.1 构造流程详解

Type 2 HARQ-ACK码本的构造遵循以下严格步骤:

Step 1:确定候选PDSCH接收时机

UE根据K1值集合 dl-DataToUL-ACK 确定哪些时隙的PDSCH需要在当前时隙n反馈。对于时隙n中的PUCCH传输,候选PDSCH接收时隙为 {n - K1 | K1 ∈ dl-DataToUL-ACK}。

Step 2:监听PDCCH并记录DAI

在每个候选时隙的每个PDCCH监听时机中,UE记录: - 成功检测到的DCI中的C-DAI和T-DAI - 是否检测到SPS PDSCH释放(也计入HARQ-ACK码本)

Step 3:确定码本大小

码本大小由最后一个PDCCH监听时机中的T-DAI值决定:

$$N_{HARQ-ACK} = T_{DAI,last} \times N_{CW}$$

其中 $N_{CW}$ 为每个服务小区的最大码字数(由 maxNrofCodeWordsPerSCell 指示)。

Step 4:填充HARQ-ACK比特

按照C-DAI顺序将ACK/NACK比特填入码本: - 如果某个C-DAI位置没有对应的PDSCH(DCI漏检),该位置填充 NACK - SPS PDSCH释放的ACK占据一个HARQ-ACK比特位置

图表2

图表 2

3.2 C-DAI循环与T-DAI同步

C-DAI为2 bit字段(值0~3),当累计PDSCH数量超过4时发生模4循环。这种设计节省了DCI开销,但引入了UE侧的同步复杂性:

累计PDSCH数 C-DAI值 T-DAI值 说明
1 0 1 正常
2 1 2 正常
3 2 3 正常
4 3 4→0 T-DAI模4循环
5 0 1 C-DAI循环回到0,T-DAI重新从1开始
6 1 2 新一轮

注意:T-DAI的循环行为与C-DAI不同——T-DAI表示的是"到目前为止的总数",而C-DAI是"当前监听时机中的累计数"。当T-DAI从3跳回0或1时,UE需要准确判断这是新一轮循环还是DCI漏检。

3.3 DAI漏检检测与NACK填充

当UE检测到DAI不连续时(例如C-DAI从0跳到2,缺少1),UE可以判断发生了DCI漏检,并在对应位置填充NACK。这是Type 2动态码本相比Type 1半静态码本的重要优势之一——能够在码本中隐式指示DCI漏检。

检测规则: 1. C-DAI不连续:在同一个PDCCH监听时机内,C-DAI应当递增,如果跳变则说明漏检 2. T-DAI不匹配:T-DAI应 ≥ 同一监听时机内最大C-DAI,否则说明存在漏检 3. 跨监听时机C-DAI异常:新监听时机的首个C-DAI应从上一监听时机的最后一个C-DAI继续,如果异常则说明前一监听时机有漏检


4 K1时序参数:PDSCH-to-HARQ-ACK反馈时隙偏移

4.1 dl-DataToUL-ACK参数配置

K1参数由RRC参数 dl-DataToUL-ACK(或 dl-DataToUL-ACK-r16 / dl-DataToUL-ACK-r18)配置,定义了一组候选的PDSCH-to-HARQ-ACK反馈时隙偏移值。

参数 版本 取值范围 最大条目数 说明
dl-DataToUL-ACK Rel-15 0~15 8 基础K1集合
dl-DataToUL-ACK-r16 Rel-16 0~15 16 扩展支持更多K1值
dl-DataToUL-ACK-r18 Rel-18 0~15 16 多TRP场景增强

DCI中的 PDSCH-to-HARQ_ACK feedback timing indicator 字段从RRC配置的K1集合中选择一个具体值。该字段的bit宽度为 $\lceil \log_2(N_{K1}) \rceil$。

4.2 TDD场景下的K1配置约束

在TDD网络中,K1值的选择受到上下行配比的严格约束。以常见的 DDDSU(3D:1S:1U)配比为例:

图表3

图表 3

关键约束:K1指向的时隙必须是上行时隙(或包含上行符号的特殊时隙)。如果K1指向下行时隙,UE将延迟HARQ-ACK反馈到下一个可用的上行时隙(参见TS 38.213 §9.2.3)。

典型的K1配置策略: - DDDSU:K1 ∈ {4, 3, 1},避免K1=2(因为n-2对应的K1终点可能在下行时隙) - DDDDDDSUUU:K1 ∈ {8, 7, 6, 5, 4, 3, 2, 1},最后两个下行时隙可使用K1=1,2 - FDD:K1可自由选择,典型值为 {1, 2, 3, 4, 8}


5 载波聚合场景下的二维DAI扩展

5.1 跨载波DAI计数

当UE配置了载波聚合(CA)时,DAI计数在服务小区维度上扩展。C-DAI的计数顺序为:

  1. 先按服务小区索引递增(PCell → SCell1 → SCell2 → ...)
  2. 再按PDCCH监听时机递增

这形成了规范的二维矩阵结构:

         MO #0      MO #1      MO #2      MO #3
PCell:  C-DAI=0   C-DAI=2   C-DAI=0   C-DAI=1
SCell1: C-DAI=1   C-DAI=3   C-DAI=1   (无调度)
SCell2: (无调度)   (无调度)   C-DAI=2   (无调度)

T-DAI:  T=2       T=4       T=3       T=2

在上述示例中: - MO #0:调度了PCell和SCell1(C-DAI=0,1),T-DAI=2 - MO #1:调度了PCell和SCell1(C-DAI=2,3),T-DAI=4→0(模4循环) - MO #2:调度了PCell、SCell1和SCell2(C-DAI=0,1,2),T-DAI=3 - MO #3:仅调度PCell(C-DAI=1),T-DAI=2

最终码本大小由 MO #3 的 T-DAI = 2 决定,码本包含2个HARQ-ACK比特位置。

5.2 跨载波调度的DAI处理

当启用跨载波调度(Cross-Carrier Scheduling)时,SCell的PDSCH由PCell上的DCI调度。此时: - 被调度SCell的C-DAI在PCell的PDCCH监听时机中计数 - 如果PCell和SCell同时被调度(同一DCI或不同DCI),C-DAI按照调度顺序递增 - T-DAI仍然反映当前监听时机之前的所有服务小区的累计调度数


6 行业影响与政策解读

6.1 TDD网络部署的关键优化参数

在中国5G网络中,三大运营商均采用TDD制式(2.6GHz/3.5GHz/4.9GHz),上下行配比以DDDSU和DDDDDDSUUU为主。这使得Type 2动态码本成为必选项——如果采用Type 1半静态码本,每个PUCCH都需要预留覆盖所有可能PDSCH位置的比特,导致PUCCH资源浪费严重。

政策影响:工信部《5G网络互联互通技术要求》中明确要求各厂商设备支持Type 2动态码本,并在互操作性测试中验证DAI计数的准确性。这直接影响了设备入网认证的测试用例设计。

6.2 终端芯片实现差异

不同基带芯片厂商对DAI计数的实现存在差异:

芯片平台 DAI计数方式 已知问题
Qualcomm Snapdragon 硬件加速DAI矩阵 CA场景下偶发T-DAI判断错误(早期版本)
MediaTek Dimensity 软件辅助DAI跟踪 高负载下DAI漏检恢复延迟
Samsung Exynos 硬件DAI引擎 SCell数量>4时C-DAI循环计数边界case
HiSilicon Balong 混合实现 跨时隙调度K1值处理差异

这些差异要求网络优化工程师在进行路测分析时,特别关注不同终端在相同网络配置下的HARQ-ACK码本构造行为差异。

6.3 网络优化实践

问题案例:某运营商TDD网络中,下行吞吐量在高负载时出现周期性下降。经抓包分析发现:

  1. 基站配置了K1={4,3,2,1},但K1=2在某些TDD配比下指向下行时隙
  2. UE将HARQ-ACK延迟到下一个上行时隙,导致HARQ RTT增大
  3. 基站在未收到预期HARQ-ACK时触发了不必要的PDSCH重传
  4. 重传占用下行资源,进一步加剧了负载问题

解决方案:调整K1配置为{4,3,1},避免K1=2指向下行时隙,同时将动态码本配合适当的PUCCH资源集配置,确保HARQ-ACK反馈在预期的上行时隙完成。


7 抓包识别与排障指南

7.1 如何在Log中识别Type 2动态码本

在UE侧日志(如Qualcomm QXDM / MediaTek ELT)中,关键Log ID包括:

Log条目 内容 用途
NR5G MAC HARQ-ACK Info 每个PDSCH的HARQ-ACK状态 验证码本内容
NR5G L1 DAI Tracking C-DAI/T-DAI矩阵状态 诊断DAI计数错误
NR5G PUCCH Tx Report PUCCH传输的HARQ-ACK payload 确认实际反馈码本
NR5G DCI Decoding Result 成功解码的DCI及DAI字段 追溯DAI来源

7.2 常见故障模式

故障模式1:DAI不匹配导致码本截断

现象:UE发送的HARQ-ACK码本比基站预期的小。

原因排查: 1. 检查UE是否漏检了某个DCI(导致C-DAI不连续) 2. 检查T-DAI的模4循环是否被UE正确处理 3. 检查是否存在DCI Format 1_0和1_1混合调度导致的T-DAI缺失

故障模式2:K1指向非UL时隙导致反馈延迟

现象:HARQ-ACK反馈时隙与基站预期不一致。

原因排查: 1. 确认TDD上下行配比配置 2. 检查K1值是否可能指向下行时隙 3. 验证UE是否正确执行了HARQ-ACK延迟规则

故障模式3:CA场景下码本大小异常

现象:CA配置下HARQ-ACK码本大小突然变化。

原因排查: 1. 检查各SCell的激活/去激活状态变化 2. 验证跨载波DAI计数是否正确 3. 确认 maxNrofCodeWordsPerSCell 配置是否一致

图表4

图表 4


8 与Type 1半静态码本的深度对比

维度 Type 1(半静态) Type 2(动态)
码本大小 固定,由RRC参数决定 动态,由T-DAI决定
DCI开销 无DAI字段需求 需要2~4 bit DAI字段
PDCCH漏检影响 隐式NACK(位置固定) 通过DAI不连续检测漏检
TDD适配性 差(码本膨胀) 好(码本按需)
UE复杂度 低(查表构造) 高(维护DAI矩阵)
CA支持 每个服务小区独立 二维DAI联合计数
适用场景 FDD、低负载TDD 高负载TDD、CA
典型PUCCH格式 Format 0/1(小码本) Format 2/3/4(大码本)

选型建议:在TDD网络中,当每个上行时隙需要反馈的PDSCH数量超过4个时,强烈建议使用Type 2动态码本。在FDD网络中,如果调度模式简单(每时隙至多1个PDSCH),Type 1半静态码本的开销更低。


9 Rel-18增强:Type 3码本与多TRP场景

3GPP Rel-18引入了Type 3 HARQ-ACK码本(§9.1.2a),主要面向以下场景:

Type 3码本的核心增强: 1. 支持按TRP分组的HARQ-ACK子码本 2. 引入HARQ-ACK重传机制(通过MAC CE触发) 3. 支持更细粒度的K1值(子时隙级偏移)


10 FAQ

Q1:Type 2动态码本中,如果最后一个PDCCH监听时机没有调度任何PDSCH,码本大小如何确定?

UE使用最后一个包含有效DCI调度的PDCCH监听时机中的T-DAI值来确定码本大小。如果没有任何DCI成功解码(极端情况),UE可能发送空的HARQ-ACK码本或仅包含SPS释放的ACK。规范要求UE至少反馈最后一个PDCCH监听时机中T-DAI所指示数量的HARQ-ACK比特。

Q2:C-DAI和T-DAI都是2 bit,如何区分模4循环和DCI漏检?

这是UE实现中的关键难点。UE需要结合以下信息综合判断: - 前一个PDCCH监听时机的C-DAI/T-DAI值 - 当前的调度模式(是否有持续调度) - SPS配置状态 - 如果T-DAI < C-DAI,则大概率发生了模4循环

Q3:动态码本中SPS PDSCH释放如何计入DAI?

SPS PDSCH释放(通过DCI指示)也需要HARQ-ACK反馈,且计入C-DAI计数。UE在收到SPS释放DCI时,需要在HARQ-ACK码本中对应位置填入ACK。值得注意的是,SPS释放DCI的DAI计数与常规PDSCH调度的DAI计数混合在一起,不单独处理。

Q4:为什么DCI Format 1_0不携带T-DAI?

DCI Format 1_0是fallback格式,设计目标是最小化DCI payload大小以提高PDCCH覆盖。T-DAI字段省略后,当UE仅收到DCI Format 1_0时,码本大小默认为C-DAI的值。这在实际网络中可能不常见,因为基站通常使用DCI Format 1_1来调度Type 2动态码本的PDSCH。

Q5:K1=0是否合法?什么场景下使用?

K1=0在规范中是允许的(dl-DataToUL-ACK取值包含0),意味着PDSCH和PUCCH在同一个时隙。这在TDD特殊时隙(S时隙)的下行部分调度PDSCH、上行部分反馈HARQ-ACK时可能使用。但实际部署中很少配置K1=0,因为UE处理时间可能不足以在同一个时隙内完成PDSCH解码和HARQ-ACK编码。


11 关键参数速查表

参数 RRC信元 取值范围 默认值 说明
K1偏移集合 dl-DataToUL-ACK {0..15}的子集 {1,2,3,4,8} PDSCH-to-PUCCH时隙偏移
码本类型 pdsch-HARQ-ACK-Codebook semi-static / dynamic semi-static HARQ-ACK码本构造方式
最大码字数 maxNrofCodeWordsPerSCell n1 / n2 n1 每个服务小区的码字数
PUCCH资源集 pucch-ResourceSet (Set 0-3) 复杂结构 - 按码本大小选择PUCCH格式
最大CA小区数 nrofServingCells (CA参数) 1~32 (Rel-18) - 影响DAI二维矩阵大小
K1 DCI指示字段 PDSCH-to-HARQ_ACK timing indicator ⌈log2(N_K1)⌉ bit - 从RRC集合中索引K1值

12 参考文献

  1. 3GPP TS 38.213 V18.7.0 (2025-06), "NR; Physical layer procedures for control", Sections 9.1.1, 9.1.2, 9.1.2a, 9.2.5, 9.3
    核心规范,定义了Type 1/2/3 HARQ-ACK码本的构造规则和DAI计数机制

  2. 3GPP TS 38.331 V18.6.0 (2025-06), "NR; Radio Resource Control (RRC); Protocol specification"
    定义了 pdsch-HARQ-ACK-Codebook、dl-DataToUL-ACK 等RRC参数的ASN.1结构

  3. ShareTechnote, "5G NR HARQ-ACK Codebook", https://www.sharetechnote.com/html/5G/5G_Harq_Codebook.html
    提供了Type 1/2码本构造的图解说明和示例

  4. TelecomHall, "5G HARQ-ACK Multiplexing Explained: Static vs Dynamic Codebook Traces", https://www.telecomhall.net/t/5g-harq-ack-multiplexing-explained-static-vs-dynamic-codebook-traces/35084
    包含实际Log trace的HARQ-ACK码本分析案例

  5. Aliyun Developer, "5G NR Type-2 HARQ-ACK动态码本构造与CBG级重传", https://developer.aliyun.com/article/1304391
    中文深度分析,涵盖CBG级HARQ-ACK与动态码本的结合


关于DeepSpec:DeepSpec聚焦3GPP规范深度解读,从协议文本到工程实践,为通信工程师提供可操作的技术洞察。关注我们,获取更多NR RAN核心技术解析。

[!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学通信知识星球海报-扫码加入