计算机基础 —— 海明码原理与校验


      海明码(C++实现)


前言

     海明(汉明)码是广泛采用的一种有效的校验码,它实际上是一种多重奇偶校验码。

     海明码的原理就是在有效信息位中加入几个校验位形成海明码,并把海明码的每一个二进制分配到几个奇偶校验中。当某一位出错的时候,不仅能检错,还能发现出错位的位置。假设校验位有k位,那么校验码最多有2k个,显然其中有一个校验码是正确的,那么就能校验出2k-1个错位。所以,如果能满足一个n位数n+k<=2k-1,则在理论上即可判断出哪一位数出错。

     奇偶校验

          奇校验:序列为1的个数如果为偶数则在前面加个1,使1的个数变成奇数,否则加0。
          偶校验:序列为1的个数如果为奇数则在前面加个1,使1的个数变成偶数,否则加0。
     
          举例:
               1111 奇校验就是 11111 偶校验就是 01111
               1110 奇校验就是 01110 偶校验就是 11110


海明码计算原理

     1、 计算校验位数k的公式

          k2 ≥ k + n + 1
     
     2、 确定校验位在海明码中的位置,并将序列由右至左顺序依次填入h3->…

          按照2k留出来,例1、2、4、8、16…

H7H6H5H4H3H2H1
x4x2x1

     
     3、 分组

          根据值查看统配是否出现得出:

               例,配合下表:
                    x1 = 1⊕3⊕5⊕7⊕9 备注:查看通配=号后是否出现该1的值,若出现则提出值即可。

                    x2 = 2⊕3⊕6⊕7⊕10 备注:查看通配=号后是否出现该2的值,若出现则提出值即可。

                    x4 = 4⊕5⊕6⊕7 备注:查看通配=号后是否出现该4的值,若出现则提出值即可。

                    x8 = 9⊕10 备注:查看通配=号后是否出现该8的值,若出现则提出值即可。

通配 - (出现的值必须为2^n)
11 = 1
22 = 2
33 = 1 + 2
44= 4
55 = 1 + 4
66 = 2 + 4
77 = 1 + 2 + 4
88 = 8
99 = 1 + 8
1010 = 2 + 8

     

     4、 整合

          根据步骤3得出的通配,计算出x1…,带入步骤2中的表格内。得出海明校验码即可。

     

举例

     求出10001序列的海明校验码结果。

     解:
          1、 求出k2≥k+n+1中的k值。

               因为n=5,那么k=4
          

          2、 得出海明码表格
               在这里插入图片描述

          3、计算通配

               x1 = 1⊕3⊕5⊕7⊕9 = 3⊕5⊕7⊕9 = 1⊕0⊕0⊕1 = 0

               x2 = 2⊕3⊕6⊕7 = 3⊕6⊕7 = 1⊕0⊕0 = 1

               x4 = 4⊕5⊕6⊕7 = 5⊕6⊕7 = 0⊕0⊕0 = 0

               x8 = 9 = 1

          
          4、整合表格
               在这里插入图片描述

关注

笔者 - jxd

微信公众号搜索 “码农总动员” 或 微信扫描下方二维码,了解更多你不知道的XX,O(∩_∩)O

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

信必诺

嗨,支持下哥们呗。

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

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

打赏作者

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

抵扣说明:

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

余额充值