[计算机组成原理]2-2、奇偶校验码与海明校验码

奇偶校验码

校验码

首先我们先来了解一下校验码是什么东西。

我们都知道,在古代上级官员向下级官员发布命令或者颁布措施的时候,都会在文书上印上自己专属的官印,然后经过驿站传达之后,下级官员辨别官印就知道文书有没有问题。
在这里插入图片描述

那么在计算机中,信息都是以二进制存储和传输的,要想借助“官印”来辨别显然是不可能的,这时人们就规定一种辨别的方法,“校验码”因此诞生。校验码就是二进制中的“官印”。


奇偶校验码呢,就是看所传输的数据中‘1’的个数是奇数还是偶数。

奇校验码:传输数据中‘1’的个数为奇数。

偶校验码:传输数据中‘1’的个数为偶数。

现在知道概念了,感觉扯这么多也没啥用啊,其实类比上面举的例子就很好理解这玩意儿是干啥的。

比如奇校验码,就是我现在要给你发一串儿数据,我们知道肯定是01010110啥的,现在我们约定好用奇校验码,就会在数据最高位或者最低位添加一位校验位,确保发过去的数据是奇数个’1‘。

那么你收到数据之后,检查’1‘的个数,如果是奇数证明数据没错,如果是偶数证明数据出现一位错误

你会觉得如果同时出现两个或多个错误,使得’1‘的个数还是奇数那不就相当于没检查出来吗?确实。但是这样的概率比中彩票还小。

偶校验码类比理解。

下面给出例题便于理解:
在这里插入图片描述

在这里插入图片描述


海明校验码

(注:以下例题是同一道题)

上面我们了解到,奇偶校验添加了一个校验位,可以判断出信息是否出错,但是如果出错却不能知道错在哪。

海明码就是通过增加校验位的方法来达到检验是否出错,并且得出哪里出了错。
在这里插入图片描述

1. 确定校验位的个数

我们知道,奇偶校验只增加了一个校验位,海明码校验是通过增加校验位的个数来更加准确的去检错。老是说增加校验位,哪到底该有几位呢?这就要根据数据的长短来确定了。
在这里插入图片描述
现在若信息有n位,那么假设需要k位校验码,所以你发送的信息一共有k+n位对不,我们说了海明码能够标明哪个数据出错,所以可能出错的地方有k+n个位置(第一位出错、第二位出错等等一共k+n个位),因为传输过程中不仅信息位有可能出错,海明码也可能出错。毕竟都是用‘0’、‘1’表示嘛。可能出错的情况有k+n个,哪这就是全部了嘛?显然还漏掉一个,那就是不出错的情况,所以总共有k+n+1种情况,这些情况要求校验码都能表示出来,如果校验位有两位,是不是只能表示4种情况(00、10、10、11),那么k位就可以表示2^k种。
有时候我们一看到这种字母就感觉头疼,其实用数字来表示就会发现很简单的,(黑体用数字说明)现在假设你要发送的信息有6位,现在要添加校验位了,假设你添加两个,那两位二进制是不是只能表示四个位置,加上校验位共8个数据,你只能检测4个显然不行,所以我们加上校验位之后要保证校验位能够检测每一位数据,还要保留一种不出错的状态,哪么我们加4位校验位,可以表示2的四次方16种情况,发送的数据一共10(6数据,4校验)位,加上一种不出错的情况一共11种,16>11所以可以。
所以我们可以得出公式,用它来确定校验位k的值(理解不了可以直接记公式,会用就行)。
在这里插入图片描述

例1:
在这里插入图片描述

2. 确定校验位的位置

在奇偶校验中,校验位放在最高位或者最低位,但是在海明码校验中,因为有多个校验位,我们对他们明确的规定,
在这里插入图片描述

也就是说,校验位只能放在1、2、4、8、16。。。这样的位置上,剩余的空位按序填补数据。
例1:
在这里插入图片描述

3. 确定校验位的值‘

现在我们确定了校验位和数据的位置,接下来我们要确定它们的值是’0‘还是’1‘。

规则就是,校验位的值和与其相关的位置上的数据形成偶校验。

形成偶校验容易理解,就是通过设置0或1保证‘1’的个数是偶数,哪什么叫与其相关呢?下面我们通过例1来讲解:
在这里插入图片描述

  • 先将数据所在的位置用二进制表示
  • 回想一下校验位的位置,只能是1、2、4、8.。。观察二进制表示,最低为权重为1,第二位为2,第三位为4依次对应,所以只要是最低位是1,就和P1有关。第二位是1,就和P2有关,以此类推。

我们依照上面的方法,可以找到与各个校验位有关的数据,比如上图与P1有关的有H3、H5、H7,(数据在表里面,上面是二进制判断是否相关用的)看上边数据表,H3=0,H5=1,H7=1,加上校验位,符合偶校验所以P1=0.同理确定P2和P3.
在这里插入图片描述

4. 纠错

其实到第三步,海明码已经确定了,也就是求出来要发送的东西了。

第四步纠错是在接收端进行的处理,也就是你接到之后总得检查一下有没有出错吧, 这时候就体现出来校验码的作用了。

将校验码按由小到大的顺序与它相关的数据进行异或运算,为零代表无措,为一代表有错。

说白了,就是你发送的时候每个校验码和其相关的数据1的个数为偶数,接受到的检查一下是不是偶数。
在这里插入图片描述

这里为什么变成D了呢,刚刚和校验码有关的不是H嘛,其实是一样的,D只是表示数据为了和P区别开(用H表示也行)。

我们前面说了,海明码不仅可以检测是否出错还能检测错在哪?

检错方程(S=。。。这个是检错方程)结果的排序就是出错的位置。
在这里插入图片描述

哪要是全为0,就是第0位出错,那不就是没有错误嘛。



好了我们来回顾一下海明码的四部:
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值