2.5.2 奇偶校验码
奇偶校验码是一种通过增加冗余位使得码字中"1"的个数恒为奇数或偶数的编码方法,它是一种检错码。在实际使用时又可分为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验等几种。
1.垂直奇偶校验
垂直奇偶校验又称为纵向奇偶校验,它是将要发送的整个信息块分为定长p位的若干段(比如说q段),每段后面按"1"的个数为奇数或偶数的规律加上一位奇偶位,如图2.19所示。问位信息(I11,I21,…,Ipl,I12,…,Ipq)中,每p位构成一段(即图中的一列),共有q段(即共有q列〉。每段加上一位奇偶校验冗余位,即图中的rio编码规则为
注意:此间的"+"指的是模二加,也即异或运算。
图中箭头给出了串行发送的顺序,即逐位先后次序为I11,I21,…,Ip1,r1,I12,…,Ipa,r2,…,儿,…,I间,rq。在编码和校验过程中,用硬件方法或软件方法很容易实现上述连续半加运算,而且可以边发送边产生冗余位;同样,在接收端也可边接收边进行校验后去掉校验位。
垂直奇偶校验方法的编码效率为R=p/(p+1)。通常,取一个字符的代码为一个信息段,这种垂直奇偶校验有时也称为字符奇偶校验。例如,在8位字符代码(即用8位二进制数位表示一个字符)中,p=8,编码效率便为8/9。
垂直奇偶校验方法能检测出每列中的所有奇数位错,但检测不出偶数位的错。对于突发错误来说,奇数位错与偶数位错的发生概率接近于相等,因而对差错的漏检率接近于1/20。
2.水平奇偶校验
为了降低对突发错误的漏检率,可以采用水平奇偶校验方法。水平奇偶校验又称为横向奇偶校验,它是对各个信息段的相应位横向进行编码,产生一个奇偶校验冗余位,如图2.20所示,编码规则为
若每个信息段就是一个字符的话,这里的q就是发送的信息块中的字符数。
水平奇偶校验的编码效率为R=q/(q+1)。
水平奇偶校验不但可以检测出各段同一位上的奇数位错,而且还能检测出突发长度<p的所有突发错误。因为按发送顺序从图2.20可见,突发长度《p的突发错误必然分布在不同的行中,且每行一位,所以可以检出差错,它的漏检率要比垂直奇偶校验方法低。但是实现水平奇偶校验时,不论采用硬件方法还是软件方法,都不能在发送过程中边产生奇偶校验
冗余位边插入发送,而必须等待要发送的全部信息块到齐后,才能计算冗余位,也就是一定.要使用数据缓冲器,因此它的编码和检测实现起来都要复杂一些。
3.水平垂直奇偶校验
同时进行水平奇偶校验和垂直奇偶校验就构成水平垂直奇偶校验,也称为纵横奇偶校实验,如图2.21所示。若水平垂直都采用偶校验,则
水平垂直奇偶校验的编码效率为R=pq/[(p+1)(q+1)]。.
水平垂直奇偶校验能检测出所有3位或3位以下的错误(因为此时至少在某一行或某一'列上有一位错)、奇数位错、突发长度<=p+1的突发错以及很大一部分偶数位错。测量表.明,这种方式的编码可使误码率降至原误码率的百分之一到万分之一。
水平垂直奇偶校验不仅可检错,还可用来纠正部分差错。例如数据块中仅存在1位错'时,便能确定错码的位置就在某行和某列的交叉处,从而可以纠正它.
CRC的工作方法
在发送端产生一个循环冗余码,附加在信息位后面一起发送到接收端,接收端收到的信息按发送端形成循
环冗余码同样的算法进行校验,
若有错,需重发。
2.循环冗余码的产生与码字正确性检验例子。
CRC校验码的算法分析
CRC校验码的编码方法是用待发送的二进制数据t(x)除以生成多项式g(x),将最后的余数作为CRC校验码。
其实现步骤如下:
(1) 设待发送的数据块是m位的二进制多项式t(x),(2) 生成多项式为r阶的g(x)。在数据块的末尾添
加r个0,(3)数据块的长度增加到m+r位,(4) 对应的二进制多项式为 。
(5) 用生成多项式g(x)去除 ,(6) 求得余数为阶数为r-1的二进制多项式y(x)。此二进制多项式y(x
)就是t(x)经过生成多项式g(x)编码的CRC校验码。
(7) 用 以模2的方式减去y(x),(8) 得到二进制多项式。 就是包含了CRC校验码的待发送字符串。
从CRC的编码规则可以看出,CRC编码实际上是将代发送的m位二进制多项式t(x)转换成了可以被g(x)除尽
的m+r位二进制多项式 ,所以解码时可以用接受到的数据去除g(x),如果余数位零,则表示传输过程没有错
误;如果余数不为零,则在传输过程中肯定存在错误。许多CRC的硬件解码电路就是按这种方式进行检错的。
同时 可以看做是由t(x)和CRC校验码的组合,所以解码时将接收到的二进制数据去掉尾部的r位数据,得到
的就是原始数据。
为了更清楚的了解CRC校验码的编码过程,下面用一个简单的例子来说明CRC校验码的编码过程。由于CRC-32、
CRC-16、CCITT和CRC-4的编码过程基本一致,只有位数和生成多项式不一样。
例1.已知:信息码:110011 信息多项式:K(X)=X5+X4+X+1
生成码:11001 生成多项式:G(X)=X4+X3+1(r=4)
求:循环冗余码和码字。
解:1)(X5+X4+X+1)*X4的积是 X9+X8+X5+X4 对应的码是1100110000。
2)积/G(X)(按模二算法)。
由计算结果知冗余码是1001,码字就是1100111001。
1 0 0 0 0 1←Q(X)
G(x)→1 1 0 0 1 )1 1 0 0 1 1 0 0 0 0←F(X)*Xr
1 1 0 0 1 ,
1 0 0 0 0
1 1 0 0 1
1 0 0 1←R(X)(冗余码)
例2.已知:接收码字:1100111001 多项式:T(X)=X9+X8+X5+X4+X3+1
生成码 : 11001 生成多项式:G(X)=X4+X3+1(r=4)
求:码字的正确性。若正确,则指出冗余码和信息码。
解:1)用字码除以生成码,余数为0,所以码字正确。
1 0 0 0 0 1←Q(X)
G(x)→1 1 0 0 1 )1 1 0 0 1 1 1 0 0 1←F(X)*Xr+R(x)
1 1 0 0 1 ,
1 1 0 0 1
1 1 0 0 1
0←S(X)(余数)
2)因r=4,所以冗余码是:11001,信息码是:110011
3.循环冗余码的工作原理
循环冗余码CRC在发送端编码和接收端校验时,都可以利用事先约定的生成多项式G(X)来得到,K位要发送
的信息位可对应于一个(k-1)
次多项式K(X),r位冗余位则对应于一个(r-1)次多项式R(X),由r位冗余位组成的n=k+r位码字则对应于一
个(n-1)次多项式T(X)=Xr*K(X)+R(X)。
4.循环冗余校验码的特点
1)可检测出所有奇数位错;
2)可检测出所有双比特的错;
3)可检测出所有小于、等于校验位长度的突发错。
什么是奇偶校验
对数据传输正确性的一种校验方法。在数据传输前附加一位奇校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为奇数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。例如,需要传输"11001110",数据中含5个"1",所以其奇校验位为"0",同时把"110011100"传输给接收方,接收方收到数据后再一次计算奇偶性,"110011100"中仍然含有5个"1",所以接收方计算出的奇校验位还是"0",与发送方一致,表示在此次传输过程中未发生错误。奇偶校验就是接收方用来验证发送方在传输过程中所传数据是否由于某些原因造成破坏。
具体方法如下:
奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数
1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个。
偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数
1000110(1)你就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了。
大家一定会问,如何计算奇偶性呢,在计算机内有一种特殊的运算它遵守下面的规则:
1+1=0; 1+0=1; 0+1=1; 0+0=0;我们把传送过来的1100111000逐位相加就会得到一个1,应该注意的的,如果在传送中1100111000变成为0000111000,通过上面的运算也将得到1,接收方就会认为传送的数据是正确的,这个判断正确与否的过程称为校验。而使用上面方法进行的校验称为奇校验,奇校验只能判断传送数据中奇数个数据从0变为1或从1变为0的情况,对于传送中偶数个数据发生错误,它就无能为力了。
Odd Parity(奇校验),校核数据完整性的一种方法,一个字节的8个数据位与校验位(parity bit )加起来之和有奇数个1。校验线路在收到数后,通过发生器在校验位填上0或1,以保证和是奇数个1。因此,校验位是0时,数据位中应该有奇数个1;而校验位是1时,数据位应该有偶数个1。如果读取数据时发现与此规则不符,CPU会下令重新传输数据。 奇/偶校验(ECC)是数据传送时采用的一种校正数据错误的一种方式,分为奇校验和偶校验两种。 如果是采用奇校验,在传送每一个字节的时候另外附加一位作为校验位,当实际数据中“1”的个数为偶数的时候,这个校验位就是“1”,否则这个校验位就是“0”,这样就可以保证传送数据满足奇校验的要求。在接收方收到数据时,将按照奇校验的要求检测数据中“1”的个数,如果是奇数,表示传送正确,否则表示传送错误。 同理偶校验的过程和奇校验的过程一样,只是检测数据中“1”的个数为偶数。