zoukankan      html  css  js  c++  java
  • 基于FPGA的LDPC编译码器说明文档

    配套FPGA开发板(含该设计的工程代码):https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-4676525296.4.6e8950ed57YPhv&id=17848039135

    基于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发亮,译码正确。

  • 相关阅读:
    Encrypted Handshake Message
    RSAParameters Struct
    What if JWT is stolen?
    What's the difference between JWTs and Bearer Token?
    RSA Algorithm Example
    第18届Jolt大奖结果公布
    Ruby on rails开发从头来(windows)(三十六) 调试技巧
    Ruby on rails开发从头来(四十二) ActiveRecord基础(主键和ID)
    YouTube开放基础技术架构 让用户建自家YouTube
    Ruby on rails开发从头来(四十) ActiveRecord基础(Boolean属性)
  • 原文地址:https://www.cnblogs.com/logic3/p/8469025.html
Copyright © 2011-2022 走看看