voidLinCoding(void)//BCH(15,5)编码
{
char i,aaa;
//char g[11]={1,0,1,0,0,1,1,0,1,1,1};
char a[10]={0,0,0,0,0,0,0,0,0,0};
char u[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//移位寄存器输入序列
for(i=0;i <5;i++)
{
u[10+i]=OrigSeq[i];
}
//求余式得监督序列
for(i=0;i <15;i++)
{
aaa=a[9];
a[9]=a[8]+aaa;
if(a[9]==2)
a[9]=0;
a[8]=a[7]+aaa;
if(a[8]==2)
a[8]=0;
a[7]=a[6];
a[6]=a[5]+aaa;
if(a[6]==2)
a[6]=0;
a[5]=a[4]+aaa;
if(a[5]==2)
a[5]=0;
a[4]=a[3];
a[3]=a[2];
a[2]=a[1]+aaa;
if(a[2]==2)
a[2]=0;
a[1]=a[0];
a[0]=u[14-i]+aaa;
if(a[0]==2)
a[0]=0;
}
//得到系统码序列
for(i=0;i <10;i++)
{
LinCodSeq[i]=a[i];
}
for(i=0;i <5;i++)
{
LinCodSeq[10+i]=OrigSeq[i];
}
for(i=0;i <15;i++)
{
if(i%5==0&&i!=0)
printf(",");
printf("%d",LinCodSeq[i]);
}
printf(" :(15,5,3)Bian Ma\n\n");
}
voidLinRecoding(void)//BCH(15,5)译码
{
char i,j,k,aaa;
//char g[11]={1,0,1,0,0,1,1,0,1,1,1};
char a[10]={0,0,0,0,0,0,0,0,0,0};
char u[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//计算伴随式S(X),由伴随式并用修正捕错法求错误图样
for(j=0;j <16;j++)
{
if(j==0)
{
for(i=0;i <15;i++)
{
u[i]=LinCodSeq[i];
}
for(i=0;i <15;i++) //计算初始伴随式
{
aaa=a[9];
a[9]=a[8]+aaa;
if(a[9]==2)
a[9]=0;
a[8]=a[7]+aaa;
if(a[8]==2)
a[8]=0;
a[7]=a[6];
a[6]=a[5]+aaa;
if(a[6]==2)
a[6]=0;
a[5]=a[4]+aaa;
if(a[5]==2)
a[5]=0;
a[4]=a[3];
a[3]=a[2];
a[2]=a[1]+aaa;
if(a[2]==2)
a[2]=0;
a[1]=a[0];
a[0]=u[14-i]+aaa;
if(a[0]==2)
a[0]=0;
}
}
else
{
aaa=u[14];
for(i=14;i> 0;i--)
u[i]=u[i-1];
u[0]=aaa;
for(i=0;i <10;i++)
a[i]=0;
for(i=0;i <15;i++) //计算移位后伴随式
{
aaa=a[9];
a[9]=a[8]+aaa;
if(a[9]==2)
a[9]=0;
a[8]=a[7]+aaa;
if(a[8]==2)
a[8]=0;
a[7]=a[6];
a[6]=a[5]+aaa;
if(a[6]==2)
a[6]=0;
a[5]=a[4]+aaa;
if(a[5]==2)
a[5]=0;
a[4]=a[3];
a[3]=a[2];
a[2]=a[1]+aaa;
if(a[2]==2)
a[2]=0;
a[1]=a[0];
a[0]=u[14-i]+aaa;
if(a[0]==2)
a[0]=0;
}
}
aaa=0;
for(i=0;i <10;i++) //计算伴随式重量
aaa=aaa+a[i];
if(aaa <=3)//捕错译码
{
for(i=0;i <10;i++)
{
LinError[i]=a[i];
}
for(i=0;i <15;i++)
{
u[i]=u[i]+LinError[i];
if(u[i]==2)
u[i]=0;
}
for(k=j;k <15;k++)
{
aaa=u[14];
for(i=14;i> 0;i--)
u[i]=u[i-1];
u[0]=aaa;
}
for(i=0;i <15;i++)
LinCodSeq[i]=u[i];
for(i=0;i <5;i++)
OrigSeq[i]=LinCodSeq[10+i];
break;
}
aaa=!a[0]+a[1]+!a[2]+a[3]+a[4]+!a[5]+!a[6]+a[7]+!a[8]+!a[9];
if(aaa <=2)//捕错译码修正
{
LinError[0]=!a[0];
LinError[1]=a[1];
LinError[2]=!a[2];
LinError[3]=a[3];
LinError[4]=a[4];
LinError[5]=!a[5];
LinError[6]=!a[6];
LinError[7]=a[7];
LinError[8]=!a[8];
LinError[9]=!a[9];
LinError[10]=1;
for(i=0;i <15;i++)
{
u[i]=u[i]+LinError[i];
if(u[i]==2)
u[i]=0;
}
for(k=j;k <15;k++)
{
aaa=u[14];
for(i=14;i> 0;i--)
u[i]=u[i-1];
u[0]=aaa;
}
for(i=0;i <15;i++)
LinCodSeq[i]=u[i];
for(i=0;i <5;i++)
OrigSeq[i]=LinCodSeq[10+i];
break;
}
}
for(i=0;i <5;i++)
{
printf("%d",OrigSeq[i]);
}
printf(" :(15,5,3)Yi Ma\n\n");
for(i=0;i <46;i++)
{
if(i%5==0&&i!=0)
printf(",");
printf("%d",Error[i]);
}
printf(" :Cuo Wu Tu Yang B\n\n");
for(i=0;i <15;i++)
{
if(i%5==0&&i!=0)
printf(",");
printf("%d",LinError[i]);
}
printf(" :Cuo Wu Tu Yang A\n\n");
}
顶楼上的。。路上刚碰到王新梅
发表时间:2005年5月26日14:14:35