|
发表于 2013-3-11 17:25:51
|
显示全部楼层
//编码
u32 encode(u16 temp_word)
{
u32 code;
code = (u32)temp_word;
for(u8 i=0;i<16;i++){
if((code&(u32)(0x8000)))code^=0xB720;//0x5b9 << 5
code<<=1;
}
return (u32)(code>>6|temp_word<<10);
}
u16 CorrectErfSample[26]={119,743,943,779,857,880,440,220,110,55,711,959,771,861,882,441,512,256,128,64,32,16,8,4,2,1};
u32 CorrectTable[26]={33554432,16777216,8388608,4194304,2097152,1048576,524288,262144,131072,65536,32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2,1};
//1bit纠错
//return 0:no error,1:Correct error,2:error
u8 CorrectDeal(unsigned long *CorrectCode)
{
u32 code;
unsigned int i,t;
code = *CorrectCode ;
for(i=0;i<16;i++){
if((code&(u32)0x2000000)!=0)code^=0x2DC8000;//<<15
code<<=1;
}
t=code>>(26-10);
if(t==0)return 0;
for(i=0;i<26;i++){
if(t==CorrectErfSample[i]){
*CorrectCode ^= CorrectTable[i];
return 1;
}
}
return 2;
} |
|