欢迎访问ic37.com |
会员登录 免费注册
发布采购

Viterb译码RS编码

发布日期:2008-12-17标签:

RS码是一种非分组的有记忆编码,因编码规则遵从卷积运算而得名,可记为(n,k,m)码,其中k表示输入信息 的路数,n表示码元输出的路数,码表示编码器中寄存器的节数。输出码元n不仅与输入信息位k有关,而且与编 码器中记忆的m位有关,通常称l=m+1为约束长度(记忆长度)。其译码既可采用传统的代数方法,也可采用概率 方法,而常用的是概率方法。RS码一般使用(n,k)表示,输入信号分成k×mbit一组,每组包括k个符号,每个 符号由m bit组成。一个可以纠错t个符号的RS码具有如下参数。

RS码都是在伽罗华域(Galois Field,GF)中运算的,因此了解伽罗华域的数据运算是RS编码的前提。无线通 信中的数据、地址、校验码等都可以看成是属于GF(2)=GF(28)中的元素或称符号。GF(28)表示域中有256 个元素,除0、1之外的254个元素由本原多项式P(x)生成。本原多项式P(x)的特性是P(x)得到的佘式等于0。无线通信中用来构造GF(28)域的P(x)是P(x)= x8+x4+x3+x2+1,而GF(28)域中的本原元素为α=(00000010)。

下面以一个较简单例子说明域的构造。构造GF(23)域的本原多项式假定为P(x)=x3+x+1。α定义为P(x)=0的根, 即α3+α+1=0和α3=α+1。GF(23)中的元素计算如表1所示。

表1 GF(23)中的元素计算

用二进制数表示域元素得到如表2所示的对照表。

表2 二进制数表示域元素

这样一来就建立了GF(23)域中的元素与3位二进制数之间的一一对应关系。用同样的方法可建立GF(28)域中的256个元素与8位二进制数之间一一对应关系。在纠错编码运算过程中,加、减、乘和除的运算是伽罗华域中进行的。现在以GF(23)域中的运算为例。

这些运算的结果仍然在GF(23)域中。

GF域的加法和减法采样异或可以方便地实现,但GF域的乘法和除法计算则十分复杂。在RS码中GF域的除法使用较少,而 乘法使用较多,以下详细介绍GF域的乘法运算。

在C6x序列DSP中,C64x中有专门的GF域的乘法指令。这样,可以快速实现GF域的乘法。该指令为GMPY4,可以一次实现4 个8位GF域的乘法。如果条件满足,该指令执行如下运算,其中src1和src2为操作数,ubyte表示无符号的字节数,dst为 目的单元。

使用该指令的例子如图1所示。

图1 GMPY4的运行结果

GMPY4指令默认使用GF(256)域乘法,其生成多项式为G(x)=1+x2+x3+x4+x8。可以通过GFPGFR寄存器设置用户的生成 多项式。GFPGFR寄存器各位的定义如图2所示。

图2 GFPGFR寄存器各位的定义

各位的意义分别如下。

● 第0~第7位。POLY位,可读写位,复位值为lDh;存储生成多项式的系数。

● 第8~第23位。预留,只读位,复位值0。

● 第24~第26位。SIZE位,可读写位,复位值07;该位值加1为GF域的位数。

● 第27~第31位。预留,只读位,复位值0。

默认的多项式为G(x)=1+x2+x3+x4+x8,则POLY中存储的数值为(1+4+8+16)=29,十六进制则为0xlD。注意,其中 卢为默认带有1,所以POLY的值虽然为0xlD,但实际上表示生成多项式系数为0x11D。

使用默认多项式做GF(256)的乘法的C程序如下,程序中使用_GMPY4函数的DSP的C编译器带有的内联函数。

以上为直接使用默认的生成多项式,如果用户的生成多项式为G(x)=1+x3+x5+x6+x8,则POLY中存储的数值为(1+8+32+64)=105,十六进制则为0x69。注意,其中x8为默认带有1,所以POLY的值为0x69,设置新的POLY值并进行GF(256) 的乘法程序如下:

欢迎转载,信息来源ic37网(www.ic37.com)

 复制成功!