海明码的详细解读及做题步骤

前言

        我们知道,发送端在发送数据给接收端时,在传输链路中 有可能受到干扰导致数据传输错误,因此在接受端我们需要对接收到的数据进行检验,验证数据是否正确。如果数据发生了错误,接收端会选择对数据进行纠错或者要求发送端进行重发。

一、奇偶校验

        在计算机发展的早期我们常采用的校验方法是 奇偶校验,用1个比特位来标记校验结果。所以 当我们的数据有n位时,要传输给接收端的数据有n+1位

        采用奇校验时,若所要传输的数据 含有奇数个1,则校验位为0 ;反之,含有偶数个1,则校验位为1。
        采用偶校验时,若所要传输的数据 含有偶数个1,则校验位为0 ;反之,含有奇数个1,则校验位为1。

        奇偶校验功能简单,实现起来容易,但是它只能发现数据发生了错误,无法确定是哪个位置发生了错误,只能要求发送方重发,且 当数据发生了偶数个错误时,奇偶检验无法发现错误,也就是说它没有纠错功能,因此我们采用更为先进的海明码。

二、海明码

        海明码不仅具有纠错功能,还能根据验算过程判断出发生错误的位置。下面让我们来看看海明码的计算原理叭。

(1)海明码有三个重要性质:

①假设 数据位为 n 位,校验位有 k 位,则海明码有 n + k 位,且 n 和 k 需满足 2𝑘 − 1 ≥ n + k 等式( 可以用 2k − 1 > n 简化计算 )。如:
    当 n = 8   时,则 k = 4 ;
    当 n = 16 时,则 k = 5 。

用符号 D 代表数据位,P 代表校验位,H 代表海明码,则 P𝑖 = 𝐻2𝑖−1 ,也就是说 第 i 个校验位在海明码的第 2𝑖−1 个位置上。当确定好校验位在海明码的位置之后,剩下的位置则由数据位进行填充。

        根据①和②,我们便可以确定数据位为 n 时,校验位 k 的值及海明码的格式( 这里以数据位为 8 位举例 ):
海明码格式

        根据①,因为 n = 8 且 2k-1>n ,所以 k = 4 ,所以海明码有 8 + 4 = 12 位。
        根据②,可以觉得4个校验位 P1、P2、P3、P4 分别在海明码的 H1、H2、H4、H8 的位置上,如上图所示。

③每一位海明码都会被校验到,其中,被校验的海明码它的下标等于参与校验的所有检验码下标之和( 对应存放 D 时 ),而校验位由自身校验( 对应存放 P 时 )

        根据③我们可以确定每一位海明码,它是由哪些校验码进行校验的,而这些校验码便构成了该海明码的校验码组,如下图所示。
校验位组
        很容易看出 P 所在的海明码的校验位组都是校验位,而 D 所在的海明码的校验位组遵循“被校验的海明码它的下标等于参与校验的所有检验码下标之和”。如 H12 中的校验位组是 P3 和 P4 ,是因为 12 = 8 + 4 ,即 H12 的校验位组由 H8 和 H4 组成。

(2)海明码的校验方式

采用偶检验 时,各检验位的值等于含有该检验位的数据位的异或运算结果。
在这里插入图片描述
在这里插入图片描述
补充:异或运算的规则是:
           0 ⨁ 0 = 0            0 ⨁ 1 = 1
           1 ⨁ 1 = 0            1 ⨁ 0 = 1

       至此发送端就确定完每一位海明码的值应该为 0 还是 1 了。 那么接收端要如何确定收到的海明码是否正确呢?若是不正确时,其错误的位置又要如何确定?

三、海明码的检错及纠错

       接收端在接收到海明码后,对将校验位 P 与其相对应的数据位 D 进行异或运算,并根据运算结果生成编码结果 G4G3G2G1(这里还是以数据位 8 位时举例,若是 16 位,则结果为 G5G4G3G2G1)。
编码结果
        注意观察 P 和后面的 D 组数据之间的关系,如果进行偶检验,没有错误时,G4G3G2G1 应该全为0( 奇检验时无错全为1 )。不全为0则说明发生了错误,且 G4G3G2G1的值化成十进制值 m 就指出了海明码的第 m 个位置出现了错误,如 G4G3G2G1 = 1000 说明海明码 H8 出现了错误。

       以上笔记源于书本未能讲解清楚,自己琢磨出来的,供大家交流学习,如有错误之处,欢迎指正!!!

  • 38
    点赞
  • 185
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aiden_Davis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值