奇偶码

奇偶码
奇偶码

校验码辅导讲座

二进制数据经过传送、存取等环节,会发生误码(1变成0或0变成1),这就有如何发现及纠正误码的问题。所有解决此类问题的方法就是在原始数据(数码位)基础上增加几位校验(冗余)位。

一、码距

一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit )数叫这两个码字的码距,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。

如图1所示的一个编码系统,用三个bit 来表示八个不同信息中。在这个系统中,两个码字之间不同的bit 数从1到3不等,但最小值为1,故这个系统的码距为1。如果任何码字中一位或多位被颠倒了,结果这个码字就不能与其它有效信息区分开。例如,如果传送信息001,而被误收为011,因011仍是表中的合法码字,接收机仍将认为011是正确的信息。

然而,如果用四个二进数字来编8个码字,那么在码字间的最小距离可以增加到2,如图2的表中所示。

图 1

图 2

注意,图8-2的8个码字相互间最少有两bit 的差异。因此,如果任何信息的一个数位被颠倒,就成为一个不用的码字,接收机能检查出来。例如信息是1001,误收为1011,接收机知道发生了一个差错,因为1011不是一个码字(表中没有)。然而,差错不能被纠正。假定只有一个数位是错的,正确码字可以是1001,1111,0011或1010。接收者不能确定原来到底是这4个码字中的那一个。也可看到, 在这个系统中,偶数个(2或4)差错也无法发现。

为了使一个系统能检查和纠正一个差错,码间最小距离必须至少是“3”。最小距离为3时,或能纠正一个错,或能检二个错,但不能同时纠一个错和检二个错。编码信息纠错和检错能力的进一步提高需要进一步增加码字间的最小距离。 图8-3的表概括了最小距离为1至7的码的纠错和检错能力。

图3

码距越大,纠错能力越强,但数据冗余也越大,即编码效率低了。所以,选择码距要取决于特定系统的参数。数字系统的设计者必须考虑信息发生差错的概率和该系统能容许的最小差错率等因素。要有专门的研究来解决这些问题。

二、奇偶校验

奇偶校验码是一种增加二进制传输系统最小距离的简单和广泛采用的方法。例如,单个的奇偶校验将使码的最小距离由一增加到二。

一个二进制码字,如果它的码元有奇数个1,就称为具有奇性。例如,码字“10110101”有五个1,因此,这个码字具有奇性。同样,偶性码字具有偶数个1。注意奇性检测等效于所有码元的模二加,并能够由所有码元的异或运算来确定。对于一个n位字,奇性由下式给出:奇性=a0⊕a1⊕a2⊕…⊕a n

奇偶校验可描述为:给每一个码字加一个校验位,用它来构成奇性或偶性校验。例如,在图8-2中,就是这样做的。可以看出,附加码元d2,是简单地用来使每个字成为偶性的。因此,若有一个码元是错的,就可以分辨得出,因为奇偶校验将成为奇性。奇偶校验编码通过增加一位校验位来使编码中1个个数为奇数(奇校验)或者为偶数(偶校验),从而使码距变为2。因为其利用的是编码中1的个数的奇偶性作为依据,所以不能发现偶数位错误。

再以数字0的七位ASCII码(0110000)为例,如果传送后右边第一位出错,0变成1。接收端还认为是一个合法的代码0110001(数字1的ASCII码)。若在最左边加一位奇校验位,编码变为10110000,如果传送后右边第一位出错,则变成10110001,1的个数变成偶数,就不是合法的奇校验码了。但若有两位(假设是第1、2位)出错就变成10110011,1的个数为5,还是奇数。接收端还认为是一个合法的代码(数字3的ASCII码)。所以奇偶校验不能发现。

奇偶校验位可由硬件电路(异或门)或软件产生:

偶校验位 a n =a0⊕a1⊕a2⊕…⊕a n-1,奇校验位 a n =NOT(a0⊕a1⊕a2⊕…⊕a n-1)。

在一个典型系统里,在传输以前,由奇偶发生器把奇偶校验位加到每个字中。原有信息中的数字在接收机中被检测,如果没有出现正确的奇、偶性,这个信息标定为错误的,这个系统将把错误的字抛掉或者请求重发。

在实际工作中还经常采用纵横都加校验奇偶校验位的编码系统--分组奇偶校验码。

现在考虑一个系统,它传输若干个长度为m位的信息。如果把这些信息都编成每组n个信息的分组,则在这些不同的信息间,也如对单个信息一样,能够作奇偶校验。图4中n个信息的一个分组排列成矩形式样,并以横向奇偶(HP)及纵向奇偶(VP)的形式编出奇偶校验位。

m位数字横向奇偶位

纵向奇偶位

图 4 用综横奇偶校验的分组奇偶校验码

研究图4可知:分组奇偶校验码不仅能检测许多形式的错误。并且在给定的行或列中产生孤立的错误时,还可对该错误进行纠正。

经常有综横奇偶校验的题目。一般解法应该是这样:先找一行或一列已知数据完整的,确定出该行(或列)是奇校验还是偶校验。并假设行与列都采用同一种校验(这个假设是否正确,在全部做完后可以得到验证)。然后找只有一个未知数的行或列,根据校验性质确定该未知数,这样不断做下去,就能求出所有未知数。

【例】2007年试题

由 6 个字符的 7 位 ASCII 编码排列,再加上水平垂直奇偶校验位构成下列矩阵(最后一列为水平奇偶校验位,最后一行为垂直奇偶校验位):

字符7 位 ASCII 码HP

30X1X200110

Y1100100X31

+X41010110

Y201X5X61111

D100X710X80

=0X9111X1011

VP00111X111X12

则 X1 X2 X3 X4 处的比特分别为 __(36)__ ;

X5 X6 X7 X8 处的比特分别为 ____ ;

X9 X10 XI1 X12处的比特分别为 __(38)__ ;Y1 和 Y2 处的字符分别为 __(39)__ 和

__(40)__ 。

[解]

从ASCII码左起第5列可知垂直为偶校验。则:

从第1列可知X4=0;从第3行可知水平也是偶校验。

从第2行可知X3=1;从第7列可知X8=0;从第8列可知X12=1;

从第7行可知X11=1;从第6列可知X10=0;从第6行可知X9=1;从第2列可知X1=1;

从第1行可知X2=1;从第3列可知X5=1;从第4行可知X6=0;

从第4列(或第5行)可知X7=0;整理一下:

(36) X1X2X3X4 = 1110

(37) X5X6X7X8 = 1000

(38) X9X10X11X12 = 1011

(39) 由字符Y1的ASCII码1001001=49H知道,Y1即是“I”(由“D”的ASCII码是1000100=44H推得)

(40) 由字符Y2的ASCII码0110111=37H知道,Y2即是“7”(由“3”的ASCII码是0110011=33H推得)

假如你能记住“0”的ASCII码是0110000=30H;“A”的ASCII码是1000001=41H,则解起来就更方便了。

三、海明校验

我们在前面指出过要能纠正信息字中的单个错误,所需的最小距离为3。实现这种纠正的方法之一是海明码。

