软考之校验码

原件故障,噪声干扰等各种因素常常导致计算机在处理信息的过程中出现错误。为了防止这种错误,可将信号采用专门的逻辑电路进行编码以检查错误。

1:奇偶校验码

奇偶校验码是 [1]  一种增加二进制传输系统最小距离的简单和广泛采用的方法。是一种通过增加冗余位使得码字中"1"的个数恒为奇数或偶数的编码方法,它是一种检错码。在实际使用时又可分为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验等几种。

最简单且应用广泛的检验码就是采用一位校验位的奇校验或者偶校验。在实际中出现一位错误的机率是最高的。

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

我们只需要记住奇校验码要保证码字必须是奇性的,如果原码字就是奇性的,那么奇校验码就是0,反之为1

偶校验码相反,保证码字非奇性,有偶数个1,如果原码字就是奇性的,那么奇校验码就是1,反之为0

举个例子:

数据:                                                      偶校验编码                                             奇校验编码

1 0 1 0 1 0 1 0                                   1 0 1 0 1 0 1 0  0                                  1 0 1 0 1 0 1 0 1

接受数据的那端只需要判断一下就好了,如果奇校验中出现了偶数个1,那么出错了,偶校验类比。

但是奇偶校验只能提供是否出现一个错误,2个错误就不行了,还有出错的地方也不可能知道的,弊端比较明显。

2:海明码(汉明码也是它)

汉明码(Hamming Code),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。汉明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误,以侦测并更正单一比特错误。由于汉明编码简单,它们被广泛应用于内存(RAM)。

在此介绍海明码之前,先做俩道二年级智力题目。

问题一:我们有四个罐子,里面分别装有一些药品,正版药品重1g,盗版重0.9g,四罐中有一罐是盗版,我们有一台天秤,问怎样称一次能辨别那个罐子是盗版。

想一下。

告诉你答案吧!我们取第一罐一颗药,取第二罐俩颗药,取第三罐三颗药,取第四罐四颗药。然后称一下重量。

都是正品则重10g。如果差0.1g,那么第一罐假的,如果差0.2g,那么第二罐假的,如果差0.3g,那么第三罐假的,如果差0.4g,那么第四罐假的。问题解决了。

问题二:我们有四个罐子,里面分别装有一些药品,正版药品重1g,盗版重0.9g,不知道有几罐是假的,我们有一台天秤,问怎样称一次能辨别那些罐子是盗版。

想一下。

有了刚刚的提示,可能有人会说,依然那样弄不行吗?很明显不行,如果差0.3g,那么是第一罐和第二罐有问题还是第三罐有问题。敏锐的你应该注意到了,关键在取药品的数量上。

我们取第一罐一颗药(0001),取第二罐俩颗药(0010),取第三罐四颗药(0100),取第四罐八颗药(1000)。然后称一下重量。

重量差值(g)                                 盗版药品

0.1(0001)                                    第一罐

0.2(0010)                                    第二罐

0.3(0011)                                    第一罐与第二罐

0.4(0100)                                    第三罐

0.5(0101)                                   第三罐与第一罐 

。。。。                                    。。。。

1.5(1111)                                   第一罐 第二罐  第三罐 第四罐

正好巧妙的利用二进制的特点,表示出了所有差值情况和对应的盗版药品(最关键一点:没有出现“一对多”)

下面来正式介绍海明码

相对于其它校验码,海明码可以有多个校验位,具有检测并纠正一位错误代码的纠错码,所以它也仅用于信道特性比较好的环境中,如以太局域网中,因为如果信道特性不好的情况下,出现的错误通常不是一位。(官方说法)

一、计算原理:


  1、计算校验位数

  2、确定校验码位置

  3、确定校验码

  4、实现校验和纠错

二、实例讲解:


  假如被校验码为:01101001,求其偶校验的海明码?

 

  1)计算校验位数。被校验的个数为8位,8+k ≤ 2^k-1 k得到k为4,所以需要添加4个校验码

  2)确定校验码的位置。校验码只能放在第一位,第二位,第四位……(2的n次方位)。所以添加校验码后的总码为

        0110d100c1ba

  3)确定被校验的各个位置。

    a是第一位,所以根据规则校验1位,然后跳过1位,再校验1位,再跳过1位……最后校验的各位(标红),0110d100c1ba因为是偶校验,所以可以得到a为1。

    b是第二位,校验2位,然后跳过2位,再连续校验2位,再跳过2位……最后校验的各位(标红如下)0110d100c1ba,采用偶校验,所以b可以得到结果为0

    c是第四位,校验4位,然后跳过4位,再连续校验4位,再跳过4位……最后校验的各位(标红如下)0110d100c1ba,采用偶校验,所以c可以得到结果为1

    d是第八位,校验8位,然后跳过8位,再连续校验8位,再跳过8位……最后校验的各位(标红如下)

0110d100c1ba,采用偶校验,所以可得d的结果为0

  4)所以01101001,其偶校验的海明码为011001001101
 

https://blog.csdn.net/hamster204/article/details/90748043

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章