循环冗余校验码(CRC)

它利用生成多项式为最高次幂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位的值,便可获得正确的值

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容