NR HARQ(二) CBG HARQ-ACK codebook

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

这篇开始看下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 的传输,这点后面也会用到。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
算法 调度 C++
NR HARQ(三) semi-static HARQ-ACK codebook
UE在一个PUCCH(或PUSCH)上发送HARQ-ACK信息时,信息bit很可能是多个bits位数,这个多bits位数的HARQ-ACK信息,也称为HARQ-ACK codebook码本 UE物理层在以下几种情况下,需要产生对应的HARQ-ACK 信息bit:UE收到PDCCH调度的PDSCH,动态调度;UE接收的PDSCH没有对应的PDCCH,即DL SPS PDSCH调度; UE接收到PDCCH指示的SPS release,并没有PDSCH。
|
3月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
338 1
|
3月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
267 89
|
8月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
337 9
|
8月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
10月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
935 33
|
10月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
553 19
|
10月前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
10月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
383 0
OpenAI故障复盘丨如何保障大规模K8s集群稳定性

热门文章

最新文章

推荐镜像

更多