CRC7算法.docVIP

  1. 1、本文档共1页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CRC7算法

CRC7校验算法-RSU通信使用 2008年09月18日 星期四 下午 01:43 最近的工作中用到CRC7对41bit数据加校验,其多项式为G X X^7 + X^3 + 1,校验位紧跟在信息位之后。crc7的算法程序代码如下: typedef unsigned char UCHAR; typedef unsigned char BOOL; /* 计算cnt字节数据的crc,最后一个字节的低7比特必须是0,实际上求的是(cnt×8-1)比特数据的crc */ UCHAR CRC7_Cal UCHAR *pSrc, UINT32 cnt ; UCHAR CRC7_Cal UCHAR *pSrc, UINT32 cnt UCHAR crc7 0x89;??? // 除数多项式为G X X^7 + X^3 + 1。 UINT8 count 0;??? // 记录已经取了多少位数到余数中。 UINT8 temp1 0; UINT8 temp2 0; UCHAR crc pSrc[0];??? // 余数。 count 8; /* 求余数crc */ while count cnt * 8 /* 去掉余数中最高位0 */ ?? temp1 crc 0x80; ?? while 0 temp1 crc crc 1 0xfe; temp2 pSrc[count / 8]; temp2 temp2 7 - count % 8 0x01; crc crc | temp2; temp1 crc 0x80; count++;??? // 更新计数 if count cnt * 8 break; if count cnt * 8 0 temp1 break; crc crc ^ crc7;?? // 模2除法 return crc; CRC的原理这里就不说了,太深奥,留给数学家们去研究吧。就单说下CRC的一般应用方法。 1.首先根据CRC的多项式,对原始数据左移。多项式的最高项次数是N就左移N位。像我这个CRC多项式的最高位是7,那么就先左移7位,最后一个字节的低7位自然是全0。 2.然后应用求CRC的程序求出处理后的数据的CRC,并替换掉最后的N位。我这里就用以上程序计算出7位CRC并替换掉最后一个字节的低7位。这样一来就完成了CRC的编码过程,最后编码的数据长度就是原长+N 我这里为7 ,可以发送了。 3.校验方法很简单,对接收到的数据 包括编码计算出的的CRC 直接求CRC,如果得到的CRC等于0,那么说明传输过程无误。如果CRC不等于0,则说明传输出错了。 最后说点题外的东西 很多人对检错和纠错有误解,始终不明白CRC为什么只能检错而不能纠错。 纠错是指一种码在解码的过程中就能把纠错能力以内的错误纠正过来,解码结束后得到的就是正确的码。 而检错则是指一种码在解码过程中只能把检错能力以内的错误检查出来,解码结束后得到的还是错误的码。但是你可以知道码在传输过程中出错了,可以用其他方式来处理这些错误,比如重发等等。 既然有了纠错码,而且解码就可以得到正确的码,为什么还要应用检错码呢?这是因为如果要一种码的纠错能力是远小于检错能力的。如果提高纠错能力的代价大于提高检错能力加上重发的代价,那么就没有必要去设计更高的就错能力的纠错码了,直接用检错能力强的检错码加上重发就可以完成系统功能。CRC就是这样一种具有很高检错能力的检错码,所以CRC在具有重发机制的系统中应用非常广泛。 全部代码在VC6.0下通过测试,欢迎测试,转载请注明出处。 您是本帖的第 1523 个阅读者贴子主题:CRC算法原理及实现 levi CRC算法原理及实现 CRC算法原理及实现 一、算法介绍 CRC算法主要是一个计算除法的过程。算法有两个输入值,第一个是输入的信号,这通常是一个很长的数据,作为被除数。第二个是一个与具体的CRC算法相关的多项式,称为生成多项式,用作除数。基本的计算过程是,两者作模2除法。余数就是CRC结果。 模2除法等价于异或运算,因此,实现起来非常简单。 下面用一个简单的例子来说明CRC算法的计算过程。输入信号是101111,生成多项式是1001。被除数后面需要补充3个0。这是一个3位CRC。 上传的图片 ? 座机电话号码441092.jpg [ 5.45 KB 144×161 ] 缩略时请点击查看原图 图1 模2除法 商数在CRC算法中是没有用处的,需要的仅仅是余数。在上例中,余数为010。将余数附加到输入信号后面,即101111010,这个数是可以被1001整除的。 生成多项式最高位总是1,通常不写。 二、简

文档评论(0)

ma33756 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档