- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于多次查表的循环冗余校验算法
摘要:循环冗余校验算法,编码简单且误判概率很低,在通信系统中得到了广泛的应用。在低成本设备(如单片机)的通信系统中,往往使用软件方法进行传输校验。该文使用多次查表的方法计算校验码,可以弥补低速设备在性能上的不足。
关键词:多次查表;查表;循环冗余校验;CRC;算法
中图分类号:TP393文献标识码:A文章编号:1009-3044(2010)18-5052-01
Multiple Look-up Table Based on the Cyclic Redundancy Check Algorithm
CONG Xue
(PLA 94860 Army, Nanjing 210049, China)
Abstract: Cyclic Redundancy Check is very simple and reliable, it has been widely used in the communication system. In the low-cost equipment (such as SCM) communication systems, it is often realized by software. A look-up multiple table method is introduced to improve performance.
Key words: CRC(Cyclic Redundancy Check); Algorithm
在通信领域中,为保证传输过程的正确性,需要对通信过程进行差错控制。
循环冗余校验 CRC(Cyclic Redundancy Check)编码简单且误判概率很低,在通信系统中得到了广泛的应用。
其根本原理是通过校验算法增加数据的冗余量,将校验码和数据一起发送到接受端。接受端对接受到的数据进行相同校验,再将得到的校验码和接收到的校验码比较,如果二者一致则认为传输正确。
1 传统CRC校验算法
CRC校验算法使用的是多项式除法。使用异或运算,不进位,不借位。
计算机使用软件方法实现CRC校验,传统算法是按位计算CRC。下面以CRC-4为例,介绍算法流程。CRC-4 的生成多项式为g(x)= x4 + x +1 ,即10011。待发送的数据 t(x)是一个8位二进制数据。首先在 t(x)的末尾添加4个0,t(x)就成了101110100000 。然后用g(x)去除 t(x),不用管商是多少,只需要求得余数即可。
算法流程见图1。
1100就是余数,也就CRC校验码。
传统CRC校验算法简单,容易实现,对任意长度生成多项式的g(x)都适用。在发送的数据不长的情况下可以使用。但是如果发送的数据块很长的话,这种方法就不太适合了。因为它一次只能处理一位数据,效率太低。
2 基于查表的CRC校验算法
为了提高处理效率,可以预先计算好n位被除数所对应的余数,校验时只需要查表即可。这样就可以一次处理n位数据了。
下面以查4位表为例,如图2,介绍查表法。
生成多项式仍然为10011。待发送数据仍然数据前4位1011查表得到余数1110,将余数1110与数据后4位1010异或得0100,再查表0100的余数是1100。因余数就是1100。
经过验证,查表法与传统CRC算法得到的校验码相同。
3 基于多次查表CRC校验算法
一个8位的CRC-16余数表(存储着256个余数)占用512个字节的空间,一个16位的CRC-16余数表将占用128KB的空间,而一个32位的余数表将占用8GB。这些空间对于低成本的设备而言是非常巨大的开销,所以一般来说我们最多查8位的余数表。
多项式除法有个非常简单的性质:
(P(X) XOR Q(X))的余数 == P(X)的余数XORQ(X)的余数
举个例子:
P(X)Q(X)=1010
P(X)的余数是0001Q(X)的余数是 1101
P(X) XOR Q(X)余数就是0001 XOR 1101 = 1100。
也就是说,可以针对8位数据的高4位和低4位各自建立一个4位的余数表,即可算出8位数据的余数。
根据上述性质,我们就可以把一个32位的表,变成4个8位的余数表。分别查4张表,以代替查一张32位的大表,节省了大量的空间。
查4张8位的余数表与查一张8位余数表的方法相比,查表的次数是相同的,但是可以有效解决异或运算时
文档评论(0)