微信同步更新欢迎关注同名modem协议笔记

上篇提到type-1 HARQ-ACK codebook,即semi-static codebook,UE要为每个PDSCH候选位置生成反馈,也会包含实际没有下行传输的PDSCH,再加上配置CBG的场景,HARQ-ACK 码本中包含的无用信息会更多,开销确实很大。因而,Type-2 HARQ-ACK 码本即dynamic 码本就出现了,目前看实网中一般都用的dynamic 码本,还没有见过semi-static 码本,长话短说,下面就看下相关内容。

RRC层配置有参数 pdsch-HARQ-ACK-Codebook=dynamic或 pdsch-HARQ-ACK-Codebook-r16时就要采用type-2 HARQ-ACK codebook,即动态码本,目前看到log中采用的都是动态码本。如果DCI format没有带counter DAI时,UE不能用Type-2HARQ-ACK codebook 反馈HARQ-ACK info。

UE收到下行DCI后,不管调度的是PDSCH reception或SPS PDSCH release或指示SCell dormancy,都要根据DCI field PDSCH-to-HARQ_feedback timing indicator 和K0去反馈HARQ-ACK信息。

监听调度PDSCH reception/SPS PDSCH release/SCell dormancy DCI 的PDCCH 时机就是服务小区激活DL BWP中的一个PDCCH monitoring集合,集合中按照PDCCH monitoring occasion 开始时间按升序排列。PDCCHmonitoring occasion集合的基数就是了PDCCH monitoring occasion总数M。

DCI field DAI 中有一部分作为counter DAI 用于指示当前 PDSCH reception/SPS PDSCH release/SCell dormancy 场景已经调度的累积数量,也就是PDCCH出现的个数,即累积的对象是截至当前服务小区的当前PDCCH monitoring occasion的数量。

DAI的计数顺序是,如果UE支持type2-HARQ-ACK-Codebook即一个PDCCH monitoring occasion进行多次PDSCH调度,那首先将各个PDCCH monitoring occasion对应的PDSCH reception,按照PDSCH reception 开始时间升序排列;其次按照服务小区index升序排列,最后按照PDCCH monitoring occasion index 升序排列。如下图。

对于R16 multi-DCI based multi-TRP的场景,有配置ackNackFeedbackMode=joint时,counter DAI要先根据相同服务小区的相同PDCCH monitoring occasion中的第一个 CORESET 进行计数,然后再根据第二个 CORESET计数。

total DAI表示服务小区和PDCCH monitoring occasion pair出现的总个数,即调度的PDCCH出现的个数,截至到当前PDCCH monitoring occasion,且会在每个PDCCH monitoring occasion进行更新。

对于R16 multi-DCI based multi-TRP的场景,有配置ackNackFeedbackMode=joint时,total DAI是根据{服务小区,PDCCH 监视时机}-对中的第一个 CORESET 和第二个 CORESET共同计数。

N_DL_C-DAI 代表counter DAI 的bits数,T_D=2^N_DL_C-DAI。V_DL_C-DAI,c,m代表在服务小区c PDCCH monitoring occasion m中DCI 调度PDSCH 的数量即counter DAI的值

根据spec规定counter DAI 和total DAI 能用2bits表示,38.213 Table 9.1.3-1定义了DCI bit的取值和DAI 的对应关系。

R16中DCI 1_2中counter DAI也可以是1bit表示,因而38.213 Table 9.1.3-1A定义了DCI 1 bit的取值和DAI 的对应关系。

另外在PDCCH monitoring occasion m中所有DCI format 的total DAI所带的值是一样的。在HARQ-ACK codebook相关配置没有改变的情况下,网络侧在下发DCI 时所带的counter DAI 的bits大小应该保证是一样的。

例如上图PDCCH monitoring occasion 对应1~4,DCI DAI 对应counter DAI 和Total DAI,根据上面的描述total DAI会在每个 PDCCH monitoring occasion,每个PDCCH monitoring occasion的total DAI 的值也应该是一样的,counter DAI 用于统计已经出现的累积调度,如此UE就可以很好的掌握下行传输的基本情况,更好的做出HARQ-ACK。

