⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bchcode.c

📁 BCH是一种纠错码
💻 C
字号:
/****************************************************************
*这段程序包含BCH(16,8) /BCH(17,9)的截短码/的编码表和错误图样表  *
*以及解码程序BCH_DECODE(),可用于BCH(16,8)的编解码               *
*提供较高的编解码速度,和很强的就错能力                         *
*****************************************************************/
code unsigned char BCHCODELIST[256]={0x0,0xd7,0x79,0xae,0xf2,0x25,0x8b,0x5c,
							0x33,0xe4,0x4a,0x9d,0xc1,0x16,0xb8,0x6f,
							0x66,0xb1,0x1f,0xc8,0x94,0x43,0xed,0x3a,
							0x55,0x82,0x2c,0xfb,0xa7,0x70,0xde,0x9,
							0xcc,0x1b,0xb5,0x62,0x3e,0xe9,0x47,0x90,
							0xff,0x28,0x86,0x51,0xd,0xda,0x74,0xa3,
							0xaa,0x7d,0xd3,0x4,0x58,0x8f,0x21,0xf6,
							0x99,0x4e,0xe0,0x37,0x6b,0xbc,0x12,0xc5,
							0x4f,0x98,0x36,0xe1,0xbd,0x6a,0xc4,0x13,
							0x7c,0xab,0x5,0xd2,0x8e,0x59,0xf7,0x20,
							0x29,0xfe,0x50,0x87,0xdb,0xc,0xa2,0x75,
							0x1a,0xcd,0x63,0xb4,0xe8,0x3f,0x91,0x46,
							0x83,0x54,0xfa,0x2d,0x71,0xa6,0x8,0xdf,
							0xb0,0x67,0xc9,0x1e,0x42,0x95,0x3b,0xec,
							0xe5,0x32,0x9c,0x4b,0x17,0xc0,0x6e,0xb9,
							0xd6,0x1,0xaf,0x78,0x24,0xf3,0x5d,0x8a,
							0x9e,0x49,0xe7,0x30,0x6c,0xbb,0x15,0xc2,
							0xad,0x7a,0xd4,0x3,0x5f,0x88,0x26,0xf1,
							0xf8,0x2f,0x81,0x56,0xa,0xdd,0x73,0xa4,
							0xcb,0x1c,0xb2,0x65,0x39,0xee,0x40,0x97,
							0x52,0x85,0x2b,0xfc,0xa0,0x77,0xd9,0xe,
							0x61,0xb6,0x18,0xcf,0x93,0x44,0xea,0x3d,
							0x34,0xe3,0x4d,0x9a,0xc6,0x11,0xbf,0x68,
							0x7,0xd0,0x7e,0xa9,0xf5,0x22,0x8c,0x5b,
							0xd1,0x6,0xa8,0x7f,0x23,0xf4,0x5a,0x8d,
							0xe2,0x35,0x9b,0x4c,0x10,0xc7,0x69,0xbe,
							0xb7,0x60,0xce,0x19,0x45,0x92,0x3c,0xeb,
							0x84,0x53,0xfd,0x2a,0x76,0xa1,0xf,0xd8,
							0x1d,0xca,0x64,0xb3,0xef,0x38,0x96,0x41,
							0x2e,0xf9,0x57,0x80,0xdc,0xb,0xa5,0x72,
							0x7b,0xac,0x2,0xd5,0x89,0x5e,0xf0,0x27,
							0x48,0x9f,0x31,0xe6,0xba,0x6d,0xc3,0x14
							};
//BCH(16,8)编码表:256字节
code unsigned int DECODELIST[256]={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,
								0x8,0x9,0xa,0x0,0xc,0x0,0xe,0x4040,
								0x10,0x11,0x12,0x820,0x14,0x0,0x0,0x1c0,
								0x18,0x0,0x0,0x2100,0x1c,0xe000,0x8080,0x1200,
								0x20,0x21,0x22,0x810,0x24,0x500,0x1040,0x0,
								0x28,0x5000,0x0,0x0,0x0,0x0,0x380,0x0,
								0x30,0x802,0x801,0x800,0x0,0x0,0x4200,0x804,
								0x38,0x240,0x0,0x808,0x0,0x0,0x2400,0x0,
								0x40,0x41,0x42,0x0,0x44,0x0,0x1020,0x4008,
								0x48,0x8100,0xa00,0x4004,0x2080,0x4002,0x4001,0x4000,
								0x50,0x0,0xa000,0x0,0x0,0x1800,0x0,0x180,
								0x0,0x220,0x0,0x0,0x700,0x0,0x0,0x4010,
								0x60,0x0,0x1004,0x0,0x1002,0x0,0x1000,0x1001,
								0x0,0x210,0x0,0x0,0x8400,0x0,0x1008,0x4020,
								0x70,0x208,0x480,0x840,0x0,0x0,0x1010,0x0,
								0x201,0x200,0x0,0x202,0x4800,0x204,0x0,0x0,
								0x80,0x81,0x82,0x6000,0x84,0x0,0x0,0x0,
								0x88,0x0,0x0,0x600,0x2040,0x0,0x8010,0x0,
								0x90,0x0,0x0,0x0,0x1400,0x0,0x8008,0x140,
								0x4100,0x3800,0x8004,0x0,0x8002,0x0,0x8000,0x8001,
								0xa0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c00,
								0x0,0x0,0x3000,0x0,0x0,0x8800,0x300,0x0,
								0x0,0x1100,0x440,0x880,0x0,0x2200,0x0,0x0,
								0xe00,0x0,0x0,0x0,0x0,0x4400,0x8020,0x0,
								0xc0,0xc00,0x0,0x0,0x2008,0x0,0x0,0x110,
								0x2004,0x0,0x0,0x0,0x2000,0x2001,0x2002,0x4080,
								0x0,0xc000,0x420,0x104,0x0,0x102,0x101,0x100,
								0x0,0x0,0x0,0x0,0x2010,0x0,0x8040,0x108,
								0xe0,0x0,0x410,0x0,0x900,0x7000,0x1080,0x8200,
								0x0,0x0,0x0,0x0,0x2020,0x0,0x0,0x0,
								0x402,0x0,0x400,0x401,0x0,0x0,0x404,0x120,
								0x9000,0x280,0x408,0x0,0x0,0x0,0x0,0x2800
								};
//BCH(16,8)解码错误图样表:512字节
/*main()
{
	unsigned char ScodeH,ScodeL,Rcode;
	unsigned char i;
	for(i=0;i<=255;i++){
		ScodeH=i;
		ScodeL=BCHCode(i)+64;
		Rcode=BCHDECODE(ScodeH,ScodeL);
		//经测试,BCHDECODE()调用一次最长需要316个指令周期
	}
}*/

unsigned char BCH_DECODE(unsigned char ResieveH,unsigned char ResieveL)
{
	unsigned int a,aa,b=0xeb80,c=0x8000;
	unsigned char i;
	a=ResieveH*256+ResieveL;
	aa=a;
	if(a&c)
		a=a^b;
	for(i=1;i<8;i++){
		b=b>>1;
		c=c>>1;
        if(a&c) a=a^b;
    }
    ERC=0;
    if(!a)//无错
    	return(ResieveH);
    if(!DECODELIST[a]){//不可纠错误,发生3bit错误的560种情况中,有284种可以被检错
    	ERC=1;
    	return(0);
    }
    else 
    	aa=aa^DECODELIST[a];//纠错,只保证对1,2和连续的3bit错误纠错有效
    return((byte)(aa>>8));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -