【FPGA】基于FPGA的RS码模块设计

        RS编码,又称里所码,即Reed-solomon codes,是一种前向纠错的信道编码,对由校正过采样数据所产生的多项式有效。当接收器正确的收到足够的点后,它就可以恢复原来的多项式,即使接收到的多项式上有很多点被噪声干扰失真。

       编码过程首先在多个点上对这些多项式求冗余,然后将其传输或者存储。对多项式的这种超出必要值的采样使得多项式超定(过限定)。当接收器正确的收到足够的点后,它就可以恢复原来的多项式,即使接收到的多项式上有很多点被噪声干扰失真。
        RS(Reed-Solomon)码是一类纠错能力很强的特殊的非二进制BCH码。对于任选正整数S可构造一个相应的码长为n=qS-1的 q进制BCH码,而q作为某个素数的幂。当S=1,q>2时所建立的码长n=q-1的q进制BCH码,称它为RS码。当q=2m(m>1),其码元符号取自于F(2m)的二进制RS码可用来纠正突发差错,它是最常用的RS码。

第一步:理解伽罗华域(有限域)
         伽罗瓦域本质上是一个受限的集合,以及一些数学运算,使得运算的结果仍然在这个集合中。对于二维码标准来说,要使用位为模数2的算子,字节为模数100011101(本原多项式x**8+x**4+x**3+x**2+1)的算子。这意味着使用GF(2**8),有时写成GF(256)。GF(256)中的数字都在0到255(含)的范围内。请注意,这也是可以用一个八位比特表示的范围(最大的八位比特是1111_1111,等于255)。

第二步:理解伽罗华域内的运算
        如前所述,GF(256)包含0到255(含)的数字。GF(256)中的数学运算具有循环性,也就是说,如果在GF(256)中进行数学运算,得到的数字大于255,那么就需要使用求模运算来得到一个仍然在伽罗瓦域中的数字。

        在伽罗瓦域中,负数与正数具有相同的值,所以-n=n.换句话说,在伽罗瓦场算术中,始终要使用数字的绝对值。这就是说,伽罗瓦域内的加法和减法是一回事。伽罗瓦域内的加减法是按正常的方法做加减法,但又要进行模数运算。而由于我们使用的是模2运算(在QR码规范中提到过),这和执行XOR运算是一样的。

第三步:用模100011101生成2的幂次
       GF(256)中的所有数字都可以用2的幂来表示,具体来说,GF(256)中的所有数字都可以用2**n来表示,其中0 <= n <= 255。然而,如前所述,GF(256)中的所有数字本身必须在0到255的范围内,所以2**8对于伽罗瓦场来说似乎太大了,因为它等于256。

第四步:理解生成多项式
        我们在生成纠错码字方面已经取得了很大的进展,但我们还没有达到目的。下一步是了解生成多项式。如前所述,纠错编码使用多项式长除法。要做到这一点,需要两个多项式。第一个要使用的多项式叫做消息多项式。消息多项式使用数据编码步骤中的数据码字作为其系数。例如,如果数据码字转换为整数,是25,218和35,消息多项式将是25x**2+218x+35。在实践中,标准QR码的实际信息多项式要长得多,但这只是一个例子。信息多项式将被生成多项式所除。生成多项式是一个多项式,它通过把下面这些项乘起来得到其中n是必须生成的纠错码字数(见纠错表)。如上一节所述,α等于2。
第五步:生成纠错码
假设原始信息为00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 01000000 11101100 00010001 11101100 00010001 11101100 00010001

转换成十进制

32, 91, 11, 120, 209, 114, 220, 77, 67, 64, 236, 17, 236, 17, 236, 17

对应的信息多项式为

假设我们的纠错码能够纠10个错误,使用如下生成多项式

现在是时候将信息多项式除以生成多项式了。除法步骤考虑到了伽罗瓦域的运算。

找出适当的项来乘以生成多项式,乘法的结果应该与消息多项式(在第一个乘法步骤中)或余数(在随后的所有乘法步骤中)的第一项相同。
把结果与信息多项式(在第一个乘法步骤中)或余数(在随后的所有乘法步骤中)异或。
执行这些步骤n次,其中n是数据码字的数量。
注意这些步骤与普通多项式长除法的步骤之间的不同。在乘法步骤之后,我们不做减法,而是执行XOR(在GF(256)中,这是同样的事情)。

        在实际的数字通信传输信道上,信号发生错误是不可避免的。可以采用信道编码来尽可能地降低误码率。在信道编码中除了需要传送的信息之外,还加入了一些冗余信息,以便在收端检测出错误。

        对于检出错误的处理方式常用的有三种:检错重发(ARQ)、前向纠错(FEC)、混合纠错(HEC)。对于前向纠错是不需要反馈信道的,在信道编码中含有纠错信息,实时性较强。RS编码在前向纠错中的使用比较常见。
       RS码是Reed Solomon码的简称,是属于循环码BCH码的一种,对于突发错误,RS码具有很好的纠错能力。 一个RS码,输入信号分成n*m比特一组,每组包括个n符号,每个符号由m个比特构成。对于一个可以纠正m个符号错误的RS码,其参数如表1所示。

 使用IP Core设计RS编码器
       对于RS码的编码器,可以用带反馈的移位寄存器来实现,不过实现起来比较复杂。Altera为RS码提供了IP Core——RS Compiler来简化RS编码/译码器的设计。RS Compiler除了可在Quartus II中使用外,还可与DSP Builder配合使用(见图)。

      双击该模块,出现RS Compiler对话框,如图5-10所示。选择“Encode”编码器,然后点击“Next”按钮,进行RS编码器的参数设置(见图5-11)。设置完成后就可以在Simulink中,如其它DSP Builder模块一样调用RS编码器来完成更大的设计了 

 

 使用IP Core设计RS译码器
        RS Compiler这个核也可以设计RS译码器。同设计RS编码器时一样调用RS Compiler,选择类型为“Decoder”的译码器,见图所示。接着的参数设置与RS编码器相同,这里不再赘述。最后设计好的RS译码器见图。

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simuworld

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值