奇偶校验码的例子

奇偶校验码的例子

【篇一:奇偶校验码的例子】

奇偶校验是一种校验代码传输正确性的方法.根据被传输的一组二进

制代码的数位中“1”的个数是奇数或偶数来进行校验.采用奇数的称为

奇校验,反之,称为偶校验.采用何种校验是事先规定好的.通常专门设

置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数.若用

奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而

确定传输代码的正确性.

与一段信息关联的冗余信息.在windowsntserver中,带奇偶校验的

带区集意味着每行有一个附加的奇偶校验带区.因此,必须使用至少三

个(而不是两个)磁盘才能考虑该附加的奇偶校验信息.奇偶校验带

区包含该带区内数据的xor(称为排它性“或”的布而操作).重新生

成失败的磁盘时,windowsntserver将使用这些带区中与完好磁盘上

数据关联的奇偶校验信息重新在失败盘上创建数据.请参阅容错;带

区集;带奇偶校验的带区集奇偶校验能够检测出信息传输过程中的

部分误码(1位误码能检出,2位及2位以上误码不能检出),同时,它

不能纠错.在发现错误后,只能要求重发.但由于其实现简单,仍得到了

广泛使用.为了能检测和纠正内存软错误,首先出现的是内存“奇偶校验”.内存中最小的单位是比特,也称为“位”,位有只有两种状态分别以

1和0来标示,每8个连续的比特叫做一个字节(byte).不带奇偶校

验的内存每个字节只有8位,如果其某一位存储了错误的值,就会导致

其存储的相应数据发生变化,进而导致应用程序发生错误.而奇偶校验

就是在每一字节(8位)之外又增加了一位作为错误检测位.在某字

节中存储数据之后,在其8个位上存储的数据是固定的,因为位只能有

两种状态1或0,假设存储的数据用位标示为1、1、1、0、0、1、0、1,那么把每个位相加(1+1+1+0+0+1+0+1=5),结果是奇数.

对于偶校验,校验位就定义为1,反之则为0;对于奇校验,则相反.当

cpu读取存储的数据时,它会再次把前8位中存储的数据相加,计算结

果是否与校验位相一致.从而一定程度上能检测出内存错误,奇偶校验

只能检测出错误而无法对其进行修正,同时虽然双位同时发生错误的

概率相当低,但奇偶校验却无法检测出双位错误.

编辑本段范例

串行数据在传输过程中,由于干扰可能引起信息的出错,例如,传输字符‘e’,其各位为:0100,0101=45h d7 d0 由于干扰,可能使位变为1,(为

什么不变0?)这种情况,我们称为出现了“误码”.我们把如何发现传输中的错误,叫“检错”.发现错误后,如何消除错误,叫“纠错”.最简单的检错方法是“奇偶校验”,即在传送字符的各位之外,再传送1位奇/偶校验位.可采用奇校验或偶校验.奇校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为奇数,如:1 0110,0101 0 0110,0001 偶校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为偶数,如:1 0100,0101 0 0100,0001 奇偶校验能够检测出信息传输过程中的部分误码(1位误码能检出,2位及2位以上误码不能检出),同时,它不能纠错.在发现错误后,只能要求重发.但由于其实现简单,仍得到了广泛使用.有些检错方法,具有自动纠错能力.如循环冗余码(crc)检错等.

校验方法

奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数 1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个.偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数 1000110(1)你就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了.

编辑本段双向奇偶校验

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 的个数

为偶数。

【篇三:奇偶校验码的例子】

计算机系统运行时,各个部之间要进行数据交换. 为确保数据在传送过

程正确无误,常使用检验码. 我们常使用的检验码有三种.分别是奇偶

校验码、海明校验码和循环冗余校验码(crc) 。奇偶校验码

奇偶校验码最简单,但只能检测出奇数位出错.如果发生偶数位错误就

无法检测. 但经研究是奇数位发生错误的概率大很多.而且奇偶校验码

无法检测出哪位出错.所以属于无法矫正错误的校验码。奇偶校验码

是奇校验码和偶校验码的统称.它们都是通过在要校验的编码上加一

位校验位组成. 如果是奇校验加上校验位后,编码中1的个数为奇数个。如果是偶校验加上校验位后,编码中1的个数为偶数个。

例:

原编码奇校验偶校验

