码迷,mamicode.com
首页 > 其他好文 > 详细

基于FPGA的LDPC编译码器说明文档

时间:2018-02-25 14:30:00      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:文档   线性   结果   组合   开发   方便   编译   纠错   mil   

基于FPGALDPC编译码器说明文档

FPGA设计实现的是一个LDPC码编译码器,采用的是并行输入与并行输出。设计主要分为两个模块:1.LDPC码编码器;2.LDPC码译码器。实现的功能:并行输入4位信息序列,经过编码器后获得12位编码后序列,然后经过译码器译码还原出原始的4位信息序列。LDPC编译码器设计功能框图如图 1所示。

技术分享图片

1 LDPC编译码器设计功能框图

具体说明如下:

 

  1. LDPC码编码器设计

本设计采用的是(812)二进制不规则LDPC码,码率为0.33,行重为34,列重为23。校验矩阵H如下:

技术分享图片

编码部分采用的是高斯消元法,获得校验序列c,即可构造出编码序列。具体方法如下:假设有一信息序列,码长为,经过编码之后为码字,码长为,则检验位长度为。其检验矩阵为,如果将检验矩阵分解为,其中为维数矩阵,为维数的满秩矩阵。将分解为(为信息位,为校验位),根据。将校验矩阵变换为(为单位矩阵),有,则有。因为在二元域中,所以检验位为。最后根据(信息位已知),得到编码后的码字。如果高斯消元过程中进行了列交换,则只需记录列交换,并以相反次序对编码后的码字同样进行列交换即可。译码时先求出,再进行列交换得到,后面部分即是还原出来的信息序列。

通过这种方法,可以获得设计中采用的校验矩阵HP矩阵和列变换。P矩阵为:

技术分享图片

列变换col_recoeder为:

技术分享图片

意思就是计算出后,要进行列变换,[0 0 0 0 0 0 0 9]意思是第8列与第9列进行交换,其他列都为0,所以不用交换。这个矩阵里面有8列,就是根据对应的数字,与该数字的列进行交换。

由于P矩阵和列变换记录都在设计之前用Matlab计算获得,所以在FPGA中实现时,只需要利用P矩阵计算获得校验比特,最后再进行列变换获得最终的编码后码字。

 

  1. LDPC码译码器设计

由于该LDPC码的校验矩阵满足任意两行至多一个相同码元 该码没有4环和6环,可采用大数逻辑译码算法进行译码,能纠正一个错误比特。简单介绍大数逻辑译码原理:

设有一个码字的校验矩阵为

设接收到的码字。相应的伴随式为

对伴随式的分量、、和进行线性组合, 也就是对H矩阵的行进行线性组合,得到以下一组校验方程:

  1. 发生一个错误, 且在正交码元位上: ,则可得,,
  2. 发生一个错误但不在正交码元位上: (取5 4 3 2 1 0中的某一个), 则只有一个 (), 其它两个均为0
  3. 发生两个错误, 其中一个在正交位上, 另一个在其它位(如):, 则,
  4. 发生两个错误, 都不在正交位上, 设,, 则,

一个循环码若在任一位上能建立个正交一致校验和式, 则该码能纠正个错误(式中表示取的整数部分)。

在本设计当中,通过这种大数逻辑算法,对码字中每个比特计算它们对应的伴随式的分量(即校正子),可以进行译码纠错。由于由于该LDPC码的校验矩阵满足任意两行至多一个相同码元 该码没有4环和6环,所以只需要一步就可以完成对应比特的纠正(使用的译码算法具体来说叫做一步大数逻辑译码算法)。根据设计所用的校验矩阵H,可以计算出每个比特对应的校验子。例如,假设编码后码字为[,,,…,],则的校验方程如下:

 

 

=+

=+++

=0

判断、、当中为1的个数可以判断是否发生错误。当1的个数大于等于2时,则发生错误,进行改正,。

 

  1. 测试仿真

经过设计之后,LDPC编译码器RTL视图如图 2所示。采用Modelsim对设计进行仿真,testbench已经附带在工程目录下。结果如下:

技术分享图片

2 LDPC编译码器RTL视图

  1. LDPC编码功能仿真结果

msg为信息序列,code为编码后序列。输入msg1010,编码的code0000_0011_1010

技术分享图片

  1. LDPC译码功能仿真结果

code为编码后序列,msg为译码后还原出来的信息序列。输入code0000_0011_1010,译码后msg1010

技术分享图片

假如code发生了一个比特错误变为1000_0011_1010,则译码可以纠错一个比特错误,可以还原出正确的msg1010

技术分享图片

  1. LDPC编译码功能整体仿真结果

msg为信息序列,code为编码后序列。输入msg1010,编码的code0000_0011_1010,译码后还原出的信息序列re_msg1010,译码正确。

技术分享图片

 

  1. 板级验证

把工程烧录到FPGA开发板上进行验证。板上的按键KEY1-4作为信息序列的输入,通过按键可以输入4位任意比特信息,KEY5作为复位按键。LED8-5显示译码后还原的信息序列。LED灯亮表示对应比特位按键按下。未来方便测试,把编码后的序列分配到了板上12个扩展IO口,分别为pin9910096979394879281867980。具体管脚分配如下所示:

技术分享图片

 

 

 

 

开发板操作说明如下:

技术分享图片

 

 

 

 

 

 

 

 

 

  1. 验证一:

    输入信息序列为1110,即按下KEY4。开发板上对应的LED5发亮,译码正确。

技术分享图片

 

 

 

 

 

  1. 验证二:

    输入信息序列为0101,即按下KEY1KEY3。开发板上对应的LED8LED6发亮,译码正确。

技术分享图片

基于FPGA的LDPC编译码器说明文档

标签:文档   线性   结果   组合   开发   方便   编译   纠错   mil   

原文地址:https://www.cnblogs.com/logic3/p/8469025.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!