海明码是一种多重(复式)奇偶检错系统。它将信息用逻辑形式编码,以便能够检错和纠错。用在海明码中的全部传输码字是由原来的信息和附加的奇偶校验位组成的。每一个这种奇偶位被编在传输码字的特定位置上。实现得合适时,这个系统对于错误的数位无论是原有信息位中的,还是附加校验位中的都能把它分离出来。

推导并使用长度为m位的码字的海明码,所需步骤如下:

1、确定最小的校验位数k,将它们记成D1、D

2、…、Dk,每个校验位符合不同的奇偶测试规定。

2、原有信息和k个校验位一起编成长为m+k位的新码字。选择k校验位(0或1)以满足必要的奇偶条件。

3、对所接收的信息作所需的k个奇偶检查。

4、如果所有的奇偶检查结果均为正确的,则认为信息无错误。

如果发现有一个或多个错了,则错误的位由这些检查的结果来唯一地确定。

校验位数的位数

推求海明码时的一项基本考虑是确定所需最少的校验位数k。考虑长度为m位的信息,若附加了k个校验位,则所发送的总长度为m+k。在接收器中要进行k个奇偶检查,每个检查结果或是真或是伪。这个奇偶检查的结果可以表示成一个k位的二进字,它可以确定最多2k种不同状态。这些状态中必有一个其所有奇偶测试试都是真的,它便是判定信息正确的条件。于是剩下的(2k-1)种状态,可以用来判定误码的位置。于是导出下一关系:

2k-1≥m+k

码字格式

从理论上讲,校验位可放在任何位置,但习惯上校验位被安排在1、2、4、8、…的位置上。

图5列出了m=4,k=3时,信息位和校验位的分布情况。

图5 海明码中校验位和信息位的定位

校验位的确定

k个校验位是通过对m+k位复合码字进行奇偶校验而确定的。

其中:P1位负责校验海明码的第1、3、5、7、…(P1、D1、D2、D4、…)位,(包括P1自己)P2负责校验海明码的第2、3、6、7、…(P2、D1、D3、D4、…)位,(包括P2自己)

P3负责校验海明码的第4、5、6、7、…(P3、D2、D3、D4、…)位,(包括P3自己)

对m=4,k=3,偶校验的例子,只要进行三次偶性测试。这些测试(以A、B、C表示)在图6所示各位的位置上进行。

图6 奇偶校验位置

因此可得到三个校验方程及确定校验位的三个公式:

A=B1⊕B3⊕B5⊕B7=0 得P1=D1⊕D2⊕D4

B=B2⊕B3⊕B6⊕B7=0 得P2=D1⊕D3⊕D4

C=B4⊕B5⊕B6⊕B7=0 得P3=D2⊕D3⊕D4

若四位信息码为1001,利用这三个公式可求得三个校验位P1、P2、P3值。和海明码,如图7则表示了信息码为1001时的海明码编码的全部情况。而图8中则列出了全部16种信息

(D1D2D3D4=0000~1111)的海明码。

图7 四位信息码的海明编码

图8 未编码信息的海明码

上面是发送方的处理

在接收方,也可根据这三个校验方程对接收到的信息进行同样的奇偶测试:

A=B1⊕B3⊕B5⊕B7=0;

B=B2⊕B3⊕B6⊕B7=0;

C=B4⊕B5⊕B5⊕B7=0。

若三个校验方程都成立,即方程式右边都等于0,则说明没有错。若不成立即方程式右边不等于0,说明有错。从三个方程式右边的值,可以判断那一位出错。例如,如果第3位数字反了,则C=0(此方程没有B3),A=B=1(这两个方程有B3)。可构成二进数CBA,以A为最低有效位,则错误位置就可简单地用二进数CBA=011指出。

同样,若三个方程式右边的值为001,说明第1位出错。若三个方程式右边的值为100,说明第4位出错。

海明码的码距应该是3,所以能纠正1位出错。而奇偶校验码的码距才是2,只能发现1位出错,但不能纠正(不知道那一位错)。无校验的码距是1,它出任何一位出错后还是合法代码,所以也就无法发现出错。

这是关于海明码的经典说法,即码距为3,可以发现2位,或者纠正1位错。应满足2k-1≥m+k。

但在清华的王爱英主编的《计算机组成与结构》(该书已成为国内的权威)中还提出了一种码距为4的海明码,可以发现2位,并且纠正1位错。应满足2(k-1)≥m+k。

由于王爱英书上对这两种概念没有很仔细解释(特别对码距为3的海明码),过渡很突然。有些书简单抄袭时没有仔细消化,所以出现一些概念错。对于一般码距为3的海明码,应该是“可以发现2位,或者纠正1位错”,而不是“可以发现2位,并且纠正1位错”。在试题中出现过类似的错误。

四、循环冗余校验码

在串行传送(磁盘、通讯)中,广泛采用循环冗余校验码(CRC)。CRC也是给信息码加上几位校验码,以增加整个编码系统的码距和查错纠错能力。

CRC的理论很复杂,一般书上只介绍已有生成多项式后计算校验码的方法。检错能力与生成多项式有关,只能根据书上的结论死记。

循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。

校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)*2R,这样C(x)的右边就会空出R位,这就是校验码的位置。通过C(x)*2R除以生成多项式G(x)得到的余数就是校验码。

几个基本概念

1、多项式与二进制数码

多项式和二进制数有直接对应关系:x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。可以看出:x的最高幂次为R,转换成对应的二进制数有R+1位。

多项式包括生成多项式G(x)和信息多项式C(x)。

如生成多项式为G(x)=x4+x3+x+1,可转换为二进制数码11011。

而发送信息位 1111,可转换为数据多项式为C(x)=x3+x2+x+1。

2、生成多项式

是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。

在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。

应满足以下条件:

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

b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0。

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

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

将这些要求反映为数学关系是比较复杂的。但可以从有关资料查到常用的对应于不同码制的生成多项式如图9所示:

图9 常用的生成多项式

3、模2除(按位除)

模2除做法与算术除法类似,但每一位除(减)的结果不影响其它位,即不向上一位借位。

所以实际上就是异或。然后再移位移位做下一位的模2减。步骤如下:

a、用除数对被除数最高几位做模2减,没有借位。

b、除数右移一位,若余数最高位为1,商为1,并对余数做模2减。若余数最高位为0,商

为0,除数继续右移一位。

c、一直做到余数的位数小于除数时,该余数就是最终余数。

【例】1111000除以1101:

1011———商

————

1111000-----被除数

1101————除数

————

010000

1101

————

01010

1101

————

111————余数

CRC码的生成步骤

1、将x的最高幂次为R的生成多项式G(x)转换成对应的R+1位二进制数。

2、将信息码左移R位,相当与对应的信息多项式C(x)*2R

3、用生成多项式(二进制数)对信息码做模2除,得到R位的余数。

4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。

【例】假设使用的生成多项式是G(x)=x3+x+1。4位的原始报文为1010,求编码后的报文。

解:

1、将生成多项式G(x)=x3+x+1转换成对应的二进制除数1011。

