当前位置:文档之家› 2.4 数据校验码

2.4 数据校验码

§2.4 数据校验码
校验码是一种提高数据可靠性、防止数据出错以及纠正错误的特殊编码。

一.码距
两个码字逐位比较,其不同字符的个数就是两个码字的距离。

所以一个码制的距离定义为:在这个编码制中各个码字之间的最小距离称为码距。

例如4位二进制数中16个代码的码距为1,若合法地增大码距,可提高发现错误的能力。

二.奇偶校验
在每个字组中附加一个校验位,用于将整个字组中二进制数“1”的个数凑成奇数个(奇校验)或偶数个(偶校验),统称为奇偶校验,附加位称为奇校验位或偶校验位。

例如,ASCII中“A”为1000001 B,若采用奇校验,则在最高位补充1,成为11000001 B。

码距为2的奇偶校验编码能发现一个数据位错误或奇数个位错误,但不能确定出错的位置,也不能纠正错误。

对n 位数据Dn...D1加校验位P后应满足S=P⊕Dn⊕Dn-1⊕...⊕D2⊕D1=1/0 其中当奇校验时,S=1;偶校验时,S=0。

三.海明校验
1.校验原理:在数据中加入几个校验位(奇偶校验位),将数据代码的码距比较均匀地拉大,并把数据的每个二进制位分配在几个奇偶校验位组中。

当某一位出错时,就会引起有关若干校验位的值发生变化,在不但可以发现出错,还能找出哪一位出错,为进一步自动纠错提供依据。

2.编码规则:设对N位数据用K位校验位校验,则其海明码为:
HmHm-1....H2H1
其中最高位位号m,最低位位号为1。

(1)校验位与数据位之和m(m=K+N);
(2)每个校验位Pi分配在海明码的2i-1位置上;
(3)海明码中除校验位,其它为数据位。

被校验数据从低到高顺序分配到海明码中;
(4)海码的每一位码Hi由多个校验位校验,且被校验的每一位位号要等于校验它的个校验位的位号之和;
(5)在增大合法码的码距时,使码距均匀地增大,保证检错平均。

3.发现两位错、纠正一位错的海明码
为表示N位数据、K位校验位中某一位出错以及无错,共有N+k+1种情况,另考虑到要发现两位同时出错,则应满足
2K-1≥N+K+1
按此关系计算所得K与N对应值如教材所示。

例如,对N=8(一字节数据D8D7D6D5D4D3D2D1),需校验位K应为5,海明码为
H13H12....H2H1
其中5个校验位P5、P4、P3、P2、P1分别为H13、H8、H4、H2、H1,其余为数据位,即海码H13H12....H2H1为: P5D8D7D6D5P4D4D3D2P3D1P2P1
根据“被校验位的海码位号==校验位号之和”关系,校验位Pi校验所有位号中带有i的海码位(方法同奇偶校验):
S1=P1⊕D1⊕D2⊕D4⊕D5⊕D7
S2=P2⊕D1⊕D3⊕D4⊕D6⊕D7
S3=P3⊕D2⊕D3⊕D4⊕D8
S4=P4⊕D5⊕D6⊕D7⊕D8
在上述关系中D4和D7分别由三个校验位校验,其余均只被两位校验,为此用
P5对D1、D2、D3、D5、D6、D8再进行校验:
若采用奇校验,则S1 S2 S3 S4 S5应为11111;若采用偶校验,则S1 S2 S3 S4 S5应为00000。

现假设采用偶校验,则有:
P1=D1⊕D2⊕D4⊕D5⊕D7
P2=D1⊕D3⊕D4⊕D6⊕D7
P3=D2⊕D3⊕D4⊕D8
P4=D5⊕D6⊕D7⊕D8
P5=D1⊕D2⊕D3⊕D5⊕D6⊕D8
生成海明码,就是计算上述五个校验位;而校验过程就是计算前面所述的S1 S2 S3 S4 S5
,它们反映了13 位海明码出错情况。

当采用偶校验时,有教材所示判无错或发生一、二位出错及出错位号的结论。

4.发现一位错、纠正一位错的海明码
对N位数据位、K位校验位,要发现一位错、纠正一位错,则应满足
2K≥N+K+1
例如K=4,则N≤24-4-1=11,即最多只能校验11位数据。

