我是靠谱客的博主 勤劳夏天,最近开发中收集的这篇文章主要介绍NR HARQ(二) CBG HARQ-ACK codebook,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

这篇开始看下HARQ-ACK codebook的相关内容,先看CBG-based HARQ-ACK codebook。那第一个关注点就是CBG 的划分规则,这部分内容主要在38.213 9.1.1章节中,PDSCH和PUSCH 的CBG 划分规则基本是一样的,这里以PDSCH为例介绍。

2f3ad8273d2446ebbbb54939f7542354.png

PDSCH 和PUSCH 都有 maxCodeBlockGroupPerTransportBlock;maxCodeBlockGroupPerTransportBlock:每个TB块最多分为n个码块组;当下行为2个TB块时,最大只能配置为n4,因为DCI中CBGTI位图只有8bits。

e3bd0cfe1c5649f992895b107003dc11.png
CBG划分首先要确定两个参数,一个是N由 RRC 层参数maxCodeBlockGroupsPerTransportBlock提供,C 是按照38.212中Code block segmentation and code block CRC attachment 规则进行CB分割时确定的参数,具体过程可以看下NR PDSCH(五) PDSCH 信道编码与调制流程,这里简单说下,NR中,PDSCH和PUSCH信道均采用LDPC编码,LDPC有最大码块长度和限定: LDPC base graph 1   Kcb =8448;LDPC base graph 2   Kcb =3840;当TB块(含CRC)超过码块最大长度限定后,TB块被切分为C个码块发送;当RRC配置参数codeBlockGroup Transmission时,C个码块按照多个码块组进行发送和应答。

 2f9131cf88dd4d7abcb7001797e1ac67.png

然后由M=min(N,C)确定要划分的CBGs 的数量,具体的划分规则,通过3个例子,看下应该就比较清晰了,如下。
(1) N=8,C=5  M=min(8,5)=5 即要分5组。
M1=mod(5,5)=0,  k1=5/5 向上取整,k2=5/5 向下取整=1
M1=0  m=M1,M1+1, ....,M-1= 0,1,2,3,4
CB index =M1*K1+(m-M1)*k2+k     k=0,1...., k2-1   =0
CBG 0 m=0   0*K1+(0-0)*1+0=0
CBG 1 m=1   0*K1+(1-0)*1+0=1
CBG 2 m=2   0*K1+(2-0)*1+0=2
CBG 3 m=3   0*K1+(3-0)*1+0=3
CBG 4 m=4   0*K1+(4-0)*1+0=4

b9e3b5417afd4b75b23c4b5600c1b0c9.png

(2) N=8,C=9  M=min(8,9)=8 即要分8组。
M1=mod(9,8)=1,  k1=9/8 向上取整=2,k2=9/8 向下取整=1
M1=1>0  
CBG m ,m=0,1,....,M1-1=0
CBG 0 m*k1+k     k=0,  k1-1=0,1  则 code block index =0,1
其他CBG  m的情况, m=M1,M1+1,.....M-1 =1,2,3,4,5,6,7
CB index =M1*K1+(m-M1)*k2+k     k=0,1...., k2-1   =0
CBG 1 m=1   1*2+(1-1)*1+0=2
CBG 2 m=2   1*2+(2-1)*1+0=3
CBG 3 m=3   1*2+(3-1)*1+0=4
.....
CBG 7 m=7   1*2+(7-1)*1+0=8

3cb1c777662b4b2a9e340b3ea3c13ffa.png

(3) N=8,C=50  M=min(8,50)=8 即要分8组。
M1=mod(50,8)=2,  k1=50/8 向上取整=7,k2=50/8 向下取整=6
M1=2>0  
CBG m ,m=0,1,....,M1-1=0,1 即只有CBG 0和CBG 1
m*k1+k     k=0, 1,... k1-1=0,1,2,3,4,5,6
CBG 0 m*k1+k =k  则 code block index =0~6
CBG 1 m*k1+k =1*7+k  则 code block index =7~13

其他CBG  m的情况, m=M1,M1+1,.....M-1 =2~7
CB index =M1*K1+(m-M1)*k2+k     k=0,1...., k2-1 =0~5
CBG 2 m=2   2*7+(2-2)*6+k= 14~19
CBG 3 m=3   3*7+(3-2)*6+k=20~25
CBG 4 26~31
CBG 5 32~37
CBG 6 38~43
CBG 7 44~49

1530034b5fc4436f897006744c67b430.png
划分规则结束了,紧接着看下CBG传输的相关规定。

231927c71580451385671689d23ec17c.png

UE没有配置PDSCH-CodeBlockGroupTransmission时,UE 要针对每个TB 生成1个HARQ-ACK info;有配置PDSCH-CodeBlockGroupTransmission时,UE 会通过DCI 1_1 接收到包含CBGs的TB;RRC层通过maxCodeBlockGroupsPerTransportBlock指示每个TB支持的CBG 数量,然后UE需要针对每个TB中对应的CBG 生成各自的HARQ-ACK info bits。先看PUSCH部分相关内容。

UE procedure for transmitting code block group based transmissions

7a675772018841ac85d0fe7d4f5d2313.png