2、此题生成多项式有4位(R+1),要把原始报文C(x)左移3(R)位变成1010000

3、用生成多项式对应的二进制数对左移4位后的原始报文进行模2除:

1001-------商

------------------------

1010000

1011----------除数

------------

1000

1011

------------

011-------余数(校验位)

5、编码后的报文(CRC码):

1010000

+ 011

------------------

1010011

CRC的和纠错

在接收端收到了CRC码后用生成多项式为G(x)去做模2除,若得到余数为0,则码字无误。若如果有一位出错,则余数不为0,而且不同位出错,其余数也不同。可以证明,余数与出错位的对应关系只与码制及生成多项式有关,而与待测碼字(信息位)无关。图10给出了G(x)=1011,C(x)=1010的出错模式,改变C(x)(码字),只会改变表中码字内容,不改变余数与出错位的对应关系。

图10 (7,4)CRC码的出错模式(G(x)=1011)

如果循环码有一位出错,用G(x)作模2除将得到一个不为0的余数。如果对余数补0继续除下去,我们将发现一个有趣的结果;各次余数将按图10顺序循环。例如第一位出错,余数将为001,补0后再除(补0后若最高位为1,则用除数做模2减取余;若最高位为0,则其最低3位就是余数),得到第二次余数为010。以后继续补0作模2除,依次得到余数为100,0ll…,反复循环,这就是“循环码”名称的由来。这是一个有价值的特点。如果我们在求出余数不为0后,一边对余数补0继续做模2除,同时让被检测的校验码字循环左移。图10说明,当出现余数(101)时,出错位也移到A7位置。可通过异或门将它纠正后在下一次移位时送回A1。这样我们就不必像海明校验那样用译码电路对每一位提供纠正条件。当位数增多时,循环码校验能有效地降低硬件代价,这是它得以广泛应用的主要原因。

【例】对图10的CRC码(G(x)=1011,C(x)=1010),若接收端收到的码字为1010111,用G(x)=1011做模2除得到一个不为0的余数100,说明传输有错。将此余数继续补0用G(x)=1011作模2除,同时让码字循环左移1010111。做了4次后,得到余数为101,这时码字也循

环左移4位,变成1111010。说明出错位已移到最高位A7,将最高位1取反后变成0111010。再将它循环左移3位,补足7次,出错位回到A3位,就成为一个正确的码字1010011。

通信与网络中常用的CRC

在数据通信与网络中,通常k相当大,由一千甚至数千数据位构成一帧,而后采用CRC码产生r位的校验位。它只能检测出错误,而不能纠正错误。一般取r=16,标准的16位生成多项式有CRC-16=x16+x15+x2+1 和 CRC-CCITT=x16+x15+x2+1。

一般情况下,r位生成多项式产生的CRC码可检测出所有的双错、奇数位错和突发长度小于等于r的突发错以及(1-2-(r-1))的突发长度为r+1的突发错和(1-2-r)的突发长度大于r+1的突发错。例如,对上述r=16的情况,就能检测出所有突发长度小于等于16的突发错以及99.997%的突发长度为17的突发错和99.998%的突发长度大于17的突发错。所以CRC码的检错能力还是很强的。这里,突发错误是指几乎是连续发生的一串错,突发长度就是指从出错的第一位到出错的最后一位的长度(但是,中间并不一定每一位都错)。

【例1】某循环冗余码(CRC)的生成多项式 G(x)=x3+x2+1,用此生成多项式产生的冗余位,加在信息位后形成 CRC 码。若发送信息位 1111 和 1100 则它的 CRC 码分别为_A_和_B_。由于某种原因,使接收端收到了按某种规律可判断为出错的 CRC 码,例如码字_C_、_D_、和_E_。(2008年试题11)

供选择的答案

A:① lllll00② 1111101③ 1111110④ 1111111

B:① 1100100② 1100101③ 1100110④ 1100111

C~E:① 0000000② 0001100③ 0010111

⑤ 1000110⑥ 1001111⑦ 1010001⑧ 1011000

解:

A:G(x)=1101,C(x)=1111 C(x)*23÷G(x)=1111000÷1101=1011余111

得到的CRC码为1111111

B:G(x)=1101,C(x)=1100 C(x)*23÷G(x)=1100000÷1101=1001余101

得到的CRC码为1100101

C~E:

分别用G(x)=1101对①~⑧ 作模2除: ① 0000000÷1101 余000 ② 1111101÷1101 余

001

③ 0010111÷1101 余000 ④ 0011010÷1101 余000 ⑤ 1000110÷1101 余000

⑥ 1001111÷1101 余100 ⑦ 1010001÷1101 余000 ⑧ 1011000÷1101 余100

所以_C_、_D_和_E_的答案是②、⑥、⑧

【例2】计算机中常用的一种检错码是CRC,即 _A_ 码。在进行编码过程中要使用 _B_ 运算。假设使用的生成多项式是 G(X)=X4+X3+X+1,原始报文为11001010101,则编码后的报文为

_C_ 。CRC码 _D_ 的说法是正确的。

在无线电通信中常采用它规定码字长为7位.并且其中总有且仅有3个“1”。这种码的编

码效率为_E_。

供选择的答案:

A:① 水平垂直奇偶校验② 循环求和③ 循环冗余④正比率B:① 模2除法②定点二进制除法③二-十进制除法④循环移位法

C:① 1100101010111② 110010*********

③ 110010*********④ 110010*********

D:① 可纠正一位差错②可检测所

有偶数位错

③ 可检测所有小于校验位长度的突发错④可检测所有小于、等于校验

位长度的突发错

E:① 3/7② 4/7③ log23/log27 ④ (log235)/7解:从前面有关CRC的论述中可得出: A:③ 循环冗余 B:① 模2除法 C:G(x)=11011,C(x)=11001010101,C(x)*24÷G(x)=110010*********÷11011 余0011

得到的CRC码为② 110010*********

D:从前面有关通信与网络中常用的CRC的论述中可得出:④ 可检测所有小于、等于校验

位长度的突发错

E:定比码又叫定重码,是奇偶校验的推广。在定比码中,奇数或偶数的性质保持不变,然而附加一种限制,每个字中1的总数是固定的。随用途之不同,定比码要求的附加校验位可能多于一个,但较之单一的奇偶校验将增加更多的检错能力。

所谓7中取3定比码,就是整个码字长度为7位,其中1的位数固定为3。所有128个7位代码(0000000~1111111)中只有1的位数固定为3的才是其合法码字。可以用求组合的公式求出其合法码字数为:C73=7!/(3!*(7-3)!)=7*6*5/(1*2*3)=35

编码效率=合法码字所需位数/码字总位数=(log235)/7

奇偶校验