若对一字节(N=8)数据编码,则也需校验位4位,其海明码H12....H2H1为:
D8D7D6D5P4D4D3D2P3D1P2P1
校验关系式为:
S1=P1⊕D1⊕D2⊕D4⊕D5⊕D7
S2=P2⊕D1⊕D3⊕D4⊕D6⊕D7
S3=P3⊕D2⊕D3⊕D4⊕D8
S4=P4⊕D5⊕D6⊕D7⊕D8
若假设采用偶校验,则有:
P1=D1⊕D2⊕D4⊕D5⊕D7
P2=D1⊕D3⊕D4⊕D6⊕D7
P3=D2⊕D3⊕D4⊕D8
P4=D5⊕D6⊕D7⊕D8
举例:数据10101010采用偶校验方法可计算出4个校验位P4P3P2P1=0100,则求出数据10101010的海码为101001011000,把8位数据和4位校验位组成的海码一起存储、传送处理,当再次使用时,计算S1 S2 S3 S4,判是否均为0,若某一组S值不为0,则说明该组S所对应的位有错产生。

如S4S3=11,则这两个S组中公有的一位出错---D8错。

可通过对该位数据进行取反而得到纠正。

四.循环冗余校验码(CRC)
循环冗余校验码是目前通讯传输系统和磁盘、磁带存储系统中广泛采用的一种编码形式,在有传送的信息后附加若干校验位。

CRC的编码格式为:
k 位信息位 + r位校验位
对k位信息附加r位校验位,形成共n(n=k+r)位的CRC,这种编码也称为(n,k)码。

附加位的产生只与该组信息位有关,且校验位越多,校验能力越强。

1.CRC的产生
对一给定的(n,k)循环码,存在一个最高次幂为(n-k)的多项式g(x)可生成k位信息的r位校验码,g(x)被称为生成多项式。

例如网络中的X.25协议,数据链路层在传递信息时,要附加16位校验位,其生成多项式g(x)
=x16+x12+x5+1,这里生成多项式的最高次幂数就是校验位位数,最低次幂一定是0。

设被传送k位信息的表达式为M(x),M(x)左移(n-k)位形成n位的数据x (n-k)M(x)(择交子表示的信息x=2),用g(x)去除x(n-k)M(x)后,得
X(n-k)M(x) R(x)
�������� =Q(x)+
��� ........(1)
g(x) g(x)
其中Q(x)是幂次小于k的商式,R(x)为幂次小于n-k的余式。

若(1)式两边同乘以g(x),则可得
X(n-k)M(x)= Q(x)g(x)+ R(x)........(2)
其中(2)式中“+”号是按位加(逻辑加,不产生进位,且一个数按位加上另一个数所得结果与按位减去同一个数所得结果相同),所以(2)也可写成
X(n-k)M(x)+ R(x)= Q(x)g(x)........(3)
分析(3)式可见,由于右边是g(x)的倍数,所以等号左边也是g(x)的倍式,且左边即是要传送的n位CRC的编码。

生成的n位CRC可进行存储、传送,校验时同样n位CRC除以g(x),所得余数应为0,否则数据在存储、传送过程中出错。

例1:对四位有效信息(1100)按生成多项式(1011)求CRC。

M(x)=x3+x2 M(x)x3=x6+x5 g(x)=x3+x+1
得:(7,4):1100010
例2:对三位有效信息(110)按生成多项式g(x)=x4+x3+x2+1求(7,3)码。

M(x)=x2+x M(x)x4=x6+x5 g(x)= x4+x3+x2+1
得:Q(x)= x2+1 R(x)= x3+1 (1001)
所以(7,4)CRC码为:1101001
可以证明 1101001 循环右移的编码也是CRC,如 1110100、0111010等;且任二CRC按位加的结果也是CRC,如1101001+1110100==》0011101、
1110100+0111010==》1001110等。

2.CRC特性
(1)在一组编码中,CRC循环右移一位产生的新码依然是CRC;
(2)两个CRC按位加的结果也是CRC;
(3)CRC用其生成多项式g(x)去除,余码应为0;
(4)若余数不为0,则出错,且出错位数与余数有关。

相关主题