转载自:http://www.cnblogs.com/scrutable/p/6052127.html

海明码(也叫汉明码)具有一位纠错能力。本文以1010110这个二进制数为例解释海明码的编码和校验方法。

  编码

  确定校验码的位数x

  设数据有n位,校验码有x位。则校验码一共有2x种取值方式。其中需要一种取值方式表示数据正确,剩下2x-1种取值方式表示有一位数据出错。因为编码后的二进制串有n+x位,因此x应该满足

2x-1 ≥ n+x   

  使不等式成立的x的最小值就是校验码的位数。在本例中,n=7,解得x=4。

  确定校验码的位置

  校验码在二进制串中的位置为2的整数幂。剩下的位置为数据。如图所示。

位置 1 2 3 4 5 6 7 8 9 10 11
内容 x1 x2 1 x3 0 1 0 x4 1 1 0

  求出校验位的值

  以求x2的值为例。为了直观,将表格中的位置用二进制表示。

位置 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011
内容 x1 x2 1 x3 0 1 0 x4 1 1 0

  为了求出x2,要使所有位置的第二位是1的数据(即形如**1*的位置的数据)的异或值为0。即x2^1^1^0^1^0 = 0。因此x2 = 1。

  同理可得x1 = 0, x3 = 1, x4 = 0。

位置 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011
内容 0 1 1 1 0 1 0 0 1 1 0

  因此1010110的海明码为01110100110。

  校验

  假设位置为1011的数据由0变成了1,校验过程为:

  将所有位置形如***1, **1*, *1**, 1***的数据分别异或。

  ***1: 0^1^0^0^1^1 = 1

  **1*: 1^1^1^0^1^1 = 1

  *1**: 1^0^1^0 = 0

  1***: 0^1^1^1 = 1

  以上四组中,如果一组异或值为1,说明该组中有数据出错了。***1 **1* 1***的异或都为1,说明出错数据的位置为1011。

这种方法结束。还有一种只是说法不太一样,也贴上吧。转载自:http://www.yuyanping.com/the-basic-of-hamming-code/

海明码简单分析

确定校验位个数

海明码的码组长度需要符合:2^r – 1 (r代表校验位个数)

为什么是这个公式呢?因为:只有这样才能保证校验位足够覆盖整个需要校验的码组。

比如说:校验位有3位,那就是2^3 = 8 – 1 = 7 这样就可以校验长度为7的码组,如果按实际来说,也就是信息位 4 位,校验码 3 位。

通过上面分析,我们知道校验位 r 加上信息位 k 就等于 2^r – 1 , 这也就是为什么书上有 k + r <= 2^r – 1 的原因,下面是一些 R 和 K的关系表

信息码位数 1 2~4 5~11 12~26 27~57 58~120
校验码位数 2 3 4 5 6 7

注:表中数据取自网络

确定校验位的位置

知道了需要多少位校验码,还需要知道把校验码放在哪个位置上才行,这个只要记住,信息位在非2n的位置上,而校验位是在2n的位置上就可以了,条件再严格点就是,书上说的信息位所在海明码中的下标是需要等于前面几个校验组的下标,看到这里不懂没有关系,下面进行简单的例题分析。

举个粟(例)子:

信息字码组 : 1101 , 这时候信息位 k = 4 , 根据 k + r <= 2^r – 1 ,得出 r = 3 , 那就按书上说的,用P1、P2、P3来表示这3位校验码,这时候我们就来做填字格游戏。

P1 P2 1 P3 1 0 1

位置就这么简单的确定下来了,如果位数更多的话也是一样的,校验位就是在 1、2、4、8、16…….这些位置上。

计算校验位 Pi

上面已经知道要在什么位置插入校验码,现在就差下锅的料了,怎么求校验位实际的值呢?很简单!

根据海明码定义,是通过将信息进行分组,才得以实现检错和纠错的能力,就像一开始的图,每一个Pi都会包含3个信息位。