为了系统的可靠性,对于位数较少,电路较简单的应用,可以采用奇偶校验的方法。奇校验是通过增加一位校验位的逻辑取值,在源端将原数据代码中为1的位数形成奇数,然后在宿端使用该代码时,连同校验位一起检查为1的位数是否是奇数,做出进一步操作的决定。奇偶校验只能检查一位错误,且没有纠错的能力。偶校验道理与奇校验相同,只是将校验位连同原数据代码中为1的位数形成偶数。奇偶校验器多设计成九位二进制数,以适应一个字节,一个ASCII代码的应用要求。奇偶校验是一种荣誉编码校验,在存储器中是按存储单元为单位进行的,是依靠硬件实现的,因而适时性强,但这种校验方法只能发现奇数个错,如果数据发生偶数位个错,由于不影响码子的奇偶性质,因而不能发现。 奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“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位中存储的数据相加,计算结果是否与校验位相一致。从而一定程度上能检测出内存错误,奇偶校验只能检测出错误而无法对其进行修正,同时虽然双位同时发生错误的概率相当低,但奇偶校验却无法检测出双位错误。

常用的检错码 - 奇偶校验码

3.2差错控制 3.2.2常用的检错码- 奇偶校验码 奇偶校验码是一种简单的检错码,奇偶校验码分为奇校验码和偶校验码,两者原理相同。它通过增加冗余位来使得码字中“1”的个数保持奇数或偶数。 ?无论是奇校验码还是偶校验码,其监督位只有一位; ?假设信息为为I1, I2, …, I n,对于偶校验码,校验位R可以表示为: R =I 1 ⊕I 2 ⊕Λ⊕I n ?假设信息为为I1, I2, …, I n,对于奇校验码,校验位R可以表示为: R =I 1 ⊕I 2 ⊕Λ⊕I n ⊕1 ?无论是奇校验码还是偶校验码,都只能检测出奇数个错码,而 不能检测偶数个错码。 4 4

讨论: 从检错能力、编码效率和代价等方面来评价垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验 3.2 差错控制 3.2.2 常用的检错码 - 奇偶校验码 奇偶校验在实际使用时又可分为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验等几种。 5

3.2.2常用的检错码–定比码 所谓定比码,即每个码字中“1”的个数与“0”的个数之比保持恒定, 故又名等比码或恒比码。 ?当码字长一定,每个码字所含“1”的数目都相同,“0”的数目也 都相同。 ?由于若n位码字中“1”的个数恒定为m,还可称为“n中取m”码 定比码(n中取m)的编码效率为: log C m R = ?2 n n 定比码能检测出全部奇数位错以及部分偶数位错。实际上,除了码 字中“1”变成“0”和“0”变成“1”成对出现的差错外,所有其它差 错都能被检测出来 6 4

代码“1011011”对应的多项式为x 6 + x 4 + x 3 +1 多项式“x 5 + x 4 + x 2 + x”所对应的代码为“110110” 3.2.2 常用的检错码 – 循环冗余检验 循环冗余码(Cyclic Redundancy Code ,简称CRC )是无线通信中用得最广泛的检错码,又被称为多项式码。 二进制序列多项式:任何一个由m 个二进制位组成的代码序列都可以和一个只含有0和1两个系数的m-1阶多项式建立一一对应的关系。 CRC 有关的多项式: ? 信息位多项式、冗余位多项式、码字多项式、和生成多项式 信息位1010001:K (x ) = x 6 + x 4 + 1 冗余位1101:R (x ) = x 3 + x 2 + 1; 码字10100011101: T (x ) = x 10 + x 8 + x 4 + x 3 + x 2 + 1 7

低复杂度准循环低密度奇偶校验码

低复杂度准循环低密度奇偶校验码 摘要 本文主要对低复杂度准循环低密度奇偶校验码结构的研究。结果表明,这种编码坦纳图代表与周长不能大于12,代码周长的充分条件有一个6,8,10或12的周长推导。这些结果表明这样周长群的LDPC码的相对容易获得,因此,额外的参数,如最小距离或多余的数量检查总结应予以考虑。为此,为必要条件规范调查,以达到其最大可能的最小汉明距离建议。 正文: 近年来, 已有多种LDPC 码构造方案被陆续提出, 按照构造方法的不同LDPC 码可以分为两大类, 随机和伪随机码. 对于第一类随机码和伪随机码.尽管分组长度足够长的随机码具有接近Shannon 限的性能, 但不具有线性的编码复杂度. 针对随机码编码复杂度高的问题, 学术界提出了另一类LDPC 码. 这类LDPC 码通常具有循环或者准循环的结构, 从而可以利用线性反馈移位寄存器实现线性编码, 其在串行编码时的复杂度正比于校验比特的个数, 而并行编码时正比于码长, 根据构造时所采用代数方法的不同, 这类LDPC 码可细分为 3 个子类. 第 1 类是基于有限几何的LDPC 码, 该算法将有限几何中的点和线映射为LDPC 码的变量节点和校验节点. 第 2 类是基于组合设计,特别是基于平衡不完全组合设计的LDPC 码这两类码均为循环或者准循环LDPC 码, 并且不含长度为 4 的环路, 但是其分组长度受限. 第 3 类是基于循环置换矩阵的准循环LDPC 码, 虽然这类码的分组长度的范围远远大于基于有限几何的LDPC 码, 但是如果随机选取每个循环置换矩阵, 将不能避免长度为 4 的环路的出现. 对于给定的期望最小环长g, 我们可以用列重为J, 行重为L 的准循环LDPC 码的随机构造法. 该算法从所有jl p个矩阵中搜索一个期望矩阵(p 代表每个循环置换矩阵的阶数). 准循环LDPC 码的随机构造法中,待搜索的矩阵个数是乘积JL 的指数函数, 对于大的行重J 和列重L, 构造复杂度高. 为了降低构造复杂度, 本文首先给出了长度为2i 环路的几何描述, 并且基于该几何描述提出了一种改进的最小

奇偶校验通信原理课程设计

西南科技大学通信原理设计报告 课程名称:通信原理课程设计 设计名称:奇偶校验编码仿真 姓名:王雷 学号: 班级:通信1004 指导教师:秦明伟 起止日期:2013年7月5日星期五 西南科技大学信息工程学院制

方向设计任务书 学生班级:通信1004 学生姓名:王雷学号:20105615 设计名称:奇偶校验编码仿真 起止日期:2013年7月5日星期五指导教师:秦明伟 方向设计学生日志

奇偶校验编码仿真 一、摘要(150-250字) 奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。 二、设计目的和意义 认识matlab软件,学习掌握matlab的基本操作方法,熟悉M文件和simulink的具体实现方法,了解数据奇偶校验的原理和在matlab中的基本仿真,通过对简单的通信实验设计,提高了动手能力和对matlab操作,巩固了课程知识。 三、设计原理 在数据传输前附加一位奇校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为奇数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。例如,需要传输"11001110",数据中含5个"1",所以其奇校验位为"0",同时把"110011100"传输给接收方,接收方收到数据后再一次计算奇偶性,"110011100"中仍然含有5个"1",所以接收方计算出的奇校验位还是"0",与发送方一致,表示在此次传输过程中未发生错误。奇偶校验就是接收方用来验证发送方在传输过程中所传数据是否由于某些原因造成破坏。 奇偶校验原理是基于异或的逻辑功能。奇偶校验的编码方法是在原信号码组后面添加以为监督码元,奇偶校验分为奇校验和偶校验,奇校验是原信息码元加上监督码元后,使整个组成的数码组中,1的个数为奇数个。偶校验的工作原理则正好与奇校验相反。 对于n位二进码a1a2a3a4……a n奇校验有如下表示: a1⊕a2⊕a3⊕a4……⊕a n⊕C=1 偶校验的表达式为: a1⊕a2⊕a3⊕a4……⊕a n⊕C =1 其中,C为监督码元,在本设计中n为8,可以推出C的表达式为: C =a1⊕a2⊕a3⊕a4……⊕a8 在发送端让其监督码和信息码一起发送,在信息接收端,计算校验因子的表达式为: 、 S=a1⊕a2⊕a3⊕a4……⊕a n⊕C

