Hamming纠错原理
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纠错原理相关推荐
- 汉明码纠错java_汉明码(Hamming)编码与纠错原理
一 汉明码的编解码说明 (一)编码 Hamming(12,8) N=12,表示编码后的比特长度 K=8,待编码数据的比特长度 R=N-K=4,校验位的比特长度 D=3 汉明距离:相邻行之间不同比特数据 ...
- 你看得懂的海明码校验和纠错原理
此文为转载 以下内容摘自笔者最新出版的著作<深入理解计算机网络>一书:http://item.jd.com/11165825.html 本书原始目录参见此文:http://blog.csd ...
- 你看得懂的海明码校验和纠错原理(一)
以下内容摘自笔者最新出版的著作<深入理解计算机网络>一书:http://item.jd.com/11165825.html 本书原始目录参见此文:http://blog.csdn.net/ ...
- 简单理解海明码(汉明码)纠错原理
昨天想了解海明纠错码,在网上搜了几篇文章都觉得讲得有点晦涩,不过最后好歹也是理解了,就用自己的方式表述一下,本文不注重介绍海明纠错码的算法实现(一个是并不复杂,另一个我认为大多数人也不需要具体去实现主 ...
- linux ecc校验原理,Nand ECC校验和纠错原理及ECC代码分析
校验码生成算法的C语言实现 在Linux内核中ECC校验算法所在的文件为drivers/mtd/nand/nand_ecc.c,其实现有新.旧两种,在2.6.27及更早的内核中使用的程序,从2.6.2 ...
- 【通信系统仿真系列】基于Matlab的汉明码(Hamming Code)纠错传输以及交织编码(Interleaved coding)仿真
基于Matlab的汉明码纠错传输以及交织编码仿真 前言 原理 汉明码 编码过程 冗余位数量计算 校验位位置计算 计算校验相关位 开始编码 解码过程 实验结果 仿真代码 可以修改的参数 下载链接 主函数 ...
- ECC校验——汉明码(Hamming Code)
本文参考板块与链接: https://en.wikipedia.org/wiki/Hamming_code #wiki英文版 https://zh.wikipedia.org/wiki/%E6%B1% ...
- 计算机存储与I/O系统基础原理笔记
一.存储器层次结构 1. CPU中的寄存器(Register)与其说是存储器,其实更像是CPU本身的一部分,只能存放极其有限的信息,但是速度非常快,和CPU同步.而CPU Cache(CPU高速缓存) ...
- 三代测序纠错软件汇总篇
三代测序纠错软件汇总篇 原创: 李海滨 诺禾科服 2017-12-21 在之前推出的一篇微信中,已经介绍过了三代测序下机数据"三代全长转录组测序常见问题说明".那么我们拿到数据后是 ...
最新文章
- oracle外部表ora29913,从外部表中选择sqlplus错误:ORA-29913:执行ODCIEXTTABLEOPEN标注时出错...
- 7 linux服务器程序规范
- oracle学习(二)pl/sql基础
- 什么是CRM中间件的1250事件
- Javascript学习笔记1 数论
- mvn linux,Linux安装Maven
- Linux学习之sed编辑器
- 【转】解决Windows Media Player媒体库无法添加文件
- c语言指针跨函数使用内存
- 省选专练HAOI2015树上操作
- ubuntu zip文件解压失败
- 1521 一维战舰 水题
- python父亲节祝福_用python祝福父亲节_父亲节送给父亲的祝福语,挑一句话发朋友圈!...
- Microchip具有SDI和SQI接口串行SRAM存储器23LC512
- 【BZOJ 1050】旅行comf
- AWS大数据三种经典玩法
- dede - 栏目中判断
- ENVI中操作出现Error :array dimensions must be greater than 0错误的解决方法
- CSS设置文字自动换行
- 大疆哪吒飞控naza-m等无法解锁的问题遥控无法启动电机不转解决疑难杂症。