到的m位消息的校验码,再与收到的校验码比较。接收端也可以用收到的全部m + r位除以生
成多项式,再判断余数是否为0。这是因为,M' + R = (QG + R) + R = QG,这里Q是商。显
然,它也可以像发送端一样,在全部m + r后再增加r个0,再除以生成多项式,如果没有差错
发生,余数仍然为0。
3.生成多项式的选择
------------------ PLC资料网
很明显,不同的生成多项式,其检错能力是不同的。如何选择一个好的生成多项式需要一定
的数学理论,这里只从一些侧面作些分析。显然,要使用r位校验码,生成多项式的次数应为
r。生成多项式应该包含项"1",否则校验码的LSB(Least Significant Bit)将始终为0。如果
消息(包括校验码)T在传输过程中产生了差错,则接收端收到的消息可以表示为T + E。若E不
能被生成多项式G除尽,则该差错可以被检测出。考虑以下几种情况: 1)1位差错,即E = x^n = 100...00,n >= 0。只要G至少有2位1,E就不能被G除尽。这
是因为Gx^k相当于将G左移k位,对任意多项式Q,QG相当于将多个不同的G的左移相加。
如果G至少有两位1,它的多个不同的左移相加结果至少有两位1。
2)奇数位差错,只要G含有因子F = x + 1,E就不能被G除尽。这是因为QG = Q'F,由1)
的分析,F的多个不同的左移相加结果1的位数必然是偶数。 3)爆炸性差错,即E = (x^n + ... + 1)x^m = 1...100...00,n >= 1,m >= 0,显然只 PLC
要G包含项"1",且次数大于n,就不能除尽E。
4)2位差错,即E = (x^n + 1)x^m = 100...00100...00,n >= 0。设x^n + 1 = QG + R,
则E = QGx^m + Rx^m,由3)可知E能被G除尽当且仅当R为0。因此只需分析x^n + 1,根
据[3],对于次数r,总存在一个生成多项式G,使得n最小为2^r - 1时,才能除尽x^n
+ 1。称该生成多项式是原始的(primitive),它提供了在该次数上检测2位差错的最高
能力,因为当n = 2^r - 1时,x^n + 1能被任何r次多项式除尽。[3]同时指出,原始
生成多项式是不可约分的,但不可约分的的多项式并不一定是原始的,因此对于某些
奇数位差错,原始生成多项式是检测不出来的。
以下是一些标准的CRC算法的生成多项式:
标准 多项式 16进制表示
PLC ---------------------------------------------------------------------------
CRC12 x^12 + x^11 + x^3 + x^2 + x + 1 80F
CRC16 x^16 + x^15 + x^2 + 1 8005
CRC16-CCITT x^16 + x^12 + x^5 + 1 1021
CRC32 x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 04C11DB7
+ x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1 PLC资料网
16进制表示去掉了最高次项,CCITT在1993年改名为ITU-T。CRC12用于6位字节,其它用于8位
字节。CRC16在IBM的BISYNCH通信标准。CRC16-CCITT被广泛用于XMODEM, X.25和SDLC等通信
协议。而以太网和FDDI则使用CRC32,它也被用在ZIP,RAR等文件压缩中。在这些生成多项式
中,CRC32是原始的,而其它3个都含有因子x + 1。
4.CRC算法的实现
---------------
要用程序实现CRC算法,考虑对第2节的长除法做一下变换,依然是M = 11100110,G = 1011,
其系数r为3。
11001100 11100110000 PLC资料网
------------- 1011
1011 )11100110000 -----------
1011....... 1010110000
----....... 1010110000
1010...... 1011 PLC资料网
1011...... ===> -----------
----...... 001110000
1110... 1110000
1011... 1011
----... -----------
PLC资料网 1010.. 101000
1011.. 101000
---- 1011
100 <---校验码 -----------
上一页 [1] [2] [3] [4] 下一页
本文关键字:暂无联系方式PLC入门,plc技术 - PLC入门