海明码简介

海明码是由Richard Hanming于1950年提出的,它具有一位纠错能力。

海明码的计算

设欲检测的二进制代码为n位,为使其具有纠错能力,需要添加k位检测位,组成n+k位的代码。为了能准确对错误定位以及指出代码没错,新添加的检测位数k应满足:2k ≥ n+k+1
由此关系可求得不同代码长度n所需要检测位的位数k。

海明码的编码规则如下:
设k个校验位为Pk,Pk-1,·····,P1, n个数据位为 Dn-1,Dn-2,·····,D1,D0,对应的海明码为Hn+k,Hn+k-1,······,H1,那么
(1)Pi在海明码的第2i-1位置,比如P1,21-1=1,所以在H1的位置。
(2)海明码中的任何一位都是由若干个校验位来校验的。其对应关系如下:被校验的海明位的下标等于所有参与校验该为的校验位的下标之和,而校验位由自身校验。比如H12,下标为12,等于8+4,所以是海明码的第8、第4位校验位来检测的。

举例

对于8位的数据位,进行海明校验需要4个校验位(2k ≥ n+k+1,24 ≥ 8+4+1)。令数据位为D7,D6,D5,D4,D3,D2,D1,D0,校验位为P4,P3,P2,P1,形成的海明码为H12,H11,····,H1,则编码过程如下:
(1)确定D与P在海明码中的位置

H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
D7 D6 D5 D4 P4 D3 D2 D1 P3 D0 P2 P1

(2)计算校验位
这里主要讲一种简易的计算校验位的方法:
第一个校验位P1是位于H1的位置,它检验的位置是H1,H3,H5,H7,H9,H11,也就是读一位,隔一位,···
第二个校验位P2是位于H2的位置,它检验的位置是H2,H3,H6,H7,H10,H11,也就是读两位,隔两位,···
第三个校验位P3是位于H4的位置,它检验的位置是H4,H5,H6,H7,H12,也就是读四位,隔四位,···
第四个校验位P4是位于H8的位置,它检验的位置是H8,H9,H10,H11,H12,也就是读八位,隔八位,···
以此类推,就可以轻易得知,第n位校验位校验的海明位是,从自身开始,读2n-1位,隔2n-1位,·····,直到读到尽头。

知道校验位后 ,对校验位对应的数据进行异或运算(默认是偶校验),即
P1=D0⊕D1⊕D3⊕D4⊕D6
P2=D0⊕D2⊕D3⊕D5⊕D6
P3=D1⊕D2⊕D3⊕D7
P4=D4⊕D5⊕D6⊕D7

若采用奇校验,则将各校验位的偶校验值取反即可。

(3)检验错误。对使用海明码的数据进行校验差错检测很简单,根据上面的方法,我们可以很轻易得知每个校验位负责检测的海明位,只要对其进行异或运算即可。
G4=P4⊕D4⊕D5⊕D6⊕D7
G3=P3=D1⊕D2⊕D3⊕D7
G2=D2⊕D2⊕D3⊕D5⊕D6
G1=D1⊕D1⊕D3⊕D4⊕D6

若采用偶校验,则G4G3G2G1全为0是表示数据没有错误,奇校验应全为1,否则即出现了错误。当发生错误时,将G4G3G2G1的值转化为十进制即可知道发生错误的位置,如G4G3G2G1=0110,即表示H6这个位置的数据发生了错误,只要将其取反即可纠正。

以上就是海明码的运算思想,欢迎大家来交流学习。

