Hamming码是一种多重(复式)奇偶检错系统,是由Richard Hamming于1950年提出、目前还被广泛采用的一种很有效的校验方法。它将信息用逻辑形式编码,只要增加少数几个校验位,就能检测出一位出错并自动改正,即实现自动纠错。它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。

一.校验位的位数

校验位的位数与有效信息的长度有关。设N为校验码的位数,K是有效信息位,r为校验位,若要能够自动纠正一位传输错误,海明码应满足N=K+r≤2r-1。若r=3,则N=K+r≤7,所以K≤4;若要传输的是7位ASCII码,则需要至少4位校验位。

二.分组原则

在海明码中,位号数(1、2、3、……、n)为2n的那些位,即:1(20)、2(21)、4(22)、8(23)、…2r-1位,作为奇偶校验位,记作: P1、P2、P3 、P4、…Pr,余下各位则为有效信息位。

例如:当N=11,K=7,r=4时,相应海明码可示意为:

位号

1

2

3

4

5

6

7

8

9

10

11

P占位

P1

P2

×

P3

×

×

×

P4

×

×

×

其中×均为有效信息,海明码中的每一位分别被P1,P2,P3,P4,…,Pr中的若干位所校验,其规律是:第i位由校验位位号之和等于i的那些校验位所校验。如第7位,由P1,P2,P4(因为7 = 1 + 2 + 4)所检验。

 从而,可以得出每个检验位检验的位号如下表所示:

检验位位号

被检验位位号

P1

1, 3, 5, 7, 9, 11

P2

2, 3, 6, 7, 10, 11

P3

4, 5, 7, 7

P4

8, 9, 10, 11

三.编码、查错、纠错原理

1.编码原理(采用偶校验)

    若有效信息为1001000,先将它们依次填入3,5,6,7,9,10,11位。

位号

1

2

3

4

5

6

7

8

9

10

11

P占位

P1

P2

1

P3

0

0

1

P4

0

0

0

再依次计算P1,P2,P3,P4的值。如P1的取值应保证1, 3, 5, 7, 9, 11这6个位上1的个数为偶数,故P1的值应为0;类似的P2,P3,P4的值分别为0,1,0。

位号

1

2

3

4

5

6

7

8

9

10

11

P占位

0

0

1

1

0

0

1

0

0

0

0

2.查错与纠错

因为分四组校验,每组产生一位检错信息,共4位检错信息,构成一个指误字,记为:G4G3G2G1。其中:Gi由被Pi所检验的那些位中1的个数来决定,若1的个数为偶数,则Gi的值为0(因为编码时采用的是偶检验),否则为1。如G1由1, 3, 5, 7, 9, 11位中1的个数来决定。

若G4G3G2G1=0000,则表示没有出错;如有错,则G4G3G2G1形成的十进制数,即为错误所在位。由于每一位要么为0,要么为1,故可以实现自动纠正。

假设接受方收到的数据为:00110010000,计算可得G1G2G3G4=0000,表明数据是正确的,去掉校验位后,可得实际数据为:1001000

假设接受方收到的数据为:00110110000,计算可得G4G3G2G1=0110,表明第6位出现了错误,故可纠正为0。

  注意:Hamming纠错码只能准确纠正仅有一位出错的情况。

