![循环冗余校验码](http://img.gansulong.com/220816/0G1525I3-0.jpg)
文章插图
循环冗余校验码【循环冗余校验码】CRC校验一般指本词条
循环冗余校验码(CRC),简称循环码,是一种常用的、具有检错、纠错能力的校验码,在早期的通信中运用广泛 。循环冗余校验码常用于外存储器和计算机同步通信的数据校验 。奇偶校验码和海明校验码都是採用奇偶检测为手段检错和纠错的(奇偶校验码不具有纠错能力),而循环冗余校验则是通过某种数学运算来建立数据位和校验位的约定关係的 。
基本介绍中文名:循环冗余校验码
外文名:Cyclic Redundancy Check(CRC)
编码规则:前部分是信息码
移位:原信息码(kbit)左移r位
校验对通信的可靠性检查就需要‘校验’,校验是从数据本身进行检查,它依靠某种数学上约定的形式进行检查,校验的结果是可靠或不可靠,如果可靠就对数据进行处理,如果不可靠,就丢弃重发或者进行修复 。(倒推法):传送方传送的是T(x),接收方接收到的是R(x),若T(x)和R(X)相等,则传输的过程中没有出现错误 。如何判断T(x)和R(X)是否相等?若R(X)能够被g(x)整除,则接收方认为T(x)和R(X)相等,即传输的过程中没有出现错误 。传送方要传输的信息info包含在T(x)里,info是T(x)的一部分,但不能说info就是T(x) 。实际套用中,g(x)的取值是有限制的,它受限于以下国际标準:CRC-CCITT=x^16+x^12+x^5+1CRC-16=x^16+x^15+x^2+1CRC-12=x^12+x^11+x^3+x^2+x+1关于g(x)的国际标準还有一些,这里不一一介绍 。人工计算循环冗余校验码需要先弄清的知识:多项式除法、异或运算 。编码规则CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码共长n个bit,信息码长k个bit,就称为(n,k)码 。它的编码规则是:移位
将原信息码(kbit)左移r位(k+r=n)相除
运用一个生成多项式g(x)(也可看成二进制数)用模2除上面的式子,得到的余数就是校验码 。非常简单,要说明的:模2除就是在除的过程中用模2加,模2加实际上就是我们熟悉的异或运算,就是加法不考虑进位,公式是:0+0=1+1=0,1+0=0+1=1即‘异’则真,‘非异’则假 。由此得到定理:a+b+b=a 也就是‘模2减’和‘模2加’真值表完全相同 。有了加减法就可以用来定义模2除法,于是就可以用生成多项式g(x)生成CRC校验码 。生成多项式应满足以下原则
a、生成多项式的最高位和最低位必须为1 。b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0 。c、不同位发生错误时,应该使余数不同 。d、对余数继续做模2除,应使余数循环 。套用举例一
例如:g(x)=x^4+x^3+x^2+1,(7,3)码,信息码110产生的CRC码就是:对于g(x)=x^4+x^3+x^2+1的解释:(都是从右往左数)x4就是第五位是1,因为没有x1所以第2位就是0 。11101 | 110,0000(设a=11101 ,b=1100000)用b除以a做模2运算得到余数:1001余数是1001,所以CRC码是1001,传输码为:110,1001举例二
红军和蓝军通信联合进攻山下的敌军的例子第一天红军发了条信息要蓝军第二天一起进攻,蓝军收到之后,发一条确认信息,但是蓝军担心的是‘确认信息’如果也不可靠而没有成功到达红军那里,那自己不是很危险?于是红军再发一条‘对确认的确认信息’,但同样的问题还是不能解决,红军仍然不敢贸然行动 。