相关的概念:需要知道
读者也许熟悉整数算术中有关模数的概念。例如采用 12 小时的时钟,就是一个我们每天都用来指
示时间的模数为 12 的系统。如果在 11: 00 上加 2 小时,就得到了时间 1: 00 。模 2 C 模数为 2) 算术
采用的是两个没有借位或进位的二进制操作数,其操作结果同样也是一个二进制数,并且也是模 2 算
术体系中的一个数。由于该体系中数的加法形成闭包(自封闭) ,而且具有单位元素,数学家称这种模
2 体系构成一个代数域 Calgebraic field) 。
模 2 的加法运算的规则如下:
例 2-28 求 10010112 除以 10112 的商和余数。
1011)1001011 1. 把除数直接写在被除数的第一位的下面。
001001
2. 对这些数字的执行模 2 加法。
3. 从被除数上取后面各个位,使得余下部分的第一个1可以与除数中的第一个1对齐。
4. 根据步骤 1 重新写下除数。
5. 按步骤 2 进行相加。
0010 6. 再取下被除数的另一位。
00101 7. 这时, 1012 已经不够被 1011 2 来除,所以就是余数。
得到的商为 1010 2 。
模 2 域的算术运算也具有多项式的形式,就如同整数域中有类似的算术多项式一样。如前所述,
位置计数系统采昂的是一种递增基数指数辱的形式来表示数字。例如,
10112=l*2 3 十O*2 2 +1 *2 1 十 1 *2 0
取 X= 2 ,则二进制数 1011 2 可以简写成如下的多项式形式:
1 *X 3 十O*X 2 十 1* X l 十 1*X 0
而对于例 2-28 中的除法运算就变成了如下的多项式运算:
X6+X3 十 X+1
X3+X十 1
CRC的计算和使用方法
经过了上面的背景知识介绍,现在来讨论怎样构建循环冗余码校验体系 (CRC) 。下面通过举例来
加以说明。
1.假设信息字节为 1 = 1001011 2 (可以使用任意大小的字节数来组成信息块)。
2. 发送器和接收器都对某个任意的二进制位组合模式达成协议,例如 , p = 10112 (如果二进制
的位组合模式的开始和结束位都是1,则运行效果最好)。
3. 将 I 左移,左移的位数为 P 的位数减 1 位,就产生了一个新的 I = 1001011000 2 。
4. 用 I 做被除数 , p 做除数,进行模 2 除法(如同例 2-28 中所做的一样)。略去商只留下余数为
1002 。实际上,这个余数就是 CRC 体系要求的校验和。
5. 把余数加到 I 中,就组成要发送的信息 M:
1.001011000 2 + 100 2 = 1001011100 2
6. 信息接收器将采用相反的过程来对 M进行解码和校验。 M应该可以被 P 严格整除:
1010100
1011) 1001011100
1011
001001
1011
0010
001011
0000
当结果的余数不为 O 时,表示在 M 的传送过程中有一个错误发生。当采用大指数幕的互质多项式
时,这种检测方法的效果最好。下面是广泛应用于这种检测方法中 4 个标准多项式。
• CRC-CCITT (ITU-T) : X16 十X12+X5+1
• CRC-12: X12 + Xl1十 X3+X2+X+1
• CRC-16 CANSD :X16+X15+X2 十1
• CRC-32: X32 十X26 + X23 + X22 十 X16 + X12 + X11 + XIO 十X8 十X7+X5 十X4+X+1
如果是4字节方式32位系统,需要采用CRC-32编码格式进行CRC,使用的除数多项式就是CRC-32的格式,进行模2计算
CRC-CCITT、 CRC-12 和 CRC-16 都是对成对字节进行操作的,而 CRC-32 则用于 4 字节方式,比
较适合于 32 位字工作的系统。事实证明,采用这些多项式的 CRC 方法可以检测出超过 99.-8% 的全部
的单位的错误。
CRC 可以采用查找错误表的方法来进行操作,而不必对字节的每一位都计算余数。将各种可能输
入的位组合模式产生的余数表直接"烧录"到通信和存储电子设备中。这样一来,只需要一次查找就
可以得到余数,而不必进行 16 个或 32 个循环周期的除法运算。很显然,这种方法的使用取决于对检
测速度需求和采用更复杂控制电路所带来的成本问题的平衡。