存储器的校验——汉明码(Hanming Code)
来源:互联网 发布:java用到哪些函数 编辑:程序博客网 时间:2024/05/18 13:12
汉明码可以检查出2个位的错误并且纠正1个位。
我们直接结合一个实例来分析步骤,有一个字节的数据如下:
10011010
我们要添加几个位,来检查出错误。
添加位的规则是:
1.首先空出2的整数倍的数,这些数将用来校验奇偶,这些位我们称它为奇偶校验位。(1,2,4,8,16,32,etc),其他的空位填写数据位。
_ _1_001_1010
2.每一个奇偶校验位会检查_ _1_001_1010中的特定的一组数(group),
一般情况下,这组数是这样的:
Group1: 1,3,5,7,9… 检验奇数位
Group2: 2,3,6,7,10,11… 检验两个,跳过两个,检验两个,跳过两个
Group3: 4,5,6,7,12,13,14,15…检验4个,跳过4个
Group4: 8,9,10,11,12,13,14,15…检验8个,跳过8个
比如我们想要进行偶校验,就要求我们每一个Group的1的个数是偶数个,那么:
第1组检验位为 1,3,5,7,9,11: (其中第一个就是待定的校验位,下面每组都是)
? _ 1 _ 0 0 1 _ 1 0 1 0. 看看1,3,5,7,9,11各位,发现正好是偶数个1,所以校验位1设为0就行了: 0 _ 1 _ 0 0 1 _ 1 0 1 0
第2组检验位为 2,3,6,7,10,11:
0 ? 1 _ 0 0 1 _ 1 0 1 0. 发现是奇数个1,于是设置校验位2为1,这样算上校验位的1,恰好是偶数个1: 0 1 1 _ 0 0 1 _ 1 0 1 0
第3组检验位为 4,5,6,7,12:
0 1 1 ? 0 0 1 _ 1 0 1 0. 发现是奇数个1,于是设置校验位4为1: 0 1 1 1 0 0 1 _ 1 0 1 0
第4组检验位为 8,9,10,11,12:
0 1 1 1 0 0 1 ? 1 0 1 0. 发现是偶数个1,于是设置校验位8为0: : 0 1 1 1 0 0 1 0 1 0 1 0
最后配置好的汉明码:
011100101010.
纠错过程:
比如我们传送的011100101010,但接收到的是011100101110
出错位可以这样确定:
对接受到的汉明码011100101110 进行每一个校验码的验算,即他所在的组(算上他,与之前不同的是,之前校验码是待定的,现在已经有值了)的1的个数应该是偶数个,这就暗示我们将要覆盖这个值(实际上并不是,仅仅是验算)的新校验码应该是0才对,但是由于接收到的有错误,我们在验算中发现有的校验位要填1。
这里,验算后发现第2个和第8个校验位要填1,那么错误的数据位就是2+8=10.
reference:
http://users.cs.fiu.edu/~downeyt/cop3402/hamming.html
- 存储器的校验——汉明码(Hanming Code)
- 存储器(四) -- 汉明码
- 汉明码校验C代码
- 汉明码 hamming code
- Hamming Code ECC (汉明码错误检测与修正)
- 计算机组成原理——汉明码
- 大三上信息论与编码实验——汉明码的编码过程的c++实现
- 汉明码的本质
- 汉明码
- 汉明码
- 存储器层次结构——基于存储器的程序优化
- STM32存储器 — <2>STM32存储器知识的相关应用(IAP、Bit Banding)
- STM32存储器 — <2>STM32存储器知识的相关应用(IAP、Bit Banding)
- STM32存储器 — <1> 关于STM32的存储器
- 软件设计---海明码(汉明码)的计…
- 虚拟存储器(二)——Linux虚拟存储器系统
- 7,4汉明码及8,4扩展汉明码的实现
- 汉明码编码的纠错原理
- C++ 内存对齐及空类大小
- Deepin15.4.1下CLion登录例子(带自动提示,无逻辑)
- Hadoop与Hbase兼容性
- JS原型
- 7.18 刚写完代码
- 存储器的校验——汉明码(Hanming Code)
- 注解
- 使用file把文件读取到浏览器并用进度条显示
- Android基础控件——Dialog的自定义,仿淘宝、天猫、京东等商城广告弹窗
- Spark调优1
- Kubernetes Node Controller源码分析之配置篇
- spark调优2
- 网络
- 链表--删除一个无头单链表的非尾节点