CRC循环冗余校验码的定义及相关例题
一、CRC是什么?
循环冗余校验码(CRC),简称循环码,是一种常用的、具有检错、纠错能力的校验码,在早期的通信中运用广泛。
这种编码基本思想是将要传送的信息M(X)表示为一个多项式L,用L除以一个预先确定的多项式G(X),得到的余式就是所需的循环冗余校验码。
二、CRC码怎么计算
1.模2运算
模2运算是一种二进制算法,CRC校验技术中的核心部分。
与四则运算相同,模2运算也包括:
1、模2加法:
0和1之间的加法,其中0+0=0,1+0=0+1=1,1+1=0(!)
2、模2减法:
不考虑借位,0-0=0 1-1=0 1-0=1 0-1=1
3、模2乘法:
多位数的模2乘法与普通乘法一样演算,唯一的区别是,部分积相加时按模2加,即奇数个1相加得1,偶数个1相加得0
0×0=0 0×1=0 1×0=0 1×1=1
4、模2除法:
模2除法是模2乘法的逆运算
模2除法具有下列三个性质:
(1)当最后余数的位数小于除数位数时,除法停止。
(2)当被除数的位数小于除数位数时,则商数为0,被除数就是余数。
(3)只要被除数或部分余数的位数与除数一样多,且最高位为1,不管其他位是什么数,皆可商1。
四种二进制运算。
2.检错计算举例
(1)设约定的生成多项式为G(x)=x4+x+1,其二进制表示为10011,共5位,其中k=4。
(2)假设要发送数据序列的二进制为1101011011( 即 F(x) ),共10位。
(3)在要发送的数据后面加4个0(生成 F(x)*xk),二进制表示为11010110110000,共14位。
由于G(x)最高次幂为4,(k=4),所以发送数据乘以2^4
(4)用生成多项式的二进制表示10011去除乘积11010110110000,按模2算法求得余数比特序列为 1110(注意余数一定是k位的)。
(5)将余数添加到要发送的数据后面,得到真正要发送的数据的比特流:11010110111110,其中前10位为原始数据,后4位为CRC校验码。
(6)接收端在接收到带CRC校验码的数据后,如果数据在传输过程中没有出错,将一定能够被相同的生成多项式G(x)除尽,如果数据在传输中出现错误,生成多项式G(x)去除后得到的结果肯定不为0。