00000000 1 0000 0

00100010 0 0010 1

11001100 1 1100 0

10101010 1 1010 0

如果发生奇数个位传输出错,那么编码中1的个数就会发生变化.从而

校验出错误,要求从新传输数据。目前应用的奇偶校验码有3种.

水平奇偶校验码对每一个数据的编码添加校验位,使信息位与校验位

处于同一行.

垂直奇偶校验码把数据分成若干组,一组数据排成一行,再加一行校验码.针对每一行列采用奇校验或偶校验

例: 有32位数据1010010100110110 11001100 10101011

垂直奇校验垂直偶校验

1010010110100101数据

0011011000110110

1100110011001100

1010101110101011

0000101111110100校验

水平垂直奇偶校验码就是同时用水平校验和垂直校验

例:

奇校验奇水平偶校验偶水平

101001011101001010 数据

001101101001101100

11001100111001100 0

10101011010101011 1

000010110111101001 校验

海明校验码

海明码也是利用奇偶性来校验数据的.它是一种多重奇偶校验检错系统,它通过在数据位之间插入k个校验位,来扩大码距,从而实现检错和纠错.

设原来数据有n位,要加入k位校验码.怎么确定k的大小呢?k个校

验位可以有pow(2,k) (代表2的k次方) 个编码,其中有一个代表是否出错.剩下pow(2,k)-1个编码则用来表示到底是哪一位出错. 因为n

个数据位和k个校验位都可能出错,所以k满足pow(2,k)-1 = n+k。设 k个校验码为 p1,p2...pk,n个数据位为d0,d1...dn 产生的海明码

为 h1,h2...h(n+k) 。如有8个数据位,根据pow(2,k)-1 = n+k可以知

道k最小是4。那么得到的海明码是:

h12 h11 h10 h9 h8 h7 h6 h5 h4h3 h2 h1

d7 d6d5 d4 p4 d3 d2 d1 p3 d0 p2 p1

然后怎么知道pi校验哪个位呢.自己可以列个校验关系表

海明码下标校验位组

h1(p1) 1p1

h2(p2) 2p2

h3(d0) 1+2p1,p2

h4(p3) 4p3

h5(d1) 1+4p1,p2

h6(d2) 2+4p2,p3

h7(d3) 1+2+4p1,p2,p3

h8(p4) 8p4

h9(d4) 1+8p1,p4

h10(d5) 2+8p2,p4

h11(d6) 1+2+8p1,p2,p4

h12(d7) 4+8p3,p4

从表中可以看出

p1校验 p1,d0,d1,d3,d4,d6

p2校验 p2,d0,d1,d2,d3,d5,d6

p3校验 p3,d2,d3,d7

p4校验 p4,d4,d5,d6,d7

其实上表很有规律很容易记,要知道海明码hi由哪些校验组校验,

可以把i化成二进制数数中哪些位k是1,就有哪些pk校验

如h7 7=0111 所以由p1,p2,p3 h1111=1011 所以由p1,p2,p4 h3

3=0011 所以由p1,p2

那看看pi的值怎么确定,如果使用偶校验,则

p1=d0 xor d1 xor d3 xor d4 xord6

p2=d0 xor d1 xor d2 xor d3 xord5 xor d6

p3=d1 xor d2 xor d3 xor d7

p4=d4 xor d5 xor d6 xor d7

其中xor是异或运算,奇校验的话把偶校验的值取反即可.那怎么校

验错误呢.其实也很简单. 先做下面运算.

g1 = p1 xor d0 xor d1 xor d3 xord4 xor d6

g2 = p2 xor d0 xor d1 xor d2 xord3 xor d5 xor d6

g3 = p3 xor d1 xor d2 xor d3 xord7

g4 = p4 xor d4 xor d5 xor d6 xord7

循环冗余校验码

crc码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称(n,k)码. crc码广泛应用于数据通信领域和磁

介质存储系统中.crc理论非常复杂,一般书就给个例题,讲讲方法.现在

简单介绍下它的原理:

在k位信息码后接r位校验码,对于一个给定的(n,k)码。可以证明(数

学高手自己琢磨证明过程)存在一个最高次幂为n-k=r 的多项式g(x),根据g(x)可以生成k位信息的校验码,g(x)被称为生成多项式

用c(x)=c(k-1)c(k-2)...c0表示k个信息位,把c(x)左移r位,就是相

