它利用生成多项式为最高次幂k产生r个校验位来进行编码,其编码长度为k+r
循环冗余校验码由两部分组成,左边为信息码,右边为校验码
若信息码占k位,则校验码占n-k位。校验码是由信息码产生的,校验码位数越长,该代码的校验能力就越强。
在求CRC编码时,采用模2运算:不考虑借位和进位
假设生成多项式为:g(x)=x^4+x^3+1,发送字段为:10101011;
则此多项式的字段为 11001 (解释在下图)
计算校验位
首先,在数据位后加多项式最高幂次个0,比如这里的多项式最高次项为x^4,那就在数据位后加四个0,变成:101010110000,作为被除数...除数为11001
1)当余数的位数比除数少的时候,就可以不再进行除操作了,这就是最后的冗余码
2) 不发生进位和借位
1-1=0 0-1=1 0-0=0 1-0=1
3) 当被除数的最高位为1的时候商1,为0的时候商0
最后得到的余数:1101,即是校验位。那么整个CRC码为:101010111101
接收端收到新帧后,用新帧除以上面的多项式11001(模2除法),如果余数为0,该数据帧在传输过程中没有出错,否则出错;
接收端校验
假设收到的CRC码变成了101110111101,这个变为被除数,除数还是11001
还是和上图那样计算,算出来的余数是1001
化为十进制为9
即第9位发生错误,只需要反转第9位的值,便可获得正确的值