CRC计算基本原理

CRC,即循环冗余校验码,是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

其根本思想就是先在要发送的帧后面附加一个数,生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数进行模2除法。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。

具体来说,CRC校验原理就是以下几个步骤:

(1)先选择(可以随机选择,也可按标准选择)一个用于在接收端进行校验时,对接收的帧进行除法运算的除数(是二进制比较特串,通常是以多项方式表示,所以CRC又称多项式编码方法,这个多项式也称之为“生成多项式”)。

多项式:若多项式为G(X)=X3+X+1,则除数为1011(位数为最高次幂+1)。

(2)看所选定的除数二进制位数(假设为k位),然后在要发送的数据帧(假设为m位)后面加上k-1位“0”,然后以这个加了k-1个“0“的新帧(一共是m+k-1位)以“模2除法”方式除以上面这个除数,所得到的余数(也是二进制的比特串)就是该帧的CRC校验码,也称之为FCS(帧校验序列)。但要注意的是,余数的位数一定要是比除数位数只能少一位,哪怕前面位是0,甚至是全为0(附带好整除时)也都不能省略。

附:
模2加法:1+1 = 0 ;0+1 = 1;1+0=1;0+0 = 0
模2减法:1- 0 = 1; 0- 0 = 0;0-1 = 0;1-1 = 0
无进位,亦无借位,乘除同理。

以下以一例作为解释:
假设CRC生成多项式为G(X) = X5 + X4 +X+1,要发送的二进制序列为100101110,求CRC校验码是多少。

由多项式得,除数为110011,共6位,则CRC校验码有5位。
则需要在原二进制序列中加6-1 = 5个0可得,100101110 00000
二者相除可得;

这里写图片描述

可得CRC校验码位:11010
可得新的二进制序列位 100101110 11010

猜你喜欢

转载自blog.csdn.net/zy1049677338/article/details/80347853
今日推荐