Hamming纠错原理相关推荐

  1. 汉明码纠错java_汉明码(Hamming)编码与纠错原理

    一 汉明码的编解码说明 (一)编码 Hamming(12,8) N=12,表示编码后的比特长度 K=8,待编码数据的比特长度 R=N-K=4,校验位的比特长度 D=3 汉明距离:相邻行之间不同比特数据 ...

  2. 你看得懂的海明码校验和纠错原理

    此文为转载 以下内容摘自笔者最新出版的著作<深入理解计算机网络>一书:http://item.jd.com/11165825.html 本书原始目录参见此文:http://blog.csd ...

  3. 你看得懂的海明码校验和纠错原理(一)

    以下内容摘自笔者最新出版的著作<深入理解计算机网络>一书:http://item.jd.com/11165825.html 本书原始目录参见此文:http://blog.csdn.net/ ...

  4. 简单理解海明码(汉明码)纠错原理

    昨天想了解海明纠错码,在网上搜了几篇文章都觉得讲得有点晦涩,不过最后好歹也是理解了,就用自己的方式表述一下,本文不注重介绍海明纠错码的算法实现(一个是并不复杂,另一个我认为大多数人也不需要具体去实现主 ...

  5. linux ecc校验原理,Nand ECC校验和纠错原理及ECC代码分析

    校验码生成算法的C语言实现 在Linux内核中ECC校验算法所在的文件为drivers/mtd/nand/nand_ecc.c,其实现有新.旧两种,在2.6.27及更早的内核中使用的程序,从2.6.2 ...

  6. 【通信系统仿真系列】基于Matlab的汉明码(Hamming Code)纠错传输以及交织编码(Interleaved coding)仿真

    基于Matlab的汉明码纠错传输以及交织编码仿真 前言 原理 汉明码 编码过程 冗余位数量计算 校验位位置计算 计算校验相关位 开始编码 解码过程 实验结果 仿真代码 可以修改的参数 下载链接 主函数 ...

  7. ECC校验——汉明码(Hamming Code)

    本文参考板块与链接: https://en.wikipedia.org/wiki/Hamming_code #wiki英文版 https://zh.wikipedia.org/wiki/%E6%B1% ...

  8. 计算机存储与I/O系统基础原理笔记

    一.存储器层次结构 1. CPU中的寄存器(Register)与其说是存储器,其实更像是CPU本身的一部分,只能存放极其有限的信息,但是速度非常快,和CPU同步.而CPU Cache(CPU高速缓存) ...

  9. 三代测序纠错软件汇总篇

    三代测序纠错软件汇总篇 原创: 李海滨 诺禾科服 2017-12-21 在之前推出的一篇微信中,已经介绍过了三代测序下机数据"三代全长转录组测序常见问题说明".那么我们拿到数据后是 ...

最新文章

  1. oracle外部表ora29913,从外部表中选择sqlplus错误:ORA-29913:执行ODCIEXTTABLEOPEN标注时出错...
  2. 7 linux服务器程序规范
  3. oracle学习(二)pl/sql基础
  4. 什么是CRM中间件的1250事件
  5. Javascript学习笔记1 数论
  6. mvn linux,Linux安装Maven
  7. Linux学习之sed编辑器
  8. 【转】解决Windows Media Player媒体库无法添加文件
  9. c语言指针跨函数使用内存
  10. 省选专练HAOI2015树上操作
  11. ubuntu zip文件解压失败
  12. 1521 一维战舰 水题
  13. python父亲节祝福_用python祝福父亲节_父亲节送给父亲的祝福语,挑一句话发朋友圈!...
  14. Microchip具有SDI和SQI接口串行SRAM存储器23LC512
  15. 【BZOJ 1050】旅行comf
  16. AWS大数据三种经典玩法
  17. dede - 栏目中判断
  18. ENVI中操作出现Error :array dimensions must be greater than 0错误的解决方法
  19. CSS设置文字自动换行
  20. 大疆哪吒飞控naza-m等无法解锁的问题遥控无法启动电机不转解决疑难杂症。

热门文章

  1. SitePoint播客#34:对斜线表示抱歉
  2. 副本与ISR设计--Kafka从入门到精通(十四)
  3. 计算机视觉的主要技术有哪些?计算机视觉应用领域盘点
  4. 测试如何与开发人员进行沟通
  5. websocket + node 手把手实现简陋聊天室
  6. 微信小程序---实现手机号发送验证码登录
  7. supported for git 2.9+
  8. 水溶的球形金纳米颗粒浓度1mg/ml|纳米金粒径13nm|Ag@SiO2核壳纳米粒子内核15nm外核5nm
  9. 立象Argox OX- 100条码机如何打印标签
  10. 机器视觉与计算机视觉的区别与联系