专利名称:一种和rs码等效的编码以及其快速编译码的算法的利记博彩app
技术领域:
一种和RS码等效的编码以及其快速编译码的算法属于RS码技术领域。
常用(n,k,d)表示RS码;其中n为码字长度,k为信息符号数,d为设计距离,若可纠正的最大差错个数用t表示,则2t为校验符号数。RS码的参数具有如下的关系 设输入的信息序列为m(x)=mk-1xk-1+mk-2xk-2+......+m2x2+m1x1+m0x0,生成的码字为c(x)=cn-1xn-1+cn-2xn-2+......+c2x2+c1x1+c0x0。若采用系统码的形式,则编码算法为c(x)=xn-km(x)+R(x),其中R(x)=xn-k·m(x)modg(x),g(x)是RS码的生成多项式,mod表示相除取余数多项式。RS编码电路与一般循环码的编码电路类似,用除法电路来实现。
这里的码元(如mi、ci)均在GF(2m)域上。GF(2m)域上的每个元素由m比特组成,因此,连续m比特的错误仅相当于该码字1个码元的错误,这样RS码就可以大幅度地提高抗突发错误的能力。RS码也可以看作(mn,mk,d)二进制码。
m阶本原多项式Poly(x)的根是有限域GF(2m)的本原域元素,GF(2m)域上的所有非零元素都是本原域元素(a)的整数次幂,则由a的0到2m-2次方构成了GF(2m)域中所有2m-1个非0元素。RS编码的生成多项式定义为g(x)=Πj=12t(x-aj),]]>RS译码算法可以分为以下三步(1)根据接收码字矢量y(x)=yn-1xn-1+yn-2xn-2+......+y2x2+y1x1+y0,计算伴随式S(x)。
S(x)=S1+S2x+......+S2tx2t-1其中Sj=y(aj)=Σj=0n-1yiaij=(......((yn-1aj+yn-2)aj+yn-3)aj+......y1)aj+y0,j=1,2,......2t]]>(2)计算错误位置多项式σ(x)和出错值多项式ω(x).
假设有v个未知的错误,定义错误值为Yl,出错位置为Xl=al,l=1,2,……,v,则错误位置多项式σ(x)为v阶多项式,定义为σ(x)=Πl=1v(1-xXl)=1+σ1x+......σvxv.]]>其中σl(l=1,2,......,v)是错误位置多项式的系数。
出错值多项式定义为ω(x)=Σl=1vYlΠj=1j≠lv(x-Xj)]]>其中Yl是错误值,Xj是出错位置,Xj=aj。
错误位置多项式和出错值多项式满足σ(x)S(x)≡ω(x)modx2t,由S(x)根据上式可以求出错误位置多项式σ(x)和出错值多项式ω(x)。
(3)求错误位置和错误值。
若第i个错误位置Xi=ai,则σ(Xi-1)=0.]]>。因此求错误位置就是利用Chien搜索算法,把x=Xi-1=a-i]]>,n-1≥i≥0依次代入,求使σ(x)=0的Xj就是出错位置。
当出错位置确定后,对应的出错值为Yj=ω(Xj)σ′(Xj)]]>其中σ′(X)是σ(X)的导数。
若σ(x)=1+σ1x+......σvxv,则σ′(x)=σ1+2σ2x1+3σ3x2+......vσvxv-1,系数是GF(2m)域上的符号,每个符号由m比特组成,符号相加对应于m个比特的模二和,两个相同的数模二和为0,所以2σ2=4σ4=......=0。所以上式可简化为σ′(x)=σ1+3σ3x2+5σ5x4+......=σ1+σ3x2+σ5x4+......=Σi=1i∈oddvσixi-1]]>根据求出的Xj和Yj就可以对接收码字矢量纠错,从而实现RS码的译码。
从上述编译码算法中可以看出,GF(2m)域上的多项式的计算是最主要的运算,其中用到大量的GF(2m)域上的加法和乘法。因此,域GF(2m)上的加法器和乘法器是设计的关键。
GF(2m)域上的数可以表示成域的一组基如(am-1,am-2,.......a2,a1,1)的线性组合,X=xm-1am-1+xm-2am-2+….x1a1+x0。现有的技术中,域GF(2m)上的元素通常用线性组合的系数表示,即X=^(xm-1,xm-2,...x1,x0)]]>,这样GF(2m)域上的加法器实现比较简单,将两个数逐位异或(xor)即可,Z=X+Y,zi=xiyi,0≤i≤m-1;乘法运算有查表法和非查表法两类方法。
若采用查表法,由X和Y通过查表求X*Y,记做Z=^(zm-1,zm-2,...z1,z0)]]>,则地址为(xm-1,xm-2,…x1,x0,ym-1,ym-2,…y1,y0)宽2m比特,数据Z宽m比特,查找表的存储量为22m·m比特,这种方法速度快,但占用的资源多得难以接受,例如当m=8时,存储量为512k比特。
非查表法求出的积还要对本原多项式求模(除以本原多项式求余式)。该方法实现的电路简单、面积小,但速度慢,需要m个时钟周期。
在高速通信系统中,为了提高编译码速度,并使硬件复杂度较为合理,需要降低GF(2m)域上的运算复杂度,为此本发明改进了现有的RS码算法。
RS码的复杂度很大程度上取决于基本运算单元——加法器和乘法器的复杂度,现有技术中码元采用一组基的线性组合表示,加法运算简单,而乘法不是速度慢就是太复杂。为此我们通过采用本原元素的幂次表示码元,使乘法运算的复杂度和运算速度与原算法中的加法相近,而加法运算速度和原算法中乘法查表法的速度相当、但存储量减小很多,比非查表法计算速度高。
本发明的特征在于(1)它是一种避免了编译码过程中复杂的乘法运算且和RS码等效的编码,它是利用本原域元素a的幂次表示RS码的码元的,即RS码的码字均在GF(2m)域上,GF(2m)域上的所有非零元素都是本原域元素a的整数次幂,对于任一非零元素X,若X=ax,则X用x表示;(2)在编译码过程中,GF(2m)域上的两个元素X和Y相乘等于对应的两个指数的相加,即X=ax,Y=ay,Z=X·Y=az,则z=x+y(如果x+y<(2m-1))或z=x+y-(2m-1)(如果x+y≥(2m-1));(3)在编译码过程中,GF(2m)域上的两个元素X和Y相除等于对应的两个指数的相减,即X=ax,Y=ay,Z=X/Y=az,则z=x-y(如果x-y≥0)或z=x-y+(2m-1)(如果x-y<0)。
(4)在编译码过程中,GF(2m)域上的两个元素X和Y相加和相减采用查表法,GF(2m)域的任意两个元素的差与和相等(X-Y)=(X+Y)X=ax,Y=ay,Z=X+Y=X-Y=az=ax+ay=ax(1+ay-x),具体步骤为预先建立函数f(s)查找表,其中s、f(s)满足af(s)=1+as,用y-x查表得出f(y-x),即af(y-x)=1+ay-x,则z=x+f(y-x)(如果x+f(y-x)<(2m-1))或x+f(y-x)-(2m-1)(如果x+f(y-x)≥(2m-1))。
试验证明采用这种方法纠错性能和原算法相同,而且避免了复杂的乘法运算,实现了RS码高速高效的编译码。
图1表示本发明所述的用幂次表示码元的RS码的编码器流程图。
图2表示本发明所述的用幂次表示码元的RS码的译码器流程图。
(2)GF(2m)域乘法GF(2m)域上的两个元素X和Y相乘等于对应的两个指数的相加,即X=ax,Y=ay,Z=X·Y=az,则z=x+y(如果x+y<(2m-1))或z=x+y-(2m-1)(如果x+y≥(2m-1));(3)GF(2m)域除法GF(2m)域上的两个元素X和Y相除等于对应的两个指数的相减,即X=ax,Y=ay,Z=X/Y=az,则z=x-y(如果x-y≥0)或z=x-y+(2m-1)(如果x-y<0)。
(4)GF(2m)域加减法建立f(s)查找表的准备工作两个用幂次表示的元素的加法运算不能直接计算,需要先变换到一组基的线性组合的形式,再作加法运算,最后再变换到用幂次表示的形式,因此需要求出这两种表示方法之间的映射关系。ai(i=0,1,2,…,2m-2)用基(am-1,am-2,......a2,a1,1)的线性组合表示式等于ai除以本原多项式Poly(x=a)的余式,设余式为xm-1am-1+xm-2am-2+…x1a1+x0,用其系数(xm-1xm-2…x1x0)表示,系数xj(j=0,1,2,…m-1)的取值为0或1,x′=(xm-1xm-2…x1x0)2是二进制数,其取值为1到2m-1的整数。把求出的每组i和x′存储到两个长2m的查找表power[]和index[]中,查找幂次的power[x′]=i,查找系数的index[i]=x′,再令power
=2m-1,index[2m-1]=0。这样GF(2m)域上的任一元素,如果是a的i次幂,则根据查找表index[]可以查出它用基的线性组合表示的系数,反之如果其线性组合的系数是x′,根据查找表power[]可以查出它是a的几次幂。
建立函数f(s)的查找表s取值于0到2m-1之间的所有整数,求满足af(s)=1+as的f(s),首先查表得x′=(xm-1xm-2…x1x0)2=index[s],即as=xm-1am-1+xm-2am-2+…x1a1+x0,则1+as=xm-1am-1+xm-2am-2+…x1a1+(x01),再用(xm-1xm-2…x1(x01))查出1+as对应的a的幂次即为f(s),即f(s)=power[(xm-1xm-2…x1(x01))2],把求出的s和f(s)存储到长为2m的函数f(s)查找表中,从而建立函数f(s)的查找表,此后不再需要查找表power[]和index[],因此只要按照上述方法预先求出f(s)查找表,在译码器中就只需要存储f(s)查找表。
GF(2m)域上的任意两个元素X和Y的差与和相等(X-Y)=(X+Y)。加减法采用查表法,X=ax,Y=ay,Z=X+Y=X-Y=az=ax+ay=ax(1+ay-x),用y-x查表得出f(y-x),即af(y-x)=1+ay-x,又因为az=ax(1+ay-x)=ax·af(y-x)=ax+f(y-x)则z=x+f(y-x)(如果x+f(y-x)<(2m-1))或x+f(y-x)-(2m-1)(如果x+f(y-x)≥(2m-1))。
(5)多项式加减法GF(2m)域上的两个多项式之差等于它们的和,所以二者算法相同。u(x)=Σi=0Nuixi]]>和v(x)=Σi=0Nvixi,w(x)=Σi=0Nwixi=u(x)+v(x)=u(x)-v(x),]]>,则wi=ui+vi,0≤i≤N,系数是GF(2m)域上的元素,加法采用(4)中所述的算法。
(6)多项式乘法GF(2m)域上的两个多项式u(x)=Σi=0Nuixi]]>和v(x)=Σi=0Mvixi,w(x)=Σi=0N+Mwixi=u(x)·v(x)]]>则Wi=Σt=0t=iut·vi-t,0≤i≤N+M,]]>系数是GF(2m)域上的元素,乘法采用(2)中所述的算法,加法采用(4)中所述的算法。
(7)多项式除法取余GF(2m)域上的两个多项式相除,除法的过程和普通的多项式除法相同,不同之处在于多项式系数的运算。设u(x)=Σi=0Nuixi,v(x)=Σi=0Mvixi]]>,u(x)/v(x)的部分商式为w(x)=uNvMxN-M,]]>余式为r(x)=u(x)-w(x)·v(x),如果余式的阶数不低于除式的阶数,则令被除式等于余式,再次除以除式,反复此过程,直到余式的阶数低于除式的阶数为止,最后一次所得的余式为u(x)/v(x)的余式,每次所得的部分商之和为u(x)/v(x)的商式。这里的多项式相乘采用(6)中所述的算法,多项式相减采用(5)中所述的算法。
(8)求生成多项式生成多项式可表示为g(x)=Πj=12t(x-aj)=x2t+g2t-1x2t-1+g2t-2x2t-2+......+g1x1+g0]]>根据上式,采用(6)中所述的算法进行2t个多项式连乘,即可求出g(x)。
(9)编码把信息序列多项式乘以xn-k,再除以生成多项式求余数多项式。其中多项式的系数都用元素对应的a的幂次表示,运算过程中涉及的多项式运算采用(2)-(7)中所述的算法。这样生成的码多项式的系数也是用元素对应的a的幂次表示的。设输入的信息序列为m(x)=mk-1xk-1+mk-2xk-2+......+m2x2+m1x1+m0x0,生成的码字为c(x)=cn-1xn-1+cn-2xn-2+......+c2x2+c1x1+c0x0。则编码算法为c(x)=xn-km(x)+R(x),其中R(x)=xn-k·m(x)modg(x),g(x)是RS码的生成多项式。
(10)译码除了多项式系数用元素对应的a的幂次表示,其他和现有的译码算法相同。具体分为以下三步1.计算伴随式S(x)=S1+S2x+......+S2tx2t-1接收码字矢量y(x)=yn-1xn-1+yn-2xn-2+......+y2x2+y1x1+y0Sj=y(aj)=Σi=0n-1yiaij=(......((yn-1aj+yn-2)aj+yn-3)aj+......y1)aj+y0,j=1,2,......2t]]>(2)计算错误位置多项式σ(x)和出错值多项式ω(x).
由S(x)计算错误位置多项式σ(x)和出错值多项式ω(x)是译码过程中的核心问题,在现有的各种算法中,扩展欧几里得算法是其中最适合Systolic阵列处理结构硬件实现的算法。具体如下I.)初始化σ(-1)(x)=0,σ(0)(x)=1,ω(-1)(x)=x2t,ω(0)(x)=S(x)II.)计算ω(i+1)(x)=ω(i-1)(x)-Q(i)(x)ω(i)(x)σ(i+1)(x)=σ(i-1)(x)-Q(i)(x)σ(i)(x)其中ω(i+1)的阶小于ω(i)。也就是ω(i+1)(x)是ω(i-1)(x)除以ω(i)(x)的余数多项式,而Q(i)(x)等于商多项式。
迭代运算直到i+1=j为止,j是使ω(j)的阶小于t的最小整数。
σ(x)=σ(j)(x)ω(x)=ω(j)(x)(3)求错误位置和错误值。
σ(x)=σeven(x2)+xσodd(x2)其中σeven(x2)=σ0+σ2x2+σ4x4+......
σodd(x2)=σ1+σ3x2+σ5x4+....
σ(x)=0的充要条件是x-1σeven(x2)=σodd(x2)。
把x=a-i,n-1≥i≥0依次代入,求x-1σeven(x2)和σodd(x2),其中使x-1σeven(x2)=σodd(x2)的Xj就是出错位置。
当出错位置确定后,对应的出错值为Yj=ω(Xj)σ′(Xj)=ω(Xj)σodd(Xj2)]]>根据求出的Xj和Yj就可以对接收码字矢量纠错,从而实现RS码的译码。
举例说明RS码的设计及编译码过程若RS码码字符号数n=7,信息符号数为k=3,可纠正的最大差错个数为t=2,并给定一个3阶本原多项式Poly(x)=x3+x+1,本原元素a为本原多项式的根。
(1)建立函数f(s)查找表准备工作计算x2a2+x1a1+x0=aimod(Poly(x=a))=aimod(a3+a+1),i从0到6
i和x′=(x2x1x0)2存储到两个长8的查找表power[]和index[]中
建立函数f(s)的查找表例如s=4,x′=(xm-1xm-2…x1x0)2=index[s]=6=(110)2,1+as=xm-1am-1+xm-2am-2+…x1a1+(x01)=(111)2=7,f(s=4)=power[(xm-1xm-2…x1(x01))2]=5,即f(4)=5。
再例如s=7,x′=(xm-1xm-2…x1x0)2=index[s]=0=(000)2,1+as=xm-1am-1+xm-2am-2+…x1a1+(x01)=(001)2=1,f(s=7)=power[(xm-1xm-2…x1(x01))2]=0,即f(7)=0。
然后删除查找表power[]和index[],只保存f(s)的查找表。
(2)求生成多项式g(x)=Πj=12t(x-aj)]]>=(x-a)(x-a2)(x-a3)(x-a4)]]>=(x2-(a+a2)x+a3)(x-a3)(x-a4)]]>=(x2+a4x+a3)(x-a3)(x-a4)]]>=x4+a3x3+x2+ax+a3]]>(3)编码设信息序列为(6,3,1)即m(x)=a6x2+a3x+a,R(x)=xn-k·m(x)modg(x)=x4·(a6x2+a3x+a)mod(x4+a3x3+x2+ax+a3)=ax3+a2x2+a3x+a2c(x)=xn-km(x)+R(x)=a6x6+a3x5+ax4+ax3+a2x2+a3x+a2码字序列为(6,3,1,1,2,3,2)。
(4)译码假设错误矢量为(0020001),也就是错误多项式为e(x)=a2x4+1,则接收序列多项式为y(x)=c(x)+e(x)=a6x6+a3x5+a4x4+ax3+a2x2+a3x+a6计算伴随式S(x)Sj=y(aj)=Σi=0n-1yiaij=(......((yn-1aj+yn-2)aj+yn-3)aj+......y1)aj+y0,j=1,2,......2t]]>S2=y(a2)=(......((a6a2+a3)a2+a4)a2+a)a2+a2)a2+a3)a2+a6=aS1=y(a)=a2,S3=y(a3)=0,S4=y(a4)=a5所以S(x)=S1+S2x+......+S2tx2t-1=a5x3+ax+a2计算错误位置多项式σ(x)和出错值多项式ω(x)(I)初始化σ(-1)(x)=0,σ(0)(x)=1,ω(-1)(x)=x2t=x4,ω(0)(x)=S(x)=a5x3+ax+a2(II)计算ω(1)(x)=ω(-1)(x)-Q(0)(x)ω(0)(x)=x4mod(a5x3+ax+a2)=a3x2+a4x,其中Q(0)(x)=a2xσ(1)(x)=σ(-1)(x)-Q(0)(x)σ(0)(x)=0-a2x·1=a2x
(III)计算ω(2)(x)=ω(0)(x)-Q(1)(x)ω(1)(x)=(a5x3+ax+a2)mod(a3x2+a4x)=a3x+a2,其中Q(1)(x)=a2x+a3σ(2)(x)=σ(0)(x)-Q(1)(x)σ(1)(x)=1-(a2x+a3)·a2x=a4x2+a5x+1因为ω(2)(x)的阶小于t=2,所以结束迭代运算。
ω(x)=ω(j)(x)=a3x+a2σ(x)=σ(j)(x)=a4x2+a5x+1求错误位置和错误值σeven(x2)=σ0+σ2x2=a4x2+1σodd(x2)=σ1=a5把x=a-i,6≥i≥0依次代入,求使x-1σeven(x2)=σodd(x2)的Xj就是出错位置。i=4,x=a-4,x-1σeven(x2)=a5,σodd(x2)=a5,所以X4=a4是一个出错位置。Y4=ω(Xj)σ′(Xj)=ω(Xj)σodd(Xj2)=1a5=a2]]>把x=a-1,6≥i≥0依次代入,可以求出共有两个出错位置,另一个是X0=a0=1,Y0=1。从而求得错误多项式为ê(x)=a2x4+1,纠正接收多项式的错误得到译码结果c^(x)=y(x)+e^(x)]]>=(a6x6+a3x5+a4x4+ax3+a2x2+a3x+a6)+(a2x4+1)]]>=a6x6+a3x5+ax4+ax3+a2x2+a3x+a2]]>与发送的码字多项式相同,所以译码算法正确地纠正了传输引起的错误。
传统的RS码编译码器中的乘法器非常复杂,需要两个多项式相乘,再除以本原多项式取模,如果采用查表法需要地址线2m比特宽,数据m比特,存储量为22m·m。采用本方法后,大大简化了多项式的乘除法,而加法采用查表法,只需要m比特宽的地址线和数据线的查找表,存储量为2m·m,大大降低了所需的存储量。
图1为本发明所述的用幂次表示码元的RS码的编码器流程图,图2为本发明所述的用幂次表示码元的RS码的译码器流程图。
此算法可以用计算机程序完成,也可在各种可编程逻辑器件或专用集成电路中实施。一个具体的实施例子是用c程序完成的这种RS码的编译码。
现有技术和本发明中RS码的码元分别采用一组基的线性组合的系数和本原域元素的幂次表示,因为编译码算法的原理相同,所以二者的纠错性能相同,仿真实验的结果充分的验证了这一点。不同的是现有技术中码元相加为模二和、相乘有两种方法,一种需要复杂的乘法和对本原多项式取模,另一种需要很大的查找表,而本发明中的码元乘法可以用简单的加法实现、而码元加法用比较小的查找表实现,与现有技术中非查表乘法相比,电路中的延时减少,从而提高了编译码速度;与现有技术中查表乘法相比则降低了存储量和复杂度,例如当m=8时,此方法所需存储量仅为2k比特。
权利要求
1.一种和RS码等效的编码,其特征在于它是一种避免了编译码过程中复杂的乘法运算且和RS码等效的编码,它是利用本原域元素a的幂次表示RS码的码元的,即RS码的码字均在GF(2m)域上,GF(2m)域上的所有非零元素都是本原域元素a的整数次幂,对于任一非零元素X,若X=ax,则X用x表示。
2.一种和RS码等效的编码的快速编译码的算法,其特征在于它是一种能在计算机中运行的速度高且复杂度较低的和RS码等效的编译码算法,在编译码过程中,它采用下列各种算法(1)在编译码过程中,GF(2m)域上的两个元素X和Y相乘等于对应的两个指数的相加,即X=ax,Y=ay,Z=X·Y=az,则z=x+y(如果x+y<(2m-1))或z=x+y-(2m-1)(如果x+y≥(2m-1));(2)在编译码过程中,GF(2m)域上的两个元素X和Y相除等于对应的两个指数的相减,即X=ax,Y=ay,Z=X/Y=az,则z=x-y(如果x-y≥0)或z=x-y+(2m-1)(如果x-y<0)。(3)在编译码过程中,GF(2m)域上的两个元素X和Y相加和相减采用查表法,GF(2m)域的任意两个元素的差与和相等(X-Y)=(X+Y)X=ax,Y=ay,Z=X+Y=X-Y=az=ax+ay=ax(1+ay-x),具体步骤为预先建立函数f(s)查找表,其中s、f(s)满足af(s)=1+as,用y-x查表得出f(y-x),即af(y-x)=1+ay-x,则z=x+f(y-x)(如果x+f(y-x)<(2m-1))或x+f(y-x)-(2m-1)(如果x+f(y-x)≥(2m-1))。
全文摘要
一种和RS码等效的编码以及其快速编译码的算法属于RS码技术领域,其特征在于它是一种利用本原域元素a的幂次表示RS码的码元的编译码算法,RS码的码字均在GF(文档编号H03M13/00GK1447528SQ03121939
公开日2003年10月8日 申请日期2003年4月18日 优先权日2003年4月18日
发明者赵明, 张秀军, 姚熠飞, 周世东, 王京, 姚彦 申请人:清华大学