PUSCH CBG 相关的DCI 0_1 field CBGTI,在配置CBG传输时,其bit大小由maxCodeBlockGroupsPerTransportBlock决定,其可配置层2/4/6/8,即DCI 0_1 CBGTI分别对应2/4/6/8 bits,从最高位之最低位分别代表CBG0/1/2/....
初次传输时, CBGTI =1的CBG代表要进行传输的CBG,之后UE要按照指示在对应TB中包含对应的CBGs data 传输出去;如果是TB 重传,UE只需要将CBGTI =1的CBGs传输出去。再看PDSCH部分。
UE procedure for receiving code block group based transmissions

223ebd59625d4f9382bdb6077102211f.png

对于PDSCH 接收,DCI 1_1 的CBGTI field的大小为N_TB*N,其中N_TB为RRC 层参数maxNrofCodeWordsScheduledByDCI,代表一个DCI 可能带的TB 个数,1个或2个;N根据maxCodeBlockGroupsPerTransportBlock 确定,即DCI 1_1 CBGTI分别对应2/4/6/8 bits,从最高位之最低位分别代表CBG0/1/2/....
初次传输时, TB 中的CBG应该都要送下来给UE;如果是TB 重传,CBGTI=0代表相关的CBG没有传送下来,CBGTI=1代表有对应的CBGs;在RRC层参数有配置codeBlockGroupFlushIndicator =true时,DCI 1_1中会带CBG flushing out information(CBGFI),CBGFI=0代表前面收到的CBGs可能是损坏的,需要清缓存,重新接收;CBGFI=1代表现在这次传输的CBGs是与前面收到的CBGs可以进行软合并;重传的CBG 要和初传时对应相同的CBs。

9999588d6f53475b98503eb59951ce38.png

对于DCI 1_1 中的CBGTI/CBGFI,当RRC 层有配置 priorityIndicatorDCI-1-1时,如果CBGTI和CBGFI的bit width与其他HARQ-ACK codebook不一样时,要对短的CBGTI/CBGTI 进行补0处理,以便使得所有的CBGTI/CBGFI的 HARQ-ACK codebook 相同,如下图两个CBGTI 长度不一样,要对短的补零,使得之后HARQ-ACK codebook bit width 保持一致。

1f5266637087467bb46b23cf029c224a.png

f8b7edca5b364e3e820cb56c4f3ee80d.png

在进行CBG划分后,生成HARQ-ACK codebook包含的HARQ-ACK info bits N 可能会小于maxCodeBlockGroupsPerTransportBlock规定的max数量,此时,要对max-N的剩余bits 生成NACK包含在反馈的HARQ-ACK codebook。
UE要对重传的TB 生成HARQ-ACK codebook时,前一个TB 正确接收的CBGs 直接生成ACK,再对重传中对应其余CBG生成HARQ-ACK。UE没有正确收到整个TB,只收到了N 个CBGs,那UE 直接将这些CBGs反馈NACK。 

单TB传输,实际传输的CBGs =5小于maxCodeBlockGroupsPerTransportBlock=8,这时候反馈HARQ-ACK时,未传输的CBGs 要做NACK处理。

aa1967bb7a4c4666aa4206f80230a965.png

6505d59fec5a47ffb51c5a3ef62a74bf.png

在配置CBG 传输时,当CBG中所有的 code blocks 都成功收到时,针对CBG生成对应的HARQ-ACK info bit;只要CBG中有1个code block 没有正确接收就要生成NACK。如果UE 同一时间收到2个TBs,UE就将2个TB的CBG HARQ-ACK info 按照先第一个TB 后第二个TB 的顺序排放。 
传输2个TB,maxCodeBlockGroupsPerTransportBlock=4,两个TB 的HARQ-ACK codebook下。

 071fa2eba53f41568856760fae0dc2a1.png

下行HARQ-ACK时序示意图
PDCCH 调度PDSCH ,下行HARQ-ACK 时序示意图

8c85ea29745e40a0a5fd7728974e5c9f.png

调度DCI在时隙n,则PDSCH 接收时隙在n+K0,接收PDSCH 在时隙n,则发送HARQ-ack 的PUCCH在时隙n+K1
K1相关内容在NR PUCCH (三)PUCCH resource 的配置与调用 有介绍;K0相关内容在NR PDSCH (一)时域资源有介绍,不再赘述。

a85168919448471aa4a594f8f2f12791.png

还有一个因素和下行HARQ-ACK时序相关,即UE对PDSCH的处理时延
发送HARQ-ACK的PUCCH的第一个上行符号不能早于上行符号L1位置,L1 定义为T_proc,1=(N1+d1,1+d2)(2048+144)*k*(2的-u次方)*Tc+Text 后上行符号。其中确定UE PDSCH处理时延的参数包括UE的处理capability能力capability 1 和capability 2, PDSCH DM-RS position ,PDSCH mapping Type A/B 类型,子载波间隔及38.211 38.133中的内容,具体可以看38214 5.3节UE PDSCH processing procedure time。PUSCH也有类似的发送准备时延,具体在38.214 6.4 UE PUSCH preparation procedure time,这里不细说了。

通过上面的内容也可以看出只有DCI0_1和DCI 1_1支持CBG传输,在配置CBG时,对于其他DCI,也只能进行基于TB 的传输,这点后面也会用到。

 

 

最后

以上就是勤劳夏天为你收集整理的NR HARQ(二) CBG HARQ-ACK codebook的全部内容,希望文章能够帮你解决NR HARQ(二) CBG HARQ-ACK codebook所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部