理论教育 CRC码的生成与应用

CRC码的生成与应用

时间:2023-11-22 理论教育 版权反馈
【摘要】:CRC基于二进制多项式除法。下面举一个求CRC码的例子。3)将数据M和余数R拼接,得CRC码1100111001,将其发送。CRC-32是IEEE 802标准规定的生成多项式,以太网用的就是CRC-32。以CRC-16为例,它能够检测以下错。图3-5生成CRC码的硬件电路下面的C语言程序是对生成CRC码的硬件电路的模拟,程序本身来源于通信程序YMODEM。CRC码也可以通过查表的方法生成,以提高运算速度。

CRC码的生成与应用

循环冗余校验(Cyclic Redundancy Check,CRC)码是一种线性分组码,也是系统码。CRC基于二进制多项式除法。在代数编码理论中,一个码组可表示为一个多项式,码元0或1当做多项式的系数。例如,1100101表示为1·x6+1·x5+0·x4+0·x3+1·x2+0·x+1,即x6+x5+x2+1。一个k位的帧可以被看成从xk-1x0k-1次多项式。

CRC码的计算方法是用事先约定的一个生成多项式函数Gx)去除0、1数据串,舍弃商,将余数作为监督位(通常称为帧校验序列FCS)。

CRC的除法是用异或逻辑实现的,即模2除法。模2除法的规则是:被除数(或部分余数)的最高位为1,则上商1;被除数的最高位为0,则上商0;当余数的位数小于除数的位数时停止运算。可见,FCS的位数与生成多项式的最高次幂相等。

CRC码的具体生成办法是:将k位的数据左移n位,低位补0,再用n+1位的生成多项式进行模2除,所得的n位余数就是FCS。k位的数据和n位的FCS组成新的k+n位的数据帧,也就是CRC码

接收端用同样的生成多项式除以接收进来的数据帧,若没有余数,则认为无错。其正确性可以用下面的方法进行验证。

定义M为要传输的数据,有k位;P为生成多项式,有n+1位;F为FCS,有n位;T为CRC形成的数据帧,有k+n位。现在证明无差错时,T/P的余数为0。

数据M左移后为2nM,用P除以2nM,得商Q和余数R/P

978-7-111-31053-2-Chapter03-10.jpg

现在把R作为FCS,即组成的数据帧T=2nM+R,因此

978-7-111-31053-2-Chapter03-11.jpg

任何一个数与其自身进行模2加,结果肯定为0。因此得到:T/P=QTP整除,没有余数。上述方法得到验证。

下面举一个求CRC码的例子。

若数据M=110011(6位),生成多项式P=11001(5位),则求CRC码的步骤如下。

1)数据M左移5-1=4位,变为1100110000。

2)用生成多项式P进行模2除运算,得余数R=1001。

978-7-111-31053-2-Chapter03-12.jpg

3)将数据M和余数R拼接,得CRC码1100111001,将其发送。(www.daowen.com)

CRC码不仅在数据通信系统中经常用做校验码,而且在其他场合也应用广泛,如压缩/解压软件的正确性、硬盘扇区存储数据的可靠性等。CRC码所用的生成多项式有不同的标准,常用的生成多项式有:

CRC-16=x16+x15+x2+1

CRC-ITU=x16+x12+x5+1

CRC-32=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

这些生成多项式都是由不同的标准机构制定的。CRC-16在IBM公司的产品中常用。CRC-ITU当然是ITU-T(以前写为CRC-CCITT,CCITT是ITU-T的前身)制定的。CRC-32是IEEE 802标准规定的生成多项式,以太网用的就是CRC-32。

CRC码的检错能力很强,r位生成多项式可检测出所有的单错、双错、奇数位错和突发长度小于或等于r的突发错,对于突发长度为r+1的突发错的检出概率是(1-2-(r-1)),对于突发长度大于r+1的突发错的检出概率是(1-2-r)。以CRC-16为例,它能够检测以下错。

1)所有的单错、双错(相邻的两位一起错)和奇数错。

2)100%的16位以内的突发错。

3)99.997%的17位的突发错。

4)99.998%的18位以上的突发错。

CRC码的生成方法有很多,图3-5是用硬件电路生成CRC码,生成多项式为CRC-ITU。

978-7-111-31053-2-Chapter03-13.jpg

图3-5 生成CRC码的硬件电路

下面的C语言程序是对生成CRC码的硬件电路的模拟,程序本身来源于通信程序YMODEM。YMODEM是一种文件传输协议,目前很少使用。作为一个选项,该程序同时也提供了校验和的计算方法。

978-7-111-31053-2-Chapter03-14.jpg

CRC码也可以通过查表的方法生成,以提高运算速度。其思想是根据生成多项式先生成一张表,通常表中有256项数据,CRC按字节进行运算,根据字节的值查询表项数据就可以了。表的大小与生成多项式的位数没有关系。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