对海明码的理解
- 格式:docx
- 大小:39.24 KB
- 文档页数:9
海明码详解(原创通俗版)张健北大青鸟哈尔滨博仁培训中心2010年1月25日一、通过异或来解决:这两天也在研究海明码的问题,把我的理解说给你吧,按照我说的可以顺利得到海明码步骤:一、确定校验码的位数k二、确定校验码的位置三、数据的位置四、求出校验位的值其中还需要一个公式的推导,好了,下面开始:首先,海明码的作用是:在编码中如果有错误,可以表达出第几位出了错,二进制的数据只有0和1,修改起来很容易,求反即可,这需要加入几个校验位。
对于一个m位的数据信息,到底应该加入几个呢?假设需要k个,那么编码之后应该是m+k位,这k个二进制数组成的数据能够表达的数值是2的k次方个,比如需要3个校验位,k=3,3位二进制数从000 、001 、……、111共有8个数值,而这m+k个二进制组成的数据的所有编码中,只有一个是正确的,其他的都是表达了错误的位置信息的,所以2的k次方个编码中去掉正确的那一个,也就是(2的k次方-1),如果这个数值等于m+k,就可以完全表达出出错的位置了,(2的k次方-1)也可以大于m+k,比如:给10个学员进行编号,可以用一位数来编码:学号为0 、1 、2 、3 、……、9 ,也可以用两位数或者五位数,00000 、00001 、00002 、……、00009,但是没有必要用五位呀,只要能满足编码的要求就可以了,所以说我们求出满足条件的最小的k值就可以!下面举例说明:我们要推导出D= 101101这个数字的海明码一、确定校验码的位数k数据的位数m=6,按照上面我们说的公式来计算满足条件的k的最小值2的k次方-1>=m+k即:2的k次方-1>=6+k解此不等式得:满足不等式的最小k=4,也就是D=101101这个数字的海明码应该有6+4=10位,其中原数据6位,校验码4位。
二、确定校验码的位置设这4为校验码分别为P1、P2、P3、P4数据从左到右为D1、D2、……、D6编码后的数据共有6+4=10位,设为M1、M2、……M10校验码Pi(这里i=1,2,3,4)在编码中的位置为2的(i-1)次方,值是这样的1,2,4,8,16……即:P1在M1位置,P2在M2位置,P3在M4位置,P4在M8位置,这里一共有10位,所以排不到M16,见图中“甲”行红色字体M1 M2 M3 M4 M5 M6 M7 M8 M9 M10甲P1 P2 D1 P3 D2 D3 D4 P4 D5 D6乙 1 0 1 1 0 1图1三、数据的位置这个很简单,除了校验码的位置其余的就是数据的位置,填充进去就可以了,见图中“甲”行的蓝色字体,于是可以先把数据信息填进去,见“丙”行,下面就是最关键的部分,求出校验位的值啦!!!四、求出校验位的值这里会用到一个公式,找了好多资料都说了这个公式,但是完全没有必要死记硬背,是有规律的,回顾一下二进制的表达,对于一个4位二进制数,可以表达16个值,0000B~1111B,“B”代表二进制,“D”代表十进制,假定这4位二进制数,从左到右分别为S4、S3、S2、S1,请把脑袋向左歪90°看下图:1D=0001B,所以M1在S1那一行,4D=0100B,所以M4在S3那一行,5D=0101B,这就不能用一个格子来表达了,所以需要S3和S1共同表达,即4+1=5,看图中黄色的部分,是不是M5?看出规律了吧?M后边的数字都可以拆为由2的n次方的数相加来表达,在举一个例子M7:4+2+1=7即:7D=0111B,看图中橙色的部分,都是M7吧!by the way:这个公式在验证纠错的时候还会用得到,我找的网上的很多资料写了好几个公式,看后完全“懵懂”了,其实只需要这一个就可以了,按照我说的这个方法,你只要记住这个公式的推导就可以解决所有问题了,怎么样?强大吧?S1 = M1 ⊕M3⊕M5⊕M7⊕M9S2 = M2 ⊕M3⊕M6⊕M7⊕M10S3 = M4 ⊕M5⊕M6⊕M7S4 = M8 ⊕M9⊕M10 图2(说明:在这个图,根据M后面的数字,按2平方展开,即按蓝色那排(因为这排是Pi的值)有关,然后再把3D=0011B,5D=0101B形式,有1的地方就是它所在的位置。
海明码原理
海明码原理是记录和传播信息的一种编码方式。
它是由早期的美国科学家珍妮海明创建的,用来满足信息处理领域中的一些需求。
它是一种线性反馈法,允许信息以高效的方式进行编码,以及由编码到译码。
海明码原理基于二进制编码,每一位由0和1两个数字组成。
这种代码可以被用来表示字母、数字和特殊字符,并可以用于传输数据和信息。
例如,单词“hello”可以用七个比特位编码:01101000 01100101 01101100 01101100 01101111。
通过海明码原理,可以将比特串转换成码字,也就是将比特串按照一定的顺序重新排列组合,使得字符或符号可以按照正确的顺序出现。
这种编码方式有很多优势,可以有效防止传输过程中信息的失真,使得接收端可以正确地接收信息。
在传输过程中,可以使用不同的信道,比如电子邮件、短信、函件等,将海明码传输到目的地。
为了保证信息的安全,海明码技术还可以结合加密技术,使信息在传输过程中不易被破解,从而保护信息的安全性。
海明码的发明对信息处理领域产生了重大影响,在计算机科学、信息技术、电子通讯和其他相关领域都有重要的作用。
现在,海明码被广泛应用在有线通讯、无线通讯、数据存储、数据处理等领域,它更加普及,使用范围也更广。
综上所述,海明码原理是一种线性反馈法,是一种基于二进制编
码的编码方式,可以有效地保护信息在传输过程中的安全性。
它已经逐步成为现代信息处理的标准,广泛应用于各个领域,从而极大地改进了人类的生活质量。
海明码,汉明码,hamming code--计算法则最近最海明码很感兴趣,查了些资料,有⼀篇资料极好,所以贴出来,希望供有需求的⼈能有个参考。
1 海明码原理概述 海明码是R. Hamming提出的, ⼀种可以纠正⼀位错的差错控制编码。
了解海明码之前, 先回顾⼀下简单的奇偶校验码的情况。
若信息位为K=n- 1位, 表⽰为a1~an- 1, 加上⼀位偶校验位(冗余位)a0, 构成⼀个n位的码字a0~an- 1, 在接收端校验时, 可按关系式: s=a0+a1+a2+…an- 1来计算, 若S=0, 则⽆错, 若S=1, 则有错。
上式可称为监督关系式, S称为校正因⼦。
在奇偶校验情况下, 只有⼀个监督关系式和⼀个校正因⼦, 其取值只有两种(0或1),分别代表了⽆错和有错的情况, ⽽不能指出差错所在的位置。
不难想象, 若增加冗余位, 也相应地增加监督关系式和校正因⼦, 就能区分更多的情况。
如, 若有两个校正因⼦, 则其取值就有4种可能: 00、01、10或11, 就能区分4种不同情况。
若其中⼀种表⽰⽆错, 另外三种不但可以⽤来指出有错, 还可以⽤来区分错误的情况, 如指出是哪⼀位错等。
⼀般⽽⾔, 信息位为K位, 增加r位冗余位, 构成n=k+ r位码字。
若希望⽤r个监督关系式产⽣的r个校正因⼦来区分⽆错和在码字中的n个不同位置的⼀位错, 则表⽰:或。
2 构造海明码的冗余位和监督关系式的⽅法 按上述设计思路, 为了叙述清楚, 下⾯以信息位K=7来讨论海明码的冗余位和监督关系式的具体构造过程和⽅法。
因为且k=7, 所以≥4, 即⾄少需要4位冗余位(对应产⽣4个校正因⼦和4个监督关系式), 形成24=16种不同取值, ⽤其中11种分别表⽰⽆错和a0~a10中⼀位错的情况。
构造表如表1: 冗余码如下: a0=a8+a9+a10 (1) a1=a5+a6+a7 (2) a2=a4+a6+a7+a9 (3) a3=a4+a5+a7+a8+a10 (4) 监督关系式如下: s0=a0+a8+a9+a10 (5) s1=a1+a5+a6+a7 (6) s2=a2+a4+a6+a7+a9 (7) s3=a3+a4+a5+a7+a8 (8)3 构造校正因⼦和监督关系式时应遵循的原则 上表1中, 构造4个校正因⼦和4个监督关系式的过程中, 为了体现前⾯所述设计思想,应遵循如下原则: 图1中共有11列, 每⼀列应保证各不相同, 即s0 s1 s2 s3 的16种组合中, 取“0000”组合表⽰⽆错, 剩下15种中取其中11种⽤来表⽰a0~a10中某⼀位出错的情况, 所以,下表2有错, 因为a5 和a7 两列均为“0111”。
2.3.5 海明码原理•k=n-1位a n-1a n-2…a1a 0an-1a n-2…a1a0•a n-1+a n-2+…a1a0•上式可称为监督关系式,S称为校正因子。
•••两个(2位)校正因子•其中一种表示无错,另外三种不但可以用来指出有错,还可用来区分错误的情况,如指出是哪一位错等。
••• 2r≥n+1或者2r≥k+r+1 注:(n=k+r)•如果用k=4为例来说明,要满足上述不等式,则r>3。
•假设取r=3则n=k+r=7,即在4位信息位a6a5a4a3后a1a0,构成7位码字面加上3位冗余位a2a6a5a4a3a2a1a0。
•4位信息位中某几位半加得到••无错时,这三个关系式的值S2、S1和S0全为“0”。
•••••S2S1S0错码位置a0 a1 a2•由此得到监督关系式:•S2=a2+a4十a5十a6•同理还有:• S1=a1+a3十a5十a6• S0=a0+a3十a4十a6•冗余位aa1和a0的值应根据信息位的取值按监2督关系式来决定a2 a4 + a5+ a6a1 a3+ a5+ a6a0a3+ a4+ a6•a2a1a0•已知信息位后,按此三式即可算出各冗余位。
a 6a 5a 4a 3a 2a l a 0a 6a 5a 4a 3a 2a l a 00000000100011100010111001100001010110100100011110101100101001101100001010110111010100110011111010001110001111111•••0010101 0011101a2a1a0•••S2S1S0 011错码位置a3•101 101••••若用下述方法排列可以纠正传输中出现的突发性错误1 0 1 10 1 0 0 P0 1 0 0 每行一个字吗1 1 0 11 1 1 10 1 1 0•而逐位发送的顺序则是一列一列进行的,图中的顺序为。
海明码详解①海明校验的基本思想将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。
实质上,海明校验是一种多重校验。
②海明校验的特点它不仅具有检测错误的能力,同时还具有给出错误所在准确位置的能力。
一.校验位的位数校验位的位数与有效信息的长度有关设:N--为校验码的位数 K--是有效信息位 r--校验位(分成r组作奇偶校验,能产生r位检错信息)海明码应满足 N=K+r≤2r-1 若r=3 则N=K+r≤7 所以K≤4二.分组原则`在海明码中,位号数(1、2、3、……、n)为2的权值的那些位,即: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 11P占位P1 P2 × P3 × × × P4 × × ×其中×均为有效信息,海明码中的每一位分别被P1P2P3P4… Pr 中的一至若干位所校验,其规律是:第i位由校验位位号之和等于i的那些校验位所校验如:海明码的位号为3,它被P1P2(位号分别为1,2)所校验海明码的位号为5,它被P1P3(位号分别为 1,4)所校验归并起来: 形成了4个小组,每个小组一个校验位,校验位的取值,仍采用奇偶校验方式确定。
如表2·6 、表2·7所示:三.编码、查错、纠错原理以4位有效信息(b1、b2、b3、b4)和3位校验位(P1、P2、P3)为例: K=4 r=3 海明序号 1 2 3 4 5 6 7海明码 P1 P2 b1 P3 b2 b3 b4根据表2-8可以看到(1)每个小组只有一位校验位,第一组是P1、第二组是P2、第三组是P3。
计算机基础:海明码是什么?海明码:奇偶校验码的⼀种扩充。
只能检验和恢复⼀位。
例如:求1011 的海明码?答案:1010101其中:红⾊所在位数 1,2,4,8,... 为计算出的验证码,⿊⾊的信息为原信息码:1011。
计算⽅法:1.先计算需要⼏位海明码?1011 是四位 ,它有四种只错⼀位的情况,(0011,1111,1001,1010)再加上x位海明码的错⼀位情况。
再加上⼀种全部位都正确的情况。
所以海明码需要 x+4+1 中可能。
所以需要海明码x位可以表⽰出 x+4+1 中可能。
即: x+4+1 <=2**x (2**x 表⽰2的x⽅),计算得到3,海明码最少是3,当然4,5,6位都可以,就像⽤101 校验和0101 00101 000101 00000000101 都能校验⼀样,只是⽐较浪费。
所以计算出了海明码的位数为3。
(其实也就是往原编码内填充1,2,4,8,16,这些地⽅,填完为⽌。
)2. 开始计算。
1011 中间插⼊三位验证码位数7654321信息101x1x x在第7位:7=2**2+2**1+2**0=4+2+16 对应位置为0,不算在内。
5=2**2 +2**0 = 4 +13=2**1+2**0 =2+1这样得到(2**0) 出现三次,所以在最低位为1 ,(出现偶数次就是0,奇数次就是1,)(原计算⽅法是⽤异或计算 1 xor 1 =0 , 1xor 0 =1 , 0 xor 0=0 ,这⾥结果都⼀样)(2**1)出现两次,所以第⼆位是0,(2**2)出现两次,所以第三位是0,所以就得到位数7654321信息10101013.验证和举例我们传输这个得到的海明码,和⼀个错误的海明码:正确的验证 1010101 :1.得到海明码(1,2,4 位,如果更长的话就是8,16,32。
位)001。
2.信息码为剩下的 1011,同步骤⼆:计算得到001,3.和上⾯的到的海明码001 异或(001 xor 001 ) =000,正确错误的验证 1110101 :1.得到海明码 001。
1.海明码的概念海明码是一种可以纠正一位差错的编码。
它是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。
它必需满足以下关系式:2^r>=n+1 或2^r>=k+r+1海明码的编码效率为:R=k/(k+r)式中k为信息位位数r为增加冗余位位数[font class="Apple-style-span" style="font-weight: bold;"id="bks_cu2htj1g"]2.[/font][font class="Apple-style-span" style="font-family: ����; font-size: 12px; line-height: normal; " id="bks_4dxtg15k"][font]海明码的原理[/font]在数据中间加入几个校验码,将玛距均匀拉大,将数据的每个二进制位分配在几个奇偶校验组里,当某一位出错,会引起几个校验位的值发生变化。
海明不等式:校验码个数为K,2的K次幂个信息,1个信息用来指出“没有错误”,其余2K-1个指出错误发生在那一位,但也可能是校验位错误,故有N<=2的K次-1-K能被校验。
海明码的编码规则:1.每个校验位Ri被分配在海明码的第2的i次的位置上,2.海明玛的每一位(Hi)是由多个/1个校验值进行校验的,被校验玛的位置玛是所有校验这位的校验位位置玛之和。
一个例题:4个数据位d0,d1,d2,d3, 3个校验位r0,r1,r2,对应的位置为:d3 d2 d1 r2 d0 r1 r0 ======b7 b6 b5 b4 b3 b2 b1校验位的取值,就是他所能校验的数据位的异或b1为b3,b5,b7的异或,b2为b3,b6,b7 b4为b5,b6,b7 [/font][font class="Apple-style-span" style="font-family: ����; font-size: 12px; line-height: normal; " id="bks_4dxtg15k"]海明玛传送到接受方后,将上三式的右边(b1,b2,b4)的逻辑表达式分别异或上左边的值就得到了校验方程,如果上题采用偶校验G1=b1 b3 b5 b7的异或G2=b2 b3 b6 b7的异或G3=b4 b5 b6 b7的异或若G1G2G3为001是第四位错若为011是第六位错[/font][font class="Apple-style-span" style="font-family: ����; font-size: 12px; line-height: normal;"] [/font]3.海明码的生成与接收特注:以下的+均代表异或方法一:1)海明码的生成。
对海明码的理解海明码是一种多重(复式)奇偶检错系统。
它将信息用逻辑形式编码,以便能够检错和纠错。
用在海明码中的全部传输码字是由原来的信息和附加的奇偶校验位组成的。
每一个这种奇偶位被编在传输码字的特定位置上。
实现得合适时,这个系统对于错误的数位无论是原有信息位中的,还是附加校验位中的都能把它分离出来。
一个n位二进制数位串在传输过程中哪一位都有出错的可能,也就是说有n个发生错误的可能性。
针对此情况,如果发送方只抽出其中一位制置奇偶校验位值,以便对其它位进行偶校验或奇校验,虽然也能检错,但无法确定错码的位置,不能纠错。
如果发送方抽出其中r位(放在1,2,4,8,16……位上),给每个位制置奇偶校验位值,以便对从其它位中选择的有差异的r个位组进行偶校验或奇校验,这样,就能用含r个校验位值的逻辑组合(其所在位置可以不连续,但是,其在逻辑上是连续的)所衍生出的2r种状态对可能发生的错误进行相应范围的检测。
进一步思考:如果让2r种可能发生的状态中除去一种状态反映整个位串传输正确外,剩下的2r-1种状态一一对应地反映位串中可能发生的n种错误,那么,对r会有多大的数量要求呢?显然,r应满足下列关系式:2r-1>=n (1)这样,r个校验位所衍生出的2r种状态才能覆盖可能产生的n种错误。
每种错误发生时才不至于漏检。
从n中扣出r个校验位n-r=k,这k个位是信息位。
n=k+r,代入(1)式得:2r-1>=k+r (2)移项得:2r-r>=k+1 (3)按(3)式进行试算(试算不包括”>”——取最小值)表1根据经验表2此即r以其所衍生出的状态能覆盖的信息位数量。
反过来,从k的数量,可以倒推需要多少校验位对其进行检测。
知道了信息位数量与校验位数量的关系后,怎样编海明码呢?用一道例题加以说明。
例题现有8位二进制数信息位串10011101等待传输,问怎样将海明校验位编入以资校验?根据前述,8个信息位要有4个校验位来检测,于是整个位串长就是8+4=12位。
海明码海明码(Hamming Code)是在电信领域的一种线性检测码,以发明者理查德·卫斯里·海明的名字命名。
海明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误,以侦测并更正单一比特错误。
由于海明编码简单,它们被广泛应用于内存(RAM)电路。
1940年,海明于贝尔实验室(Bell Labs)工作,运用贝尔V型(Bell Model V)电脑,一个周期时间为几秒钟的机电继电器计算机。
输入终端是依靠打孔卡(Punched Card),这不免会产生读取错误。
在平日,特殊代码将发现错误并闪灯(flash lights),使得操作者能够纠正这个错误。
在周末和下班期间,在没有操作者的情况下,机器只会简单地转移到下一个工作。
海明在周末工作,他对于不可靠的读卡机发生错误后,总是必须重新开始项目变得愈来愈沮丧。
在接下来的几年中,他为了解决错误检测的问题,着手开发功能强大的检测算法。
直到1950年,他发表了著名的海明码。
与其他的错误校验码类似,海明码也利用了奇偶校验位的概念,通过在数据位后面增加一些比特,可以验证数据的有效性。
利用一个以上的校验位,海明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置。
在接受端通过纠错译码自动纠正传输中的差错来实现码纠错功能,称为前向纠错FEC。
在数据链路中存在大量噪音时,FEC可以增加数据吞吐量。
通过在传输码列中加入冗余位(也称纠错位)可以实现前向纠错,但这种方法比简单重传协议的成本要高。
海明码利用奇偶块机制降低了前向纠错的成本。
如果一条信息中包含更多用于纠错的位,且通过妥善安排这些纠错位使得不同的出错位产生不同的错误结果,那么我们就可以找出出错位了。
在一个7位的信息中,单个位出错有7种可能,因此3个错误控制位就足以确定是否出错及哪一位出错了。
海明码SECDED(single error correction, double error detection)版本另外加入一个检测比特,可以侦测两个或以下同时发生的比特错误,并能够更正单一比特的错误。
海明码(Hamming Code)是一个可以有多个校验位,具有检测并纠正一位错误代码功能的纠错码,所以它也仅用于信道特性比较好的环境中,如以太局域网中,因为如果信道特性不好的情况下,出现的错误通常不是一位。
海明码的检错、纠错基本思想是将有效信息按某种规律分成若干组,每组安排一个校验位进行奇偶性测试,然后产生多位检测信息,并从中得出具体的出错位置,最后通过对错误位取反(也是原来是1 就变成0,原来是0 就变成1)来将其纠正。
要采用海明码纠错,需要按以下步骤来进行:计算校验位数→确定校验码位置→确定校验码→实现校验和纠错。
下面来具体介绍这几个步骤。
1. 计算校验位数要使用海明码纠错,首先就要确定发送的数据所需要的校验码(也就是“海明码”)位数(也称校验码长度)。
它是这样的规定的:假设用N 表示添加了校验码位后整个信息的二进制位数,用K 表示其中有效信息位数,r 表示添加的校验码位,它们之间的关系应满足:N=K + r ≤ 2r-1。
如K=5,则要求2r-r ≥ 5+1=6,根据计算可以得知r 的最小值为4,也就是要校验5位信息码,则要插入4 位校验码。
如果有效信息位数是8,则要求2r-r ≥ 8+1=9,根据计算可以得知r 的最小值也为4。
根据经验总结,得出信息码和校验码位数之间的关系如表5-1所示。
表5-1 信息码位数与校验码位数之间的关系2. 确定校验码位置上一步我们确定了对应信息中要插入的校验码位数,但这还不够,因为这些校验码不是直接附加在信息码的前面、后面或中间的,而是分开插入到不同的位置的。
但不用担心,校验码的位置很容易确定的,那就是校验码必须是在2n 次方位置,如第1 位,2 位,4 位,8 位,16 位,32 位……(对应20,21,22,23,24,25,……,从最左边的位数起),这样一来就知道了信息码的分布位置,也就是非2n 次方的位置,如第3 位,5 位,6 位,7 位,9 位,10 位,11 位,12 位,13 位,……(从最左边的位数起)。
海明校验码(靠谱的解释)
【定义】
海明码(Hamming Code)是利⽤奇偶性来检错和纠错的校验⽅法。
海明码的构成⽅法是在数据位之间的确定位置插⼊k个校验位,通过扩⼤吗距来实现检错和纠错。
对于数据位m的数据,加⼊k位的校验码,它应满⾜:
2^k>m+k+1
【例⼦】
设数据为01101001,试采⽤校验位求其偶校验⽅式的海明码。
(1)确定数据位D和校验位P在海明码中的位置:
由海明码编码规则可知:
p i在海明码的第2i-1
⽐如P4=2^(4-1)=8,所以位于第8位
(2)确定校验关系
这个难点在于如何确定校验位组。
举⼀个例⼦来说:H3=D0,海明码下标为3,我们必须⽤已知的校验位所对应的海明码下标(P1,P2,P3,P4,它们的海明码下标分别是1,2,4,8)来表⽰3,这⾥3就可以等于1+2。
H5为什么是1+4⽽不是2+3呢?因为H3不是校验位,是数据位。
⽐如P1 的校验位为表格中红⾊标记出来所对应的海明码的位数
故:P1校验:P1,D0,D1,D3,D4,D6
P1=D0⊕D1⊕D3⊕D4⊕D6=1⊕0⊕1⊕0⊕1=1
⊕符号:代表异或,相同则为0,不同则为1。
只要仔细⼀定可以计算正确。
P2、P3、P4的海明码计算也是如此,关键是要找出正确的校验位组,所以海明校验码:011001001101。
一直不理解网络里的海明码?看完这个,你想说不理解还真难。
海明码是一种多重奇偶检错系统,它具有检错和纠错的功能。
海明码中的全部传输码字是由原来的信息和附加的奇偶校验位组成的。
每一个这种奇偶校验位和信息位被编在传输码字的特定位置上。
这种系统组合方式能找出错误出现的位置,无论是原有信息位,还是附加校验位。
设海明码校验位为k,信息位为m,则它们之间的关系应满足m+k+1≤2的k次方。
下面以原始信息101101为例,讲解海明码的推导与校验过程。
(1)确定海明码校验位长m是信息位长,则m=6 。
根据上述关系式m+k+1≤2的k次方,得到7+k≤2的k次方。
解得最小k为4,即校验位为4。
信息位加校验位总长度为10位。
(2)推导海明码1.填写原始信息。
从理论上讲,海明码校验位可以放在任何位置,但习惯上校验位被从左到右安排在1、2、4、8、...的位置上。
原始信息则从左至右填入剩下的位置。
如图1所示,校验位处于B1、B2、B4、B8位,剩下位为信息位,信息位依从左至右的顺序先行填写完毕。
图1 填入原始信息位2.计算校验位。
依据公式得到校验位:P1=B3⊕B5⊕B7⊕B9=1⊕0⊕1⊕0=0P2=B3⊕B6⊕B7⊕B10=1⊕1⊕1⊕1=0 P3=B5⊕B6⊕B7=0⊕1⊕1=0 P4=B9⊕B10=1⊕1=0注:⊕表示异或运算。
这个公式常用,但是死记硬背很困难,要换个方式去理解记忆。
把除去1、2、4、8(校验位位置值编号)之外的3、5、6、7、9、10这些值转换为二进制位,如表1所示。
将所有信息编号的二进制的第1位为1的Bi进行“异或”操作,结果填入P1。
即上述的结果P1=B3⊕B5⊕B7⊕B9=1⊕0⊕1⊕0=0;同理,将所有信息编号的二进制的第2位为1的Bi进行“异或”操作,结果填入P2。
即上述结果P2=B3⊕B6⊕B7⊕B10=1⊕1⊕1⊕1=0;以此类推,将所有信息编号的二进制的第3位为1的Bi进行“异或”操作,结果填入P3;将所有信息编号的二进制的第4位为1的Bi 进行“异或”操作,结果填入P4。
校验码(海明码)
海明码⼀般指汉明码,与其他的错误校验码类似,汉明码也利⽤了的概念,通过在后⾯增加⼀些⽐特,可以验证数据的有效性。
利⽤⼀个以上的校验位,汉明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置。
确定校验码的位数x
设数据有n位,校验码有x位。
则校验码⼀共有2x种取值⽅式。
其中需要⼀种取值⽅式表⽰数据正确,剩下2x-1种取值⽅式表⽰有⼀位数据出错。
因为编码后的⼆进制串有n+x位,因此x应该满⾜
2x-1 ≥ n+x
使不等式成⽴的x的最⼩值就是校验码的位数。
在本例中,n=7,解得x=4。
就是说,当n=校验位的值的时候,X等于多少?
题⽬⼀般会说给出⼀定位数的数据。
⾸先根据下⾯这个表格,⼆进制次⽅表。
看看这个位数对应多少次⽅,只能⼤不能⼩
⽐如说32位的校验码。
根据上⾯的公式,2x ≥ 32+1+X ,将位数代⼊到N⾥。
将1移到右边。
简化公式就是:2x ≥ 33+X 根据这个简化公式,其实就可以理解为,2的多少次⽅可以⼤于等于33
根据2次⽅表就可以知道,6个次⽅!!
最后代⼊公式,26 ≥ 33+6 即26 ≥ 39 ,即X=6 就是说需要加⼊6位校验码
遇到此种题⽬,⾸先看给出的信息位是多少,⽐如16,那么2的多少个次⽅可以⽐16⼤?。
2的4次⽅刚好是16,2的5次⽅⽐16⼤。
那么就代⼊公式看看,答案是5次⽅。
海明码详解(原创)湖南人文科技学院数学系杨炼一、问题的提出海明码是奇偶校验的一种扩充。
它采用多位校验码的方式,在这些校验位中的每一位都对不同的信息数据位进行奇偶校验,通过合理地安排每个校验位对原始数据进行校验位组合,可以达到发现错误,纠正错误的目的。
海明码是一种可以纠正一位差错的编码。
海明码校验是为了保证数据传输正确而提出的,本来就是一串要传送的数据,如:d8,d7,d6,d5,d4,d3,d2,d1,这里举的是八位数据,可以是n位数据。
就这样传送数据,不知道接收到后是不是正确的。
所以,要加入校验位数据才能检查是否出错。
二、校验位的位数满足下列条件:2的k次方大于等于n+k+1,其中k为校验位位数,n为信息数据位位数。
验证一下,2的4次方等于16,n+k+1等于8+4+1等于13。
三、原理透析8位信息数据与4位校验位总共有12位数据,怎么排列呢?我们先把校验位按p4,p3,p2,p1排列,用通式p i表示校验位序列,i为校验位在校验序列中的位置。
传送的数据流经解析后用M12,M11,M10,M9,M8,M7,M6,M5,M4,M3,M2,M1表示,接下来的问题是如何用d8,d7,d6,d5,d4,d3,d2,d1与p4,p3,p2,p1来表示M12,M11,M10,M9,M8,M7,M6,M5,M4,M3,M2,M1了。
校验位在传送的数据流中位置为2的(i-1)次方,则p1在M1位,p2在M2位,p3在M4位,p4在M8位。
其余的用信息数据从高到低插入。
于是,传送的数据流可解析为(表一)M12M11M10M9M8M7M6M5M4M3M2M1d8d7d6d5p4d4d3d2p3d1p2p1接下来,我们要弄明白如何找出错误位的问题。
引进4位校验和序列S4,S3,S2,S1。
S4,S3,S2,S1等于0,0,0,0表示传送的数据流正确;如S4,S3,S2,S1等于0,0,1,0则表示传送的数据流解析码中第2位(M2)出错;如S4,S3,S2,S1等于0,0,1,1则表示传送的数据流解析码中第3位(M3)出错;依次类推。
一、海明码的概念海明码是一种可以纠正一位差错的编码。
它是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。
它必需满足以下关系式:2^r>=n+1 或2^r>=k+r+1海明码的编码效率为:R=k/(k+r)式中k为信息位位数r为增加冗余位位数二、海明码的原理海明码是一种多重奇偶检错系统。
它将信息用逻辑形式编码,以便能够检错和纠错。
用在海明码中的全部传输码字是由原来的信息和附加的奇偶校验位组成的。
每一个这种奇偶位被编在传输码字的特定位置上。
这个系统对于错误的数位无论是原有信息位中的,还是附加校验位中的都能指示出来在数据中间加入几个校验码,将玛距均匀拉大,将数据的每个二进制位分配在几个奇偶校验组里,当某一位出错,会引起几个校验位的值发生变化。
海明不等式:校验码个数为K,2的K次幂个信息,1个信息用来指出“没有错误”,其余2K-1个指出错误发生在那一位,但也可能是校验位错误,故有N<=2的K次-1-K能被校验。
海明码的编码规则:1.每个校验位Ri被分配在海明码的第2的i次的位置上,2.海明玛的每一位(Hi)是由多个/1个校验值进行校验的,被校验玛的位置玛是所有校验这位的校验位位置玛之和。
一个例题:4个数据位d0,d1,d2,d3, 3个校验位r0,r1,r2,对应的位置为:d3 d2 d1 r2 d0 r1 r0 ======b7 b6 b5 b4 b3 b2 b1校验位的取值,就是他所能校验的数据位的异或b1为b3,b5,b7的异或,b2为b3,b6,b7 b4为b5,b6,b7海明玛传送到接受方后,将上三式的右边(b1,b2,b4)的逻辑表达式分别异或上左边的值就得到了校验方程,如果上题采用偶校验G1=b1 b3 b5 b7的异或G2=b2 b3 b6 b7的异或G3=b4 b5 b6 b7的异或若G1G2G3为001是第四位错若为011是第六位错三、编码步骤(1)根据信息位数,确定校验位数,2^r >= k+r+1,其中,k为信息位数,r为校验位数。
海明码应用场景一、海明码的基本概念海明码是一种能够检测和纠正错误的编码方式,由计算机科学家理查德·海明(Richard Hamming)在20世纪50年代提出。
它通过在数据中添加冗余位来实现错误检测和纠正的功能。
二、海明码在数据传输中的应用1. 数据传输中的错误检测在数据传输过程中,由于信号传输中存在噪声和干扰等因素,可能会导致数据出现错误。
海明码通过添加冗余位,即校验位,来检测是否发生错误。
接收方可以根据校验位的结果判断数据是否正确,并请求重新传输。
2. 数据传输中的错误纠正除了错误检测外,海明码还可以纠正部分错误。
通过添加冗余位,海明码可以检测出错误的位置,并根据冗余位的值进行修正。
这样可以避免重新传输整个数据,提高数据传输的效率。
三、海明码在存储介质中的应用1. 硬盘存储中的纠错在硬盘存储中,由于介质老化、磁场干扰等原因,可能会导致数据出现错误。
海明码可以应用于硬盘存储系统中,通过添加冗余位来检测和纠正数据错误,提高数据的可靠性和稳定性。
2. 光盘存储中的纠错在光盘存储中,由于光盘表面的划伤或污渍等原因,可能会导致数据读取错误。
海明码可以应用于光盘存储系统中,通过添加冗余位来检测和纠正数据错误,保证数据的完整性和可靠性。
四、海明码在通信系统中的应用1. 数字通信中的纠错编码在数字通信系统中,海明码可以应用于纠错编码中。
通过添加冗余位,海明码可以检测和纠正传输过程中出现的错误,保证数据的可靠传输。
2. 无线通信中的纠错在无线通信系统中,由于信号受到干扰、衰减等因素的影响,可能会导致数据传输错误。
海明码可以应用于无线通信中,通过添加冗余位来检测和纠正数据错误,提高无线通信的可靠性和稳定性。
五、海明码在计算机网络中的应用1. 数据包传输中的纠错在计算机网络中,数据包的传输过程中可能会出现丢包、错位等问题,导致数据错误。
海明码可以应用于数据包传输中,通过添加冗余位来检测和纠正数据错误,提高数据传输的可靠性和完整性。
对海明码的理解
海明码是一种多重(复式)奇偶检错系统。
它将信息用逻辑形式编码,以便能够检错和纠错。
用在海明码中的全部传输码字是由原来的信息和附加的奇偶校验位组成的。
每一个这种奇偶位被编在传输码字的特定位置上。
实现得合适时,这个系统对于错误的数位无论是原有信息位中的,还是附加校验位中的都能把它分离出来。
一个n位二进制数位串在传输过程中哪一位都有出错的可能,也就是说有n个发生错误的可能性。
针对此情况,如果发送方只抽出其中一位制置奇偶校验位值,以便对其它位进行偶校验或奇校验,虽然也能检错,但无法确定错码的位置,不能纠错。
如果发送方抽出其中r位(放在1,2,4,8,16……位上),给每个位制置奇偶校验位值,以便对从其它位中选择的有差异的r个位组进行偶校验或奇校验,这样,就能用含r个校验位值的逻辑组合(其所在位置可以不连续,但是,其在逻辑上是连续的)所衍生出的2r种状态对可能发生的错误进行相应范围的检测。
进一步思考:如果让2r种可能发生的状态中除去一种状态反映整个位串传输正确外,剩下的2r-1种状态一一对应地反映位串中可能发生的n种错误,
那么,对r会有多大的数量要求呢?显然,r应满足下列关系式:
2r-1>=n (1)
这样,r个校验位所衍生出的2r种状态才能覆盖可能产生的n种错误。
每种错误发生时才不至于漏检。
从n中扣出r个校验位n-r=k,这k个位是信息位。
n=k+r,代入(1)式得:
2r-1>=k+r (2)
移项得:
2r-r>=k+1 (3)
按(3)式进行试算(试算不包括”>”——取最小值)
表1
根据经验
表2
此即r以其所衍生出的状态能覆盖的信息位数量。
反过来,从k的数量,可以倒推需要多少校验位对其进行检测。
知道了信息位数量与校验位数量的关系后,怎样编海明
码呢?用一道例题加以说明。
例题
现有8位二进制数信息位串10011101等待传输,问怎样将海明校验位编入以资校验?
根据前述,8个信息位要有4个校验位来检测,于是整个位串长就是8+4=12位。
表3
说明:
表3表示海明码内部的逻辑关系。
它反映了海明码是按什么样的逻辑被制造出来的。
(1)按1~12的顺序给二进数制位串各位上的比特启名。
(2)把1,2,4,8位(即2i,i=0,1,2…位)安上奇偶校验
比特的名。
(3)把非2i位安上信息比特的名。
(4)按名位显示10011101,如,A2的值是10011101的第
一个“1”,依此顺推。
(5)A0的校验对象:每跳1位拉入1个对象,直到尽头。
校验对象的值模2加之和为A0的值。
(6)A1的校验对象:它旁边的A2,而后每跳2位拉入2
个对象,直到尽头。
校验对象的值的模2加之和为
A1的值。
(7)A3的校验对象:它旁边的A4,A5,A6,而后每跳4
位拉入4个对象,直到尽头。
校验对象的值的模2
加之和为A3的值。
(8)A7的校验对象:它旁边的A8,A9,A10,A11,已到尽
头。
校验对象的值的模2加之和为A7的值。
(5)(6)(7)(8)为什么采取这样的逻辑方法(以2i位校验
非2i位)选校验对象?为的是标准统一、好记,便
于发送方和接收方按同一个规则计算校正因子S,从
而便于接收方检错纠错。
故此说明。
(9)将各校验位的值按相应位插入,形成海明码。
(10)S0是A0和A0的校验对象模2加之和,为0;S1是
A1和A1的校验对象模2加之和,为0;S2是A3和A3
的校验对象模2加之和,为0;S3是A7和A7的校验
对象模2加之和,为0。
如果发生了不为0则表明:
不是校验者出错就是被校验者出错。
这个海明码——一个12位的二进数制位串中,隐含着可资互相印证的逻辑关系:一是校验与被校验(反过来是生成被生成)的关系——被校验者对校验者也有产生被产生作用。
因为采取偶校验法,校验位值与被校验的信息位值群之奇偶性有同一性。
当这个同一性被破坏时就会想到让被校验的信息位值群与校验位值互相印证;二是校正因子与偶校验双方的关系;三是按取位数量不同跳拉校验对象法组成的校验组之间的关系。
正是这些关系为检错纠错提供了基础。
接收方收到海明码后,按编码规则计算S,若
S3=S2=S1=S0=0,则说明传输无误。
反之,只要其中有一
个为1便说明传输有误。
错误分析:
一、一个错儿影响一个S
假设第一位A0在传输中由“1”变成了“0”,导致接收方在验算时S0由“0”变成了“1”——这时
接收方便知如表3的第(5)行所示的逻辑关系中出
了错值。
但到底是A0错了还是第(5)行里的其他位
值出了错?尚不能确定,要分析。
这时如果
S3=S2=S1=0就为找错提供了印证分析基础:因为S1=0,
印证了A2、A10传输无误;因为S2=0,印证了A4、
A6传输无误;因为S3=0,印证了A8、A10传输无误;
合计印证了A2、A4、A6、A8、A10传输无误,而这正
说明(5)行里的信息位值群正确,从而挤認出A0
错了。
纠错:把A0由“1”改成“0”。
为了以后省却印证分析的麻烦,不妨对这种12位海明码制定一个固定印证表指示:当
S3S2S1S0=0001时,A0错误。
A1、A3、A7传输错误均可用此印证分析方法找出和纠正,可定一个固定印证表指示:当
S3S2S1S0=0010时,A1错误;当S3S2S1S0=0100时,
A3错误;当S3S2S1S0=1000时,A1错误。
二、一个错儿影响两个S
假设第3位A2在传输中由“1”变成了“0”,导致接收方在验算时S0变成了“1”,S1变成了“1”。
对照表3所示的横竖逻辑关系看,这个错误发生过程就好似是这样:“一枚火箭——1变0(在表3第3列底部),分出两个一模一样的弹头——A2(竖看),击中两个不同的目标——S0和S1(横看)”。
找错过程正相反:从被破坏的两个不同的目标——S0和S1,找两个一模一样的弹头——A2,进而找出错比特值——0。
当然,这是循着逻辑关系找错,(表3只是说明了逻辑关系)。
不应理解成循表找错。
纠错:把A2由“0”改成“1”。
并在印证表里填上当S3S2S1S0=0011时,A2错误。
按以上方法,我们同样可以发现和纠正第5位A4的错误,并在印证表里填上当S3S2S1S0=0101时,指示A4错误;可以发现和纠正第6位A5的错误,并在印证表里填上当S3S2S1S0=0110时,指示A5错误;可以发现和纠正第9位A8的错误,并在印证表里填上当S3S2S1S0=1001时,指示A8错误;可以发现和纠正第10位A9的错误,并在印证表里填上当S3S2S1S0=1010时,指示A9错误;可以发现和纠正第12位A11的错误,并在印证表里填上当S3S2S1S0=1100时,指示A11错误。
以便对这些可能发生的错误做到直接印证。
三、一个错儿影响三个S
假设第7位A6在传输中由“1”变成了“0”,导致接收方在验算时S0变成了“1”,S1变成了“1”S2变成了“1”.
对照表3看,这个错误发生过程就好似是这样:“一枚
火箭——1变0,分出三个一模一样的弹头——A6,击中三个不同的目标——S0、S1和S2”。
找错过程正相反:从被破坏的三个不同的目标——S0、S1和S2,找三个一模一样的弹头——A6,进而找出错比特值——0。
纠错:把A6由“0”改成“1”。
并在印证表里填上当S3S2S1S0=0111时,指示A6错误。
按以上方法,我们可以发现和纠正第11位A10的错误,并在印证表里填上当S3S2S1S0=1011时,指示A10错误.
用一、二、三所准备的印证表项制表如下:
印证表表4
如果在传输中同时发生两个错误,就很不好办。
例如,A0错变为0,A1也错变为0,接收方在验算时发现S1=S0=1,如果按《印证表》查对则判为0011A2错误,结果会造成错上加错的情形,如同法官错判了好人,放走了原凶一样。
为避免此种情况发生还是应该用印证分析法印证一翻:由S3=S2=0可以印证A4,A5,A6,A8,A9,A10在传输中无问题,但是还有A0,A1,A2无法印证。
这三个之中,A0和A1有可能同时出错而引起S1=S0=1,A1和A2也有可能同时出错而引
起S1=S0=1,这两种可能性均无法排除,怎么办?不要当那个“错判了好人,放走了原凶”的法官,科学的态度是搞不清楚时放弃判断,请发送方再发一次。