低密度奇偶检验码

低密度奇偶检验码(LDPC code) LDPC码是麻省理工学院Robert Gallager于1962年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎适用于所有的信道,因此成为编码界近年来的研究热点。它的性能逼近香农限,且描述和实现简单,易于进行理论分析和研究,译码简单且可实行并行操作,适合硬件实现。 任何一个(n,k)分组码,如果其信息元与监督元之间的关系是线性的,即能用一个线性方程来描述的,就称为线性分组码。 低密度奇偶校验码图(LDPC码)本质上是一种线形分组码,它通过一个生成矩阵G将信息序列映射成发送序列,也就是码字序列。对于生成矩阵G,完全等效地存在一个奇偶校验矩阵H,所有的码字序列C构成了H的零空间 (null space),即HCT=0。 LDPC仿真系统图 DLPC 码的奇偶校验矩阵H是一个稀疏矩阵,相对于行与列的长度,校验矩阵每行、列中非零元素的数目(我们习惯称作行重、列重)非常小,这也是LDPC码之所以称为低密度码的原因。由于校验矩阵H的稀疏性以及构造时所使用的不同规则,使得不同LDPC码的编码二分图(Taner图)具有不同的闭合环路分布。而二分图中闭合环路是影响LDPC码性能的重要因素,它使得LDPC码在类似可信度传播(Belief ProPagation)算法的一类迭代译码算法下,表现出完全不同的译码性能。

当H的行重和列重保持不变或尽可能的保持均匀时,我们称这样的LDPC码为正则LDPC码,反之如果列、行重变化差异较大时,称为非正则的LDPc码。研究结果表明正确设计的非正则LDPC码的性能要优于正则LDPC。根据校验矩阵H中的元素是属于GF(2)还是GF(q)(q=2p),我们还可以将LDPC码分为二元域或多元域的LDPC码。研究表明多元域LDPC码的性能要比二元域的好。 LDPC码 - 发展现状 LDPC码 LDPC ( Low-density Parity-check,低密度奇偶校验)码是由 Gallager 在1963 年提出的一类具有稀疏校验矩阵的线性分组码 (linear block codes),然而在接下来的 30 年来由于计算能力的不足,它一直被人们忽视。1993年,D MacKay、M Neal 等人对它重新进行了研究,发现 LDPC 码具有逼近香农限的优异性能。并且具有译码复杂度低、可并行译码以及译码错误的可检测性等特点,从而成为了信道编码理论新的研究热点。 Mckay ,Luby 提出的非正则 LDPC 码将 LDPC 码的概念推广。非正则LDPC码的性能不仅优于正则 LDPC 码,甚至还优于 Turbo 码的性能,是目前己知的最接近香农限的码。 Richardson 和 Urbank 也为 LDPC 码的发展做出了巨大的贡献。首先,他们提出了一种新的编码算法,在很大程度上减轻了随机构造的 LDPC 码在编码上的巨大运算量需求和存储量需求。其次,他们发明了密度演进理论,能够有效的分析出一大类 LDPC 译码算法的译码门限。仿真结果表明,这是一个紧致的译码门限。最后,密度演进理论还可以用于指导非正则 LDPC码的设计,以获得尽可能优秀的性能。

奇偶校验

奇偶校验 在数据传输前在数据位后附加一位奇偶校验位,用来表示传输的数据中"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.垂直奇偶校验码:以一个字符作为校验单位纵向生成校验码位;

例如使用ASCII编码的一个字符由8bit组成,其中低7bit为信息位,最高1bit作为校验位,假设某一字符的标准ASCII编码为0011000,根据奇偶校验规则,如果采用奇校验,则校验位应为1(这样字符中1的个数才能为奇数),即00110001;如果采用偶校验,校验位应为0,即00110000垂直奇偶校验码的特点:校验处理过程简单,但如果字符中发生偶数位的错误就检测不出来,也检测不到错误发生在哪一位。 2.水平奇偶校验码:以多个字符作为校验单位横向生成校验码位; 生成方法:以若干个字符作为一个校验单位。每个字符各自生成一个垂直奇偶校验码,再为每个字符的相同位及其垂直奇偶校验码生成水平奇偶校验码,这些校验码形成一个校验字符,附加在被校验字符的后面一并传输到接收方,该校验字符即称为方阵校验码。 校验特点:一次能校验更多的数据,效率较高,系统实现也比较简单,检测可靠性有所提高,但仍然不能检测出所有的错误。 3.水平垂直冗余校验码(方阵校验码):以多个字符作为校验单位水平垂直两个方向共同生成校验字符。

奇偶校验_校验和实验

实验5-1纠错与检错 1.实验内容 读程序,在所有红色的“#”后面添加解释,说明程序的作用 2.实验题目 (1)奇偶校验码 在原始模式上增加一个附加比特位,即奇偶校验位,使最后整个模式中1的个数为奇数(奇校验)或偶数(偶校验)。 本程序用到列表、字符串合并、取模等概念。 code=input("Please input a 7-bit-binary code:") a=0 # for 循环作用是什么 for i in range(0,6,1): if code[i]=='1': a=a+1 print("After odd parity checking the code is:") if a%2==0: print(code+'1') # 这句做了什么 else: print(code) # 这句做了什么 print("After even parity checking the code is:") # 下面 if .. else …作用是什么 if a%2==0: print(code) else: print(code+'1') (2) 垂直水平奇偶校验 如下图所示,14个字符纵向排列形成一个数据块,每个字符占据一列,低位比特在上,高位比特在下,用b8(第8位)作为垂直奇偶校验位,各字符的同一比特位形成一行,每一行的最右边一位作为水平奇偶校验位,这里在垂直和水平方向均采用偶校验。

