CRC除法

2019-04-14 09:01发布

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码