type-2 HARQ-ACK codebook的生成也是一段伪代码。

UE根据DCI动态调度情况,要生成对应的HARQ-ACK info,对应的就是动态码本 其长度为O_ACK;伪代码中的m=0对应的是最早的那个PDCCH monitoring occasion,N_DL_cells对应的是服务小区的个数;j对应的是DAI 相关的参数,Vtemp和Vtemp2用于记录counter DAI和Total DAI变化的参数,0作为初始值;Vs用于记录ACK 的HARQ-ACK info。

首先对特定的PDCCH monitoring occasion m开始进行遍历,c对应的服务小区,即代表针对特定的PDCCH monitoring occasion,还要对服务小区进行遍历,如果服务小区发生BWP切换,对应小区不做任何操作,UE直接跳到下一个服务小区。

如果遍历小区没有发生BWP切换且在PDCCH monitoring occasion n 收到PDCCH data;初始Vtemp=0,假如正常收到第一个DCI 其c-DAI=1,不可能满足第一个if,下一步Vtemp=1。下一个if 判断DCI是否有带T-DAI,如果没带Vtemp,2=c-DAI的值,有带T-DAI,则Vtemp,2=T-DAI的值。

那什么时候会满足V_DL_c-DAI,c,m<=Vtemp?正常情况下c-DAI 是2bits,即每4个值,为一轮,没有漏检时,永远不会满足V_DL_c-DAI,c,m<=Vtemp,所以漏检DCI时才可能满足第一个if;比如上一个DCI c-DAI=1,则Vtemp=1, 下一个DCI c-DAI 直接=1,说明没有收到c-DAI=2和3对应的DCI,这时候c-DAI<=Vtemp,j++,j对应漏检DCI的次数,j++一次,对应的c-DAI 4个值。

另外Vtemp 会先于Vtemp,2赋值,正常情况下Vtemp,2 是不可能小于Vtemp的,虽然有时候DCI 可能没有带T-DAI,这种情况下Vtemp,2 会赋值c-DAI的值,只能是Vtemp,2>=Vtemp, 所以如果Vtemp,2<Vtemp 则说明,有漏检DCI情况。

后面根据配置的场景生成对应的HARQ-ACK info,2TB传输没有带harq-ACK-SpatialBundlingPUCCH时,针对每TB生成1bit HARQ-ACK info,即对应2bits;2TB传输且带harq-ACK-SpatialBundlingPUCCH,将2TB 的HARQ-ACK进行位与操作最终生成1 bit HARQ-ACK info;其他情况,直接生成1bit HARQ-ACK info。 这里假设j=0的话,即UE一直没有漏检DCI,有序接收DCI,即这里的Vs记录的就是正常接收的TB HARQ-ACK bit 对信息。

之后继续特定PDCCH monitoring occasion 对服务小区进行遍历,小区遍历完成则换下一个PDCCH monitoring occasion 继续对服务小区进行遍历。

Vtemp,2<Vtemp 说明,有漏检DCI情况,j++;如果2TB传输没有带harq-ACK-SpatialBundlingPUCCH,O_ACK=2(4*j+Vtemp,2);否则O_ACK=4*j+Vtemp,2;最后从O_ACK中去掉Vs就是要放开NACK的bit位。

上面的内容是按照counter DAI 对应2bits的情况看的,R16中DCI 1_2 中counter DAI 可能会对应1bit,因而 动态码本生成的过程还涉及以下内容。

对于和SPS PDSCH reception复用的场景,UE生成SPS PDSCH reception 的bits后 将其级联在O_ACK末尾发送。

举个例子,假如网络侧共发送8个DCI ,maxNrofCodeWordsScheduledByDCI=2,UEmiss了DCI(3,3),则j=1,Vtemp,2=4,O_ACK=2(4*1+4)=16 bit,反馈的HARQ-ACK如上图。

maxNrofCodeWordsScheduledByDCI=2但是UE只有到1个TB,这时候如果有配置 harq-ACK-SpatialBundlingPUCCH,UE对第二个TB生成ack,否则生成NACK。