问题来了,那我怎么知道这些信息位是哪几个?还是书上的定义……

重点

比如说信息 1 1 0 1 ,从上面填字格游戏我们可以看出,被分别安排在 H3,H5,H6,H7的位置(这些位置怎么来的?7位数从1到7给每位编号嘛!)

则:H3 = H1+H2 (这里是等式右边下标相加等于等式左边下标的意思,下面一样)

H5 = H1+H4

H6 = H2 + H4

H7 = H1 + H2 + H4

通过上面的关系式,我们可以看出,右边在海明码中的数位,正好都是校验码的位置,下面来正式求校验码了。

P1(H1) = H3 ⊕ H5 ⊕ H7 (⊕表示异或)

P2(H2) = H3 ⊕ H6 ⊕ H7

P3(H4) = H5 ⊕ H6 ⊕ H7

大功告成!啥?还要我算出来?打字很累的,手短打字又慢,行吧行吧,想在以前自己学海明码,怎么看都不会的份上,可能也是自己太笨…….

信息码:1101 对应海明位 H3、H5、H6、H7,不要把海明码,校验位,信息位搞混了哦!虽然我也是经常弄混哈哈!

P1 = 1 ⊕ 1 ⊕ 1 = 1;

P2 = 1 ⊕ 0 ⊕ 1 = 0;

P3 = 1 ⊕ 0 ⊕ 1 = 0;

啥?异或不懂?没关系,我也经常不懂,相同 = 0 ,不同 = 1,异表示不同,按或的规则,是不是好奇葩!

好了,现在我们可以完成填字游戏了 P1 P2 1 P3 1 0 1 ==> 1010101,这就是我们最后需要得到的海明码,终于完成了!

还没完呢……有了这个海明码还需要知道怎么校验有没有出错啊,简单简单,跟我继续来学习!

海明码纠错和检错

有了上面的校验码和信息码,我们就能借用他们去知道怎么检查,信息在传送的过程中有没有发生错误,废话不多说,下面开始,还是书上的定义,因为校验码有三位,我们这里再申明三位码分别用S1、S2、S3表示,满足下列关系:

S1 = P1 ⊕ H3 ⊕ H5 ⊕ H7 ;

S2 = P2 ⊕ H3 ⊕ H6 ⊕ H7;

S3 = P3 ⊕ H5 ⊕ H6 ⊕ H7;

这样求出来的S1、S2、S3如果都为0就是没有出错,如果不是0就表示在海明码中出错的位置,将其取反就可以起到纠错的功能了。很简单吧,等等,为什么是上面的关系式?哪来的?可以往上看看求校验码那里,这就是分组的结果,这里我就偷懒下不算了,你们可以自己算算,真的结束了……

写在最后

这些文字都是根据个人所理解,根据自己的语言和思路,希望能对那些还不明白的人有一些帮助,如果我的文章有错误,请无情的给予指出,在此表示感谢!

