NR PDSCH PDSCH 信道编码与调制流程
Posted 梦之未来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NR PDSCH PDSCH 信道编码与调制流程相关的知识,希望对你有一定的参考价值。
下面是协议中规定的PDSCH信道编码调制及资源映射流程图
先看NR PDSCH 信道编码部分。NR数据信道采用LDPC编码方案。物理层首先对来自MAC层的传输块Transport Block,添加循环冗余校验比特(TB-CRC),然后进行码块分段。如果被分割为多个编码块Code Block,则需要为每个CB添加基于CB的循环冗余校验比特 CB-CRC,然后对每个码块进行LDPC编码,且根据冗余版本信息进行速率匹配。最后执行码块内比特交织与码块级联操作,LDPC码的完整编码流程如上图中的绿色部分所示。
而最关键的部分就是LDPC 编码过程,大致就是 c bit 流经过和校验矩阵parity check matrix 运算后,得到编码矩阵H的过程;其中c Bit流为MAC 层TBS 经过添加CRC 和码块分割等处理后的bits;校验矩阵parity check matrix,是根据信息bit长度,码率,Base Graph选择后,根据协议中的规则生成的。这里的Base Graph (BG)与校验矩阵的生成相关。
下面看下每一步的大概过程。
Transport block CRC attachment
这一步就是对TB bit 加CRC校验位,值得注意的是校验位的生成方式和TB bit的位数有关系,当A>3824时,用L=24,gCRC24A(D)生成,否则L=16 用gCRC16(D)生成校验位。校验位的具体生成方法在38.212 5.1中介绍,生成过程比较好理解。这一步主要就是根据输入bit a0,a1,....a(A-1) 生成长度为L 的校验bit p0,p1,....p(L-1),最后再添加在原始a0,a1,....a(A-1) 后面组成最后的b0,b1,....b(B-1),B =A+L。
LDPC base graph selection
这一步需要根据TB块的大小选取BG。NR中支持两种Base Graph:Base Graph 1 或Base Graph 2。新传数据块才需要进行BG的选取,Base Graph 的选取规则是:1 TB块大小<=292,或码块大小<=3824 且R<=0.67 或R<=0.25,选择Graph 22 其他情况选择Graph1
BG2一般用于低码率/小TBS传输, 例如NR的uRLLC数据传输;BG1用于高码率/大TBS传输,例如高吞吐场景。
Code block segmentation and code block CRC attachment
数据信道(PDSCH和PUSCH)在进行信道编码之前,首先要在传输的数据信息尾部添加CRC比特,以便在接收端对数据的解码结果进行校验,提升系统的检错能力。码块分段是信道编码的重要一环。TB的大小往往远大于CB所能编码的最大信息比特数,所以需要首先把TB分割成多个CB,选择完LDPC base graph后,max code block(Kcb)就确定了,TB块在进行code block 分割前,需要根据b bit 流的size 和Kcb 确定具体的分割方式。
对于LDPC base graph 1 Kcb=8448 ;LDPC base graph 2 Kcb=3840。待编码bit b0,b1,b2,b3.....b(B-1) B>0 当B<=Kcb 码块个数C=1 B'=B,L=0,不需要添加CB CRC;当B>Kbc 码块个数C= B/(Kcb-L), (这里要向上取整) L=24 为每个码块增加的CRC校验bits位数,此时 CB+CB CRC 的长度为B’=B+C*L。
当RRC配置参数codeBlockGroup Transmission时,CB可以按照多个码块组发送和应答。maxCodeBlockGroupPerTransportBlock:每个TB块最多分为n个码块组,当下行为2个TB块时,最大只能配置为n4。CBG 在之后的HARQ 过程再具体介绍,这里略过。
NR码块分割与CRC添加的过程如图
下一步需要对所有CB 进行LDPC编码,首先要确定lifting size Zc,Zc主要用于后续编码矩阵H的生成过程。
Zc的确定方式:对于BG1,系统位对应的列数Kb=22;对于BG2,为了提高小数据传输的性能,Kb采用多个值(Kb=10、9、8和6),针对不同的信息比特长度,选取不同的值,有利于小数据传输性能的优化。
lifting size Zc 满足 Kb*Zc>=K' 且是下面table中的最小值。K'=B'/C 这里由Zc可以确定对应的set index iLS 用于之后HBG 中value的确定。这一步的Zc还和每个Code block的长度有关系,其中K=10Zc(BG2)或K=22Zc(BG1)。
具体怎么确定Zc,举个例子看一下 A=300 >292 选择BG1,A<3824 所以L=16,B=A+L=316<8848,C=1,B'=B=316,K'=B'/C=316;由于192<B<560,Kb=8, 查Table 5.3.2-1 满足Kb*Zc>=K' ,即Zc>=39.5 Zc取值40,对应的Set index=2。
Channel coding
channel coding的输入是Cr0,Cr1,……Cr(K-1),encoding后的bit流是dr0,dr1,....dr(Nr-1)。
在38.212 5.3.2中描述具体的LDPC 码 channel coding过程 ,下面就看下c bit流是如何变成d bit流的。首先d bit流的前K-1-2Zc 位 与C bit 流程 2Zc ~K-1 项取值相同。 即d0~d(K-1-2Zc) =c(2Zc)~c(K-1)。
这一步和编码矩阵H 及校验矩阵w的确定相关。BG1 HBG是46×68的矩阵,BG2 HBG 是42×52 的矩阵 ;HBG 中为1的位置根据Table 5.3.2-2 (BG1)和Table 5.3.2-3(BG3)确定,其余位置的值都为0。之后需要用Zc*Zc的 0矩阵 代替HBG中的0值;HBG中的1值用Zc*Zc的单位矩阵I(Pi,j)替换。将Zc*Zc的单位矩阵I 向右循环移位 Pi,j次就可以得到Zc*Zc的单位矩阵I(Pi,j)。Pi,j=mod(Vi,j,Zc),Vi,j从Table 5.3.2-2(BG1) 或Table 5.3.2-3(BG2)中可以得到。
例如Set index=2,Zc=40 Table 5.3.2-2(BG1) i=0 j=10,说明HBG i=1 j=10的位置 value为1 ,要替换成Zc*Zc的单位矩阵I(Pi,j),Set index=2 对应Vi,j=162, Pi,j=mod(162,40)=2,之后将单位矩阵循环右移Pi,j次就可以得到I(Pi,j)。矩阵HBG用 Zc*Zc的矩阵替换完成后就可以得到编码矩阵H,进而也可以得到校验矩阵w。得到校验bit 流后,
d(K-2Zc)~d(N-1) 项的取值来自于W0~W(N+2Zc-K-1)。经过这一步后就可以得到完整的输出序列d0, d1,...d(N-1),其中N=66Zc(BG1)或50Zc(BG2)。
d 的取值与c和 w的关系如下Rate matching
完成LDPC编码后,得到一个bit sequence,d0,d1,d2,....d(N-1),需要进行rate matching,速率匹配处理后得到f bit流;LDPC速率匹配算法主要在38.212 5.4.2中讲述。 总结的说,首先对信息比特进行码率编码,然后把所有编码比特按照交织的顺序放入循环缓冲器。缓冲器内的bit均匀划分为 4 个冗余版本(Redundancy Version,RV),每个RV对应一个起始点,缓冲器从调度指示的RV对应的起始点开始输出数据,直到输出信道需要的比特数,完成HARQ传输。
编码后的bits在发送时,还要考虑接收端缓存的限制;例如发送TB size很大,而发送方使用较低码率发送,接收端就需要更多的buffer存储译码前的信息,最终可能超过缓存范围。因此发送方需要根据LBRM 的限制,选择合适的码率发送。
LBRM 基站和UE 都限制,DL 强制支持(UE 本身就有缓存限制),上行方向支持可选 进行rate matching首先要将d bit流依序写入环形缓存,每个code block的长度对应为Ncb ,如果没有LBRM 的限制,Ncb=N;否则Ncb =min(N,Nref)决定,如上面的截图。确定Ncb后,可定义各个CB的不同RV(Redundancy Version)。不同RV表示从环形缓存的不同位置开始选择比特,起始位置以k0表示,k0 = 0表示从头部(d0)开始。根据LBRM 的开启与否,都可以确定RV 0/1/2/3 的K0 取值。具体图示如下。
经过bit selection后 d bit流转换为了e bit流,还要再经过bit interleaving 转换为f bit流。采用简单的行列交织器,交织行数为调制阶数Qm,具体交织方式如上图。
Code block concatenation
最后,如果进行了Code Block Segmentation 即C >1,基站还要进行Code Block Concatenation,构成长度为G的序列g0,g1,…,g(G-1)。具体方式如上。
完成信道编码过程后,接下来还要将发送的bit流 进行调制及物理资源的映射后才能发送给UE。
在此先整理下几个相关概念。TB:从MAC 层发往物理层的数据。一个 TB 对应包含一个 MAC PDU 的数据块。codeword:一个codeword是对在一个 TB 进行 CRC 插入、码块分割并为每个码块插入 CRC、信道编码、速率匹配之后,得到的数据码流。每个码字与一个 TB 相对应。 layer:对 1 个或 2 个codeword 进行加扰(scrambling)和调制(modulation)得到的复值符号进行层映射后,会映射到一个或多个传输层。每层对应一条有效的数据流。传输层的个数,即层数被称为传输秩(rank)。传输秩是可以动态变化的。层数必须小于或等于发射天线端口个数和接收天线端口个数二者的最小值,即层数 ≤ min(发射天线端口数,接收天线端口数)。
下面继续看调制和资源映射部分。
Scrambling
第一步就需要用RNTI 进行加扰;加扰过程及参数如上图,经过一系列的处理后,得到b~ bit 流。
Modulation
之后需要对b~ bit流 进行调制过程,调制方式如上图,具体的调制公式在38.211 5.1 中,最后得到复值符号d bit流。这里采用的调制方式,就是通过PDCCH DCI中的Modulation and Coding Scheme field通知给UE,毕竟解铃还需系铃人。
Layer mapping 下面需要将复值符号 映射到不同的layer上,如table 7.3.1.3-1 ,1 codeword最多支持4 layer, 2 codeword最多支持8layer。针对layer number 将不同的复值符号 分别映射到不同的layer。其中X(v-1) 代表不同layer 上对应的 复值符号集合。
Table 7.3.1.3-1: Codeword-to-layer mapping for spatial multiplexing
由上图可以看出1个CW映射到4层,M_layer_symb=M(0)_symb / 4,M(0)_symb符号平均分配到4层;2个CW映射到8层,M(0)_symb和M(1)_symb相等,M_layer_symb= M(0)_symb/ 4 =M(1)_symb / 4。2个CW映射到5层或7层M(0)_symb和M(1)_symb会有差异,但最终bit流映射到各层的符号数量M_layer_symb都是相等的。
Antenna port mapping
然后 将layer 数据与天线端口进行映射,每个天线端口对应各自的时频资源。基站先确定天线端口,再映射层数据。UE采用的layer数和天线端口等信息如何确定在NR PDSCH (四)DMRS中有具体描述。precoding过程,在CSI部分再具体讲述。最后是资源映射,即VRB 的映射和VRB to PRB的映射在NR PDSCH (二)频域资源中有具体介绍。
UE 在PDCCH 上收到DCI 1_0/1_1/1_2 后就可以得知上述编码调制所用的具体参数,对PDSCH 数据反向操作便可以得知基站发送的TB内容,之后再由UE MAC等一层层向上传输decode。微信同步更新欢迎关注“modem协议笔记”
以上是关于NR PDSCH PDSCH 信道编码与调制流程的主要内容,如果未能解决你的问题,请参考以下文章
[深入研究4G/5G/6G专题-24]: 5G NR开机流程4.2 - 随机接入应答消息MSG2的调度过程与上行同步时间提前量TA通过PDSCH信道下发