当前位置:首页 期刊杂志

基于Verilog HDL语言的一种奇偶校验码与极化码级联的编码器设计与仿真

时间:2024-07-28

彭逸飞

(电子科技大学 信息与通信工程学院,四川 成都 611731)

1 极化码的编码原理及步骤

1.1 信道估计

极化码主要是利用信道的极化现象进行编码的一种信道编码方案。信道的极化现象可以将信道分为两种信道,分别为信道容量趋近于0的信道和信道容量趋近于1的信道。但是,在实际情况中,由于编码并不是无限长的,信道极化后极化信道容量会分布在0和1之间,如图1所示。因此,通常选择信道容量较大的(趋近于1)的信道用于传输给定信息和输入信息,而信道容量较小的(趋近于0)的信道用于传递固定信息及赋值为0不传输信息。

所谓信道容量较小的实际意思为该信道的噪声较大,不适合传输给定信息。反之,信道容量趋近于1,证明该信道信道容量理论可达香农容量,可以很好地传输给定信息。

对于极化后信道,采用Bhattacharyya参数进行估计。规定在B-DMC(二进制离散无记忆)信道W中,Bhattacharyya参数定义为:

Bhattacharyya参数和信道容量I(W)之间的关系:对于任意给定的B-DMC信道,当Bhattacharyya参数I(W)趋近于0时,信道容量I(W)趋近于1;反之,当Bhattacharyya参数Z(W)趋近于1时,信道容量(IW)趋近于0。具体证明参考文献[2]。

对于Bhattacharyya参数的计算为(等号在信道W为BEC(二进制擦除信道)时成立):

1.2 发送比特组合

通过1.1节内容可以得到极化后不同信道信道容量的估计值,在此基础上将信息比特通过信道容量较高的信道进行传输。对于信道容量趋近于0的信道,赋值为固定比特0,即不传输任何信息,从而实现比特混和。

1.3 获取生成矩阵

当通过1.2节获得待发送的比特组合后,将该比特组合通过生成矩阵进行变换。生成矩阵的计算方法如下:

图1 极化容量分布图

其中,BN为比特逆转矩阵,而F⊗n表示矩阵F的n维Kronecker幂。

1.3.1n维Kronecker幂的计算

如果A是一个m×n的矩阵,而B是一个p×q的矩阵,克罗内克积A⊗B则是一个mp×nq的分块矩阵:

所以对于F⊗n来说,当n=3时,F⊗n的结果为:

1.3.2 比特逆转

所谓的比特逆转实际上是矩阵各个元素对应的位号进行变换。例如,当前有一矩阵A=[1 2 3 4 5 6 7 8],则1对应在矩阵中的位置可以用3 bit信息N1、N2、N3来表示,即A(0,0,0)=1。同样,可以使用A(N1,N2,N3)表示矩阵A中所有的元素。

而比特翻转完成的任务是将原本按照N1、N2、N3所代表位置上的元素放置在N3、N2、N1这个逆转顺序后对应的位置上,进而得到新的矩阵A_reverse,满足如下关系:

1.4 整体关系图

经过上述步骤得到的结果就是极化码编码后的结果,整个过程如图2所示(以n=3为例)。

图2 n=3极化编码的关系框图

如图2所示,输入信号先经过信道估计将信息位放置在信道容量较大的信道上,对于信道容量小的信道,将传输无效信息0。然后,将比特组合后的结果U0~U7传入生成矩阵,并与生成矩阵进行运算,最终得到极化编码后的结果X0~X7。

2 奇偶校验码级联极化码原理

2.1 奇偶校验码级联极化码

奇偶校验码是给原始信息增加一位或多位校验位,用它构成奇校验或偶校验。常见的奇偶校验码有1比特和多比特。所谓奇校验是指信息位加上校验位所得到的所有码字中1的个数为奇数,偶校验是指信息位加上校验位所得到的所有码字中1的个数为偶数。

由于奇偶校验对编码性能的影响不大,设计采用偶校验的方式。常见的偶校验方法如图3所示。

文献[1]中提出了一种新的奇偶校验码的编码方式,即将长信息序列进行拆分,再将拆分后的序列逐一进行偶校验,并添加偶校验位于拆分后序列的结尾处,如图4所示。

图3 常见偶校验方法

图4 一种偶校验方法

2.2 整体PCC极化码的编码方案

图5为PCC极化码编码的整体关系图。以4位信息位为例,输入i0~i3为4 bit信息,先通过奇偶校验(这里使用偶校验)得到带有2 bit校验位信息的极化编码输入x0~x5。采用如图4所示的校验方法进行偶校验,输入到极化编码器的x0~x5经过极化编码器进行编码,最终得到PCC极化码编码后的v0~v7,并将其送入后续调制电路。

图5 PCC极化码编码的整体关系图