海明码的编码和校验方法(易懂)相关推荐

  1. (看得懂的)海明码的编码和校验方法

    转载自:http://www.cnblogs.com/scrutable/p/6052127.html 看了半天就这个看懂了.所以转载了. 海明码(也叫汉明码)具有一位纠错能力.本文以1010110这 ...

  2. 易理解的海明码的编码和校验原理【转载】

    海明码简单分析(方法1) 海明码(也叫汉明码)具有一位纠错能力.本文以1010110这个二进制数为例解释海明码的编码和校验方法. 编码 确定校验码的位数x 设数据有nnn位,校验码有xxx位.则校验码 ...

  3. 汉明码(海明码)计算,模板套用易懂!

    汉明码(Hamming Code),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名. 本文以101101100这个二进制数为例解释海明码的编码和校验方法. 首先我们要知道汉明码是 ...

  4. 海明码检错与纠错,经典例子讲解~

    平凡也就两个字: 懒和惰; 成功也就两个字: 苦和勤; 优秀也就两个字: 你和我. 跟着我从0学习JAVA.spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美! 关注微信 ...

  5. 海明码(汉明码)详解

    海明码简介 海明码是由Richard Hanming于1950年提出的,它具有一位纠错能力. 海明码的计算 设欲检测的二进制代码为n位,为使其具有纠错能力,需要添加k位检测位,组成n+k位的代码.为了 ...

  6. 软考学习笔记1-计算机数字的码制(原码,反码,补码,移码,奇偶校验码,海明码以及循环冗余码)表示

    机器数有:0表示正号,1表示负号 1. 原码 以八位二进制为例,第一位是符号位: 则原码的取值范围是[1111 1111,0111 1111],也就是[-127,+127] Eg:A=+10 0101 ...

  7. 海明码编码和校验原理与实现【转载】

    海明编码与检验原由 以内存为例, 如果内存所处的电磁环境比较复杂, 或者空间环境下受到带电粒子的打击, 那么可能导致电容的充放电或者触发器的翻转(SRAM). 这样会导致存储信息的改变. 如果不校验, ...

  8. c语言海明校验码编码,海明校验码的编码规则有哪些?

    在海明码中, 位号数(1.2.3.--.n)为2的权值的那些位,即: 1(2^0).2(2^1).4(2^2).8(2^3).-2^(r-1)位,作为奇偶校验位,并记作: P1.P2.P3 .P4.- ...

  9. 信息论小课堂:纠错码(海明码在信息传输编码时,通过巧妙的信道编码保证有了错误能够自动纠错。)

    文章目录 引言 I 纠错 1.1 信息纠错的前提:信息冗余 1.2 发现抄写错误的方法 1.3 计算机的信息校验原理:奇偶校验 1.4 有效的纠错编码 II 案例 2.1 例子1:自身DNA的编码 2 ...

最新文章

  1. TensorFlow 莫烦视频学习笔记例子二(一)
  2. 如何查看哪些参数被新版本抛弃了?
  3. Google Play
  4. Java设计模式----策略模式(Strategy)
  5. C++ STL学习笔记 : 2. unordered map 容器
  6. exif linux php扩展_LNMP环境为PHP添加exif扩展
  7. (王道考研计算机网络)第一章计算机网络体系结构-第二节体系结构与参考模型2:ISO/OSI模型
  8. 高精度矢量汉字的一种填充方法_惯导解算数学基础4(等效旋转矢量解,圆锥补偿解)...
  9. python爬取CVPR2018关于detection的论文
  10. python--os模块
  11. 安装Win10操作系统-纯净版
  12. 一个免费、大小仅几MB但超好用的卸载工具——Geek Uninstaller
  13. C# 上位机界面添加扫码枪输入
  14. 洛谷4578 LOJ2520:[FJOI2018]所罗门王的宝藏——题解
  15. 历代治国理政者的教科书——金木水火土的起源之书:周朝的统治大法——《洪范》...
  16. php企鹅号_腾讯内容开放平台
  17. Dingoapi的使用
  18. 导入Spring源码找不到包spring-cglib-repack和spring-objenesis-repack
  19. 软件测试的新技术和方法
  20. 关于小米手机连接电脑,不能查看logcat日志的解决方法

热门文章

  1. 【愚公系列】2022年12月 .NET架构班 004-ABP vNext在WPF项目使用
  2. 如何烙饼又软又好吃 家常烙饼的做法讲解
  3. 电脑开机后正常运行几秒便会突然出现一次卡顿,无法操作,鼠标转圈
  4. gitLab使用smartGit
  5. PCA与ICA的介绍
  6. Keepalived无法绑定VIP故障排查经历
  7. osgEarth缓存
  8. CSS 去除文本上下多余间距
  9. 北京理工大学-操作系统原理 第2章作业2
  10. 解决插入U盘不显示盘符问题,最有效,最简单!!!