# 下面的函数做了什么 def oddeven(l): a=0 for i in range(0,len(l),1): if l[i]=='1': a=a+1 if a%2==0: return '0' else: return '1' block=[['0']*15,['0']*15,['0']*15,['0']*15,['0']*15,['0']*15,['0']*15,[' 0']*15] for i in range(0,14,1): vcode=input("Please input a 7-bit-binary code:") for j in range(0,7,1): block[j][i]=vcode[j] block[7][i]=oddeven(vcode) # 这句做了什么 hcode=['0']*14 for j in range(0,8,1): for i in range(0,14,1): hcode[i]=block[j][i] block[j][14]=oddeven(hcode) # 这句做了什么 print(block) (3)循环冗余校验 任何一个二进制位串都可以用一个多项式来表示,多项式的系数只有0和1,n 位长度的码C 可以用下述n -1次多项式表示: ()n 1n 210C x C x C x C x C --=++++L n-1n-21 例如位串1010001可以表示为x 6+x 4 +1。 数据后面附加上冗余码的操作可以用多项式的算术运算来表示。例如,一个k 位的信息码后面附加上r 位的冗余码,组成长度为n=k+r 的码,它对应一个(n -1)次的多项式C(x),信息码对应一个(k -1)次的多项式K(x),冗余码对应一个(r -1)次的多项式R(x),C(x)与K(x)和R(x)之间的关系满足: ()()()r C x x K x R x =+ 由信息码生成冗余码的过程,即由已知的K(x)求R(x)的过程,也是用多项式的算术运 算来实现。其方法是:通过用一个特定的r 次多项式G(x)去除x r K(x),即: () () r x K x G x 得到的r 位余数作为冗余码R(x)。其中G(x)称为生成多项式(generator polynomial ),是由通信的双方预先约定的。除法中使用模2减法(无借位减,相当于作异或运算)。要进行的多项式除法,只要用其相对应的系数进行除法运算即可。 本例中,10位二进制信息位串对应K(x)=x 9+x 8+ x 6+x 4+ x 3 + x+1;CRC_4对应的G(x)=

巧用单片机的奇偶校验位

巧用8051单片机的奇偶校验位 () 南京东南大学电子工程系 210096 孙洪军 () 南京理工大学化工学院 210094孙秀云周学铁 摘根连线即可达到 3要: 一种微机间的串行通信方法, 只需用 R XD、T XD 和GN D 115200bp s 的传输速率。 中断关键词: 串行通信语言 8250 IN S C 送出去。IN S 8250接收由 R XD 来的数据后, 经过串?在工程设计中, 经常会遇到近距离的微机间数据交换问题, 通常的解决方法是利用微机的异步串行通并信适配器, 通过把2台微机的串行通信口相连来实现转换后, 放在中供读取。RBR C PU 表1 IN S 8250中可访问的寄存器据交换。在程序的设计上往往利用或数 B IO S DO S 的功 1 2 能调用来实现对适配器的初始化、状态检测、数COM COM 方向寄存器名称口地址口地址据的发 3828输出发送器保持寄存器() F H F H T HR 送和接收等。这种方法实现的串行通信程序, 设计起来 3828输入接收器缓冲寄存器() F H F H RBR 相对简单, 但是在连线上要复杂一些, 除了通信线外, 3828输出除数寄存器( 低位) () F H F H D R 还需要握手信号线, 通信速率最高只可达到9600。 bp s3929输出除数寄存器( 高位) () F H F H D R 而在实践中, 人们往往更希望采用3线通信形式, 只采 3929输出中断允许寄存器( ) F H F H IER 用、、根线, 通信速率也希望能达到更 3R XDT XDGN D 32输入中断识别寄存器( ) FA H FA H IIR 高水平。通过对微机的异步串行通信适配器的研究发 32输出线路控制寄存器() 现, 完全可以避开对或的功能调用, 通过 FBH FBH L CR B IO S DO S 调制解调器控制寄存器直接访问其寄存器来实现对适配器的初始化、状态检 3FCH 2FCH 输出 ()M CR 测、数据的发送和接收等功能, 可以达到115200的 bp s 32输入线路状态寄存器()FD H FD H L SR 传输速率, 再通过对中断控制器8259的编程, 采用中 A 调制解调器状态寄存器 3F EH 2F EH 输入断方式接收数据, 可以可靠地实现高速3线串行通信。 ()M SR 1 异步串行通信适配器的工作原理 微机上通常有2个异步串行通信适配器, 分别为D R 中存放的数据用来决定数据传输时的波特主适配器和辅适配器, 适配器和外部的通信连接通过率, 其计算公

奇偶码

校验码辅导讲座 二进制数据经过传送、存取等环节,会发生误码(1变成0或0变成1),这就有如何发现及纠正误码的问题。所有解决此类问题的方法就是在原始数据(数码位)基础上增加几位校验(冗余)位。 一、码距 一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit )数叫这两个码字的码距,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。 如图1所示的一个编码系统,用三个bit 来表示八个不同信息中。在这个系统中,两个码字之间不同的bit 数从1到3不等,但最小值为1,故这个系统的码距为1。如果任何码字中一位或多位被颠倒了,结果这个码字就不能与其它有效信息区分开。例如,如果传送信息001,而被误收为011,因011仍是表中的合法码字,接收机仍将认为011是正确的信息。 然而,如果用四个二进数字来编8个码字,那么在码字间的最小距离可以增加到2,如图2的表中所示。 图 1 图 2 注意,图8-2的8个码字相互间最少有两bit 的差异。因此,如果任何信息的一个数位被颠倒,就成为一个不用的码字,接收机能检查出来。例如信息是1001,误收为1011,接收机知道发生了一个差错,因为1011不是一个码字(表中没有)。然而,差错不能被纠正。假定只有一个数位是错的,正确码字可以是1001,1111,0011或1010。接收者不能确定原来到底是这4个码字中的那一个。也可看到, 在这个系统中,偶数个(2或4)差错也无法发现。 为了使一个系统能检查和纠正一个差错,码间最小距离必须至少是“3”。最小距离为3时,或能纠正一个错,或能检二个错,但不能同时纠一个错和检二个错。编码信息纠错和检错能力的进一步提高需要进一步增加码字间的最小距离。 图8-3的表概括了最小距离为1至7的码的纠错和检错能力。 图3 码距越大,纠错能力越强,但数据冗余也越大,即编码效率低了。所以,选择码距要取决于特定系统的参数。数字系统的设计者必须考虑信息发生差错的概率和该系统能容许的最小差错率等因素。要有专门的研究来解决这些问题。 二、奇偶校验

对奇偶校验码的理解

对奇偶校验码的理解 一个二进制数位串C7C6C5C4C3C2C1若将各位进行模2加,其和为1,则此二进制数位串是奇性串;若将各位进行模2加,其和为0,则此二进制数位串是偶性串;此时的奇偶性表示了这个二进制位串自身固有的性质:奇性,说明此二进制数位串共有奇数个1,例如1101101有5个1,呈奇性;偶性,说明此二进制数位串共有偶数个1或者没1例如1101100有4个1,例如0000000没有1,呈偶性。 二进制数位串在传输中由于热噪声和冲击噪声可能产生差错。怎么控制差错呢?最常用的差错控制方法是差错控制编码。数据信息位在向信道发送之前,先按某种关系附加上一定的冗余位,构成一个码字后再发送,这个过程称为差错控制编码过程。接收端收到该码字后,检查信息位和附加的冗余位之间的关系,以检查传输过程中是否有差错发生,这个过程称为检查过程。根据这个原理,发送方采取给二进制位串C7C6C5C4C3C2C1加一位冗余位C0以供校验。C0产生方法有两种如下: C0=C7○+C6○+C5○+C4○+C3○+C2○+C1(第一种方法) C0=C7○+C6○+C5○+C4○+C3○+C2○+C1○+1 (第二种方法) ○+是模2加符号。用第一种方法产生的C0称偶校验码,用第二种方法产生的C0称奇校验码。通过C0的产生过程,可以发现C0与二进制数位串C7C6C5C4C3C2C1的关系: 在第一种方法之下,