3 基于Verilog的PCC极化码编码器设计

3.1 模式一偶校验模块

3.1.1 模块描述

该模块实现了4 bit长的数据偶校验,校验位置于最低位。校验位需要校验4 bit的数据。

3.1.2 模块设计说明

普通的偶校验模块将数据位赋值给输出的高4位,最低位计算前4位的异或逻辑得出。

3.2 模式二偶校验模块

3.2.1 模块描述

该模块实现了4 bit长的数据偶校验,校验位置于第0位和第3位。第0位校验位校验第1位和第2位数据,第3位校验位校验第4位和第5位数据,如图6所示。

图6 模式二偶校验模块数据格式图

3.2.2 模块设计说明

与3.1中原理相同,不同的是校验位在输出中的位置不同和校验的位数不同。

3.3 8 bit数据反转模块

3.3.1 模块描述

该模块实现了8 bit长的数据反转。反转依照如下规则:先对8 bit数据的每一位用一个3 bit长的二进制数标识位置信息,然后将该3 bit位置信息进行反转后的位置信息即该位新的位置,如“001”反转为“100”,第2位数据放置到第5位。

3.3.2 模块设计说明

对于8 bit固定序列长度来说,经过比特反转后的序列总是固定的,遵循如下规律:第0位对应第0位,第1位对应第4位,第2位对应第2位,第3位对应第6位,第5位对应第5位,第7位对应第7位。因此,只需用触发器将当前输入的值按照对应关系输入触发器,等待一个时隙便可以完成比特反转后的序列输出。

3.4 Kronecker_calculator模块

3.4.1 模块描述

该模块实现了一种1×8行矩阵和一个特殊的8×8方阵的矩阵相乘。矩阵中元素全为二进制数,矩阵运算时采用模2运算。

3.4.2 模块设计说明

该模块要实现矩阵A(由8位宽的总线array_A输入)乘矩阵B(存储于array_B中)得出矩阵C(由8位宽总线array_C输出)。由于矩阵AB中均为二进制数,故矩阵A乘B可以简化为矩阵A第一行的每个元素与矩阵B各列元素相与(模二乘)再异或(模二加),故只需在一个时钟周期得出矩阵C每个元素与矩阵AB的逻辑关系,设计组合逻辑电路即可完成矩阵乘运算。

3.5 Bhattacharyya参数估计模块

3.5.1 模块描述

该模块实现了利用Bhattacharyya参数算法估计信道容量,并输出信息码和校验码应该放置的具体信道。

3.5.2 模块设计说明

由于将Bhattacharyya参数估计算法完全使用Verilog语言实现会消耗大量的FPGA资源,通常情况下,一旦给定总编码长度以及Z(W1_1)的值后,信道估计的结果是一定的。所以,设计采用Matlab预先生成几种常用长度N的信道估计值,利用查找表的方法将这些值预先写在FPGA的寄存器中,这样既降低了FPGA资源的消耗,又使得整个运算过程只需要3个周期即可完成,加快了运算速度。

3.6 整体设计图

图7为设计的编码器整体结构图,可以看出各模块间关系。在Pcc_Polar_ctl模块的控制下,编码使能信号Pc_enable、非固定位(即信息码位加校验位)non_dix_bit_num和编码总长度N输入到控制模块,并将信息码msg_bit输入到偶校验模块。在控制模块的作用下,系统会在生成偶校验位的同时,利用Bhattacharyya算法完成信道估计,并输出非固定位和固定位(即不传输信息的比特)在编码长度N中对应的位置,并根据该位置信息生成N比特码。在此基础上,将生成的N比特码送入Kronecker_calculator模块中,计算其与特定矩阵的克罗内克积,并将得到的结果送入比特反转模块中,经过比特反转后最终生成PCC极化码。

4 仿真分析

图8和图9展示了在两种偶校验模式下仿真的正确性。可以看到,在使能后第3个周期即可得到信道估计的输出。同时,数据在偶校验器使能(data_in_en)后的下一个周期得到校验后的结果。而对于克罗内克运算器,同样也在输入使能(array_A_start)的下一个周期得到输出(array_C_finish)。最后,又经过一个周期得到比特转换后的结果。

整体来看,从原始信息输入开始到整个PCC极化码编码输出,只消耗了6个时钟周期,在工程上是可以接受的。

图7 编码器整体结构图

图8 偶校验模式一

图9 偶校验模式二

5 结 论

极化码的优良和稳定特性,对于第5代移动通信中控制信道编码标准具有重要意义。而极化码与奇偶校验码级联的实际方案,比极化码与CRC码级联方案更加优良。因此,本文在此算法基础上,尝试利用Verilog HDL语言,设计了一种基于极化码与奇偶校验码级联方案的FPGA电路,并通过仿真证明了此次设计具有一定的可行性。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!