CRC校验原理

什么是CRC校验码?
CRC即循环冗余校验码(Cyclic Redundancy Check, CRC ):是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

如何校验?
它利用除法及余数的原理来进行错误检测,将整个数据块当成一个连续的二进制数据M(x),在发送时将多项式M(x)用另一个多项式(被称为生成多项式G(x))来除,然后利用余数进行校验。
基本思想
数据多项式M(X): M(X)可被看成系数为0或1的多项式,例如:
CRC校验步骤:
CRC校验中有两个关键点,一是预先确定一个发送送端和接收端都用来作为除数的二进制比特串(或多项式),可以随机选择,也可以使用国际标准,但是最高位和最低位必须为1;二是把原始帧与上面计算出的除数进行模2除法运算,计算出CRC码。

具体步骤:

  1. 选择合适的除数
  2. 看选定除数的二进制位数,然后再要发送的数据帧上面加上这个位数-1位的0,然后用新生成的帧以模2除法的方式除上面的除数,得到的余数就是该帧的CRC校验码。注意,余数的位数一定只比除数位数少一位,也就是CRC校验码位数比除数位数少一位,如果前面位是0也不能省略。
  3. 将计算出来的CRC校验码附加在原数据帧后面,构建成一个新的数据帧进行发送;最后接收端在以模2除法方式除以前面选择的除数,如果没有余数,则说明数据帧在传输的过程中没有出错。

CRC校验码计算示例:
现假设选择的 CRC生成多项式为 G( X) = X4 + X3 + 1,要求出二进制序列 10110011的 CRC校验码。下面是具体的计算过程 :
①将多项式转化为二进制序列,由 G( X) = X4 + X3 + 1可知二进制一种有五位,第4位、第三位和第零位分别为1,则序列为11001
②多项式的位数位5,则在数据帧的后面加上5-1位0,数据帧变为 101100110000,然后使用模2除法除以除数 11001,得到余数。
假设要发送的信息用多项式M(X)表示,将M(x)左移r位(相当于M(x)2r),这样M(x)的右边就会空出r位,这就是校验码的位置,用 M(x)2r 除以生成多项式G(x)得到的余数就是校验码

计算步骤
将最高次幂为r的生成多项式G(x)转换成对应的r+1位的二进制数;
将信息码左移r位,相当于对应的信息多项式m(x)*2r;
用生成多项式(二进制数)对信息码做除运算,得到r-1位的余数;
将余数拼到信息码左移后空出的位置,得到完整的信道编码;

假设使用的生成多项式是G(X)=X3+X+1,4位的原始报文为1010,求编码后的报文
将生成多项式G(X)转换成对应的二进制除数:1011;
由于生成多项式有4位,所以计算所得的校验码为3位,即r=3;
原始报文M(X)=1010,左移3位变成1010 000;
用1011对1010 000进行模2除运算,相当于按位异或,得到余数011
将余数附加到1010的后边,得到最后的编码:1010 011;
在接收方,如果收到的是 1010 011,用其除以生成多项式 1011,能够整除,说明传输没有问题;若不能整除,则说明信道传输出错;

posted @ 2022-03-28 23:09  你若盛开-蝴蝶自来  阅读(598)  评论(0编辑  收藏  举报
Live2D