<二>循环冗余码 CRC

奇偶校验虽然实现简单,但检错能力差,一般只用于低速传送环境。在通信系统中广泛采用的是另一种校验码。——CRC 循环冗余码。

CRC 码是把待发送的二进制数据序列当作一个多项式 f(x)的系数,发送之前用收发双方预定的一个生成多项式 G(x)去除,求得一个余数,将余数加到待发送的数据序列之后就得到 CRC 检验码。发送方将校验码发往接收方,接收方用同样的生成多项式 G(x)去除收到的二进制数据序列,如果余数为 0 则说明传输正确,否则说明收到的数据有错。接收方通知发送方重发。

CRC 的生成多项式是经过长期研究和实践而确定的,因此 CRC 码的检错能力很强,实现也不复杂,是目前应用最广的检错码。

常用的 CRC 生成多项式有以下几种: CRC—12 G(x)=x12+x11+x3+x2+x+1

(1100000001111) CRC—16G(x)=x16+x15+x2+1

(11000000000000101)

CRC—32 G(x)=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

(100000100110000010001110110110111)

生成多项式的位数越多,检错能力越强。

我们用下面的实例说明 CRC 校验码的生成过程: 例 假定待发送数据序列为 11011011(8 位)

生成多项式 G(x)=x4+x2+1 即为 10101(5 位,最高次数为 4)

①将待发送序列左移 4 位,得 110110110000

②将左移后得到的二进制序列用生成多项式比特序列(10101)按模 2

算法去除得余数 0110

<二>循环冗余码 CRC - 图1

③将余数 0110 加到移位后的比特序列 110110110000 中得

<二>循环冗余码 CRC - 图2,这就是 CRC 校验码。