导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→voidLinCoding(void)//BCH(15,5)

* 78424: C51编程:1000元求设计

   abc3xyz 
abc3xyz发表的帖子 

 
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

  
回复该帖

本主题共有 8 帖,分页:>>>>>该主题的所有内容[8]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  78481.[详细]有兴趣者可给我联系
摘要:[quote][b]以下是引用[i]MAGICSQUARE在2002-11-2 12:42:00[/i]的发言:[/b] C51编程:1000元求设计我在设计中需要用到BCH码的编码解码程序,要求:(1)用[15,5],......(312字)
- [yhcai][901次] 2005年5月27日

  104594.[详细]能不能解释一下这段程序
摘要:看到楼上的贴出来的这段程序,有点不是特别明白,就是那段求余式的那段 如下: for(i=0;i  <15;i++)      &nbs......(453字)
- [zhkui817][805次] 2007年4月12日

[上一篇帖子]:请教:TC35用串口和计算机相连需要几根线??我用了3根线GND、RXD、TXD。用AT测试怎么没有
[下一篇帖子]:我有,qq25352323