Hamming Code ECC (汉明码错误检测与修正)

现在存储工程师要接触到RAID 系统中最为复杂的等级之一。RAID 2 之所以复杂就是因为它采用了早期的错误检测与修正技术----汉明码(Hamming Code )校验技术。因此在介绍RAID 2 之前有必要讲讲汉明码的原理。

汉明码的原理:

图 1-5 针对4 位数据的汉明码编码示意图

汉明码是一个在原有数据中插入若干校验码来进行错误检查和纠正的编码技术。以典型的4 位数据编码为例,汉明码将加入3 个校验码,从而使实际传输的数据位达到7 个(位),它们的位置如果把上图中的位置横过来就是:

图 1-6 汉明码原理

注:Dx中的x是2的整数幂(下面的幂都是指整数幂)结果,多少幂取决于码位,D1是0次幂,D8是3次幂,想想二进制编码就知道了

现以数据码1101 为例讲讲汉明码的编码原理,此时D8=1、D4=1、D2=0、D1=1,在P1 编码时,先将D8、D4、D1 的二进制码相加,结果为奇数3,汉明码对奇数结果编码为1,偶数结果为0,因此P1 值为1,D8+D2+D1=2 ,为偶数,那么P2 值为0,D4+D2+D1=2 ,为偶数,P3 值为0。这样,参照上文的位置表,汉明码处理的结果就是1010101 。在这个4 位数据码的例子中,存储工程师可以发现每个汉明码都是以三个数据码为基准进行编码的。图示就是它们的对应表(图1-6 ):

从编码形式上,存储工程师可以发现汉明码是一个校验很严谨的编码方式。在这个例子中,通过对4 个数据位的3 个位的3 次组合检测来达到具体码位的校验与修正目的(不过只允许一个位出错,两个出错就无法检查出来了,这从下面的纠错例子中就能体现出来)。在校验时则把每个汉明码与各自对应的数据位值相加,如果结果为偶数(纠错代码为0)就是正确,如果为奇数(纠错代码为1)则说明当前汉明码所对应的三个数据位中有错误,此时再通过其他两个汉明码各自的运算来确定具体是哪个位出了问题。

还是刚才的1101 的例子,正确的编码应该是1010101 ,如果第三个数据位在传输途中因干扰而变成了1,就成了1010111 。检测时,P1+D8+D4+D1 的结果是偶数4,第一位纠错代码为0,正确。P1+D8+D2+D1 的结果是奇数3,第二位纠错代码为1,有错误。P3+D4+D2+D1 的结果是奇数3,第三但纠错代码代码为1,有错误。那么具体是哪个位有错误呢?三个纠错代码从高到低排列为二进制编码110 ,换算成十进制就是6,也就是说第6 位数据错了,而数据第三位在汉明码编码后的位置正好是第6 位。

那么汉明码的数量与数据位的数量之间有何比例呢?上面的例子中数据位是4 位,加上3 位汉明码是7 位,而2 的3 次幂是8。这其中就存在一个规律,即2P≥P+D+1 ,其中P 代表汉明码的个数,D 代表数据位的个数,比如4 位数据,加上1 就是5,而能大于5 的2 的幂数就是3 (23=8,22=4)。这样,存储工程师就能算出任何数据位时所需要的汉明码位数:7 位数据时需要4 位汉明码(24>4+7+1),64 位数据时就需要7 位汉明码(27>64+7+1 ),大家可以依此推算。此时,它们的编码规也与4 位时不一样了。

另外,汉明码加插的位置也是有规律的。以四位数据为例,第一个是汉明码是第一位,第二个是第二位,第三个是第四位,1、2、4 都是2 的整数幂结果,而这个幂次数是从0 开始的整数。这样存储工程师可以推断出来,汉明码的插入位置为1(20)、2(21)、4(22)、8(23)、16(24)、32(25)……

