海明码的本质

2024-02-28 19:20
文章标签 本质 明码

本文主要是介绍海明码的本质,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        海明码的实质,就是类似于一种二分性质的问答,每一次问答可以排除掉一半的可能,就像别人问你几个问题(均是类似“是男的吗?”这种yes or no 的问题)来猜你心中想的人。

        具体通过一个例子来说明,现在我们有16个位置来传输海明码(包括信息码和校验码),我们为这16个从0-15位置编号,并将2^n编号的位置作为校验码(原因在后面会体现出来),这里是1,2,4,8。

        现在我们将1处放的值作为如图黄色两列的偶校验码,将2处放的值作为如图绿色两列的偶校验码。

        然后,当我们对接受到的数据的黄色两列做偶校验,如果出错(假设只有一位错误),说明错误在黄色两列,此时如果绿色列也出错,那么就可以确定错误一定在最后一列。而1、2两个出错情况有四种组合(错错、错对、对错、对对),据此就可以确定错误在哪一列

        对于编号4、8处同理,可以错误确定在哪一行。

        结合行和列就可以确定是哪一位数据出了错

        而实际上,我们将4个偶校验结果的值排列,比如0111(1、2、4处偶校验查出问题,8处偶校验没问题) ,这说明出错的位置影响到了1、2、4,没影响到8,可以确定是7处的数据错误。而(0111)_2 = (7)_{10}

        这并不是巧合, 把二进制下的编号列出来,我们会发现,问错误是不是发生在黄色列,就等价于在问错误的编号的二进制最后一位是不是1。也就是说,如果确定了错误在黄色列,就确定了错误的二进制编号的最后一位是1。

        而其他几个校验对应的就是剩下的3位,这就解释了为什么偶校验结果组成的二进制串转化成十进制正好就是错误的位置。 

                        

        现在,我们只需要对4个校验位分别做偶校验,然后将结果排列起来,就可以确定错误的地方。 

        这里我们会发现一个细节上的问题,如果四个偶校验都没问题(结果都是0),那么是说明0号位出错还是说明没错呢?

        再深入想,这里的问题本质上其实是:检查错误的结果有2^4 = 16种,但实际上有17种情况(16个位置其中一个发生错误或者没有错) 。我们没有考虑到如果没出错应该怎么表示。

        一个简单的方法是直接将0号位剔除,不做信息位,这样校验结果为0时就说明没有错误,这也就是为什么在海明码中编号从1开始。

        在扩展海明码中,这个0号位被巧妙地利用起来,用来做整体的偶校验位,这样,海明码不仅能纠正1位错,还能查两位错。

        懂了上面的过程,我们就无需去死记硬背,下面再结合Logisim实验设计看一下更一般的情况。

        这里原始数据有16位,而根据上面的讨论可以发现,原始数据位+校验位(n + 1位)要比某个2的n次幂小,这里容易得出n = 5。

        于是可以做出图来:(P是校验位,D是数据位)

        注意这里左右两个实际上是叠在一起的(和5阶卡诺图中类似) ,当P1处检查出错误时,实际上说明错误在左图1、3列和右图1、3列一共四列中,这一点结合二分就很好理解,每一个校验位将错误范围减半,这里要减半就是限制在4列而不是2列。

        根据图可以轻松得到:

P_1 = D_1\oplus D_2\oplus D_4\oplus D_5\oplus D_7\oplus D_9\oplus D_{11}\oplus D_{12}\oplus D_{14}\oplus D_{16} 

P_2=D_{1}\oplus D_{3}\oplus D_{4}\oplus D_{6}\oplus D_{7}\oplus D_{10}\oplus D_{11}\oplus D_{13}\oplus D_{14} 

        P_3= D_{2}\oplus D_{3}\oplus D_{4}\oplus D_{8}\oplus D_{9}\oplus D_{10}\oplus D_{11}\oplus D_{15}\oplus D_{16} 

P_4 = D_5\oplus D_{6}\oplus D_{7}\oplus D_{8}\oplus D_{9}\oplus D_{10}\oplus D_{11} 

 P_5 = D_{12}\oplus D_{13}\oplus D_{14}\oplus D_{15}\oplus D_{16}

        而解码就和偶校验一样的得到校验结果G_1G_5 ,然后就可以判断错误个数。

        纠正错误可以如下用译码器进行,注意下标从1开始在这里的体现。

         

这篇关于海明码的本质的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/756384

相关文章

CSS学习12--清除浮动的本质及处理办法

