DataMatrix编码3——生成纠错码RS编码 rs编码和纠错算法

DataMatrixECC200采用Reed-Solomon纠错编码来为其提供纠错能力。RS编码的目标是计算出纠错码字,参考表http://blog.sina.com.cn/s/blog_4572df4e01019vhd.html来确定纠错码字的长度,考虑数据码字:6667 68 69 70 142 12956(“ABCDE12”通过ASCII编码),长度为8,则纠错码字长度为10,表示为RS(n,k)=RS(18, 8)。
设C(x)为数据码,
E(x)为纠错码字,G(x)为生成多项式,则:

由RS检验码生成多项式的一般形式为:,则有:
X分别取值,得到方程组:

然后用通过高斯消除法计算出E(x)={75 145 5546 20 95 253 237 62 111},最终生成18位码字{66 67 68 69 70 142 129 56 75 14555 46 20 95 253 237 62 111}。

算法如下:
int GfAdd(int a, int b){
return a ^ b;
}
//a * b
int GfMult(int a, int b){
return (a == 0 || b == 0) ? 0: alphaTo[(expOf[a] + expOf[b]) % nn];
}
// a * alpha^b
int GfMult2(int a, int b){
return a== 0 ? 0 :alphaTo[(expOf[a] + b) % nn];
}
// a/b
int GfDiv(int a, int b) {
if( a==0)return 0;
if( a==b)return 1;
returnexpOf[a] > expOf[b] ?
alphaTo[expOf[a] - expOf[b] ] : alphaTo[ nn + expOf[a] - expOf[b] ] ;
}
void gaussion(){
int total =18;
int data =8;
int error =10;
int* codes =new int[total];
int* errors= new int[error];
int* polys =new int[error*error];

int i, j, k,d;
codes[0] =66;
codes[1] =67;
DataMatrix编码3——生成纠错码(RS编码) rs编码和纠错算法
codes[2] =68;
codes[3] =69;
codes[4] =70;
codes[5] =142;
codes[6] =129;
codes[7] =56;

for(i=0;i<error;i++ ){
//sum of each polynomial
int sum = 0;
for( j=0;j<data;j++ )
sum = GfAdd( sum, GfMult2( codes[j], (total-1-j)*(i+1) ) );
errors[i] = sum;
//polynomial matrix
int index = i*error;
for( j=0;j<error;j++ )
polys[index+j] = alphaTo[j*(i+1)];
}
//gaussionelimination
for(i=0;i<error;i++ ){
//diagonal postion
d = i*error+i;
int diagonal = polys[d];
//diagonal --> 1
int index = i*error;
for( j=0;j<error;j++ )
polys[index+j] = GfDiv( polys[index+j], diagonal );
errors[i] = GfDiv( errors[i], diagonal );
//otherrows - thisrow
for( k=0;k<error;k++ ){
if( k!=i ){//another row
int index2 = k*error;
int coefficient = polys[index2+i];
//each column( polynomial[k] = polynomial[k] -polynomial[i]*coefficient )
for( int m=0;m<error;m++ ){
polys[index2+m] = GfAdd( polys[index2+m], GfMult(coefficient,polys[index+m]) );
}
errors[k] =GfAdd( errors[k], GfMult(coefficient, errors[i]));
}
}
}
//errors--> codes
for(j=data++,i=error-1;i>=0;i-- )
codes[j++] = errors[i];
}



  

爱华网本文地址 » http://www.aihuau.com/a/25101010/38490.html

更多阅读

怎样区别第1、2、3代水床? i5 2代和3代的区别

怎样区别第1、2、3代水床?主要是从水床内胎材质上进行区别,第一代水床内胎是以棉布经橡胶硫化处理后制成的。其优点是原材料成本低,生产设备少,生产工艺简单,缺点是:1.只能用它制“地垄沟”全水结

无尽之剑3修改无限金币教程 无尽之剑1无限金币

无尽之剑3修改无限金币教程——简介根据Epic Game官方发布的消息《无尽之剑3》将于9月18日发布,售价6.99美元。新iPhone 5S,iPhone 5C连同iPhone 5, iPhone 4S, iPhone 4, iPad 4, iPad 3, iPad 2, iPad mini, iPod touch 5和iPod tou

声明:《DataMatrix编码3——生成纠错码RS编码 rs编码和纠错算法》为网友予我欢颜分享!如侵犯到您的合法权益请联系我们删除