本文其实是B站教学视频的搬运:链接点击
循环冗余校验码的定义
循环冗余校验码由信息码n位和校验码k位构成。k位校验位拼接在n位数据位后面,n+k为循环冗余校验码的字长,又称这个校验码(n+k,n)码。
n位信息位可以表示成为一个报文多项式M(x),最高幂次是xn-1。约定的生成多项式G(x)是一个k+1位的二进制数,最高幂次是xk。将M(x)乘以xk,即左移k位后,除以G(x),得到的k位余数就是校验位。这里的除法运算是模2除法,即当部分余数首位是1时商取1,反之商取0。然后每一位的减法运算是按位减,不产生借位。
循环冗余校验码的特点
理论上可以证明循环冗余校验码的检错能力有以下特点:①可检测出所有奇数位错;②可检测出所有双比特的错;③可检测出所有小于、等于校验位长度的突发错。
什么是模2运算
CRC码的计算
下面有两个多项式,M(x)代表发送信息的多项式,G(x)代表校验位信息
上面两个式子所代表的二进制吗根据多项式每项的系数得出
为什么是要在信息的二进制码上加3个0,是根据右边式子的最高次幂是3,所以左边的式子乘以2的3次方
再将上面的两个二进制数做模二除法
这里有一个规则,每一步得出的二进制数将抹掉一位,此时如果它的首位是0,那么除数就商0,如果是1,就商1,得出下一个被除数。
当得到的结果小于除数时,就是余数
循环冗余校验码就是这样的出来的
具体怎么校验
上图是黄色的是发送塔,蓝色的是接收塔,发送方和接收方的一个约定是G(x),(两方都知道)
如果接收方收到的信息不能整除检验码,就说明信息有错,反之如上