当于c(x)*pow(2,r) 给校验位空出r个位来了.给定一个生成多项式

g(x),可以求出一个校验位表达式r(x)。c(x)*pow(2,r) / g(x) = q(x) +

r(x)/g(x)用c(x)*pow(2,r)去除生成多项式g(x)商为q(x)余数是r(x)。所以有c(x)*pow(2,r) = q(x)*g(x)+ r(x)

c(x)*pow(2,r) +r(x)就是所求的n位crc码,由上式可以看出它是生成

多项式g(x)的倍式.所以如果用得到的n位crc码去除g(x)如果余数

是0,就证明数据正确.否则可以根据余数知道出错位.

在crc运算过程中,四则运算采用 mod 2运算(后面介绍),即不考虑进

位和借位.所以上式等价于c(x)*pow(2,r) + r(x) = q(x)*g(x)

继续前先说下基本概念吧.

1.多项式和二进制编码

x的最高次幂位对应二进制数的最高位.以下各位对应多项式的各幂次.有此幂次项为1,无为0. x的最高幂次为r时, 对应的二进制数有r+1位例如g(x)=pow(x,4) + pow(x,3) + x+ 1 对应二进制编码是11011生成多项式是发送方和接受方的一个约定,也是一个二进制数,在整个传输过程中,这个数不会变.

在发送方利用生成多项式对信息多项式做模2运算生成校验码.

在接受方利用生成多项式对收到的编码多项式做模2运算校验和纠错.

生成多项式应满足:

a.生成多项式的最高位和最低位必须为1

b.当信息任何一位发生错误时,被生成多项式模2运算后应该使余数不为0

c.不同位发生错误时,应该使余数不同.

d.对余数继续做模2除,应使余数循环.

生成多项式很复杂,不过不用我们生成。

下面给出一些常用的生成多项式表

二进制码(自己根据多项式和二进制编码的介绍转)

7 4 1011 或1101

7 3 11011 或10111

15 11 1011

31 26 100101

3.模2运算

a.加减法法则

+/- 0 = 0

+/- 1 = 1

+/- 0 = 1

+/- 1 = 0

注意:没有进位和借位

b.乘法法则

利用模2加求部分积之和,没有进位

c.除法法则

利用模2减求部分余数,没有借位,每商1位则部分余数减1位,余数最高位是1就商1,不是就商0,当部分余数的位数小于余数时,该余数就是最后余数.

例 11101011)1100000

1011

1110

1011

1010

1011

0010(每商1位则部分余数减1位,所以前两个0写出)

0000

010(当部分余数的位数小于余数时,该余数就是最后余数)

最后商是1110余数是010

好了说了那么多没用的理论.下面讲下crc的实际应用.例:给定的生成多项式g(x)=1011, 用(7,4)crc码对c(x)=1010进行编码.

由题目可以知道下列的信息:

c(x)=1010,n=7,k=4,r=3,g(x)=1011c(x)*pow(2,3)=1010000

c(x)*pow(2,3) / g(x) = 1001 + 11/1011所以r(x)=011.所以要求的编

码为1010011

例2: 上题中,数据传输后变为1000011,试用纠错机制纠错.1000011 / g(x) = 1011 + 110/1011

不能整除,所以出错了.因为余数是110.查1011出错位表可以知道是

第5位出错.对其求反即可.

冗余码的计算方法是,先将信息码后面补0,补0的个数是生成多项式最高次幂;将补零之后的信息码除以g(x),注意除法过程中所用

的减法是模2减法,即没有借位的减法,也就是异或运算。当被除

数逐位除完时,得到比除数少一位的余数。此余数即为冗余位,将其

添加在信息位后便构成crc码字。

例如,假设信息码字为11100011,生成多项式g(x)=x^5+x^4+x+1,计算crc码字。

g(x) =x^5+x^4+x+1,也就是110011,因为最高次是5,所以,在信

息码字后补5个0,变为1110001100000。用1110001100000除

以110011,余数为11010,即为所求的冗余位。

因此发送出去的crc码字为原始码字11100011末尾加上冗余位11010,即1110001111010。接收端收到码字后,采用同样的方法

验证,即将收到的码字除以g(x),发现余数是0,则认为码字在传输过程中没有出错。

相关文档
最新文档