发明内容
针对现有问题,本发明提出了一种基于3GPP 5G-NR极化码的分布式CRC处理方法,引入了一个队列数据结构的缓冲区,用以保存那些还未译出相关信息比特的CRC校验比特索引,等待所有相关信息比特译出后再进行处理,使得CRC校验更准确。
本发明的目的通过以下的技术方案实现:一种基于3GPP 5G-NR极化码的分布式CRC处理方法,包括以下步骤:
在接收端做分布式CRC校验时,设置一个基于队列数据结构的缓冲区,该缓冲区用于保存还未进行CRC校验的信息比特;每次先把译出的CRC校验比特位置放入缓冲区的尾部,然后判断缓冲区首部存储的CRC校验比特相关的信息比特是否完全译出,如果完全译出则进行CRC校验,并删除缓冲区的首部,否则不进行CRC校验,继续进行SCL译码。
优选的,如果缓冲区首部存储的CRC校验比特相关的信息比特完全译出,进行CRC校验,并且保存当前CRC比特的校验结果,用以结合下一个CRC比特的校验结果来综合验证译码路径是否通过CRC校验。
优选的,当前CRC校验结束后,删除该队列缓冲区的前段对应的该CRC校验比特的索引,再对下一个CRC校验比特进行CRC校验。
具体的,包括如下步骤:
1)首先定义一个用于保存CRC位置的寄存器CRCBitIndexBuffer,用于存储还未进行校验的CRC比特交织前的比特位置,即CRC校验矩阵对应的列;然后定义一个路径标记矩阵,长度为搜索路径数×CRC校验比特数,用于对一条路径是否通过CRC校验进行标记,可对多次校验的结果进行综合判断;
2)判断已译出的信息比特数是否大于0,如果还没有译出信息比特,那么就结束CRC校验进行下一步译码;
3)解交织获得所有原始信息比特的位;
4)获得当前译码比特交织前的位置;
5)根据位置判断该比特是否为CRC比特,如果不是则结束CRC校验进行下一个比特的译码;
6)如果是的话,把该CRC校验比特的位置放入CRCBitIndexBuffer最后,更新CRCBitIndexBuffer;
7)判断CRCBitIndexBuffer是否为空,如果为空代表没有要校验的CRC比特,则结束CRC校验过程,进行下一个比特的译码;
8)如果CRCBitIndexBuffer不为空,则提取CRCBitIndexBuffer的第一个CRC校验比特的位置;
9)判断与该CRC校验比特相关的所有信息比特是否译出,即判断与该CRC校验比特相关的所有信息比特是否为第三步获得的原始信息比特位置的子集,如果不是,则代表与该CRC校验比特相关的原始信息比特还未完全译出,无法进行CRC校验,则结束CRC校验过程;
10)如果都已译出,则通过已译出的原始信息比特计算该CRC校验比特,与通过路径度量值译码的CRC比特进行比较,进行CRC校验。
优选的,综合之前CRC校验比特的校验结果,判断本次校验中是否所有译码路径都未通过CRC校验,如果所有的译码路径都未通过CRC校验,则说明本次译码出现了错误,提前终止译码,如果不是所有的路径都未通过CRC校验,删除CRCBitIndexBuffer第一位,结束本次CRC校验,进行下一个比特的译码。
具体的,首先给定一个矩阵FailPathFlag,长度为L×CRCLength,其中L为SCL译码算法的译码路径条数,假设有X个CRC校验比特,译码路径为Y条;
当检测到第一个CRC校验比特并判断译出了所有与之相关的信息比特时,对Y条路径进行CRC校验,并标记未能通过CRC校验的路径为1,记为FailPathFlag1,然后将结果保存到FailPathFlag的第一列,然后计算FailPathFlag每一行的总和,得到一个向量FailPathFlagAll,判断FailPathFlagAll是否全大于0,如果不是,则进行下一次CRC校验;
当检测到第二个CRC校验比特并判断译出了所有与之相关的信息比特时,对Y条路径进行CRC校验,并标记未能通过CRC校验的路径为1,记为FailPathFlag2,然后将结果保存到FailPathFlag的第二列,然后计算FailPathFlag每一行的总和,更新向量FailPathFlagAll,判断FailPathFlagAll是否全大于0,如果不是,则进行下一次CRC校验;
依次类推,当检测到FailPathFlagAll都大于0时,终止译码。
本发明与现有技术相比,具有如下优点和有益效果:
本发明针对3GPP NR协议的规定,同时在串行消除列表译码算法中实现了对速率匹配、奇偶校验比特和CRC校验比特的处理。与现有的发明相比,根据协议极化码编码前的交织改进了现有的算法,使其可以解决译码到CRC校验比特时与之相关的原始信息比特还未完全译出的问题。并且还提出了综合多个CRC校验比特校验的校验结果对SCL译码算法中的译码路径进行CRC校验,可以提高CRC校验的准确性。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
实施例1
在对NR协议极化码进行研究时,发现NR协议中的交织方式可能导致在接收端做分布式CRC校验时,与之相关的信息比特可能还未完全译出,如果直接通过已译码的信息比特乘以该CRC校验比特对应的CRC生成矩阵的列,就会导致校验结果出错的问题。
针对这个问题,提出了一个基于队列数据结构的缓冲区。该缓冲区用于保存还未进行CRC校验的信息比特。每次在译码到CRC校验比特时,首先判断与之相关联的信息比特是否完全译出,如果未完全译出,则不进行CRC校验,把该CRC校验比特的索引放在队列缓冲区的尾部(rear),如果判断出与之相关联的信息比特完全译出,那么就进行CRC校验,并且保存当前CRC比特的校验结果,用以结合下一个CRC比特的校验结果来综合验证译码路径是否通过CRC校验,这个就是本发明提出的多比特CRC联合校验方法。
然后当前CRC校验结束后,再删除该队列缓冲区的前段(front)对应的该CRC校验比特的索引,再对下一个CRC校验比特进行CRC校验。
当判断出所有的译码路径都未通过以上所述方法的CRC校验时,则说明译码发生了错误,就提前终止译码,这样大大的减少了不必要的计算。
本发明是针对目前NR协议极化码编码前交织方式出现的问题进行改进,在不改变协议的情况下,在接收端解决交织方式导致的分布式CRC校验比特相关的信息未完全译出的问题。并提出了一种基于多分段CRC比特校验的方法,可以提高CRC校验的准确性。接下来介绍基于协议极化码的整个编译码流程,然后在分布式CRC校验部分介绍本专利的发明内容。
本发明的实现中,首先计算接收比特的LLR值,将其解比特交织。然后补齐被凿孔或者缩短的比特信息的LLR值,或者将重复发送比特的LLR值的向量长度还原为N。当速率匹配的方式为凿孔时,在接收长度为E的信息比特的前面补上(N-E)个0为被凿掉比特的LLR值。当速率匹配的方式为缩短时,在接收长度为E的信息比特后面补上(N-E)个大的正值,例如本专利中将其设为了100,作为被缩短比特的LLR值。当速率匹配的方式是重复时,则把重复比特的LLR值对应相加作为其LLR值。
然后将补完LLR值的信息比特进行子块解交织,对应协议中发送端在比特选择之前的子块交织。
然后将子块解交织后信息比特的位置进行位倒序。
然后开始进行串行抵消列表译码算法,当译码到奇偶校验比特时,根据奇偶校验函数计算奇偶校验比特的值,然后再计算对应的路径度量值。
当译码到CRC校验比特时,按照信息比特处理来计算路径度量值,计算完后,根据本发明前面提到的方法通过CRC校验比特对所有的译码路径进行CRC校验,即每次先把译出的CRC校验比特位置放入基于队列数据结构的缓冲区的尾部,然后判断缓冲区首部存储的CRC校验比特相关的信息比特是否完全译出,如果完全译出则进行CRC校验,并删除缓冲区的首部。否则不进行CRC校验,继续进行SCL译码。然后综合多个CRC校验比特的结果判断译码路径是否通过CRC校验。
本过程对所有基于协议控制信道的编码方案均适用。
如图1所示,为3GPP 5G-NR极化码的通用处理流程。首先产生长度为A的原始信息比特[a
0,a
1,…a
A-1]。然后添加长度为L的CRC校验比特,得到信息比特[b
0,b
1,…b
A-1,…,b
A+L-1]。将信息比特
交织,将CRC校验比特插入到信息比特中去。然后根据比特选择的方式确定编码长度N。再确定冻结比特、信息比特和奇偶校验比特的位置。将冻结比特、信息比特和奇偶校验比特放在对应的位置上,得到待编码比特[u
0,u
2,…u
N-1]。接着乘以编码矩阵
其中
得到长度为N的编码比特
然后进行子块交织。再进行比特选择,可能为凿孔、缩短或者重复,得到长度为E的输出比特[e
0,e
1,…e
E-1]。然后进行比特交织。再进行BPSK调制。通过AWGN信道后,在接收端,先进行比特解交织。然后进行串行抵消列表译码,其中集成了BPSK解调、对比特选择的处理、子块解交织和解码,还包含了对奇偶校验比特和CRC校验比特的处理,并针对协议交织方式的问题给出了解决方案。译码完毕后去掉冻结比特和奇偶校验比特。再解交织。再去掉CRC校验比特,就得到解码的原始信息比特了。
如图2所示,1是串行抵消译码的输入信息,为已进行比特选择、经过BPSK并通过AWGN信道的接收信号。2是串行抵消译码的输出信息,为已译码的长度为N的比特。串行抵消译码的算法如下所示:
1.首先接收到长度为E的加噪声的比特,为输入1。
2.生成本地的各种信息。例如获得冻结比特和信息比特的位置、解交织的方式、获得CRC生成矩阵用于计算分布式的CRC校验比特。
3.获得SC译码蝶形结构最右侧的初始化LLR值。SCL译码算法等同于在多个路径上进行SC译码。所以SCL译码算法可以等同于‘SC译码算法+路径度量值PM’。而由于接收到的是经过速率匹配后的信息,长度可能并不是极化码译码所要求的2的整数次幂,所以在这一步还要对比特选择后凿孔的比特或者重复的比特进行处理,得到这些比特的LLR值,对于凿孔的比特,在计算的接收信息LLR值前补上(N-E)个0。对于缩短的比特,在计算的接收信息LLR值前补上(N-E)个大的正值。在这一步后应该得到长度为N的LLR值向量。
4.在处理完发送端比特选择的逆过程,还需要对长度为N的LLR值向量进行子块解交织,恢复到编码后比特的顺序。
5.再将恢复到编码后比特的顺序进行倒位序反转。
6.然后就开始遍历N个待译码比特,进行串行译码。与SC算法不同的是在每进行下一个比特的译码时都保留L个候选路径。
7.如果i<N,首先获取遍历的第i个比特比特序号i的倒位序i_inverse。否则的话就结束译码,输出2,为已译码的比特。
8.然后判断待保留的路径是否达到L,如果没有达到则复制扩展到最大路径L。这样做的目的主要是为了方便达到L条路径后每次剪枝的拷贝操作,以及符合定义的全部变量:SCL译码候选矩阵,是一个N×L矩阵。每行保留每次译码的L个候选路径,每列代表每条路径的译码比特。
9.递归计算每条路径第i个译码比特的LLR值。
10.将L条路径扩展为2L条路径,然后以此遍历计算每条路径的路径度量值。路径度量值是基于LLR值迭代计算的计算的。
11.当遍历计算完所有2L条扩展路径的PM值时,选出其中PM最大的L条路径作为下一级译码的候选路径,这也就是所谓的剪枝操作。
12.判断译码的第i个比特是否为CRC校验比特,如果是的话首先要对已译码的比特解交织,这是因为在发送端,添加了CRC校验比特后进行了交织,所以在接收端为了进行CRC校验首先需要解交织。
13.然后对所有L条路径的译码比特进行CRC校验,如果所有的路径都没有通过CRC校验,那么就提前终止译码,否则回到第7步开始对下一个比特译码。
图2还包含了对奇偶校验比特的处理,在节点3和节点4,节点3输入一个节点求其扩展路径的路径度量值,这个节点可能是信息比特、冻结比特或者奇偶校验比特。协议中插入的奇偶校验比特在这里处理,作为辅助计算路径度量值,来对译码路径进行选择,其流程如图3所示,描述如下:
1.节点3是译码第i个比特的第l条路径,需要计算其路径度量值,设第l条路径第i-1个译码比特的路径度量值为PMi-1(l),第i个比特第l条路径的LLR值为LLRi(l)。
2.判断待估计的比特是否为信息比特,如果是的话进行第3步,否则的话跳到第18步。
3.判断待估计的比特是否为奇偶校验比特,如果是的话进行第4步,否则的话跳到第14步。
4.根据协议定义的奇偶校验函数计算当前奇偶校验比特的值,根据LLR值得到估计比特
判断和由奇偶校验函数计算得到的值ParityBitValue是否相等,如果
进行第6步,否则的话进行第7步。
5.PMi(l)=-∞。
6.判断if LLR>0,如果是的话进行第8步,否则跳到第11步。
7.判断if ParityBitValue==0,如果是的话进行第9步,否则跳到第10步。
8.PMi(l)=PMi-1(l),结束。
9.PMi(l)=PMi-1(l)-|LLRi(l)|,结束。
10.判断if ParityBitValue==1,如果是的话进行第12步,否则跳到第13步。
11.PMi(l)=PMi-1(l),结束。
12.PMi(l)=PMi-1(l)-|LLRi(l)|,结束。
13.判断候选比特是否和由LLR值估计的比特一致,是的话跳到第15步,否则跳到第16步。
14.PMi(l)=PMi-1(l),结束。
15.PMi(l)=PMi-1(l)-|LLRi(l)|,结束。
16.将已译码的原始信息比特个数加1,用于分布式CRC校验。
17.判断候选比特是否为0,是的话跳到第19步,否则的话跳到第20步。
18.PMi(l)=-∞。
19.判断if LLR>0,如果是的话进行第21步,否则跳到第22步。
20.PMi(l)=PMi-1(l),结束。
21.PMi(l)=PMi-1(l)-|LLRi(l)|,结束。
经过以上流程,就可以得到第i个译码比特第l条路径的路径度量值PMi(l),输出为节点4,为后续的剪枝操作做准备。剪枝操作就是从2L条候选路径中选出L条PM值最大的路径即可。
图2还包含了对分布式CRC校验比特的处理,节点5为已译码并解交织后的比特,当遇到CRC校验比特时对其做CRC校验。在对协议中交织后的CRC校验比特做校验时,发现协议的交织方案可能导致在做单个比特的CRC校验时,与该CRC校验比特相关联的原始信息比特可能还未译出,这样就可能导致错误的CRC校验结果,从而错误提前结束译码,针对这个问题,本发明提出了一种方法,可以判断与当前CRC校验比特相关的原始信息比特是否译出,如果没有译出,那么保存这个CRC校验比特的位置,当译出与之相关联的所有信息比特后再对齐进行CRC校验,根据图4,其过程如下:
1)首先要定义一个用于保存CRC位置的寄存器CRCBitIndexBuffer,用于存储还未进行校验的CRC比特交织前的比特位置,即CRC校验矩阵对应的列。然后还要定义一个路径标记矩阵,长度为搜索路径数×CRC校验比特数,用于对一条路径是否通过CRC校验进行标记,可对多次校验的结果进行综合判断。
2)判断已译出的信息比特数是否大于0,如果还没有译出信息比特(可能之前都是冻结比特),那么就结束CRC校验进行下一步译码。
3)解交织获得所有原始信息比特的位。
4)获得当前译码比特交织前的位置。
5)根据位置判断该比特是否为CRC比特,如果不是则结束CRC校验进行下一个比特的译码。
6)如果是的话,把该CRC校验比特的位置放入CRCBitIndexBuffer最后,更新CRCBitIndexBuffer。
7)判断CRCBitIndexBuffer是否为空,如果为空代表没有要校验的CRC比特,则结束CRC校验过程,进行下一个比特的译码。
8)如果CRCBitIndexBuffer不为空,则提取CRCBitIndexBuffer的第一个CRC校验比特的位置。
9)判断与该CRC校验比特相关的所有信息比特是否译出,即判断与该CRC校验比特相关的所有信息比特是否为第三步获得的原始信息比特位置的子集,如果不是,则代表与该CRC校验比特相关的原始信息比特还未完全译出,无法进行CRC校验,则结束CRC校验过程。
10)如果都已译出,则通过已译出的原始信息比特计算该CRC校验比特,与通过路径度量值译码的CRC比特进行比较,进行CRC校验,并保存本次校验结果,更新路径标记矩阵用于综合判断一条路径是否通过了CRC校验。
11)综合之前CRC校验比特的校验结果,判断本次校验中是否所有译码路径都未通过CRC校验。
12)如果所有的译码路径都未通过CRC校验,则说明本次译码出现了错误,提前终止译码。
13)如果不是所有的路径都未通过CRC校验,删除CRCBitIndexBuffer第一位,结束本次CRC校验,进行下一个比特的译码。
在分布式CRC校验的流程图中,输出6代表综合多个CRC校验比特进行判断,对每条路径是否通过CRC校验进行标记,然后在下一次CRC校验的时候会结合上一次的CRC校验结果共同判断译码路径是否通过CRC校验。结合图5给出详细的说明。
首先给定一个矩阵FailPathFlag,长度为L×CRCLength,其中L为SCL译码算法的译码路径条数。本例中假设有6个CRC校验比特,译码路径为8条。
当检测到第一个CRC校验比特并判断译出了所有与之相关的信息比特时,对8条路径进行CRC校验,并标记未能通过CRC校验的路径为1,记为FailPathFlag1,然后将结果保存到FailPathFlag的第一列,然后计算FailPathFlag每一行的总和,得到一个向量FailPathFlagAll,判断FailPathFlagAll是否全大于0,如果不是,则进行下一次CRC校验。
当检测到第二个CRC校验比特并判断译出了所有与之相关的信息比特时,对8条路径进行CRC校验,并标记未能通过CRC校验的路径为1,记为FailPathFlag2,然后将结果保存到FailPathFlag的第二列,然后计算FailPathFlag每一行的总和,更新向量FailPathFlagAll,判断FailPathFlagAll是否全大于0,如果不是,则进行下一次CRC校验。
依次类推,当检测到FailPathFlagAll都大于0时,终止译码。
在本例中,当最后一次CRC校验结束时,在节点6计算FailPathFlagAll输出,可以发现仅有第三条译码路径通过CRC校验,保留第三条路径作为译码结果。
这种方法的优越性在于可以更加准确的对译码路径是否通过CRC校验进行判断。例如,观察图5的第一条译码路径,在进行第一次和第二次CRC校验时(通过第一个和第二个CRC校验比特),它都没有通过CRC校验,但是由于单个的CRC校验比特检错能力有限,在进行第三次CRC校验时,它通过了CRC校验。如果按照现有的办法,每次仅使用单个CRC校验比特的校验结果来对译码路径是否通过CRC校验进行判断,那么就会导致CRC校验不准确。而本发明提出的办法可以综合第一次和第二次的CRC校验结果进行考虑,在综合后,发现该条路径是没有通过CRC校验的,这样就能更准确的对译码路径进行CRC校验判断。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。