海明码原理(精)
- 格式:doc
- 大小:14.00 KB
- 文档页数:2
海明码海明码是由R.HmIMI1ing在1950年首次提出的,它是一种可以纠正一位差错的编码。
可以借用简单奇偶校验码的生成原理来说明海明码的构造方法。
若k(=n-1)位信息位an-1an-2…a1加上一位偶校验位a0,构成一个n位的码字an-1an-2...a1a0,则在接收端校验时,可按关系式S=an-1+an-2+…+a1+a0来计算。
若求得S=0,则表示元错;若S=1,则有错。
上式可称为监督关系式,S称为校.正因子。
.在奇偶校验情况下,只有一个监督关系式和一个校正因子,其取值只有0或1两种情.况,分别代表元错和有错两种结果,还不能指出差错所在的位置。
不难设想,若增加冗余位,也即相应地增加了监督关系式和校正因子,就能区分更多的情况。
如果有两个校正因子.S1和S0,则S1S0取值就有00、01、10或11四种可能的组合,也即能区分四种不同的情况。
若其中一种取值用于表示无错(如00),则另外三种(01、10及11)便可以用来指出.不同情况的差错,从而可以进一步区分出是哪一位错。
设信息位为k位,增加r位冗余位,构成一个n=k+r位的码字。
若希望用r个监督关系式产生的r个校正因子来区分元错和在码字中的n个不同位置的一位错,则要求满足以下关系式:2r>=n+1 或 2r>=k+r+1以k=4为例来说明,则要满足上述不等式,必须r>=3。
假设取r=3,则n=k+r=7,即在4位信息位a6a5a4a3后面加上3位冗余位a2a1a0,构成7位码字a6a5a4a3a2a1a0,其中a2、a1和a0分别由4位信息位中某几位半加得到,在校验时,a2、a1和a0就分别和这些位半.加构成三个不同的监督关系式。
在无错时,这三个关系式的值S2、S1和S0全为"0"。
若a2错,则S2=1,而S1=S0=0;若a1错,则S1=1,而S2=S0=0;若a0错,则s0=1,而S2=S1=0。
海明码纠错原理海明码(Hamming Code)是一种用于检错和纠错的编码方式,由理查德·海明在1950年提出。
它可以发现并纠正单一位错误,也可以检测并纠正双位错误。
海明码的纠错原理是通过增加校验位来实现的,下面我们来详细了解一下海明码的纠错原理。
首先,海明码是一种线性分组码,它的编码方式是将数据位和校验位按照一定规则排列组合而成。
在传输数据时,发送端会对数据进行编码,添加校验位后发送出去;接收端收到数据后,会对接收到的数据进行解码,并根据校验位进行错误的检测和纠正。
其次,海明码的纠错原理是基于奇偶校验的。
在海明码中,校验位的位置是通过2的幂次方来确定的,例如第1、2、4、8、16位是校验位,其余位是数据位。
对于校验位而言,每一个校验位都负责一定范围内的数据位的奇偶校验。
当接收端接收到数据后,会对每个校验位进行奇偶校验,如果发现某个校验位的奇偶校验与接收到的数据不一致,就会根据校验位的位置确定出错的位置,并进行纠正。
最后,海明码的纠错原理可以通过一个简单的例子来说明。
假设发送端要发送一个4位的数据1010,按照海明码的规则,需要添加3个校验位。
经过编码后,发送的数据变为1010101。
在传输过程中,如果某一位发生了错误,例如1010101中的第4位发生了错误,接收端在接收到数据后,会对每个校验位进行奇偶校验,发现第2位和第4位的奇偶校验不一致,根据校验位的位置,可以确定出错的位置是第4位,然后进行纠正,将错误的位从0变为1。
最终,接收端得到的数据是1010,错误被成功纠正。
综上所述,海明码的纠错原理是通过增加校验位来实现的,通过对校验位的奇偶校验来检测错误,并根据校验位的位置进行错误的定位和纠正。
海明码在通信领域有着广泛的应用,能够有效地提高数据传输的可靠性和稳定性,是一种非常实用的纠错编码方式。
海明码,汉明码,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”。
海明编码实验报告学科专业:测控技术与仪器姓名:代应浪学号:U201113487指导教师:葛俊峰、胡若澜华中科技大学自动化学院二零一四年五月一.海明编码原理海明码是一种可以纠正一位差错发现两位差错的编码。
它是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。
它必需满足以下关系式:2r>=n+1 或 2r>=k+r+1海明码的编码效率为:R=k/(k+r)式中 k为信息位位数r为增加冗余位位数2.海明码的生成与接收a.每个校验位Ri被分配在海明码的第2的i次方的位置上;b.海明码的每一位(Hi)是由多个/1个校验值进行校验的,被校验码的位置码是所有校验这位的校验位位置码之和。
二.海明编码方法1)海明码的生成(顺序生成法)。
例.已知:信息码为:" 1 1 0 0 1 1 0 0 " (k=8)求:海明码码字。
解:1)把冗余码p1、p2、p3、…,顺序插入信息码中,得海明码码字:" p1 p2 1 p3 1 0 0 p4 1 1 0 0 "码位: 1 2 3 4 5 6 7 8 9 10 11 12其中p1,p2,p3,p4分别插于2k位(k=0,1,2,3)。
码位分别为1,2,4,8。
2)冗余码p1,p2,p3,p4的矩阵变换:(相当于监督关系式)3)把线性码位的值的偶校验作为冗余码的值(设冗余码初值为0):P1=∑(0,1,1,0,1,0)=1P2=∑(0,1,0,0,1,0)=0P3=∑(0,1,0,0,0)=1P4=∑(0,1,1,0,0)=04)海明码为:"1 0 1 1 1 0 0 0 1 1 0 0"2)海明码的接收。
例.已知:接收的码字为:"1 0 0 1 1 0 0 0 1 1 0 0"(k=8)求:发送端的信息码。
纠错编码-海明码⼀.海明码海明码只能发现双⽐特错误,纠正单⽐特错误⼆.⼯作原理“动⼀发⽽牵全⾝”,因为海明码是⼀个多重校验码,也就是码字中的信息码位同时被多个校验码进⾏校验三.⼯作流程1.确定校验码位数海明不等式2^r>=k+r+1,r为冗余信息位,k为信息位eg:要发送的数据为D=101101则数据的位数k=6满⾜的不等式最⼩r为4也就是D=101101的海明码应该有6+4=10位,其中原始数据6位,校验码4位2.确定校验码和数据的位置还是上⾯的那个例⼦D=101101,假设这4位校验码分别为P1,P2,P3,P4,数据从左往右为D1,D2...D6校验码必须是在2n次⽅位置,如第1、2、4、8、16、32,...位(对应2^0 2^1 2^2 2^3 2^4 2^5……,是从最左边的位数起的),这样⼀来就知道了信息码的分布位置,也就是⾮2n次⽅位置,如第3、5、6、7、9、10、11、12、13,...位(是从最左边的位数起的)即数据位12345678910代码P1P2D1P3D2D3D4P4D5D6实际值1011013.求出校验码的值D=101101⼆进制0001001000110100010101100111100010011010数据位12345678910代码P1P2D1P3D2D3D4P4D5D6实际值0010011101可以看出P1对应的⼆进制第⼀位为1(看⼆进制是⼏位的话就看最后⼀个数据位是⼏位⼆进制格式)可以发现D1,D2,D4,D5对应的⼆进制第⼀位也是1,则P1代码校验的数据为D1,D2,D4,D5令所有要校验的位异或=0(即同0异1)1 0 1 0p1(第1个校验位,也是整个码字的第1位)的校验规则是:从当前位数起,校验1位,然后跳过1位,再校验1位,再跳过1位,....。
这样就可得出p1校验码位可以校验的码字位包括:第1位(p2(第2个校验位,也是整个码字的第2位)的校验规则是:从当前位数起,连续校验2位,然后跳过2位,再连续校验2位,再跳过2位,……。
海明码详解①海明校验的基本思想将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。
实质上,海明校验是一种多重校验。
②海明校验的特点它不仅具有检测错误的能力,同时还具有给出错误所在准确位置的能力。
一.校验位的位数校验位的位数与有效信息的长度有关设: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。
海明码校验和纠错原理详细海明纠错码当计算机存储或移动数据时,可能会产⽣数据位错误,这时可以利⽤汉明码来检测并纠错,简单的说,汉明码是⼀个错误校验码码集,由Bell实验室的R.W.Hamming发明,因此定名为汉明码。
海明码(Hamming Code)是⼀个可以有多个校验位,具有检测并纠正⼀位错误的纠错码,所以它也仅⽤于通信特性较好的环境中,如以太局域⽹中,因为如果通道特性不好的情况下,出现的错通常也不是⼀位。
海明码的检错、纠错基本思想是将有效信息按某种规律分成若⼲组,每组安排⼀个校验位进⾏奇偶性测试,然后产⽣多位检测信息,并从中得出具体的出错位置,最后通过对错误位取反来将其纠正。
要采⽤海明码纠错,需要按以下⼏个步骤。
1计算校验位数2 确定校验码位置3 确定校验码4 实现校验和纠错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所⽰。
2.确定校验码位置上⼀步我们确定了对应信息中要插⼊的校验码位数,但这还不够,因为这些校验码不是直接附加在信息码的前⾯、后⾯或中间的,⽽是分开插⼊到不同的位置。
但不⽤担⼼,校验码的位置很容易确定的,那就是校验码必须是在2n次⽅位置,如第1、2、4、8、16、32,……位(对应20、21、22、23、24、25,……,是从最左边的位数起的),这样⼀来就知道了信息码的分布位置,也就是⾮2n次⽅位置,如第3、5、6、7、9、10、11、12、13,……位(是从最左边的位数起的)。
举⼀个例⼦,假设现有⼀个8位信息码,即b1、b2、b3、b4、b5、b6、b7、b8,由表5-1得知,它需要插⼊4位校验码,即p1、p2、p3、p4,也就是整个经过编码后的数据码(称之为“码字”)共有12位。
数据在传输或存储过程中常常会出现错误,为了保证数据的完整性和准确性,通常会采用校验码来进行数据校验和纠错。
海明码是一种常用的校验码之一,它能够在一定程度上实现数据的纠错和校验。
本文将详细介绍4位数据海明校验码的生成与纠错原理及方法。
一、海明码的基本原理海明码是由美国数学家理查德·海明提出的一种能够检测和纠正数据中出现的错误的编码方式。
它通过向数据中添加校验位来实现对数据进行校验和纠错。
海明码的基本原理可以概括为以下几点:1. 通过向数据中添加冗余位来实现纠错功能。
2. 通过对数据进行位的异或运算来计算校验位。
3. 通过校验位的比较来检测错误位并进行纠错。
二、4位数据海明校验码的生成方法在生成4位数据海明校验码时,需要依据原始数据的位数来确定校验位的数量。
对于4位数据,通常采用2位校验位。
而具体的生成方法如下:1. 将4位原始数据表示成二维矩阵形式。
2. 根据原始数据矩阵的每一列,计算出校验位的值。
3. 将校验位添加到原始数据矩阵中。
4. 根据生成的数据矩阵,计算出校验位的值并添加到数据中。
三、4位数据海明校验码的纠错方法当使用4位数据海明校验码进行数据传输或存储时,若出现错误,需要通过校验位来检测错误位并进行纠错。
纠错方法如下:1. 对接收到的数据进行校验,计算出校验位的值。
2. 将计算得到的校验位的值与接收到的校验位的值进行比较。
3. 根据比较结果确定错误位的位置,并将其进行纠正。
四、4位数据海明校验码的应用场景4位数据海明校验码主要应用于对数据进行短距离传输和存储过程中。
其应用场景包括但不限于以下几种情况:1. 在计算机内存中对数据进行校验和纠错。
2. 在通信传输过程中对数据进行校验和纠错。
3. 在存储介质中对数据进行校验和纠错。
4. 在传感器数据采集过程中对数据进行校验和纠错。
五、4位数据海明校验码的优缺点4位数据海明校验码作为一种常见的纠错码,具有一定的优点和缺点。
主要表现在以下几个方面:优点:1. 能够有效检测和纠正数据中出现的错误。
海明码原理符号0表示数值0符号1表示数值1101表示5接收到的数据100,根本不知道对方接收到的数据是否正确用符号00表示数值0用符号11表示数值1传0就会由原先传0变成现在传00,传1就会由原先传1变成现在传11如果对方接收到的数据是01或者10,请表示接收到的数据有误再增加一位000表示0111表示传0就会由原先传0变成现在传000,传1就会由原先传1变成现在传111对方接收到的情况000,001,010,011,100,101,110,111如果接收到的是001,010,011,100,101,110六种情况,那么数据是错误的。
如果接收到的数据只有1位出错,显然001,010,100这三种情况是1出错了,正确的应该是全000011,101,110这三种情况是0出错了,正确的应该是全111。
海明编码实现的原理在数据编码中,加入几个校验位,并把数据的每一个二进制位分配在多个奇偶校验组中。
当某一个位出错后,就会引起有关的几个校验组的值发生变化,这样不但可以发现出错,还可以指出是哪一位出错,为自动纠错提供了依据。
码距:是指在一组编码中任何两个编码之间最小的距离。
距离:是指两个编码中相同位值不同的个数。
000,001其距离是1,把这个距离称为海明距离。
码距为d,检验的错误个数为e,纠错的个数为t,它们之间存在的关系:d>=e+1 可检验e个错d>=2t+1 可纠正t个错d>=e+t+1且 e>t 可以检验e个错,并纠正t个错。
只讨论海明校验纠一错的情况。
海明校验纠一错需要校验位:2^k-1>=n+k数据位为n,校验位为k,如:数据位为8,k>=4,海明编码的位数=n+k,k一般取满足条件的最小值。
海明校验位放在编码的位置:校验位放在整个编码的2^i位上(i=0,1,2,...,k-1)数据位:D7 D6 D5 D4 D3 D2 D1 D0整个编码怎么放:P1 P2 D7 P4 D6 D5 D4 P8 D3 D2 D1 D00001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100P1=D7异或D6异或D4异或D3异或D1(位置的二进制数从右往左第一位为1的位置上的数进行异或运算)P2=D7异或D5异或D4异或D2异或D1(位置的二进制数从右往左第二位为1的位置上的数进行异或运算)P4=D6异或D5异或D4异或D0(位置的二进制数从右往左第三位为1的位置上的数进行异或运算)P8=D3异或D2异或D1异或D0(位置的二进制数从右往左第四位为1的位置上的数进行异或运算)数据位:01101101 n=8根据2^k-1>=n+k 所以k>=4 取k=4P1 P2 0 P4 1 1 0 P8 1 1 0 10001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100P1=D7异或D6异或D4异或D3异或D1=0异或1异或0异或1异或0=0P2=D7异或D5异或D4异或D2异或D1=0异或1异或0异或1异或0=0P4=D6异或D5异或D4异或D0=1异或1异或0异或1=1P8=D3异或D2异或D1异或D0=1异或1异或0异或1=1海明校验码:000111011101增加一位校验位即可增加检错一个:P0=P1异或 P2 异或D7异或P4异或D6异或D5异或D4 异或 P8 异或D3异或D2异或 D1异或D0=1检二纠一错的编码是:100011101110110111010011P1 P2 D6 P4 D5 D4 D3 P8 D2 D1 D01 0 1 1 1 0 1 0 0 1 1 求指误字E k E k-1...E1E1=1异或1异或1异或1异或0异或1=1(位置的二进制数从右往左第一位为1的位置上的数进行异或运算)E2=0异或1异或0异或1异或1异或1=0(位置的二进制数从右往左第二位为1的位置上的数进行异或运算)E3=1异或1异或0异或1=1(位置的二进制数从右往左第三位为1的位置上的数进行异或运算)E4=0异或0异或1异或1=0(位置的二进制数从右往左第四位为1的位置上的数进行异或运算)因为E4E3E2E1=0101,说明接收到的海明校验位第5位出错,第5位是1,取反得0,正确的海明编码是:10110010011其有效数据位是:1001011 ASCII值=75是字符K。
海明码(汉明码)海明码是在信息字段中插若干位数据,用于监督码字里的哪一位数据发生了变化。
假设信息位有k位,需要多少位监督数据才能监督并改正一位错误?假设需要r位监督数据的话,整个码字的长度就是k+r;每一位的数据只两种状态,不是1就是0,有r位数据就应该能表示出2r种状态,如果每一种状态代表一个码元发生了错误,有k+r位码元,就要有k+r种状态来表示,另外还要有一种状态来表示数据正确的情况,所以2r要大于等于k+r+1才能监督一位错误,即2r >=k+r+1。
例如,信息数据有4位,由2r >=k+r+1得,r>=3,也就是至少需要3位监督数据才能发现并改正1位错误。
海明校验码:构造出海明码的方式有很多,因为监督关系是自定义的。
以(7,4)海明码为例(说明:4个数据位, 3个监督位,因为要满足式子2r>=k+r+1,所以r>=3),来推导下它的构造过程。
因为有三个监督位(具体位置不确定),必然有三个监督式,假设三个监督式分别是S1、S2、S3,用S3S2S1来指示一位数据出错了,例如,我可以指定,若S3S2S1=1就表示第1位数据出错了,S3S2S1=3,就表示第3位数据出错了,……假设最终生成的海明码是A7A6A5A4A3A2A1,我自己规定,若S3S2S1=0,表示数据传输没有出错,S3S2S1=1,表示A1出错;S3S2S1=2,表示A2出错;S3S2S1=3,表示A3出错;S3S2S1=4,表示A4出错;S3S2S1=5,表示A5出错;S3S2S1=6,表示A6出错;S3S2S1=7,表示A7出错。
那么就是这样一张纠错表:从上表可以看出,当S1=1时,表示A1、A3、A5、A7中有一个出错了,即S1是用来监督A1、A3、A5、A7这些位置的,所以就得到了监督关系式S1= A1⊕A3⊕A5⊕A7。
通过上表,同理得到S2= A2⊕A3⊕A6⊕A7;S3= A4⊕A5⊕A6⊕A7。
海明码海明码(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)将有效信息按某种规律分成若干组,每组安排一个校验位通过异或运算进行校验,得出具体的校验码(2)在接收端同样通过异或运算看各组校验结果是否正确,并观察出错的校校组,或者多个出错的校验组的共同校验位,得出具体的出错比特位(3)对错误位取反来将其纠正二、海明码计算海明码计算要按以下步骤来进行:计算校验码位数→确定校验码位置→确定校验码1. 计算校验码位数假设用N表示添加了校验码位后整个传输信息的二进制位数,用K代表其中有效信息位数,r表示添加的校验码位数,它们之间的关系应满足:N=K+r≤2r-1(是为了确保r位校验码能校验全部的数据位,因为r位校验码所能表示的最大十进制数为2r-1,同时也确保各位码本身不被其他校验码校验)信息码位数12~45~1112~2627~5758~120121~247校验码位数2 3 4 5 6 7 82. 确定校验码位置海明码的校验码的位置必须是在2n次方位置(n从0 开始,分别代表从左边数起分别是第1、2、4、8、16……),信息码也就是在非2n次方位置3. 确定校验码校验位置选择原则:第i位校验码从当前校验码位开始,每次连续校验i位后再跳过i位,然后再连续校验i位,再跳过i位,以此类推。
确定每个校验码所校验的比特位:P1校验码位校验的码字位为:第1位(也就是P1本身)、第3位、第5位、第7位、第9位、第11位、第13位、第15位,……。
P2校验码位校验的码字位为:第2位(也就是P2本身)、第3位,第6位、第7位,第10位、第11位,第14位、第15位,……。
P3校验码位校验的码字位为:第4位(也就是P4本身)、第5位、第6位、第7位,第12位、第13位、第14位、第15位,第20位、第21位、第22位、第23位,……。
1、奇偶校验码二进制数据经过传送、存取等环节,会发生误码(1变成0或0变成1),这就有如何发现及纠正误码的问题。
所有解决此类问题的方法就是在原始数据(数码位)基础上增加几位校验(冗余)位。
一、码距一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit)数叫这两个码字的码距,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。
如图1所示的一个编码系统,用三个bit来表示八个不同信息中。
在这个系统中,两个码字之间不同的bit数从1到3不等,但最小值为1,故这个系统的码距为1。
如果任何码字中一位或多位被颠倒了,结果这个码字就不能与其它有效信息区分开。
例如,如果传送信息001,而被误收为011,因011仍是表中的合法码字,接收机仍将认为011是正确的信息。
然而,如果用四个二进数字来编8个码字,那么在码字间的最小距离可以增加到2,如图图 1图 2注意,图8-2的8个码字相互间最少有两bit因此,如果任何信息的一个数位被颠倒,码字,接收机能检查出来。
例如信息是1001,误收为1011接收机知道发生了一个差错,因为1011不是一个码字(表中没有)。
然而,差错不能被纠正。
的,正确码字可以是1001,1111,0011或1010能确定原来到底是这4个码字中的那一个。
也可看到,这个系统中,偶数个(2或4)差错也无法发现。
为了使一个系统能检查和纠正一个差错,必须至少是“3”。
最小距离为3时,或能纠正一个错,或能检二个错,但不能同时纠一个错和检二个错。
错和检错能力的进一步提高需要进一步增加码字间的最小距离。
图8-3的表概括了最小距离为1至7的码的纠错和检错能力。
图3 码距越大,纠错能力越强,但数据冗余也越大,即编码效率低了。
所以,选择码距要取决于特定系统的参数。
数字系统的设计者必须考虑信息发生差错的概率和该系统能容许的最小差错率等因素。
要有专门的研究来解决这些问题。
二、奇偶校验奇偶校验码是一种增加二进制传输系统最小距离的简单和广泛采用的方法。
计算机组成原理--海明码的编码和校验⽅法(易懂)海明码(也叫汉明码)具有⼀位纠错能⼒。
本⽂以1010110这个⼆进制数为例解释海明码的编码和校验⽅法。
编码 确定校验码的位数x 设数据有n位,校验码有x位。
则校验码⼀共有2x种取值⽅式。
其中需要⼀种取值⽅式表⽰数据正确,剩下2x-1种取值⽅式表⽰有⼀位数据出错。
因为编码后的⼆进制串有n+x位,因此x应该满⾜2x-1 ≥ n+x 使不等式成⽴的x的最⼩值就是校验码的位数。
在本例中,n=7,解得x=4。
确定校验码的位置 校验码在⼆进制串中的位置为2的整数幂。
剩下的位置为数据。
如图所⽰。
位置1234567891011内容x1x21x3010x4110 求出校验位的值 以求x2的值为例。
为了直观,将表格中的位置⽤⼆进制表⽰。
位置00010010001101000101011001111000100110101011内容x1x21x3010x4110 为了求出x2,要使所有位置的第⼆位是1的数据(即形如**1*的位置的数据)的异或值为0。
即x2^1^1^0^1^0 = 0。
因此x2 = 1。
同理可得x1 = 0, x3 = 1, x4 = 0。
位置00010010001101000101011001111000100110101011内容01110100110 因此1010110的海明码为01110100110。
校验 假设位置为1011的数据由0变成了1,校验过程为: 将所有位置形如***1, **1*, *1**, 1***的数据分别异或。
***1: 0^1^0^0^1^1 = 1 **1*: 1^1^1^0^1^1 = 1 *1**: 1^0^1^0 = 0 1***: 0^1^1^1 = 1 以上四组中,如果⼀组异或值为1,说明该组中有数据出错了。
***1 **1* 1***的异或都为1,说明出错数据的位置为1011。
海明码简单分析确定校验位个数海明码的码组长度需要符合:2^r – 1 (r代表校验位个数)为什么是这个公式呢?因为:只有这样才能保证校验位⾜够覆盖整个需要校验的码组。
海明校验码原理
海明校验码是用来检测和纠正二进制数据传输中的错误的编码方式,其实现原理如下:
1. 数据转换:首先需要将要传输的数据转换成二进制码形式。
2. 生成海明码:根据生成规则生成海明校验码。
生成海明码的步骤如下:
- 确定校验位数:根据要传输的数据确定校验位的个数。
- 确定校验位的位置:将二进制数据码按一定规则排列,将二进制数据码的每一位(包括校验位)都与校验位位置有关联。
- 生成校验位:根据规则算出校验位的值,将其填入海明校验码的相应位置。
- 得到海明码:将数据码和校验位合并成海明码。
3. 传输:以海明码的形式进行传输。
4. 检测和纠正错误:接收方收到海明码时,先对码中的每个二进制数进行校验,以检测是否存在错误。
如果存在错误,可以根据海明码的规则进行修正。
如果存在多个错误,则无法进行修正。
海明校验码是一种比较简单有效的纠错码,但是其校验能力有限,无法纠正大量的错误。
海明校验码的设计原理今天来聊聊海明校验码的设计原理。
你知道吗?我们生活中有很多时候都需要检查信息有没有出错,就好比我们去超市买东西,售货员要核对商品价格扫码有没有扫错,这就像是一种简单的校验过程。
在计算机的数据世界里,也有一个类似的超级校验器,那就是海明校验码。
海明校验码的原理其实还挺巧妙的。
想象一下,我们在一个仓库里放了很多箱子(数据位),这些箱子排得很整齐。
海明校验码就像给这些箱子安排了一些管理员(校验位)。
这些管理员的位置是有规定的,他们可不是随便站在某个地方。
比如说,第1个校验位(管理员)负责查看特定几个箱子的数据有没有问题,第3个校验位(管理员)又负责另外一组不同的箱子。
我一开始也不明白,为什么要这么复杂地安排这些管理员(校验位)呢?其实这里面是有数学规律的。
海明码设计的时候是让校验位按照2的幂次方的位置来分布的,就像1、2、4、8、16……这样的位置。
为什么这样呢?这就要说到它的校验方法了。
打个比方吧,校验位就像是一个个探测器。
当数据出错的时候,这些探测器会根据自己负责的那些箱子(数据位)发现异常,然后通过一些特定的运算,就能准确地找到是哪个箱子(位)的数据出现了错误。
比如说,假如发现是1号、3号探测器报警了,就说明是特定的某个数据位出现了问题。
这里的1号、3号探测器是按照海明码的规则设定好负责对应的一些数据位的。
海明校验码在实际的计算机存储和数据传输中非常有用。
比如说在硬盘存储数据的时候,数据可能因为电磁干扰或者其他硬件问题产生错误。
海明校验码就能在数据被读取的时候,快速地检查数据是否正确,如果错了就加以纠正。
不过要注意的是,海明校验码也不是万能的。
存在一种万分之一或者百万分之一的特殊情况,几个地方同时出错,就可能会让校验码判断失误。
虽然这种情况非常少,但也是我们在使用的时候需要知道的局限性。
我学习这个原理花了不少时间,一开始真的是一头雾水,但是静下心来慢慢研究这个数据位和校验位之间的关系,就像解开一团复杂的毛线球一样。
海明码原理一- - 海明码是一位纠错码,即如果数据在传输过程中有一位出错,则可以知道出错的位数并通过取反将其改正过来。
海明码的基本意思是给传输的数据增加r个校验位,从而增加两个合法消息(合法码字)的不同位的个数(海明距离)。
假设要传得信息有m位,则经海明编码的码字就有n=m+r位。
怎样安排才能达到我们的目的呢?在解释之前我们先看一道微软的面试题。
面试题:把1K个苹果分到10个篮子里(当然苹果分到篮子里后就不能再动了,只能分一次)。
要求:用这10个篮子能够组成1-1000任意一个数字。
这是个考察二进制思想的题目,让每个篮子里的苹果数等于二进制位的权重就可以了,即分别放1,2,4,8,……各苹果。
换到海明码里也是这样,为了让r个校验码(r个篮子)表示n个信息位(n个苹果),且无论哪一位错误都能表示出来(能够组成任意一个数字),先将码字的位从左到右标号,分别为1,2,3,……。
显然要将校验位安排在第1,2,4,8,……编号上,数据放在其他的编号上。
为了能够将n 位信息全部表示出来还应该有2r-1>=n。
每个数据位影响几个校验位,譬如编号11 对应的数据影响编号1、2、8对应的校验位,因为11=1+2+8。
为了更清楚理解上面的意思,让我们来看一个例子:将1001000编码成海明码。
因为编号1、2、4、8处是校验位,所以3、5、6、7、9、10、11处是数据位,将要传输的数据与编号对应如下: 3 5 6 7 9 10 11 1 0 0 1 0 0 0 数据位影响的校验位如下:编号3处的数据位影响编号1、2处的校验位,编号7处的数据位影响编号1、2、4处的校验位,经偶校验的校验位1、2的值为0,校验位4的值为1,其他校验位均为0。
所以对应的海明码为:00110010000。
接受方通过检验校验位来计算出错的位,如果校验位i的奇偶性不正确,则将计数器的值加i,如果所有的校验位都检查完了,且计数器为0,则检查成功,否则计数器的值就是出错的位所对应的编号,并将该位取反。
PS:其实接受方可以不用检查校验位是否有正确的奇偶性,而是看它是否为1,若是则计数器加i,检查完所有的校验位,将计数器的值对应的信息位取反。
海明码的原理详解 1.海明码的概念海明码是一种可以纠正一位差错的编码。
它是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位
置的一位错。
它必需满足以下关系式:2r>=n+1 或 2r>=k+r+1 海明码的编码效率为: R=k/(k+r 式中 k为信息位位数 r为增加冗余位位数 2.海明码的生成与接收方法一: 1海明码的生成。
例1.已知:信息码为:"0010"。
海明码的监督关系式为: S2=a2+a4+a5+a6 S1=a1+a3+a5+a6 S0=a0+a3+a4+a6 求:海明码码字。
解:1由监督关系式知冗余码为a2a1a0。
2冗余码与信息码合成的海明码是:
"0010a2a1a0"。
设S2=S1=S0=0,由监督关系式得: a2=a4+a5+a6=1 a1=a3+a5+a6=0 a0=a3+a4+a6=1 因此,海明码码字为:"0010101" 2海明码的接收。
例2.已知:海明码的监督关系式为: S2=a2+a4+a5+a6 S1=a1+a3+a5+a6 S0=a0+a3+a4+a6 接收码字为:"0011101"(n=7 求:发送端的信息码。
解:1由海明码的监督关系式计算得S2S1S0=011。
2由监督关系式可构造出下面错码位置关系表: S2S1S0 000 001 010 100 011 101 110 111 错码位置无错 a0 a1 a2 a3 a4 a5 a6 3由S2S1S0=011查表得知错码位置是a3。
4纠错--对码字的a3位取反得正确码字:"0 0 1 0 1 0 1" 5把冗余码
a2a1a0删除得发送端的信息码:"0010" 方法二:(不用查表,方便编程 1海明码的生成(顺序生成法)。
例3.已知:信息码为:" 1 1 0 0 1 1 0 0 " (k=8 求:海明码码字。
解:1把冗余码A、B、C、…,顺序插入信息码中,得海明码码字:" A B 1 C 1 0 0 D 1 1 0 0 " 码位: 1 2 3 4 5 6 7 8 9 10 11 12 其中A,B,C,D分别插于2k位
(k=0,1,2,3。
码位分别为1,2,4,8。
2冗余码A,B,C,D的线性码位是:(相当于监督关系式 A->1,3,5,7,9,11; B->2,3,6,7,10,11; C->4,5,6,7,12;(注 5=4+1;6=4+2;
7=4+2+1;12=8+4 D->8,9,10,11,12。
3把线性码位的值的偶校验作为冗余码的值(设冗余码初值为0:A=∑(0,1,1,0,1,0=1 B=∑(0,1,0,0,1,0=0 C=∑(0,1,0,0,0 =1
D=∑(0,1,1,0,0 =0 4海明码为:"1 0 1 1 1 0 0 0 1 1 0 0" 2海明码的接收。
例4.已知:接收的码字为:"1 0 0 1 1 0 0 0 1 1 0 0"(k=8 求:发送端的信息码。
解:1设错误累加器(err初值=0 2求出冗余码的偶校验和,并按码位累加到err中:
A=∑(1,0,1,0,1,0=1 err=err+20=1 B=∑(0,0,0,0,1,0=1 err=err+21=3 C=∑(1,1,0,0,0 =0
err=err+0 =3 D=∑(0,1,1,0,0 =0 err=err+0 =3 由err≠0可知接收码字有错, 3码字的错误位置就是错误累加器(err的值3。
4纠错--对码字的第3位值取反得正确码字:"1 0 1 1 1 0 0 0 1 1 0 0" 5把位于2k位的冗余码删除得信息码:"1 1 0 0 1 1 0 0"。