书面解释

循环冗余校验码(CRC)广泛应用于数据通信领域和磁介质存储系统中。它利用生成多项式为k个数据未产生r个校验位来进行编码,其编码长度为k+r。由此可知,循环冗余校验码是由两部分组成的,左边为信息码(数据),右边为校验码。若信息码占k位,则校验码占n-k位。其中,n为CRC码的字长,所以CRC码又称为(n,k)码。校验码是由信息产生的,校验码位数越长,该代码的校验能力就越强。在求CRC编码时,采用的是模2运算。模2运算加减运算的规则是按位运算,不发生借位和进位。

通俗来讲,就是信息在编码的时候,在信息的尾部加入一些校验信息,让生成后的编码能够与生成多项式的值相除 余数等于0. 若接收方接收编码后进行校验运算 得出的计算结果余数不为0,则在传输的过程中出现了错误。

模2除法与普通除法的区别

普通二进制数的除法需要进位借位,然后将两个数进行进行减法运算,而模2除法不需要进位借位操作,两个数进行的是异或运算。异或运算即同则为0,不同为1,比如 1 和 0 为1,0 和 0 为 0 ,1 和 1 为 0。

参考于下图

循环冗余校验python 循环冗余校验码计算_多项式

CRC计算例子

循环冗余校验python 循环冗余校验码计算_循环冗余校验python_02


x4+x3+x+1对应二进制数为 11011,怎么算的呢?

x4对应的是1 0000 ,x3对应的是1000 ,x2为0 * 100,x对应10,这样相加起来的就是11011了。

然后根据生成多项式的最高指数位来确定补全余数的位数,x4+x3+x+1中的最高指数位为4,那就要在原始报文后添加4个0,再对其进行模2运算。

补充

CRC主要目的就是检查错误,设计的初衷没有考虑纠错,但不代表不能纠错。但是其纠错比较繁琐,在日常考试中都是考察CRC检错运算或求校验码。