浅析海明码

  软考中知识涉及得非常广,但是每一点讲解得却很有限。将这一本书的知识织成一张网,还是挺难的。感觉第一章组成原理,第二章编译原理和第三章操作系统的联系非常紧密,但是却连不起来。比如:存储器,知道它在CPU里如何工作也只是一点,很有限的一点。很多的寄存器都还不知道它是做什么用的。在操作系统那一章里讲存储器,也只是介绍几种存储管理的原理,简洁扼要。总之,不知道的东西太多了。做题相比看书容易一些。在第一章中有一部分讲解校验码,其实还是不明白校验码什么时候使用,课本上真是简洁的不能再简洁了。校验码这部分虽然不是重中之重,但是由于我讲这部分的内容,查了一些资料,整理了一下。

1.什么是码距

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

举个例子:比如1111和1110这两个码字的码距就是1.还有很多的说法,比如:码距越大,校验码的校验能力越强。注意了这里的码距是指整个编码系统的码距。当时我在理解的过程中就是没有搞明白这个概念,一直不能理解码距。再举一个例子帮助理解码距。

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

浅析海明码_第1张图片

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

浅析海明码_第2张图片

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

为了使一个系统能检查和纠正一个差错,码间最小距离必须至少是“3”。最小距离为3时,或能纠正一个错,或能检二个错,但不能同时纠一个错和检二个错。编码信息纠错和检错能力的进一步提高需要进一步增加码字间的最小距离。所以大家明白码距对于校验码的意义了吧。

2.奇偶校验码

奇偶校验是最简单的一种校验方法。在海明码中使用到了奇偶校验。

一个二进制码字,如果它的码元有奇数个1,就称为具有奇性。例如,码字“10110101”有五个1,因此,这个码字具有奇性。同样,偶性码字具有偶数个1。奇偶校验可描述为:给每一个码字加一个校验位,用它来构成奇性或偶性校验。

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

3.海明码

要能纠正信息字中的单个错误,所需的最小距离为3。实现这种纠正的方法之一是海明码。这里需要注意:海明码只能纠正单个错误。

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

课本介绍了海明码的详细计算过程,我不在这里赘述。我总结了一下计算海明码的步骤。以1101为例。

(1)海明码是由数据位和校验位按照一定次序共同组成的。数据位就是1101,而校验位是什么,需要我们计算一下。公式:2的k次方>=k+m+1,k是校验码的位数,而m是1101的位数。很简单,k最小为3.所以校验码有3个。

(2)从理论上讲,校验位可放在任何位置,但习惯上校验位被安排在1、2、4、8、…的位置上。所以就有了下面的对应关系


(3)D1所在码字的位置是3,可以用1+2来表示。即可用P1,P2来表示校验D1;D2所在的码字位置为5,可以用1+4来表示,即可用P1和P3来校验。同理,将所有的数据位都用校验位表示出来。P2和P3来校验D3;P1,P2和P3来校验D4.

(4)统计P1、P2和P3都可以校验哪些位。P1可校验D1,D2,D4;P2校验D1,D3,D4,P3校验D2,D3,D4.

(5)计算P1、P2和P3的奇偶性得:P1为0,P2为1,P3为0.

所以1101的海明码是1100110.


  目前对校验码的理解只到了这一步。


你可能感兴趣的:(浅析海明码)