CRC校验

1、循环冗余校验码,也称为CRC码。它是数据通信领域中最常用的一种差错校验码。其特征是信息字段和校验字段的长度可以任意选定。

2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。
例如:
1010111对应的多项式为x^6+x^4+x^2+x+1


多项式为x^5+x^3+x^2+x+1对应的代码101111


3、二进制位串如何对应多项式
例如:
1010111
首先,位串的长度为7,那么,多项式最高次幂为7-1=6,也就是x^6
 1    0    1    0    1    1    1
x^6       x^4       x^2  x^1   1

从上面,得出二进制位串对应的多项式
x^6+x^4+x^2+x+1


4、将信息码左移R位,相当于对应的信息多项式C(x)*x的R次方。
前提:
假设信息码(原文报文、发送信息位)为1010,生成多项式是G(x)=x^3+x+1。
R是指生成多项式最高次幂,也是校验码的位数。
所以,1010向左移3位,变成1010 000。
二进制1010 000 对应的信息多项式为x^6+x^4。(参考3)
说明:
假设信息码为1010。
二进制1010 对应的信息多项式为x^3+x。
1010向左移3位,变成1010 000
根据前提知道,1010 000对应的信息多项式为x^6+x^4。也就是(x^3+x)*x^3。

5、假设使用的生成多项式是G(x)=x^3+x+1。4位的原始报文为1010,求编码后的报文。
第一,生成多项式转换成相应的二进制
x^3+x+1相应的二进制位1011(标记为A)

第二步,原始报文向左移R位,也就是C(x)*x的R次方。
1010 000

第三步,得到向左移R位的二进制(标记为B)后,进行模2除(高位对齐),相当于按位异或。即相同为0,不同为1。得到R为余数。
1010 000
1011
---------
0001 000
   1 011
---------
0000 011

得到011余数,也就是校验码
第四步,将余数拼到原始报文后面,就得到完整的CRC码,也就是发送码
1010 011


6、接收方如何校验
利用发送信息码对g(x)二进制做除。如果能除掉,也就是余数为0,则正确。(高位对齐)
如:
1010 011
1011
----------
0001 011
   1 011
----------
0000 000


7、常见CRC码
名称         生成多项式         简记式*        应用举例
CRC-16      x16+x15+x2+1      8005          IBM SDLC

猜你喜欢

转载自lzj0470.iteye.com/blog/1897157