海明校验、海明码(汉明码)的特征、规则、校验及纠正

今天和大家分享一下海明校验或者说海明码(汉明码)。

概要

任何时候,保证信息的正确性和完整性是至关重要的!

为了解决数据传输过程中出现的错误和丢失问题,我们需要使用错误检测和纠正技术,而海明校验码就是其中一个重要的工具。

用途

海明码是是一种利用奇偶性检错和纠错的方法,是一种纠错码,它的主要作用是检测并纠正数据传输过程中的错误,从而确保数据的正确性和完整性,通常可用于通信、传输、存储等方面,比如:

  • 通信领域:在通信领域,海明码校验码通常用于数字调制解调器(光猫)和通信协议中。
    数字调制解调器是一种将数字信号转换为其他类型信号的设备,例如将电脑上的数字数据转换成可以通过电话线传输的声音信号。
    而通信协议则是一种规定通信双方如何交换信息的规则体系。使用海明码校验码能够保证通信中数据传输过程中的正确性和完整性。

  • 文件传输:在计算机网络中,文件经常需要从一个网络节点传输到另一个节点。为了确保文件传输的正确性和完整性,海明校验码被用于检测和纠正文件传输过程中的错误。

  • 数据库校验:在对数据库进行备份和恢复等操作时,使用海明码校验码能够避免数据错误和丢失,确保数据的准确性和可靠性。

先说结构特征

一个经过海明校验加密过的数据,可分为两部分,

一部分是数据位共n位,设n个数据位分别为d1、d2……dn,用来存储要传输的有意义数据,

另一部分是校验位共k位,设k个校验位分别为p1、p2……pk。

其中有几个规则:

  • 规则一: pi要放在2^(i-1)的位置上,也就是校验位要放在固定的1、2、4、8…这些2的次方结果位上。

  • 规则二: 任何一位海明位都是由若干个校验位来校验的,被校验的海明位下标等于所有参与校验该位的校验位的海明位下标之和,而校验位由自身校验。

  • 规则三: n+k是总位数,则n和k一定满足:2^k-1>=n+k 。

名词解释

码距:海明码的码距是指两个码字中不相同的二进制位的个数。
例如,有两个编码,分别是01101101和01000101,可以发现,这两个编码有两位值不相同,所以他们的码距为2。在编码系统中,任意两个码字的码距的最小值被称为该编码系统的码距。

海明位:海明码的任何一位都叫海明位,但海明位是从1开始的,即第1个海明位,第2个海明位…

异或操作:a⊕b,如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0

举例细说用法规则

假设需要传送的、用奇校验规则的、有意义数据为:1010,显然,数据位长度n=4,

一、下面,需要根据信息位,计算出每一位校验位,补充完整海明码

 1. 前置计算

根据规则三,即2^k - 1 >= n+k,结合n=4,得2^k - k >= 5,算出k=3,也就是有3位校验位来辅助加密上述的4位的有效数据。

 2.列一个各海明位类型对应表

根据规则一,标出校验位在海明位的位置,显然,其他位则是顺排的有意义数据位
在这里插入图片描述
填充上要传输的数据:
在这里插入图片描述

 3.列一个海明位的校验关系对应表

规则二中:校验位由自身校验
在这里插入图片描述
规则二中:任何一位海明位都是由若干个校验位来校验的,被校验的海明位下标等于所有参与校验该位的校验位的海明位下标之和。
如:海明位第3位,是海明位第1和第2位的来校验的,第5位是第1和4位校验的
在这里插入图片描述

 4.分组

按校验位对数据位校验的参与,对校验位分组,并带上实际数据;比如第一个校验位P1参与对D1、D2、D4的校验,将其4个分为一组,如图

1组 D1 D2 D4 P1,即 1 0 0 P1
2组 D1 D3 D4 P2,即 1 1 0 P2
3组 D2 D3 D4 P3,即 0 1 0 P3

 5.根据奇或偶规则填充校验码的值

若本次使用的是奇校验方式,通过给校验位设置0或1的值使每一组都满足奇数个1,结果如下

1组 1 0 0 P1 => 1 0 0 0
2组 1 1 0 P2 => 1 1 0 1
3组 0 1 0 P3 => 0 1 0 0

得P1=0,P2=1,P3=0

所以,完整海明码为:0110010;
在这里插入图片描述

偶校验在除第5步外与奇校验同理

二、接收方收到格式完整的海明码,开始校验

以上只是生成完整海明码的过程,接收方收到海明码后,需要校验,如果有错则需要纠错,
假设接收的数据不是0110010而是0100010,即从左向右第3位(也就是D1)从1变为了0,
校验及纠错方法如下:

 1. 标出校验位

根据规则一,在完整长度的海明码上标出第几位是校验位,拿接收到的0100010举例,第1、2、4位为校验位,即P1=0,P2=1,P3=0;

 2. 得到校验分组

重复“一、补充海明码”里的前4步,得到各校验位与数据的分组,且D1=0:

1组 D1 D2 D4 P1,即 0 0 0 P1,即 0 0 0 0
2组 D1 D3 D4 P2,即 0 1 0 P2,即 0 1 0 1
3组 D2 D3 D4 P3,即 0 1 0 P3,即 0 1 0 0

规则四:若使用的是奇校验规则,则每组异或后结果均为1,偶校验,结果全为0
规则五:若异或结果符合规则四,则说明数据无误,若不符合项,将异或后的结果转成10进制就是错误的数据位位数。
规则六:将错误的位数取反即是纠正

 3. 校验(每组进行异或操作)

第1组:D1⊕D2⊕D4⊕P1 => 0⊕0⊕0⊕0=0
第2组:D1⊕D3⊕D4⊕P2 => 0⊕1⊕0⊕1=0
第3组:D2⊕D3⊕D4⊕P3 => 0⊕1⊕0⊕0=1
根据规则四,且是奇校验,得到的结果有两个0,所以有误码,
根据规则五,将001转化为10进制数为1,也就是第1个数据位错误

 4. 纠正

将第1个数据位也就是D1取反即可,即从0100010改为0110010。

原理

它的实现原理是在n个数据位之外加上k个校验位,从而形成一个n+k位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。

总结

海明校验是通过插入冗余位,也就是校验位,让接收方判断接收到的信息是否有误码,并且能自行纠正。

  • 37
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值