海明码(汉明码)详解相关推荐

  1. 工业机器人码垛教学实施_工业机器人应用案例码垛详解

    工业机器人应用案例码垛详解 随着科技的进步以及现代化进程的加快,人们对搬运速度的要求越来越 高,传统的人工码垛只能应用在物料轻便.尺寸和形状变化大.吞吐量小的场 合,这已经远远不能满足工业的需求,机器 ...

  2. jsp漂亮的登录界面源码_【案例+源码】详解MVC框架模式及其应用

    案例+源码]详解MVC框架模式及其应用 写在开头: 首先我们需要知道,框架模式.模式.开发模式是三种不同的概念,但他们的目的都一样:解耦! 1.关于MVC框架模型 MVC是三个单词的缩写: M,Mod ...

  3. 计算机乘法原理 移位,原码乘法,原码乘法原理详解

    原码乘法,原码乘法原理详解 1.人工算法与机器算法的同异性 在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号位按异或运算得到,而乘积的数值部分则是两个正数相乘之积. 设n位被 ...

  4. 如何获取QQ邮箱授权码——步骤详解

    获取QQ邮箱授权码步骤详解 1.打开QQ邮箱,进入邮箱账户设置界面 下滑当前界面,显示到邮箱服务区域,选择自己需要开启的协议服务 或点击下方提示中的生成授权码 点击开启,显示验证密保弹窗,根据提示进行 ...

  5. Babel转码器详解

    Babel转码器详解 Babel是一个广为使用的ES6转码器,可以将ES6代码转为ES5代码,从而在浏览器或其他环境运行.这意味着可以用ES6的方式编写程序而不用担心环境是否支持 Babel的配置文件 ...

  6. Android 源码编译详解【合集篇】

    Android 源码编译详解[一]:服务器硬件配置及机型推荐 做 Android系统开发多年,开发环境都是入职就搭建好了,入职时拿个账号密码就直接开始搞开发了,年初换了新公司,所有的项目都是刚起步,一 ...

  7. 使用Gin框架集成JWT,源码、详解、面试问题

    使用Gin框架集成JWT,源码.详解.面试问题 一.什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519). ...

  8. Android四大组件之bindService源码实现详解

        Android四大组件之bindService源码实现详解 Android四大组件源码实现详解系列博客目录: Android应用进程创建流程大揭秘 Android四大组件之bindServic ...

  9. HTTP状态码100-500+详解

    HTTP状态码100-500+详解 1xx响应信息提示   这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx  • 100 - Continue 初始的请求已经接受,客 ...

  10. http状态码查询,各种返回码的详解(200、206、500、416、403、404)

    http状态码查询,各种返回码的详解(200.206.500.416.403.404) 文章由帮客之家于2013-11-25 12:11:44分享 评论(324) HTTP状态码,我都是现查现用. 我 ...

最新文章

  1. iOS开发-Certificates、Identifiers和Profiles详解
  2. ubuntu等linux下自定义设置程序代理工具proxychains简介
  3. Python 计算机视觉(二) —— OpenCV 基础
  4. asa防火墙升级固件_奇淫巧技 | 在路由器中添加策略,阻止电视系统升级
  5. ibatis和myibatis
  6. git 撤销修改:未push 、已push
  7. 一张图轻松搞懂javascript event对象的clientX,offsetX,screenX,pageX区别
  8. JFinal 调用 oracle 存储过程的 步骤
  9. HDU 1027 全排列
  10. 图片与路径(Path)的应用
  11. linux进程号转换成16进制,linux-shell 脚本转换 十六进制 十进制 八进制 二进制
  12. 计算机C盘什么引用了,计算机C盘装满了怎么办?
  13. python中导入win32com.client出错问题
  14. JQuery 学习总结及实例 !! (转载)
  15. java 运行器_[原创]我也来做一个最简单的Java2EXE的运行器
  16. 真懂?Retrofit完整剖析
  17. 牛客HTML专项练习【错题+知识点辨析】(持续更新中)
  18. python 实现 Cmn 的排序 阶乘
  19. No Silver Bullet: Essence and Accidents of Software | 没有银弹:软件开发中的主要问题和次要问题
  20. h5获取android手机版本,Vue.js怎么获取手机系统型号、版本、浏览器类型

热门文章

  1. AWS KVS(Kinesis Video Streams)之WebRTC移植编译(五)
  2. Web服务器python编程
  3. android 来电解锁,带你解锁手机隐藏黑科技,极少人知道!
  4. 模拟集成电路设计的九个层次-顶尖高手的心得体会
  5. GNOME 平台的2D图形编程(GTK,GDK,Cairo...) 简介 [转]
  6. python自动输入验证码_python下的自动化测试--selenium 验证码输入问题
  7. JS:关于事件触发机制
  8. jquery字符串相等判断
  9. 支持nfc的android手机,NFC手机有哪些 2017支持NFC功能的手机推荐 (5)
  10. 分布式锁的简介与作用