定义
循环冗余校验码(Cyclic Redundancy Chec,CRC) 是通过多项式&模2除法给信息码加上几位校验码,以增加整个编码系统的码距和查错纠错能力,广泛应用于移动通信和磁盘数据存储中。
原理
CRC 的基本原理是:在 K 位信息码后再添加 R 位的校验码,整个编码长度为 N 位,因此,这种编码又称(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为 N-K=R 的多项式 G(x)。根据 G(x)可以生成 R 位的校验码,而 G(x)叫作这个 CRC 码的生成多项式。
校验码的具体生成过程为:假设发送信息用信息多项式 C(x)表示,将 C(x)左移 R 位,则可表示成 C(x)×2R 这样 C(x)的右边就会空出 R 位,这就是校验码的位置。通过 C(x)×2R除以生成多项式 G(x)得到的余数就是校验码。
CRC 码的生成步骤为:
(1)将 x 的最高幂次为 R 的生成多项式 G(x)转换成对应的 R+1 位二进制数。
(2)将信息码左移 R 位,相当于对应的信息多项式 C(x)×2R 。
(3)用生成多项式(二进制数)对信息码做模 2 除,得到 R 位的余数。
(4)将余数拼到信息码左移后空出的位置,得到完整的 CRC 码。
示例
CRC生成多项式为 G( X) = X4 + X3 + 1,求出二进制序列 10110011的 CRC校验码。
1、将多项式转为R+1二进制。
G( X) = X4 + X3 + 1中,x的二次方和一次方缺失,所以为0,其他为1,结果为11001
2、将信息码左移R位
上面得出多项式的位数为5,那么R=4,将信息码10110011左移4位后为:
101100110000
3、用多项式二进制11001对信息码101100110000做模2除
余数为:100,不足R位,前面补0,所以余数为0100
4、将余数拼接到信息码左移后空出位置
结果为101100110100
模2除
模2除关键点:
1、除数和被除数的对应位置做异或运算得到余数。
2、未除尽时,如果余数不足R+1位,则商为0,直到余数足够R+1位;否则,商为1
以上述例子为例:
11010100
11001 / 101100110000
11001
11110
11001
11111
11001
11000
11001
0100