看了一下CRC的算法,当有所领悟的时候,简单总结了一下,澄清一下文档中难以理解的地方。用它的例子重新表述一下:
比如要发送4位数据串:1100,所以k=4;P(x)=x3+x2
而r就是多项式最高次幂,即r=3。
将P(x)左移r(=3)位 + R(x) 就是要发送的带校验码的数据串。
R(x)怎么得出呢,首先需要知道G(x):CRC-4 多项式为G(x)= x4+x+1 ,即:1011;
发送方编码方法:将P(x)乘以2r(即对应的二进制码序列左移r位),再除以G(x),所得余式即为R(x)。所以1100 000 /1011 = 1110余010,所以R(x)=010,占r(=3)位。
所以最后发送的字符串就是1100 000 + 010 = 1100 010
1110
-------
1011 /1100000
1011
----
1110
1011
-----
1010
1011
-----
0010
0000
----
010
收到这串数据后,如果传输无误,则该串数据/G(x)没有余数,也就是1100 010 / 1011可以除尽。否则就认为有误码。
以上数据串所用的除法是:模2减运算法则,既是不带进位和借位的按位减法,举例来看,1100-1011 = 0111,可以发现,这种运算其实是一种按位异或运算。所以编程就相对容易一些了。