#问题

设海明码的校验位数为,数据位数为,它们需满足一个位数公式

最初看到公式时我感到很疑惑啊,百思不得其解,主要的问题是最后那个1哪来的。

看着公式望了半天,一点头绪都没有,好脑袋不如烂笔头,于是我开始手写举例试着理解海明码的校验逻辑。

不写不知道,一写吓一跳。写着写着就发现了,原来这个1来的如此妖娆。

#引入(海明码原理介绍)

我们先来复习一下二进制的划分,假设现在有七位二进制数据,用序号来指向。为什么选择七位呢?因为它们的序号刚好可以用三位二进制来表示。


我们再来看看海明码的纠错方法。

表示序号的三个二进制位,每一个二进制位取值为1的序号个数都是4个(图中列标红)。这冥冥之中的平衡一定可以好好利用。

我们分别把二进制3-1列取值为1的序号纳入集合A、B、C。

则集合取值

A={7,6,5,4}

B={7,6,3,2}

C={7,5,3,1}

有一种大家很熟悉,校验一个序列值的方法叫做奇偶校验,偶校验计算方式是序列中所有值异或为0。

如果我们按照A、B、C的集合来分类,每个集合都进行偶校验,就可以得到3个偶校验值,它们需要等于0。由于是固定的,所以A、B、C需要作为校验位参与运算。也就是需满足

根据异或运算的性质,自己与自己本身异或为0。所以可以得到A、B、C的计算公式

海明码考虑的情况是一位纠错。当某一位出错后,A、B、C和它们对应集合数据位的异或就不再是本身与本身的异或,并且最终结果会变为1。

也就是说,接收到数据后,若,则表示A对应集合有一位元素数据位出错了(集合对应的元素就是一列中二进制表示为1的元素)。同理,最后运算结果为0的集合对应的元素是没有问题的,这样就可以筛查出是具体哪一位元素出错,从而进行纠错。

比如出错,那么A=1代表第一列元素出错,B=0代表第二列元素没错,C=1代表第三列元素出错。满足所有交集的元素只有一个,也就是被筛查出来的。可以看见这种方法非常直接,因为将ABC排列成二进制数,所代表的序号就是出错的那一位。

如下图,红色方块代表本列有出错元素,A列确定了,C列确定了,交集;而绿色方块代表一定没有出错的元素,B列排除了。随后就被筛选出来了。

#探明

在上面讲述海明码纠错过程中,可能有同学已经发现问题所在了。

我们新增了三位校验位,可是只对七位数进行了纠错。

所以公式里的那个1,其实来自于我们没有画出的序号0!

我们回望A、B、C的分类,每一集合都有4个元素,看似非常规律,似乎冥冥之中决定了我们可以使用海明码这样的纠错方式。

偏偏卦不可算尽,虽然每集合都有4个元素,但元素的分布律不是均等的,不仅不是均等的,还遗漏了一个0。

所以个校验位,虽然能表示个序号,但最终只能带来的纠错能力。

同时我们需要将校验位加入传输数据,也就是真正的有效数据需满足


#ps 会什么会少一个呢?其实很简单,只要理清楚概念。k个校验位,输出的序列(比如ABC),含义是第ABC(二进制)个序号的数值有错,而不是总共有多少个数字之类。所以看看000代表的含义就知道少掉的一种情况去哪了——它代表序列校验正确。

#pps 海明码校验位的位置在这个问题上没有啥作用,最初我觉得它一定有什么深层含义,想了半天也没想出什么

#ppps 或许以后有时间还可以写篇博客,叫做《海明码的哲学原理》。