Type-2 HARQ-ACK codebook for CBG

在配置CBG传输时,动态码本的生成和上面的内容会有点不一样,总结着说,如果有任意一个服务小区被配置使用基于CBG的数据传输,则生成两个子码本:第一子码本为TB子码本,针对指示SPS PDSCH释放的PDCCH以及基于TB的PDSCH传输进行TB级的反馈;第二子码本为CBG子码本,针对基于CBG的PDSCH传输进行CBG级的反馈。将两个子码本按照TB子码本和CBG子码本顺序级联在一起构成最终的HARQ-ACK码本。如果多个服务小区都被配置使用基于CBG的传输且配置的CBG个数不同,则基于最大的CBG个数产生CBG子码本。配置CBG的情况的动态码本=TB 子码本+CBG 子码本,上报时TB 在前,CBG在后,两者级联在一起。下面看下spec上的描述。

根据CBG的配置情况,将小区分成两部分:配置CBG传输的小区记为N_DL,CBG_cells,没有配置CBG传输的小区(按TB发送的小区), 记为N_DL,TB_cells。 N_DL,CBG_cells+N_DL,TB_cells=N_DL_cells

生成码本的方式和前面的描述是一样的,但是有些点要注意。

生成TB based sub-codebook时要用N_DL_cells而不是N_DL,TB_cells,例如SPS PDSCH release/SPS PDSCH reception DCI 1_1指示的SCell dormancy和虽然配置了CBG传输但是实际中仍然进行的TB传输,例如DCI 1_0,虽然配置了CBG,但是只能进行基于TB的传输,这点也是在计算TB 子码本时要用N_DL_cells原因;对于CBG子码本,要用N_DL,CBG_cells进行计算。

如果多个服务小区都被配置使用基于CBG的传输且配置的CBG个数不同,则基于最大的CBG个数产生CBG子码本,最大bit数由N_CBG/TB,max_HARQ-ACK,c ×N_DL_TB,c。如果某个CBG传输小区的N_CBG/TB_HARQ-ACK,c ×N_DL_TB,c小于最大值,后面不足的位用NACK补足。

这里生成子码本时,harq-ACK-SpatialBundlingPUCCH 不起作用;且两个子码本的counter DAI和Total DAI独立工作,最后上报时TB子码本在前,CBG子码本在后,两者级联在一起。对于multi-DCI based multi-TRP的场景,生成码本时要分别针对两个CORESETs都统计一次。

举个例子 假如有3个CC,serving cell 0进行CBG传输,maxCodeBlockGroupsPerTransportBlock=2;serving cell 1进行TB传输,serving cell 3进行CBG传输,maxCodeBlockGroupsPerTransportBlock=4;所有CC的maxNrofCodeWordsScheduledByDCI=2;上图中5个绿色部分分别生成各2bit的TB HARQ-ACK info,组成TB sub codebook;由于最大的N_CBG/TB,max_HARQ-ACK,c=4,所以CBG传输部分要生成N_CBG/TB,max_HARQ-ACK,c ×N_DL_TB,c=2×4=8 bit的码本,共3个CBG TB,共24 bits,其中橙色的CBG 由于maxCodeBlockGroupsPerTransportBlock=2,所以要用NACK 补上4bit;最后码本长度=TB subcodebook+CBG subcodebook=10+24 =34bits。

HARQ-ACK codebook 这部分还剩余3个章节,Type-2 HARQ-ACK codebook in physical uplink shared channel,Type-2 HARQ-ACK codebook grouping and HARQ-ACK retransmission和Type-3 HARQ-ACK codebook determination,这几个后面有时间再整理。

