海明码检错纠错原理(王达)
海明纠错码
5.3.6 海明纠错码海明码(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 信息码位数与校验码位数之间的关系现假设原来的8位信息码为10011101,因现在还没有求出各位校验码值,现在这些校验码位都用“?”表示,最终的码字为:??1?001?1101。
3. 确定校验码经过前面的两步,我们已经确定了所需的校验码位数和这些校验码的插入位置,但这还不够,还得确定各个校验码值。
这些校验码的值不是随意的,每个校验位的值代表了代码字中部分数据位的奇偶性(最终要根据是采用奇校验,还是偶校验来确定),其所在位置决定了要校验的比特位序列。
总的原则是:第i位校验码从当前位开始,每次连续校验i(这里是数值i,不是第i位,下同)位后再跳过i位,然后再连续校验i位,再跳过i位,以此类推。
海明校验码的原理详解
海明校验码的原理详解2006年12月27日星期三 10:57海明码是一种多重(复式)奇偶检错系统。
它将信息用逻辑形式编码,以便能够检错和纠错。
用在海明码中的全部传输码字是由原来的信息和附加的奇偶校验位组成的。
每一个这种奇偶位被编在传输码字的特定位置上。
实现得合适时,这个系统对于错误的数位无论是原有信息位中的,还是附加校验位中的都能把它分离出来。
推导并使用长度为m位的码字的海明码,所需步骤如下:1、确定最小的校验位数k,将它们记成D1、D2、…、Dk,每个校验位符合不同的奇偶测试规定。
2、原有信息和k个校验位一起编成长为m+k位的新码字。
选择k校验位(0或1)以满足必要的奇偶条件。
3、对所接收的信息作所需的k个奇偶检查。
4、如果所有的奇偶检查结果均为正确的,则认为信息无错误。
如果发现有一个或多个错了,则错误的位由这些检查的结果来唯一地确定。
校验位数的位数推求海明码时的一项基本考虑是确定所需最少的校验位数k。
考虑长度为m位的信息,若附加了k个校验位,则所发送的总长度为m+k。
在接收器中要进行k个奇偶检查,每个检查结果或是真或是伪。
这个奇偶检查的结果可以表示成一个k位的二进字,它可以确定最多2k种不同状态。
这些状态中必有一个其所有奇偶测试试都是真的,它便是判定信息正确的条件。
于是剩下的(2k-1)种状态,可以用来判定误码的位置。
于是导出下一关系:2k-1≥m+k码字格式从理论上讲,校验位可放在任何位置,但习惯上校验位被安排在1、2、4、8、…的位置上。
图5列出了m=4,k=3时,信息位和校验位的分布情况。
图5 海明码中校验位和信息位的定位校验位的确定下面为我增加,意在提出编码方法以助理解(但编码是否主要标准不可知)每行的值等于数值为1的各位码相异或。
如m=4,k=3.数据位前三行,校验位为后三行。
即A=p1⊕D1⊕D3⊕D4=0 得P1=D1⊕D3⊕D4B=P2⊕D2⊕D3⊕D4=0 得P2=D2⊕D3⊕D4C=P3⊕D1⊕D2⊕D3⊕D4=0 得P3=D1⊕D2⊕D3⊕D4 以下计算访求同下k个校验位是通过对m+k位复合码字进行奇偶校验而确定的。
海明码,汉明码,hamming
海明码,汉明码,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”。
纠错编码-海明码
纠错编码-海明码⼀.海明码海明码只能发现双⽐特错误,纠正单⽐特错误⼆.⼯作原理“动⼀发⽽牵全⾝”,因为海明码是⼀个多重校验码,也就是码字中的信息码位同时被多个校验码进⾏校验三.⼯作流程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位,……。
重传机制和海明码的纠错机制
重传机制和海明码的纠错机制
重传机制和海明码的纠错机制是保证通信正常和安全的重要技术。
一、什么是重传机制
重传机制是在因特网、通信和其他网络协议中为减少数据传输错误而使用的一种机制。
它使得当源主机发送的数据被丢失时,源主机可以重新发送丢失的数据,从而减少传输错误。
二、什么是海明码纠错机制
海明码纠错机制是一种用来纠正无线信号中零或多个比特错误的一种技术。
根据海明原理,将发送的和接收的数据进行比较,当发现错误时,根据海明码的模式将其纠正,从而保证无线信号的准确性。
三、重传机制和海明码纠错机制有什么共同点
1. 首先,它们都是为了减少数据传输错误而设计的机制。
2. 其次,它们都是在发现发送或接收数据出现错误时采取的行动,以避免传输出错误。
3. 最后,它们都可以有效地处理和纠正错误,从而保证数据传输的正确性。
四、重传机制和海明码纠错机制有什么不同点
1. 首先,重传机制只能处理丢失的数据,而海明码纠错机制还可以处理因信号干扰导致的错误。
2. 其次,重传机制更适合应用于大量数据的传输,海明码更适合小量数据传输。
3. 最后,重传机制侧重于检测发生错误的数据和发送错误数据,而海明码则关注纠错准确性,侧重于找出和纠正出现错误的信号位。
总结:重传机制和海明码纠错机制都是为了保证数据在传输过程中的准确性而设计的一种机制。
它们的基本原理是一致的,即在发现数据出现错误时,根据特定的机制进行纠正。
它们也有一定的区别,例如重传机制只能处理丢失的数据,而海明码纠错机制还可以处理因信号干扰导致的错误;重传机制更适合应用于大量数据的传输,海明码更适合小量数据传输等。
海明码详解
海明码详解①海明校验的基本思想将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。
实质上,海明校验是一种多重校验。
②海明校验的特点它不仅具有检测错误的能力,同时还具有给出错误所在准确位置的能力。
一.校验位的位数校验位的位数与有效信息的长度有关设: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。
海明码编码计算、检错和纠错原理解析
海明码编码计算、检错和纠错原理解析一、海明码检错/纠错基本思想海明码(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位,……。
海明码纠错
海明码纠错海明码的检测出错介绍2007-11-10 14:57:33| 分类:电脑| 标签:|举报|字号大中小订阅1.如果传输的数据位是m位,加了r位冗余位,那么总共传输的数据单元是m+r 位。
为了能够发现这m+r位数据单元在传输到目的端后是否出错,并能够指明是在哪一位出错,那么r至少应该能够代表m+r+1种状态。
r比特能够代表2^r不同状态。
因此,2^r>=m+r若m=7,则满足上式的最小r值为:4。
海明码的纠错原理海明码的接收端的公式:S3= P3⊕ D4⊕D3 ⊕D2S2= P2⊕D4 ⊕D3 ⊕D1S1= P1⊕D4 ⊕D2 ⊕D1假定海明码1010101在传送中变成了1000101S3= P3⊕ D4⊕D3 ⊕D2=0⊕1⊕0 ⊕0 =1S2= P2⊕D4 ⊕D3 ⊕D1=0⊕1⊕ 0 ⊕1=0S1= P1⊕D4 ⊕D2 ⊕D1=1⊕1⊕ 0 ⊕1=1因此,由S3S2S1= 101,指出第5位错,应由0变12.海明码是一位纠错码,即如果数据在传输过程中有一位出错,则可以知道出错的位数并通过取反将其改正过来。
海明码的基本意思是给传输的数据增加r个校验位,从而增加两个合法消息(合法码字)的不同位的个数(海明距离)。
假设要传得信息有m位,则经海明编码的码字就有n=m+r位。
3.例题1设被校验数据是二进制数01101101,求其海明码二进制存放位置:A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 数据存放的位置:D1 D2 D3 D4 D5 D6 D7 D8在你的例子中:0 1 1 0 1 1 0 1海明码:C1 C2 C3 C4C1 = D1 + D2 + D4 + D5 + D7C2 = D1 + D3 + D4 + D6 + D7C3 = D2 + D3 + D4 + D8C4 = D5 + D6 + D7 + D8至于为什么,看那个数据的位置编号,D1 在 3 的位置上,而这个的话可以用C1 + C2得到,所以在计算C1的话就可以用这些计算位置码需要用到C1的数据二进制码来加,当1的个数为偶数时,值为0,否则为1。
海明码原理
对于各种信息位算出的冗余位如表: 对于各种信息位算出的冗余位如表:
a6a5a4a3
0000 0001 0010 0011 0100 0101 0110 0111
a2ala0
000 011 101 110 110 101 011 000
a6a5a4a3
1000 1001 1010 1011 1100 1101 1110 1111
• 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。 , 。
• 可以增加冗余位,就相应地增加监督关系式和校 可以增加冗余位, 正因子,就能区分更多的情况。 正因子,就能区分更多的情况。 • 例如,若有两个(2位)校正因子,则其取值就有 例如,若有两个( 位 校正因子, 4种可能:00、01、10或11,就能区分 种不同情 种可能: 、 、 或 ,就能区分4种不同情 种可能 况。 • 若其中一种表示无错,另外三种不但可以用来指 若其中一种表示无错, 出有错,还可用来区分错误的情况, 出有错,还可用来区分错误的情况,如指出是哪 一位错等。 一位错等。
• 由表可见, a2、a4、a5或a6的一位错都应使 2=1,由此得 由表可见, 的一位错都应使S , 到监督关系式: 到监督关系式: • S2 =a2+a4十a5十a6 • 同理还有: 同理还有: • • S1 =a1+a3十a5十a6 S0 =a0+a3十a4十a6
Hamming码(精)
4
The check bits are calculated as follows, where the symbol designates the exclusive-or operation:
5
When the new check bits are compared with the old check bits, the syndrome word is formed:
The result is 0110, indicating that bit position 6, which contains data bit 3, in error.
Those bit positions whose position number are powers of 2 are designated as check bits. Each check bit operates on every data bit position whose position number contains a 1 in the corresponding column position. Bit position n is checked by those bits Ci such that ∑i=n.
Figure ErrorCorrecting Code
• The comparison logic receives as input two k-bit values. A bit-by-bit comparison is done by taking the exclusive-or of the two inputs. The results is called the syndrome word. – The syndrome word is therefore K bits wide and has a range between 0 and 2K-1. The value 0 indicates that no error was detected. Leaving 2K-1 values to indicate, if there is an error, which bit was in error (the numerical value of the syndrome indicates the position of the data bit in error). – An error could occur on any of the M data bits or K check bits so, 2K-1≥M+K (This equation gives the number of bits needed to correct a 3 single bit error in a word containing M data bits.)
纠错码和检错码
纠错码和检错码纠错码和检错码2010-11-05 08:47 A.M.一、常用检错码(1)寄偶校验码寄偶校验码是一种最简单的校验码,其编码规则:先将所要要传送的数据码元分组,并在每组的数据后面附加一位冗余位即校验位,使该组包括冗余位在内的数据码元中"1"的个数保持为奇数(奇校验)或偶数(偶校验)。
在接收端按照同样的规则检查,如发现不符,说明有错误发生;只有"1"的个数仍然符合原定的规律时,认为传输正确。
实际数据传输中所采用的寄偶校验码分为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验三种。
垂直奇偶校验是一字符为单位的校验方法。
例如,传输数据信息为"1010001",采用偶校验时,附加位为"1",则发送信息变为"10100011";采用奇校验时,附加位为"0",发送信息变为"10100010";(2)循环冗余校验码(CRC)循环冗余校验码CRC(Cyclic Redundancy Code)采用一种多项式的编码方法。
把要发送的数据位串看成是系数只能为"1"或为"0"的多项式。
一个k位的数据块可以看成Xk-1到X0的k项多项式的系数序列。
例如,"110001"有6位,表示多项式是"X5+X4+1"。
多项式的运算是模2运算。
采用CRC码时,发方和收方必须事先约定一个生成多项式G(X),并且G(X)的最高位和最低必须是1。
要计算m位数据块的M(X)的校验和,生成多项式必须比该多项式短。
其基本思想是:将校验和附加在该数据块的末尾,使这个带校验和的多项式能被G(X)除尽。
当接收方收到带校验和的数据块时,用G(X)去除它,如果有余数,则传输有错误。
二、纠错码纠错码与检错码相比其功能更强,它不但能检错还能纠错。
海明码原理——精选推荐
海明码(汉明码)海明码是在信息字段中插若干位数据,用于监督码字里的哪一位数据发生了变化。
假设信息位有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)是一个可以有多个校验位,具有检测并纠正一位错误代码的纠错码,所以也仅用于信道特性比较好的环境中,如以太局域网。
它的检错、纠错基本思想如下:(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. 数据转换:首先需要将要传输的数据转换成二进制码形式。
2. 生成海明码:根据生成规则生成海明校验码。
生成海明码的步骤如下:
- 确定校验位数:根据要传输的数据确定校验位的个数。
- 确定校验位的位置:将二进制数据码按一定规则排列,将二进制数据码的每一位(包括校验位)都与校验位位置有关联。
- 生成校验位:根据规则算出校验位的值,将其填入海明校验码的相应位置。
- 得到海明码:将数据码和校验位合并成海明码。
3. 传输:以海明码的形式进行传输。
4. 检测和纠正错误:接收方收到海明码时,先对码中的每个二进制数进行校验,以检测是否存在错误。
如果存在错误,可以根据海明码的规则进行修正。
如果存在多个错误,则无法进行修正。
海明校验码是一种比较简单有效的纠错码,但是其校验能力有限,无法纠正大量的错误。
海明校验码的设计原理
海明校验码的设计原理今天来聊聊海明校验码的设计原理。
你知道吗?我们生活中有很多时候都需要检查信息有没有出错,就好比我们去超市买东西,售货员要核对商品价格扫码有没有扫错,这就像是一种简单的校验过程。
在计算机的数据世界里,也有一个类似的超级校验器,那就是海明校验码。
海明校验码的原理其实还挺巧妙的。
想象一下,我们在一个仓库里放了很多箱子(数据位),这些箱子排得很整齐。
海明校验码就像给这些箱子安排了一些管理员(校验位)。
这些管理员的位置是有规定的,他们可不是随便站在某个地方。
比如说,第1个校验位(管理员)负责查看特定几个箱子的数据有没有问题,第3个校验位(管理员)又负责另外一组不同的箱子。
我一开始也不明白,为什么要这么复杂地安排这些管理员(校验位)呢?其实这里面是有数学规律的。
海明码设计的时候是让校验位按照2的幂次方的位置来分布的,就像1、2、4、8、16……这样的位置。
为什么这样呢?这就要说到它的校验方法了。
打个比方吧,校验位就像是一个个探测器。
当数据出错的时候,这些探测器会根据自己负责的那些箱子(数据位)发现异常,然后通过一些特定的运算,就能准确地找到是哪个箱子(位)的数据出现了错误。
比如说,假如发现是1号、3号探测器报警了,就说明是特定的某个数据位出现了问题。
这里的1号、3号探测器是按照海明码的规则设定好负责对应的一些数据位的。
海明校验码在实际的计算机存储和数据传输中非常有用。
比如说在硬盘存储数据的时候,数据可能因为电磁干扰或者其他硬件问题产生错误。
海明校验码就能在数据被读取的时候,快速地检查数据是否正确,如果错了就加以纠正。
不过要注意的是,海明校验码也不是万能的。
存在一种万分之一或者百万分之一的特殊情况,几个地方同时出错,就可能会让校验码判断失误。
虽然这种情况非常少,但也是我们在使用的时候需要知道的局限性。
我学习这个原理花了不少时间,一开始真的是一头雾水,但是静下心来慢慢研究这个数据位和校验位之间的关系,就像解开一团复杂的毛线球一样。
自动纠错——海明码的原理
自动纠错——海明码的原理上回说到,存在着这样的7位代码:1111111 1101000 1010100 10000110100101 0011001 0110010 0001110如果只输错一位,那么就可以自动纠错,识别出正确的代码来。
(详见:为什么重要的话需要说三遍?)那么,这些代码是怎样编制出来的呢?其实,这些代码是有着深刻的几何含义的。
除了“1111111”外,每一个代码刚好对应着法诺平面里的一条直线。
(参见:空间——看待事物(彩票)的全新视角)例如,“1101000”对应直线124;“1010100”对应直线135;等等。
这就意味着,识别一个代码,实质上等同于识别出法诺平面里的一条直线。
那么,如果你输错了一位代码呢?会有两种不同的情况:也许你将一个“1”错输为“0”,于是只有2个“1”;也许你将一个“0”错输为“1”,于是出现四个“1”。
如果是第一种情况,例如将“1010100”错输为“1000100”。
我们知道,“1010100”代表直线135,而“1000100”意味着直线经过1、5两点。
由于法诺平面中,“过两点有且只有一条直线”,所以,我们一定能够判断出这条直线必然是135,而不是其它。
这就意味着,正确的代码应当是“1010100”。
如果是第二种情况,例如将“1010100”错输为“1110100”。
这样一来,“1110100”意味直线经过1、2、3、5四个点。
但这实际上是不可能的,因为一条直线上只有三个点。
我想,聪明的你一定会提出疑问:究竟是直线135,还是直线125、235等等呢?如果这四个点真的代表了两条不同的直线,那么,这两条直线将会有2个公共点。
而你知道的,“两条直线最多只有一个公共点”,这种情况绝不会发生。
因此,“1110100”就只可能代表直线135,于是正确的代码仍然是“1010100”。
所以,不论如何,海明码都能够自动纠正输入时的错误(如果只输错一位)。
看到这里,你可能会带有有一种紧张的敬佩之情。
海明码的原理
海明码(Hamming Code )编码的关键是使用多余的奇偶校验位来识别一位错误。 码字(Code Word)按如下方法构建: 1、把所有2的幂次方的数据位标记为奇偶校验位(编号为1, 2, 4, 8, 16, 32, 64等的位置) 2、其他数据位用于待编码数据. (编号为3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17等的位置) 3、每个奇偶校验位的值代表了代码字中部分数据位的奇偶性,其所在位置决定了要校验和跳过的比特位顺序。 位置1:校验1位,跳过1位,校验1位,跳过1位(1,3,5,7,9,11,13,15,…) 位置2:校验2位,跳过2位,校验2位,跳过2位 (2,3,6,7,10,11,14,15,…) 位置4:校验4位,跳过4位,校验4位,跳过4位 (4,5,6,7,12,13,14,15,20,21,22,23,…) 位置8:校验8位,跳过8位,校验8位,跳过8位(8-15,24-31,40-47,…) … 如果全部校验的位置中有奇数个1,把该奇偶校验位置为1;如果全部校验的位置中有偶数个1,把该奇偶校验位置为0. 举例说明: 一个字节的数据:10011010 构造数据字(Data Word),对应的校验位留空_ _ 1 _ 0 0 1 _ 1 0 1 0 计算每个校验位的奇偶性 ( ?代表要设置的比特位): 位置1检查1,3,5,7,9,11: ? _ 1 _ 0 0 1 _ 1 0 1 0. 偶数个1,因此位置1设为0,即: 0 _ 1 _ 0 0 1 _ 1 0 1 0 位置2检查2,3,6,7,10,11: 0 ? 1 _ 0 0 1 _ 1 0 1 0. 奇数个1,因此位置2设为1,即: 0 1 1 _ 0 0 1 _ 1 0 1 0 位置4检查4,5,6,7,12: 0 1 1 ? 0 0 1 _ 1 0 1 0. 奇数个1,因此位置4设为1,即: 0 1 1 1 0 0 1 _ 1 0 1 0 位置8检查8,9,10,11,12: 0 1 1 1 0 0 1 ? 1 0 1 0. 偶数个1,因此位置8设为0,即: 0 1 1 1 0 0 1 0 1 0 1 0 因此码字为: 011100101010. 查找并纠错一位错误 上例中构建了一个码字 011100101010,假定实际接收到的数据是011100101110. 则接收方可以计算出哪一位出错并对其进行更正。方法就是验证每一个校验位。记下所有出错的校验位,可以发现校验位2和8的数据不正确. 错误校验位 2 + 8 = 10, 则位置10的数据出错。一般说来,对所有校验位进行检查, 将所有出错的校验位置相加, 得到的就是错误信息所在的位置.
海明码的基本原理
一、海明码的概念海明码是一种可以纠正一位差错的编码。
它是利用在信息位为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为校验位数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4. 实现校验和纠错 把以上这些校验码所校验的位分成对应的组,则在接收 端的对各校验位再进行逻辑“异或运算”,如果采用的是 偶校验,正常情况下均为0
• 如果最终发现只是一个校验组中的校验结果不符 ,则直接可以知道是对应校验组中的校验码在传 输过程中出现了差错,因为所有校验码所在的位 是只由对应的校验码进行校验
海明码检错、纠错原理
创作:王达 参考教材:《深入理解计算机网络》
一、海明码检错/纠错基本思想
海明码(Hamming Code)是一个可以有多个校验 位,具有检测并纠正一位错误代码的纠错码,所以 也仅用于信道特性比较好的环境中,如以太局域网 它的检错、纠错基本思想如下: (1)将有效信息按某种规律分成若干组,每组安排 一个校验位通过异或运算进行校验,得出具体的校 验码 (2)在接收端同样通过异或运算看各组校验结果是 否正确,并观察出错的校校组,或者多个出错的校 验组的共同校验位,得出具体的出错比特位 (3)对错误位取反来将其纠正
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位,……。 • Pn校验码位校验的码字位为:第2n-1位(也就是Pn本身) 、第2n-1+1位、第2n-1+2位、第2n-1+3位、……、第2n-1位 ,第3×2n-1位、第3×2n-1+1、……、第2×2n-1位,第 5×2n-1位、第5×2n-1+1位、第3×2n-1位,……、第 7×2n-1位、第7×2n-1+1位、……、第4×2n-1位,……, 第(2m-1) 2n-1位、……第m×2n-1位 最后每组通过异或逻辑运算(与偶校验原理一样),使每组 的运算结果为0,即可得出第i位校验码→确 定校验码位置→确定校验码 1. 计算校验码位数 假设用N表示添加了校验码位后整个传输信息的二进制 位数,用K代表其中有效信息位数,r表示添加的校验码 位数,它们之间的关系应满足: N=K+r≤2r-1(是为了确保r位校验码能校验全部的 数据位,因为r位校验码所能表示的最大十进制数为2r-1 ,同时也确保各位码本身不被其他校验码校验)
??1?001?1101 P1(n=1):1、3、5、7、9、11 1 1 0 1 1 0 P2(n=2):2、3、6、7、10、11 1 1 0 0 1 1 P3(n=3):4、5、6、7、12 0 0 0 1 1 P4(n=4):8、9、10、11、12 1 1 1 0 1 最终得出插入校验码后的信息码为:111000111101
• 如果发现多组校验结果不正确,则查看这些组中 公共校验的数据位(只有数据位才可能被几个校 验码进行校验),以最终确定是哪个数据位出了 差错(海明码只能检查一位出错) • 对所找到的出错数据位取反即可实现纠错
三、海明码计算示例
示例:10011101 (1)确定校验码位数 原始信息码一共8,根据前面的表可得知校验码位数为4 (2)确定校验码位置 ??1?001?1101 (2)计算机各位校验码 Pn校验码位校验的码字位为:第2n-1位(也就是Pn本身 )、第2n-1+1位、第2n-1+2位、第2n-1+3位、……、第2n1位,第3×2n-1位、第3×2n-1+1、……、第2×2n-1位, 第5×2n-1位、第5×2n-1+1位、第3×2n-1位,……、第 7×2n-1位、第7×2n-1+1位、……、第4×2n-1位,…… ,第(2m-1) 2n-1位、……第m×2n-1位
信息码位数
校验码位数
1
2
2~4 5~11
3 4
12~26 27~57 58~120
5 6 7
121~247
8
2. 确定校验码位置 海明码的校验码的位置必须是在2n次方位置(n从0 开始 ,分别代表从左边数起分别是第1、2、4、8、16……) ,信息码也就是在非2n次方位置 3. 确定校验码 校验位置选择原则:第i位校验码从当前校验码位开始, 每次连续校验i位后再跳过i位,然后再连续校验i位,再 跳过i位,以此类推。确定每个校验码所校验的比特位