汉明码原理解析(清晰实例讲解)

1.汉明码实质及原理

汉明码实质上是多重奇偶校验,其实现原理是:在有效信息位中加入几个校验位形成汉明码,使码距比较均匀的拉大。具有检验并纠正一位错误的能力


2.核心公式介绍

2^k >= N+K+1

其中,K代表校验位的位数N代表信息位的位数

下面是 信息位N值与校验位K值的对应关系表(重要)

信息码位数(N)12~45~1112~2627~5758~120
校验码位数(M)234567

3.确定校验位的位置

根据上表确定校验码位数之后,将它插入到信息码中(这里信息码用D表示,校验码用P表示),规则是:

  • 校验码Pi 必须是在2的i-1次方位置,即只能放在H1,H2,H4,H8…
  • 这里指的位置都是从右向左排序(信息码和校验码都一样)

举个例子,现有一个4位信息码(D1,D2,D3,D4),它的排列是这样的:

D4 D3 D2 P3 D1 P2 P1

知道位置之后,下一步就是确定校验位的值了


4.确定校验位的值(核心)

我之前是卡在这一步了,我觉得大部分博客没有直观的将这部分相关的知识讲到位,都是含糊其辞,其实用对方法后,是很简单的,下面是确定校验位值的思路:

  • 根据校验位的位数,确定每个位置占用的校验位号
  • 根据参与校验的信息位的位置,确定信息位的值(异或计算)

下面通过一个例子介绍,现在有一个二进制编码1011(D1,D2,D3,D4),求它的汉明码

  • 首先确定校验位的位数及位置

    信息码共4位,校验码通过公式计算为3位,一共7位,排列如下

    D4 D3 D2 P3 D1 P2 P1

    它的校验位的对应表如下:

位置(从右至左)占用的校验位号备注
111=1
222=2
31,23=1+2
444=4
51,45=1+4
62,46=2+4
71,2,47=1+2+4

  • 确定校验位的值(敲黑板)

    确定各校验码 的参与校验位的信息位的位置,如下表

校验码名称(位置)参与校验码的信息位的位置
P1 (位置为1)1,3,5,7 (1出现过的位置)
P2 (位置为2)2,3,6,7 (2出现过的位置)
P3 (位置为4)4,5,6,7 (4出现过的位置)

现在就可以根据上表确定各校验位的值了(异或运算):

​ P1 = D1⊕D2⊕D4 = 1⊕0⊕1 = 0

​ P2 = D1⊕D3⊕D4 = 1⊕1⊕1 =1

​ P3 = D2⊕D3⊕D4 = 1⊕0⊕1 = 0

异或运算简单来说,就是两个相同的数结果为0,不同的数结果为1,这里看1的个数就成,偶数为0,奇数就是1

所以生成的海明码为

D4 D3 D2 P3 D1 P2 P1

1 1 0 0 1 1 0


5.汉明码纠正

假设传输中H6(D3)发生了错误,原码就变为:

1 0 0 0 1 1 0

检错过程很简单,将接收到的码字重新进行奇偶校验

S1 = P1⊕D1⊕D2⊕D4 = 0⊕1⊕0⊕1 = 0

S2 = P2⊕D1⊕D3⊕D4 = 1⊕1⊕0⊕1 = 1

S3 = P3⊕D2⊕D3⊕D4 = 0⊕0⊕0⊕1 = 1

所以真值为S3,S2,S1,即110,转换为十进制为6,即第六位发生了错误,纠正

1 1 0 0 1 1 0

  • 44
    点赞
  • 144
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值