汉明码 java_(转)汉明码简介相关推荐

  1. php实现汉明码,实验四 汉明码系统

    <实验四 汉明码系统>由会员分享,可在线阅读,更多相关<实验四 汉明码系统(11页珍藏版)>请在人人文库网上搜索. 1.实验四 汉明码系统 一. 实验原理和电路说明这些多差错控 ...

  2. simulink 汉明码 用法_汉明码的性能分析

    武汉理工大学<MATLAB应用>课程设计报告 disp(['译码器输出信号误码率: ' num2str(symerr(msg,rcv)/length(msg))]) %计算误码率 3.2. ...

  3. 15 11 汉明码matlab,数字通信汉明码报告

    <数据通信原理>实验报告 实验题目: 汉明码的编译码 专业班级: 信息工程 2 班 姓名学号: 赵星敏 201342351 李明阳 201342300 指导教师: 刘钰 实验五 汉明码的编 ...

  4. simulink 汉明码 用法_汉明码编译码

    汉明码编译码 一设计思想 汉明码是一种常用的纠错码,具有纠一位错误的能力.本实验使用Matlab平台,分别用程序语言和simulink来实现汉明码的编译码.用程序语言实现就是从原理层面,通过产生生成矩 ...

  5. 【信道编码/Channel Coding】汉明码Hamming Code

    简介: 这是本专栏信道编码/Channel Coding的第三站,想对信道编码有一个系统性的认识可以看本专栏的 信道编码的整体框架 一文.而在本篇文章中,将介绍汉明码(Hamming Code)的构成 ...

  6. 简单易懂的汉明码(海明码)校验原理

    汉明码编码原理 汉明码也叫做海明码,它通过向原始数据中添加校验数据来进行查错和纠错.具体来说, 假设数据位有n位,则校验位为k,k满足 2^k >= n+k+1 汉明码的位数为n+k,且校验位位 ...

  7. 汉明码的原理、生成和检验

    在计算机运行过程中,由于种种原因导致数据在存储过程中可能出现差错,为了能够及时发现错误并且将错误纠正,通常可以将原数据配成汉明编码. 汉明码具有一位纠错能力. 设将要进行检测的二进制代码为n位,为使其 ...

  8. 汉明码(计算机组成原理)没听课也能懂

    汉明码是什么 汉明码是一种具有一位纠错能力的二进制代码 简单点来说就是,如果你接收到一个二进制数字串,这个二进制数字串是符合汉明码规则的.那么如果这个数字串出错了,0变成了1,1变成了0:你可以利用汉 ...

  9. 汉明码(海明码)解析

    文章目录 前言 启发 汉明码介绍 怎么实现汉明码? 怎么实现更高模块的汉明码? 为什么校验位一定是2的n次方? 用更简洁的方式理解汉明码 引用链接 前言 相信使用过光盘的读者都会有这样一种经历,如果不 ...

最新文章

  1. Visual Studio 2008 每日提示(十四)
  2. 10远程连接连接不上华为云_从云手机到云游戏,5G会在多大程度上改变我们的生活?...
  3. oracle11g导出表时会发现少表,空表导不出解决方案。
  4. 开发日记-20190425 关键词 gradle基础学习 7年之约 启动篇
  5. python get rect 函数_python笔记之函数
  6. 硬件:关于ARM的22个常用概念!
  7. mybatis字符串转成数字_Python字符串三种格式化输出
  8. SQL 查询横表变竖表
  9. 手持iPhone 12测温测出80度?安兔兔致歉:测温枪年久失修!
  10. Springboot java -jar 提示没没有主清单属性
  11. 人工智能产生式系统实验—动物识别系统(txt文件导入数据库)python代码实现以及关系图
  12. A N S I五个预定义的宏名
  13. RK3328 编码H265问题
  14. css选择器制作一个网页,CSS选择器和做网页思路
  15. 如何在IDEA中写Java程序
  16. 伟景行Citymaker高亮图层的内元素CSharp
  17. 梅科尔工作室-徐锦航-鸿蒙笔记2
  18. 三基色PWM调光方法
  19. wps2016抢先版_了解抢先体验游戏
  20. FISCO BCOS上使用第三方CA证书底层节点部署实操

热门文章

  1. 如何查询企业诉讼信息?
  2. vue照片墙使用crooper.js
  3. 低代码,没有想象的那么容易,一个过来人的吐槽
  4. selenium 您的连接不是私密连接 解决办法
  5. Web服务器集群搭建
  6. 一个外贸soho的生意经:逆向生意,正向赚钱
  7. css 在线颜色选择,CSS3 Only Color Picker 颜色选择器
  8. sdl android平板,凯立德超快定位,Android平板变导航之Wifi篇
  9. 实现第三方登录,并获取头像信息
  10. 工作中整理的常用的Linux命令