1.计算机硬件基础-校验码(5)

来源:互联网 发布:卡片电脑知乎 编辑:程序博客网 时间:2024/06/05 17:45

校验码基础知识

校验码是为了发现传递信息串的错误和自动纠正错误而采用的技术。比方说从A点到B点发送一串信息,B点接收到了信息时,A点并不知道B点收到的是否为原始数据,在传递的过程当中是否发生错误,B点也存在这类的问题,B点不知道收到的信息是否正确,为了解决这类问题就设计出了校验码;校验码就是通过增加一些冗余位的信息(判断规则),接收端收到的信息后判断是否原始信息,当中如果发现有错误,就是非法的二进制串。

码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数就称为数据校验码的码距。码距越大,检错能力越强。

例如,用4位二进制表示16种状态也就是有16个不同的码字,此时码距为1,如0000与0001。码距为1时,不具备检错能力。因为4位二进制传输取出之后,无论如何变化,所收到的还是一个4位,而4位最多表示16种状态同时也是合法的,所以说无论发生什么样的错误,对方收到的都是一个合法的二进制编码,当然同时它并不是发出的原始数据。要具备检错能力,码距要大于等于2。比方说,用4位二进制表示8种状态,这个时候就可以达到码距大于等于2,如果其中1位发生错误的话,可能就会变为另一种码字,接收端收到信息进行读取根据规则判定不是合法的,因为只有8种状态是合法的,另外8种是非法的。

奇偶校验

奇偶校验码的编码方法是:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码。

奇校验:整个校验码(有效信息位和校验位)中“1”的个数为奇数。

偶校验:整个校验码(有效信息位和校验位)中“1”的个数为偶数。

奇偶校验不能判断具体是哪一位发生了错误和纠正错误,纠正错误首先建立在能够知道具体是哪一位发生错误的前提。

例如,二进制串有效信息位是10001100,若是采用奇校验,校验位应该加个0为100011000,因为1的个数要保持奇数个(补充:如果是偶校验它的校验位应该加1为100011001,才能保持1的个数为偶数个。)。对于这一串校验信息,如果从A点传递到B点,在B点接收到的情况下,可能是100011000,此时再将校验位去掉得到有效信息位。如果约定的是奇校验,接收端会检查1的个数是否为奇数。若为奇数,就认定这个校验码在传输的过程当中没有发生错误。若为偶数,比方说100011100,采用奇校验判定有错误。但是两位发生了错误,他就检测不出来。对于奇校验它不能检测偶数位发生的错误。偶校验同理。

循环校验码CRC

CRC编码:具有非常强的连续多位检错纠错能力的校验码,CRC校验码被广泛应用于计算机当中。在k位信息码之后拼接r位校验码。应用CRC码的关键是如何从k位信息位简便地得到r位校验位(编码),以及如何从k+r位信息码判断是否出错。

循环冗余校验码编码规律如下:
  1. 把待编码的N位有效信息表示多项式M(X);
  2. 把M(X)左移K位,得到M(X)*Xk的,这样空出了K位,以便拼装K位余数(即为校验位):
  3. 选取一个K+1位的产生多项式G(X),对M(X)*Xk的做模2除:
  4. 把左移K位以后的有效信息与余数R(X)做模2加减,拼接为CRC码,此时的CRC码共有N+K位。
循环冗余校验码的判定:把接收到的CRC码用约定的生成多项式G(X)去除,如果正确,则余数为0;如果某一位出错,则余数不为0。不同的位数出错其余数不同,余数和出错位序号之间有唯一的对应关系。

模2除法是指在做除法运算的过程中不计其进位的除法。例如,10111对110进行模2除法为:



例:原始报文(信息码)为“11001010101”,G(X)=X4+X3+X+1,对其进行CRC编码后的结果为?

分析:CRC编码的过程,原始报文加上校验位与多项式进行模2除法得出CRC。已知校验码为4位,在11001010101补上4个0得到110010101010000,G(X)=X4+X3+X+1=24+23+2+1,G(X)-1=K,110010101010000与11011做模2运算。结果为:0011。


海明码校验码

海明校验码(多重奇偶校验)的原理是:有效信息位中加入几个校验位形成海明码,使用码距比均匀地拉大,并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错误,还能指出错误的位置,为自动纠错提供了依据,但海明码不能多位出错,多位出错将无效。r表示校验位的位数,m表示有效信息位的位数。海明码位数不等式:

2r≧m+r+1

借助例子了解海明码。例:求信息1011的海明码。

(1)2r≧4+r+1,确定校验码至少为3位23≧4+3+1。校验码是3位,信息码是4位,整个校验码就为7位。其中1、2、4是校验码信息,3、5、6、7是信息位的信息。校验码的填充位置为1、2、4、8、16以此类推的位置。


(2)列出校验位公式。

7=22+21+20,6=22+21,5=22+20,3=21+20


(3)根据公式得r2=0,r1=0,r0=1。

(4)将数据加入表格,如表所示。


得到海明码为1010101。

0 0