基本原理:在K位信息码(我们要传递的值-二进制)后面加上R位的校验码,R位即为G(x)多项式的最高幂(校验码的位数比生成除数的位数少1)。整个码的长度为N位,根据N位和K位查表找到多项式G(x)。根据G(x)生成除数用来接收端判断数据是否正确(收到的整个编码如果能够整除除数的话那么就是完整并且正确的数据)。
G(x)多项式从表中通过信息码的位数得到相应的G(x)多项式,得到之后,可以从多项式中算出除数(二进制),例如 x3+x+1,那么相应的二进制为 1011,1*x^3+0*x^2+1*x^1+1*x^0=x^3+x+1
N K 码距d G(x)多项式 G(x)
7 4 3 x3+x+1 1011
7 4 3 x3+x2+1 1101
7 3 4 x4+x3+x2+1 11101
7 3 4 x4+x2+x+1 10111
15 11 3 x4+x+1 10011
31 26 3 x5+x2+1 100101
63 57 3 x6+x+1 1000011
假设现在我要发送数据: 1010 ,那么K=4,我们选择G(x)=x^3+x+1,总共有3位项数,即原信息码向左移动3位 –> 1010 000 。根据G(x)=x^3+x+1生成除数为 1011, 1010 000 除以 1011 进行模2相除(即为异或)。商为1001,余数为11,11即为校验码,那么拼接之后生成CRC码–> 1010 011。那么在接收端根据列表找到G(x)得到除数,将CRC码相除若无余数则为数据传输正确。如若要取原码只要左移R位即可。
模2相除:相同为0,不同为1
举例:1010 000 除以 1011
1 001
1011 )1010 000
1011
—————–
1000
1011
————
11