2016年底,LDPC被确认成为5G标准中的一种信道编码,在3GPP 38.212技术规范中详细规定了如何使用。最近本人也在研究LDPC,因此写下一些笔记共享。38.212规范中说明了物理层信息比特的处理流程,本问尽量按照信息处理流程将涉及LDPC的部分摘出描述介绍,方便阅读。以Download Shared Channel为主进行描述。
1. 传输块(Transport Block)添加CRC
当传输块被传入Downlink Shared Channel后,为了使传输块具有校验检错功能,需要为传输块添加CRC校验,目的是在接收端收到传输块后可以校验传输块是否出错。传输块内比特依次为,添加的CRC校验比特为
其中A和L分别为传输块载荷(payload)和校验大小。当
时,使用24位CRC校验,否则,使用16位CRC校验。具体的CRC计算多项式可以参照5.1中的规定。当传输块添加CRC校验比特之后记为
,其中
。此时传输块被处理为长度为B的具有校验功能的传输块。
2. LDPC基矩阵的选择
5G中LDPC有两个基矩阵可以选择,分别为BG1和BG2,如何选择基矩阵也在标准中做出了规定。根据传输块大小A以及需要编码的码率R进行选择,选择规则为:(1)如果或者
或者
的话,基矩阵选择BG2;(2)其他情况选择BG1。需要注意两点:有三种情况选择BG2,请看清选择的条件;另外,传输块大小A是不包括CRC校验的部分。其实在LDPC仿真时经常会提及信息位长的概念,在此时LDPC编码时的信息位长指的是附加上CRC校验的长度,即B。因此如果使用LDPC信息位长进行判断如何选取基矩阵的话,需要将上述292和3824增加16个CRC的校验比特。大概选择原则就是低码长低码率选择BG2,高码长高码率选择BG1。
3. 码块分段以及添加CRC
当传输块过大时,需要将传输块进行分段成码块,依次传输码块,在接收端重新组装成为原来的传输块。如何分段在标准中的5.2.2中有详细的说明,需要注意的是在分段后,每个码块仍需要具有检验错误的功能,因此每个码块需要附加CRC校验。如果没有被分段则不需要额外在添加因此CRC校验。另外,在5.2.2中同时可以计算出提升系数(Lifting Size)。根据表5.3.2-1,已知
即可计算
。再根据表5.3.2-2或者5.3.2-3即可获得QC移位系数矩阵,可以将LDPC基矩阵扩展成为LDPC校验矩阵用于编码或者译码。分段后的码块表示为
,其中
表示码块的大小,r表示码块的编号。
4. 信道编码及速率匹配
使用获得的LDPC校验矩阵,将分段后获得的码块依次进行编码,码块大小小于指定的信息位时,添加<NULL>,编码时等效于0,相当于在码块后补零直到长度等于LDPC校验矩阵中对应的信息位长,然后进行编码。编码输出依据指定的码率R选取码字比特。基矩阵对应的前两列的信息比特不选取,即打掉
个信息比特,遇到<NULL>时跳过。直到选取码字符合指定的码率。
在参考相关文献时,遇到一种说法是选取完整校验矩阵中对应的列数,组成子矩阵然后进行编码,个人认为此做法在仿真实验时是可行的,但是当涉及HARQ研究是,需要生成多个重传包,选取部分子矩阵进行编码的方法不可取,因为这种方法过于繁琐。选取符合指定码率的子矩阵进行编译码的方法可以加快LDPC仿真的速度,因为越大的矩阵在仿真时会越慢。在需要涉及HARQ等使用重传的方法是,还是按照标准中规定的生成方法生成完整的码字,然后依次从起始位置选取才是正确的方法。
5. 码字拼接
将每个码块编码后的码字依次进行拼接然后进行后续映射调制发送。至此完成了5G物理层涉及LDPC部分的信息处理流程。
本文以下行共享信道为例描述了传输块被传入物理层到映射调制前的过程,主要是涉及LDPC的部分。
后续如果有时间的话还会详细描述本文的第四部分,因为第四部分是涉及LDPC的主要内容。