NR HARQ (四)dynamic codebook相关推荐

  1. NR HARQ(三) semi-static HARQ-ACK codebook

    微信同步更新,欢迎关注同名modem协议笔记 UE在一个PUCCH(或PUSCH)上发送HARQ-ACK信息时,信息bit很可能是多个bits位数,这个多bits位数的HARQ-ACK信息,也称为HA ...

  2. NR HARQ(一)概述

    微信同步更新,欢迎关注同名modem协议笔记 HARQ是MAC层的快速重传机制,5G部分HARQ相关内容分布在38.331,38.321,38.213,38.214,38.212,38.211等spe ...

  3. NR HARQ(二) CBG HARQ-ACK codebook

    微信公众号同步更新,欢迎关注同名modem协议笔记 这篇开始看下HARQ-ACK codebook的相关内容,先看CBG-based HARQ-ACK codebook.那第一个关注点就是CBG 的划 ...

  4. NR PUSCH(四) Frequency hopping

    微信公众号同步更新,欢迎关注同名modem协议笔记 上篇PUSCH 介绍了频域分配方式resource allocation type0/1/2,其中type 0 RBG位图的分配方式比较灵活,typ ...

  5. NR CSI(四) PMI

    微信公众号同步更新欢迎关注同名modem协议笔记 如38.214 5.1.1.1中所述,NR PDSCH 38214只有一种传输模式Transmission scheme 1,gNB将data(di) ...

  6. NR PRACH(四)PRACH与SSB的映射

    这个系列CSDN忘记更新,所以现在才更,微信内容稍微多些,更新欢迎关注微信同名"modem协议笔记",下面开始正题. 协议规定 5种SSB Pattern caseA~E,即规定了 ...

  7. NR/5G - Type 1 codebook repetition配置时一个理解

    在Semi-Static HARQ Feedback的一些补充中有提到 - 若PDSCH配置了repetition,即一个PDSCH在多个Slot进行传输,类似于LTE中的PUSCH的TTI Bund ...

  8. NR HARQ资源位置以及码本的确定

    HARQ资源位置以及码本的确定 HARQ码本合成 半静态码本 半静态码本的HARQ反馈窗口 半静态码本的信息比特 半静态码本的反馈窗口重叠 动态码本 非CBG传输的动态码本 基于CBG传输的动态码本 ...

  9. NR PDSCH(四) DMRS

    微信目前更新稍快,欢迎关注同名"modem协议笔记" 参考信号相关的所有内容都在38.211 中有介绍. DMRS是用于信道估计,服务于UE信道解调的.基站将DMRS穿插到各种信道 ...

最新文章

  1. 【SAS NOTES】if then和if的区别
  2. 关于return的用法
  3. 借百度爸爸下蛋的好看搜索框
  4. 蓄水池抽样算法 Reservoir Sampling
  5. 关于element-ui的upload文件上传组件的使用技巧总结
  6. js 支持的原始数据类型
  7. javascript高级程序设计 Boolean类型
  8. 深入详解函数的柯里化
  9. Windows环境下nginx服务无法停止
  10. response.setHeader()的用法 (转别人转的)
  11. ABB变频器配件,西门子变频器配件,施耐德变频器配件
  12. mysql索引类型normal,unique,full text,索引方式btree索引和hash
  13. 初探----python封装通俗易懂的数据库增、删、改、查方法
  14. try(){}的简单理解
  15. mysql设备未就绪_SQL Server 返回了错误 21(设备未就绪。) 解决方法
  16. C语言和JAVA的区别在哪里?
  17. 小记一次海量数据实时查询域名库设计(上)
  18. Qt模拟键盘按键与组合键
  19. 现在有什么地推项目_目前互联网都有哪些红利地推项目
  20. 2020信息通信产业十大技术趋势发布

热门文章

  1. Java详细安装教程--Java(jdk)安装
  2. Jpa数据操作以及@Query和@Modifying注解使用
  3. ThinkPHP5篮球培训报名系统
  4. C++之vector中元素的N种遍历
  5. CocoaPods安装失败解决方法
  6. 颠沛流离的生活,所幸终于结束了
  7. NCBI数据库—上传16S rRNA测序数据
  8. 全球及中国冻干宠物零食行业消费量调研及投资分析报告2022-2027年
  9. E0070——不允许使用不完整的类型和E3365——不允许使用不完整的类类型解决办法
  10. Python爬虫:抓取手机APP数据