当二进制数位串C7C6C5C4C3C2C1呈奇性时,C0亦呈奇性——即C0取1值。这时把C0编入二进制数位串C7C6C5C4C3C2C1后的新二进制数位串C7C6C5C4C3C2C1C0按各位模2加就是C7○+C6○+C5○+ C4○+C3○+C2○+C1○+C0=0 当二进制数位串C7C6C5C4C3C2C1呈偶性时,C0亦呈偶性——即C0取0值。这时把C0编入二进制数位串C7C6C5C4C3C2C1后的新二进制数位串C7C6C5C4C3C2C1C0按各位模2加就是C7○+C6○+C5○+ C4○+C3○+C2○+C1○+C0=0 在第二种方法之下, 当二进制位数串C7C6C5C4C3C2C1呈奇性时,C0反呈偶性——即C0取0值。这时把C0编入二进制位数串C7C6C5C4C3C2C1后的新二进制数位串C7C6C5C4C3C2C1C0按各位模2加就是C7○+C6○+C5○+ C4○+C3○+C2○+C1○+C0=1 当二进制数位串C7C6C5C4C3C2C1呈偶性时,C0反呈奇性——即C0取1值。这时把C0编入二进制数位串C7C6C5C4C3C2C1后的新二进制位串C7C6C5C4C3C2C1C0按各位模2加就是C7○+C6○+C5○+C4○+ C3○+C2○+C1○+C0=1 接收端收到二进制位串C7C6C5C4C3C2C1C0后,检查信息位和附加的冗余位之间的关系,以检查传输过程中是否有差错发生。 按第一种方法检查信息位C7C6C5C4C3C2C1和附加的冗余位C0之间的关系看C7○+C6○+C5○+C4○+C3○+C2○+C1○+C0是否等于0,不等于0说明出了错。这种检测方法叫偶校验。

奇偶校验

概述 奇偶校验法常用于识别数据是否发生传输错误,并且可以启动校正措施,或者舍弃传输发生错误的数据,要求重新传输有错误的数据块。 编辑本段奇偶校验法 奇偶校验法是一种很简朴并且广泛使用的校验方法。 这种方法是在每一字节中加上一个奇偶校验位,并被传输,即每个字节发送九位数据。 数据传输以前通常会确定是奇校验还是偶校验,以保证发送端和接收端采用相同的校验方法进行数据校验。 假如校验位不符,则认为传输出错。 奇校验是在每个字节后增加一个附加位,使得“1”的总数为奇数。 奇校验时,校验位按如下规则设定:假如每字节的数据位中“1”的个数为奇数,则校验位为“0”若为偶数,则校验位为“1”。 奇校验通常用于同步传输。 而偶校验是在每个字节后增加一个附加位,使得“1”的总数为偶数。 偶校验时,校验位按如下规则设定:假如每字节的数据位中“1”的个数为奇数,则校验位为“1”;若为偶数,则校验位为“0”。 偶校验常用于异步传输或低速传输。 校验的原理是:假如采用奇校验,发送端发送的一个字符编码(含校验位)中,“1”的个数一定为奇数个,在接收端对接收字符二进制位中的“1”的个数进行统计,若统计出“1”的个数为偶数个,则意味着传输过程中有1位(或奇数位)发生差错。 事实上,在传输中偶尔—位出错的机会最多,故奇偶校验法常常采用。 然而,奇偶校验法并不是一种安全的检错方法,其识别错误的能力较低。 假如发生错误的位数为奇数,那么错误可以被识别,而当发生错误的位数为偶数时,错误就无法被识别了,这是因为错误互相抵消了。 数位的错误,以及大多数涉及偶数个位的错误都有可能检测不出来。 它的缺点在于:当某一数据分段中的一个或者多位被破坏时,并且在下一个数据分段中具有相反值的对应位也被破坏,那么这些列的和将不变,因此接收方不可能检测到错误。 常用的奇偶校验法为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验。 编辑本段垂直奇偶校验 垂直奇偶校验是在垂直方向上以列的形式附加上校验位。 假设数据格式及其发送顺序如图1所示,则垂直奇偶校验的编码规则如图2所示。 图1 垂直奇偶校验时 图2 垂直奇偶校验法举例 数据格式及其发送顺序 式中,m为码字的定长位数,n为码字的个数。

什么是奇偶校验

什么是奇偶校验 对数据传输正确性的一种校验方法。在数据传输前附加一位奇校验位,用来表示传输的数据中"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”的个数为偶数。

奇偶校验是一种校验代码传输正确性的方法

奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性 单向奇偶校验 概述 单向奇偶校验(Row Parity)由于一次只采用单个校验位,因此又称为单个位奇偶校验(Single Bit Parity)。发送器在数据祯每个字符的信号 位后添一个奇偶校验位,接收器对该奇偶校验位进行检查。典型的例子是面向ASCII码的数据信号祯的传输,由于ASCII码是七位码,因此用第八个位码作为奇偶校验位。 单向奇偶校验又分为奇校验(Odd Parity)和偶校验(Even Parity),发送器通过校验位对所传输信号值的校验方法如下:奇校验保证所传输每个字符的8个位中1的总数为奇数;偶校验则保证每个字符的8个位中1的总数为偶数。 显然,如果被传输字符的7个信号位中同时有奇数个(例如1、3、5、 7)位出现错误,均可以被检测出来;但如果同时有偶数个(例如2、4、6) 位出现错误,单向奇偶校验是检查不出来的。 一般在同步传输方式中常采用奇校验,而在异步传输方式中常采用偶校验。 校验方法 奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数 1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个。 偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数 1000110(1)你就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了。 使用 由于它很简单,所以奇偶校验位用于许多计算机硬件中遇到麻烦时能够重新操作或者通过简单的错误检测就能起到很大作用的场合。例如SCSI总线使用奇偶校验位检测传输错误,许多微处理器的指令高速缓存中也包括奇偶校验位保

奇偶校验码

奇偶校验码 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)。 水平奇偶校验不但可以检测出各段同一位上的奇数位错,而且还能检测出突发长度

奇偶校验码,海明码,循环冗余CRC(精)

1、奇偶校验码 二进制数据经过传送、存取等环节,会发生误码(1变成0或0变成1),这就有如何发现及纠正误码的问题。所有解决此类问题的方法就是在原始数据(数码位)基础上增加几位校验(冗余)位。 一、码距 一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit)数叫这两个码字的码距,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。 如图1所示的一个编码系统,用三个bit来表示八个不同信息中。在这个系统中,两个码字之间不同的bit数从1到3不等,但最小值为1,故这个系统的码距为1。如果任何码字中一位或多位被颠倒了,结果这个码字就不能与其它有效信息区分开。例如,如果传送信息001,而被误收为011,因011仍是表中的合法码字,接收机仍将认为011是正确的信息。 然而,如果用四个二进数字来编8个码字,那么在码字间的最小距离可以增加到2,如图 图 1

