循环冗余校验----CRC校验

一、CRC校验概念

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

二、循环冗余校验码(CRC)的基本原理

在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。

三、生成步骤

1、将生成多项式G(X)转换成对应的二进制数。
2、将信息码左移R(R为G(X)的阶)位,相当于给对应的信息多项式M(X)*X^R。
3、用生成多项式(二进制数)对信息码做除,即:(M(X)*X^R)/G(X)得到R位的余数。
4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。

注意事项:
A、生成多项式的最高位和最低位必须为1。
B、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。
C、不同位发生错误时,应该使余数不同。
D、对余数继续做除,应使余数循环。
E、CRC校验码位数 = 生成多项式位数 - 1。

示例1:
循环冗余校验----CRC校验

示例2:
循环冗余校验----CRC校验

四、CRC和FCS的区别

1、CRC是一种差错检验方法;
2、FCS是帧校验序列,即冗余码;
3、两者不是同一个概念,FCS是冗余码,它可以通过CRC得到,也可以通过其他差错检测方法得到。