导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C51编程:1000元求设计[MAGICSQUARE]

 *第5882篇: C51编程:1000元求设计

  
楼 主:MAGICSQUARE 2002年11月2日12:42
 C51编程:1000元求设计
我在设计中需要用到BCH码的编码解码程序,要求:(1)用[15,5],此码纠3个错误。
(2)用C51(或IAR)编写。(3)需需给出WORD文件的算法说明和程序说明。
(4)希望在校学生参与,有兴趣者可给我联系。
  
2楼:MAGICSQUARE 2002年11月2日14:25
 ???
?????
  
3楼:MAGICSQUARE 2002年11月3日10:23
 再问
高手们:给你们的有奖习题。
  
4楼:MAGICSQUARE 2002年11月3日18:21
 如果找西安电子科技大学的王新梅老师,就可以的!
  
5楼:MAGICSQUARE 2002年11月12日15:49
 放宽条件吧!
实在没办法,只有放宽条件,写个卷积码的编解码程序也行.
  
6楼:abc3xyz 2005年5月26日14:14
 voidLinCoding(void)/
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");

 


 
顶楼上的。。路上刚碰到王新梅

  
7楼:yhcai 2005年5月27日09:44
 有兴趣者可给我联系
以下是引用MAGICSQUARE在2002-11-2 12:42:00的发言:
C51编程:1000元求设计我在设计中需要用到BCH码的编码解码程序,要求:(1)用[15,5],此码纠3个错误。
 (2)用C51(或IAR)编写。(3)需需给出WORD文件的算法说明和程序说明。
 (4)希望在校学生参与,有兴趣者可给我联系。


QQ:346199516
  
8楼:zhkui817 2007年4月12日19:41
 能不能解释一下这段程序
看到楼上的贴出来的这段程序,有点不是特别明白,就是那段求余式的那段
如下:
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;
}
麻烦楼上的能不能解释一下,它是怎么得来的吗?谢了!

>>>>>>对该主题发表你的看法

本主题贴数8,分页: [第1页]


[上一篇主题]:硬件:求助开发过USB的朋友

[下一篇主题]:初学者:串口通信!单片机能收到pc的数据,pc却收不到单片机的数据!怎么回事?