海明码 校验位数公式的理解相关推荐

  1. 原码的定义公式怎么理解_原码、反码、补码

    一. 机器数和机器数的真值 在学习原码,反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,叫做这个数的机器数.机器数是带符号的,在计算机用机器数的最高位存 ...

  2. 【计算机网络】数据链路层 : 差错控制 ( 纠错编码 | 海明码 | “海明码“ 原理 | “海明码“ 工作流程 | 确定校验啊位数 | 确定校验码和数据位置 | 求校验码值 | 检错纠错 )★

    文章目录 一. "海明码" 工作原理 二. "海明码" 工作流程 三. 确定校验码位数 四. 确定校验码和数据位置 0. 确定校验码位置 1. 引入二进制位 2 ...

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

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

  4. 校验码——海明码及码距,码距

    相关文章: 校验码--码距   https://blog.csdn.net/weixin_44330072/article/details/106860286 校验码--奇偶校验码   https:/ ...

  5. 计算机组成原理课程设计海明码,海明码生成与校验电路的设计

    海明码生成与校验电路的设计 沈阳航空航天大学 课课 程程 设设 计计 报报 告告 课程设计名称:计算机组成原理课程设计计算机组成原理课程设计 课程设计题目:海明码生成与校验电路的设计海明码生成与校验电 ...

  6. 数据校验-奇偶校验码/海明码/循环冗余码

    [前言] 数据在传输的过程中,会受到各种干扰的影响,如脉冲干扰,随机噪声干扰和人为干扰等,这会使数据产生差错.为了能够控制传输过程的差错,通信系统必须采用有效措施来控制差错的产生. 数据在传输过程中传 ...

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

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

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

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

  9. 海明码的编码和校验方法(易懂)

    转载自:http://www.cnblogs.com/scrutable/p/6052127.html 海明码(也叫汉明码)具有一位纠错能力.本文以1010110这个二进制数为例解释海明码的编码和校验 ...

最新文章

  1. ce变速注入dll失败_[LAB]一种无痕Dll模块注入方式
  2. 【OpenCV学习】XML的读写
  3. 我的空间为什么叫IT人?
  4. 晓曼机器人能恢复出厂设置吗_手机出毛病了就恢复出厂设置,会损伤手机吗?影响有多大呢...
  5. 关于解决DevExpress用DevExpress patch工具破解后经常弹出试用框的问题
  6. http://hudeyong926.iteye.com/blog/977152
  7. Django restframwork实现自定义数据格式的分页与搜索
  8. JAVA学习之旅番外篇
  9. 四大科技支撑大健康生态 360保险输出标准化、定制化两大核心力
  10. 7.3 环境(Condition)
  11. Matlab之四阶龙格—库塔法方法:解常微分初值问题
  12. 论文笔记:Integrated Object Detection and Tracking with Tracklet-Conditioned Detection
  13. 使用Scratch2和ROS进行机器人图形化编程学习
  14. 【C++课程设计项目】歌手评分系统(代码量1500行含设计文档)
  15. JS逆向——破解百度翻译参数(sign)爬虫 超级详细
  16. Unity 如何让BoxCollider自适配大小
  17. 2021年全球及中国卷烟产销量、主营企业经营现状及发展趋势分析[图]
  18. 计算机里的游戏怎么操作,怎么用手机玩电脑游戏-三款模拟器,手把手教你电脑上玩王者荣耀!...
  19. 关于缺氧的房间大小RoomSize修改(自用)
  20. 佳能430二代_闪光灯中的小钢炮 佳能430EX III-RT体验

热门文章

  1. 整个前端小玩意儿:用three.js开发的手机太空穿越VR游戏,特效非常猛
  2. MySQL基础语法和JDBC初认识
  3. 存储性能测试软件怎么用的,存储过程在性能测试中的应用
  4. 计算机毕业设计Python+uniapp教学质量评价系统小程序(小程序+源码+LW)
  5. ros安装opencv
  6. Linux下多挂载点mount实验
  7. ABP-Zero模块
  8. 适用于 Type-C接口PD应用的智能二极管保护开关
  9. 内网渗透思路06之一次完整的渗透测试
  10. 奥特曼变身模拟器隐私条款: