老兄,是不是做课程设计.
CRC校验的原理并不复杂:
CRC码利用N位码,N=K+R,K位数据位,R位校验码
(1)传输前先编码:
将数据位左移R位,相当于乘上2的次方,设C(X)为数据,G(X)为多项式
C(X)*POW(2,R)/G(X)=Q(X)+R(X)/G(X)
Q(X)为商,R(X)/G(X)为余数,
(2) 由于CRC的四则运算采用模2运算,不考虑借位移位.所以有
C(X)*POW(2,R)=Q(X)*G(X)+R(X)
C(X)*POW(2,R)+R(X)=Q(X)*G(X)
注意:R(X)换边,符号不变.
(3)C(X)*POW(2,R)+R(X)即为N位CRC码,R(X)即为校验码,C(X)*POW(2,R)即为
左移R位的数据.
诚然(C(X)*POW(2,R)+R(X))/G(X)=Q(X),余数为0.
校验时将CRC码除以G(X),余数为0则传输数据正确,否则错误,要求重新传输.
(4)常用的CRC编码的G(X)多项式:
一个G(X)多项式对应特定的N,K
N K 多项式 G(X)编码
7 4 X3+X+1 1011
7 4 X3+X2+1 1101
7 3 X4+X3+X+1 11011
7 3 X4+X2+X+1 10111
15 11 X4+X+1 10011
31 26 X5+X2+1 100101
63 57 X6+X+1 1000011
1041 1024 X16+X15+X2+1 1100 0000 0000 0101
(5)模2运算:
就是普通的二进制运算不考虑借位,进位.
+法:0+0=0 , 0+1=1, 1+0=1 , 1+1=0
-法:0-0=0 , 0-1=1, 1-0=0 , 1-1=0
*法:利用模2加法求部分积之和,无进位.
/法:利用模2减法求部分积之和,无借位.
(6)如还有疑问请查阅
1.软件水平考试专用书<<程序设计>>程序员级,高级程序员级 王春森
2.<<计算机组成与结构>> 王爱英
都是清华大学出版社的.