清除浮动 前言一、清除浮动的本质二、清除浮动的方法 前言 为什么要清除浮动? 浮动不占用原文档流的位置,可能会对后面的元素排版产生影响。因此需要在该元素中清除浮动,清除浮动后造成的影响。 一、清除浮动的本质 为了解决父级元素因为子级元素引起内部高度为0的问题。 <html><head><style>* {padding: 0;margin: 0;}.box1 {width:

io本质+io效率本质,5种io模型(介绍,异步/同步区别,阻塞/非阻塞区别)

目录 5种io模型 io引入 io的本质 io效率的本质 模型引入 以钓鱼为例 效率最高的方式 异步io和同步io的区别 阻塞式和非阻塞式io的区别 介绍 阻塞式io ​编辑 非阻塞式io ​编辑 信号驱动式io ​编辑 多路转接/复用 ​编辑 异步io 5种io模型 io引入 io的本质 以read ,write为例: 如果底层缓冲区没有数据

去 IOE 的本质不是 PR 砸场,而是云端再造

「青云一直有一个目标,就是要建立一朵更好的云,全模云的推出也标志着我们在实现这个目标上往前走了一大步。」 本文由青云QingCloud CTO 甘泉的演讲内容整理而来,共 2628 字,8 图,阅读大概需要 7 分钟。 青云QingCloud 如何解决「敏态」问题 先谈谈传统业务的 IT 部署模式,基本上都是刀片机+存储柜的模式,它们都是真实的物理机,上图密密麻麻的是刀片机,右边是存

java复习第十课,方法的本质,形参和实参(很重要)

java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,声明格式: 修饰符[public]  修饰符2[static]  返回值类型[int、String等]  方法名 (形参列表){ java语句列表..... } 形式参数:在方法被调用时用于接受外界输入的数据 实参:调用方法时实际传递给方法的数据 返回值:方法在执行完毕后返还给调用它的环境的数据 返回值类型:事先约

转载:从小白鼠试毒问题-海明码

问题提出: 有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出哪瓶水有毒? 问题分析: 需要多少只小白鼠?这个很容易想到是10只(二进制),但是如何鉴别哪一瓶水有毒?(即如何安排小白鼠?)原贴如下:https://blog.csdn.net/mengtnt/article/details/8477747 海明码计算: 转载

通过反射了解泛型的本质

通过Class,Method来认识泛型的本质 我们知道Java中集合的泛型是防止错误输入的,例如ArrayList<String>list1=new ArrayList<String>();接下来如果再有list1.add(20);系统便提示错误,程序无法通过编译,以为list1的类型已被指定为String,那么我们看以下代码 Class c1=list.getClass();Class c

延续业绩升势,亚朵吃透了酒店的服务本质

中国酒店的核心资产是什么? 不同的品牌会有不同的认知,但他们的目标大概都是一致的:提供足够好的体验,打造有心智吸引力的品牌,最后将其转化为业绩。这条路上,亚朵,是一个绕不开的案例。 8月29日晚,亚朵集团(NASDAQ:ATAT)发布了2024年二季度财报。财报数据显示,今年第二季度,亚朵集团实现总营收17.97亿元(人民币,下同),同比增长64.5%;调整后净利润为3.28亿元,同比增长31

17. 位移运算的本质是什么,为什么要有位移运算,作用范围和使用技巧。

1. 位移运算的本质 位移运算(bitwise shift operations)是直接对二进制数的每个位进行操作的运算。通过将数值的二进制位左移或右移,可以快速地完成一些数学运算或位级控制操作。位移运算通常有两种类型: 左移运算(<<):将二进制位向左移动,低位用 0 填充,高位丢弃。右移运算(>>):将二进制位向右移动,具体可以分为两种:算术右移和逻辑右移。 算术右移:保持符号位不变(用于

概率论的本质

几何分布 第一次出现正面所需要的次数 E(x) = 1/p Var(x) = (1-p)/p^2 柏松分布 其实是二项分布的一个简化版。n很大, p很小 p(k) = e-m (x^k/k!) 期望 E(x) = sum{xp(x)} Var(x) =E[(x-Ex)^2] 平均分布 E(x) = (a+b)/2 Var(x) = (n^2 - 1)/12 疑问: P105

文件描述符的本质

1. 文件描述符的本质是数组元素的下标 右侧的表称为i节点表,在整个系统中只有1张。该表可以视为结构体数组,该数组的一个元素对应于一个物理文件。 中间的表称为文件表,在整个系统中只有1张。该表可以视为结构体数组,一个结构体中有很多字段,其中有3个字段比较重要: file status flags:用于记录文件被打开来读的,还是写的。其实记录的就是open调用中用户指定的