图 2 注意,图8-2的8个码字相互间最少有两bit因此,如果任何信息的一个数位被颠倒,码字,接收机能检查出来。例如信息是1001,误收为1011接收机知道发生了一个差错,因为1011不是一个码字(表 中没有)。然而,差错不能被纠正。

的,正确码字可以是1001,1111,0011或1010能确定原来到底是这4个码字中的那一个。也可看到,这个系统中,偶数个(2或4)差错也无法发现。 为了使一个系统能检查和纠正一个差错,必须至少是“3”。最小距离为3时,或能纠正一个错,或 能检二个错,但不能同时纠一个错和检二个错。错和检错能力的进一步提高需要进一步增加码字间的最小 距离。图8-3的表概括了最小距离为1至7的码的纠错和 检错能力。图3 码距越大,纠错能力越强,但数据冗余也越大,即编码效率低了。所以,选择码距要取决于特定系统的参数。数字系统的设计者必须考虑信息发生差错的概率和该系统能容许的最小差错率等因素。要有专门的研究来解决这些问题。 二、奇偶校验 奇偶校验码是一种增加二进制传输系统最小距离的简单和广泛采用的方法。例如,单个的奇偶校验将使码的最小距离由一增加到二。 一个二进制码字,如果它的码元有奇数个1,就称为具有奇性。例如,码字“10110101”有五个1,因此,这个码字具有奇性。同样,偶性码字具有偶数个1。注意奇性检测等效于所有码元的模二加,并能够由所有码元的异或运算来确定。对于一个n位字,奇性由下式给出: 奇性=a0⊕a1⊕a2⊕…⊕an 奇偶校验可描述为:给每一个码字加一个校验位,用它来构成奇性或偶性校验。例如,在图8-2中,就是这样做的。可以看出,附加码元d2,是简单地用来使每个字成为偶性的。因此,若有一个码元是错的,就可以分辨得出,因为奇偶校验将成为奇性。奇偶校验编码通过增加一位校验位来使编码中1个个数为奇数(奇校验)或者为偶数(偶校验),从而使码距变为2。因为其利用的是编码中1的个数的奇偶性作为依据,所以不能发现偶数位错误。 再以数字0的七位ASCII码(0110000)为例,如果传送后右边第一位出错,0变成1。接收端还认为是一个合法的代码0110001(数字1的ASCII码)。若在最左边加一位奇校验位,编码变为10110000,如果传送后右边第一位出错,则变成10110001,1的个数变成偶数,就不是合法的奇校验码了。但若有两位(假设是第1、2位)出错就变成10110011,1的个数为5,还是奇数。接收端还认为是一个合法的代码(数字3的ASCII码)。所以奇偶校验不能发现。 奇偶校验位可由硬件电路(异或门)或软件产生: 偶校验位 an =a0⊕a1⊕a2⊕…⊕an-1,奇校验位 an =NOT(a0⊕a1⊕a2⊕…⊕an-1)。在一个典型系统里,在传输以前,由奇偶发生器把奇偶校验位加到每个字

用VHDL设计奇偶校验器

本例为对八位输入数据和其奇偶校验位进行校验,输出正确的奇偶校验位。 IN_READY输入表示输入已准备好;OUT_REQ输入表示输出请求;CLK输入表示输入时钟; 当OUT_READY输出表示输出准备好,可以为下级电路使用; 源代码如下: package types is subtype short is integer range0 to255; end types; use work.types.all; entity parity is port( CLK:in bit; IN0,IN1,IN2,IN3,IN4,IN5,IN6,IN7:in bit; EVEN_IN,ODD_IN:in bit; IN_READY:in bit; OUT_REQ:in bit; OUT_READY:out bit; EVEN_OUT:out bit; ODD_OUT:out bit; ); end parity; architecture algorithm of parity is begin process variable cond:boolean:=true; variable count:short; begin wait until(CLK'event and CLK='1' and IN_READY='1');

if(EVEN_IN=ODD_IN) then --奇偶校验预判断 cond:=false; end if; count:=0; if IN0='1' then count:=count+1; end if; if IN1='1' then count:=count+1; end if; if IN2='1' then count:=count+1; end if; if IN3='1' then count:=count+1; end if; if IN4='1' then count:=count+1; end if; if IN5='1' then count:=count+1; end if; if IN6='1' then count:=count+1; end if; if IN7='1' then count:=count+1; end if; --判断输入数据中1的个数的奇偶

奇偶校验码

3.5.1 奇偶校验码 1.奇偶校验概念 奇偶校验码是一种最简单而行之有效的数据校验方法。 奇偶校验码的实现方法是在每个被传送码的左边或右边加上1位奇偶校验位“0”或“1”,若采用奇校验位,只需把每个编码中1的个数凑成奇数;若采用偶校验位,只要把每个编码中1的个数凑成偶数。表3.4示出了8421码的奇偶校验码。又如ASCII码是用7位二进制表示的编码,其校验位一般加在最高位。已知大写英文字母A的ASCII码是“1000001”,若采用奇校验,最高位加“1”,该码就变成8位代码“11000001”,此时该码字中“1”的个数为奇数3;若采用 2。 表3-4 8421码的奇偶校验码 码距为1的二进制码加上奇偶校验位就变成码距为2的奇偶校验码,这种编码能发现1个或奇数个错误,但因码距较小,不能实现错误定位。因此对奇偶校验码可做出如下的评价:奇偶校验码能发现一位或奇数个位出错,但无错误定位和纠错能力。尽管奇偶校验码的检错能力较低,但据对计算机内存储器出错概率统计,其中70~80%是1位错误,由于奇偶校验码实现简单,因此它还是一种应用最广泛的校验方法。 奇偶校验码常用于存储器读、写检查或ASCII码传送过程中的检查。在实际应用中,多采用奇校验,因为奇校验中不存在全“0”代码,在某些场合下更便于判别。 2.奇偶校验的校验方程 设7位信息码组为C7C6C5C4C3C2C1,校验码为C0,则对偶校验,当满足 C7⊕C6⊕C5⊕C4⊕C3⊕C2⊕C1⊕C0=0 (1) 时,为合法码;对奇校验,当满足 C7⊕C6⊕C5⊕C4⊕C3⊕C2⊕C1⊕C0=1 (2) 时,为合法码。这里的⊕表示模2相加。 一般来说,对于偶校验,合法码字应满足 n ∑C i⊕C0=0 (3) i-1 对于奇校验,合法码字应满足 n ∑C i⊕C0=1 (4) i-1 在上面4个公式中,公式(1)、(2)称为奇偶校验位的生成方程,可用它对给定的信息码生成唯一的奇偶校验码;公式(3)、(4)为校验方程,借助它可检测出某一信息位出错,但不能确定其错误的具体位置。 3.交叉奇偶校验

相关文档
最新文档