CRC除法

来源:互联网 发布:java图形界面编程视频 编辑:程序博客网 时间:2024/05/01 08:26

CRC里的除法不是简单的二进制除法,CRC里的除法运算规则如下所示:

1111_000 被除数

1101          除数

----------------------

够除数的位数,商等于1

0010 (余数,通过除数与被除数前4位求异或得到)

------

100    (把被除数第5位挪下来)

1101   除数

------

位宽不够,商等于0

1000   把被除数第6位挪下来

1101   除数

------

够除数的位数,商等于1

0101  余数(仍然是通过异或操作得到)

------

1010  把被除数第7位挪下来

1101  除数

------

够除数的位数,商等于1

0111   余数(仍然通过求异或得到)

------

被除数共7位,除完

所以得到商1011,余数111.

再举个例子:已知信息位1100,生成多项式G(x)= x3 + x + 1,求CRC码

M(x)= 1100

M(x)* x3 = 1100000

G(x)= 1011

M(x)* x3 / G(x)= 1110 + 010/1011

R(x)= 010

CRC码为:M(x)* x3 + R(x)= 1100000 + 010 = 1100010

其原理是:CRC码一般在k位信息位之后拼接r位校验码位生成。编码步骤如下

  1. 将待编码的k位信息表示成多项式M(x);
  2. 将M(x)左移r位,得到M(x)*2r;
  3. 用r+1位的生成多项式去除M(x)*xr得到余数R(x);
  4. 将M(x)*xr与R(x)作模2加(不是很明白),得到CRC码