海明校验码的原理详解

合集下载

海明校验码的原理详解

海明校验码的原理详解

海明校验码的原理详解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位复合码字进行奇偶校验而确定的。

海明码原理

海明码原理

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•而逐位发送的顺序则是一列一列进行的,图中的顺序为。

海明码详解(精)

海明码详解(精)

海明码详解这两天也在研究海明码的问题,把我的理解说给你吧,按照我说的可以顺利得到海明码步骤:一、确定校验码的位数k二、确定校验码的位置三、数据的位置四、求出校验位的值首先,海明码的作用是:在编码中如果有错误,可以表达出第几位出了错,二进制的数据只有0和1,修改起来很容易,求反即可,这需要加入几个校验位。

重要的知识点:海明码的组成,不是简单的在后面加上校验位,海明码≠数据位+检验位那检验位该怎么加呢?它是根据总的位置来加的,加在【2的几次幂】的位置上,这个位置不是我们通常的从右向左数位置,刚好相反,是从左右如下图:P是校验位, D是数据位:原始的数据是:101101 校验位是插到了 1 2 4 8这几个位置上的。

位置M1M2M3M4M5M6M7M8M9M10甲P1 P2 D1P3 D2D3D4P4 D5D6乙10 110 1步骤一、确定校验码的位数k公式:m+k+1≤2^k (m是数据位的位数,K是要加的校验位的位数数据长是4位,校验码就是3位4+k+1≤2^kK最小只能是3数据长是5,6,7,8,9,校验码就是4位5+k+1≤2^kK最小就只能取4101101 数据位是6位,那校验位应该是4位,那总位数是:6+4=10位步骤二、确定校验码的位置位置M1M2M3M4M5M6M7M8M9M10甲P1 P2 D1P3 D2D3D4P4 D5D6乙10 110 1(图1)注意:【位置是从左----------右编码】(网上好多都反了,都是从右往左的,这应该是错的)校验位就插在2的幂次方的位置上。

4个检验位就是插到,2的0次方=1,2的1次方=2,2的2次方=4,2的3次方=8的位置上。

始上(图1)步骤三、数据的位置数据位置就按顺序写入进去就OK了,不要写到校验位就是的了。

步骤四、求出校验位的值也就是求图1中:p1 p2 p3 p4 的值。

那这几个数该如何求值呢?这里就要引进一个线性码的概念了,就是这4位校验码和图1中的那些位置上的数有关系呢?这里有一个进制转换的问题要先解决:因为是4位校验码,所以我们可以s4 s3 s2 s1 这个数来表示这个4位校验码,也就是p4 p3 p2 p1M1号位是十进制的1 转成四位二进制数就是:0001 即M1 和s1有关系同样的道理M2 变成四位二进制数: 0010 0010----s4 s3 s2 s1 s2的位置上是1 ,所以M2和S2有关系。

海明码校验和纠错原理详细

海明码校验和纠错原理详细

海明码校验和纠错原理详细海明纠错码当计算机存储或移动数据时,可能会产⽣数据位错误,这时可以利⽤汉明码来检测并纠错,简单的说,汉明码是⼀个错误校验码码集,由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位。

海明校验

海明校验

①海明校验的基本思想将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。

实质上,海明校验是一种多重校验。

②海明校验的特点它不仅具有检测错误的能力,同时还具有给出错误所在准确位置的能力。

一.校验位的位数校验位的位数与有效信息的长度有关设: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。

(2)每个校验位校验着它本身和它后面的一些确定位。

海明校验码

海明校验码
• 依次类推,便可确定每组所包含的各位。
例如:欲传递信息为b4b3b2b1(n=4),根据 2k≥n+k+1,可求出配置成海明码需增添检测位 k=3,且它们位置的安排如下:
二进制序号 1 2 3 4 5 6 7
ห้องสมุดไป่ตู้名称
C1 C2 b4 C4 b3 b2 b1
如果按照配偶原则来配置海明码,则
C1 应使1,3,5,7位中的“1”的个数为偶数;
1234567
正确的海明码 0 1 0 0 1 0 1
接收到的海明码 0 1 0 0 1 1 1
则新的检测位为:
P4=4⊕5⊕6⊕7,即P4=0⊕1⊕1⊕1=1
P2=2⊕3⊕6⊕7,即P2=1⊕0⊕1⊕1=1
P1=1⊕3⊕5⊕7,即P1=0⊕0⊕1⊕1=0
• 由此可见,传送结果P4、P2均不呈偶数, 显然出了差错。那么,错位在哪一位呢? 极为有意思的是,P4、P2、P1所构成的二 进制值恰恰是出错的位置,即P4P2P1=110, 表示第六位出错。发现错误后,计算机便 自动地将错误的第六位“1”纠正为“0”。
P1=1⊕3⊕5⊕7,即P1=C1⊕b4⊕b3⊕b1 P2=2⊕3⊕6⊕7,即P2=C2⊕b4⊕b2⊕b1 P4=4⊕5⊕6⊕7,即P4=C4⊕b3⊕b2⊕b1
设已知传送的正确海明码(按配偶原则配置)为 0100101,若传送后接收到的海明码为0100111, 其出错位可按下述步骤进行:
令:
二进制序号
• 又如,若收到按偶配置的海明码为1100101, 则经检测得:
P4=4⊕5⊕6⊕7,即P4=0⊕1⊕0⊕1=0 P2=2⊕3⊕6⊕7,即P2=1⊕0⊕0⊕1=0 P1=1⊕3⊕5⊕7,即P1=1⊕0⊕1⊕1=1 • 所以,出错位为:P4P2P1=001,即第一位。 可是第一位不是欲传送的信息位,而是检 测位,在一般情况下,可以不予纠正。

海明码编码计算、检错和纠错原理解析

海明码编码计算、检错和纠错原理解析

海明码编码计算、检错和纠错原理解析一、海明码检错/纠错基本思想海明码(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位,……。

软考历程(2)——海明码校验

软考历程(2)——海明码校验

软考历程(2)——海明码校验这两天学了校验码,在计算机系统基础知识这块,校验还是挺重要的。

这⾥涉及到的校验码有三种:奇偶校验码(Parity Code)海明码(Hamming Code)循环冗余检验码(CyclicRedundancy Check,CRC)1.奇偶校验码这是⼀种最简单最有效的校验⽅法,通过在编码中添加⼀位校验位。

使1的个数为偶数(偶校验)或奇数(奇校验)。

从⽽使码距变为2。

奇校验能够检測代码中奇数位出错的编码,不能够发现偶数位出错的情况。

2.海明码这是利⽤奇偶性来检错和纠错的校验⽅法。

其构成⽅法为:在数据位之间插⼊k个校验位。

求海明码的过程能够分为下⾯⼏个步骤:(1)依据数据位n,确定校验位k, n和k满⾜关系:2k-1≥n+k;(2)设海明码为H1。

H2。

H3。

……H n+k,将校验位依次放在20,21,22,2i-1……的位置上。

(3)将数据位由低位到⾼位依次放在海明码剩余的位置上。

(4)找出每⼀个校验位所校验的数据位,⽅法为:第⼀个校验位隔⼀位校验⼀位。

第⼆个校验位隔两位校验两位,第三个校验位隔三位校验三位……每⼀个校验位都校验它⾃⾝;(5)分别对每⼀个校验位所校验的数据位做抑或运算,结果为校验位的值。

(6)将所得校验位的值填⼊当中,即得海明码。

3.循环冗余校验码它由两部分组成。

左边为信息码。

右边为校验码。

校验码是由信息码产⽣的,求CRC编码时,採⽤模2运算。

多⽤于数据通信领域和磁介质存储领域,在參加的上个中⾕项⽬中就⽤到了CRC校验,那会⼉对于这个东东还认为蛮深奥的呢!。

海明码编码计算、检错和纠错原理解析

海明码编码计算、检错和纠错原理解析

一、海明码检错/纠错基本思想海明码(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位,……。

海明校验码(靠谱的解释)

海明校验码(靠谱的解释)

海明校验码(靠谱的解释)
【定义】
海明码(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。

计算机组成原理--海明码的编码和校验方法(易懂)

计算机组成原理--海明码的编码和校验方法(易懂)

计算机组成原理--海明码的编码和校验⽅法(易懂)海明码(也叫汉明码)具有⼀位纠错能⼒。

本⽂以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号探测器是按照海明码的规则设定好负责对应的一些数据位的。

海明校验码在实际的计算机存储和数据传输中非常有用。

比如说在硬盘存储数据的时候,数据可能因为电磁干扰或者其他硬件问题产生错误。

海明校验码就能在数据被读取的时候,快速地检查数据是否正确,如果错了就加以纠正。

不过要注意的是,海明校验码也不是万能的。

存在一种万分之一或者百万分之一的特殊情况,几个地方同时出错,就可能会让校验码判断失误。

虽然这种情况非常少,但也是我们在使用的时候需要知道的局限性。

我学习这个原理花了不少时间,一开始真的是一头雾水,但是静下心来慢慢研究这个数据位和校验位之间的关系,就像解开一团复杂的毛线球一样。

自动纠错——海明码的原理

自动纠错——海明码的原理

自动纠错——海明码的原理上回说到,存在着这样的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”。

所以,不论如何,海明码都能够自动纠正输入时的错误(如果只输错一位)。

看到这里,你可能会带有有一种紧张的敬佩之情。

校验码(海明码)

校验码(海明码)

校验码(海明码)
海明码⼀般指汉明码,与其他的错误校验码类似,汉明码也利⽤了的概念,通过在后⾯增加⼀些⽐特,可以验证数据的有效性。

利⽤⼀个以上的校验位,汉明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置。

 确定校验码的位数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次⽅。

海明码的原理

海明码的原理
3.海明码的计算
海明码(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的数据出错。一般说来,对所有校验位进行检查, 将所有出错的校验位置相加, 得到的就是错误信息所在的位置.

海明码详解(原创)

海明码详解(原创)

海明码详解(原创)湖南人文科技学院数学系杨炼一、问题的提出海明码是奇偶校验的一种扩充。

它采用多位校验码的方式,在这些校验位中的每一位都对不同的信息数据位进行奇偶校验,通过合理地安排每个校验位对原始数据进行校验位组合,可以达到发现错误,纠正错误的目的。

海明码是一种可以纠正一位差错的编码。

海明码校验是为了保证数据传输正确而提出的,本来就是一串要传送的数据,如: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为校验位数。

校检码之海明校验码的求法

校检码之海明校验码的求法

校检码之海明校验码的求法计算机组成原理汉明(海明)校验法求信息1011的海明码。

1.根据信息位数,确定校验位数根据公式 2^r≥k+r+1求,k为信息位数,r为校验位数。

1011⼀共是4位,所以k=4,r为满⾜不等式的最⼩的r.当r=1时带⼊式⼦不符合,2不符合,r=3时,8>=4+3+1,符合所以确定了初步的表格如下,为了后⾯填充⽅便,位数是由⼤到⼩排列的:2.求校验位2.1校验位的填充校验位⼀般都是在2^n的位置,因为表格确定了⼀共七位,所以,我们在这7位⾥⾯寻找到1、2、4,在表格中填充如下:2.2在表格中填充信息位,信息位是由⾼位向低位填充,⾼位的数字要填充到⾼位上,10112.3求校验位的值确定每个位置的校验位,每个位数都由R1、R2、R3中的⼀或若⼲个所确定。

1由第⼀个校验位来确定R1,2由第⼆个校验位来确定R2,3=1+2(1和2都是2的n次⽅),所以3由第⼀个和第⼆个校验位确定,4由第四个校验位R3确定,5和3道理是⼀样的,5=1+4(2^0+2^2);6=2+4;7=1+2+4,依次类推,这个题就是这些了。

整理为如下的表格:进⾏汇总,看每个校验位都确定了哪⼀位。

R1:1、3、5、7R2:2、3、6、7R3: 4、5、6、7最后求校验位的值,1对应的信息位为空,2也为空,3为1,4为空,5为1,依次类推,根据本博客中的第三个表格就可以得知。

然后对每个R所对应的信息位进⾏异或运算,相同时为0,不同时为1以R1为例,求出R1=1同理求出R2=0(101),R3=0(101)最后将这些数字填⼊表格:海明码就求出来了,把上⾯的红⾊的数字按照位数从低到⾼排列下来就是:1010101。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

海明校验码的原理详解
2006年12月27日星期三 10:57
海明码是一种多重(复式)奇偶检错系统。

它将信息用逻辑形式编码,以便能够检错和纠错。

用在海明码中的全部传输码字是由原来的信息和附加的奇偶校验位组成的。

每一个这种奇偶位被编在传输码字的特定位置上。

实现得合适时,这个系统对于错误的数位无论是原有信息位中的,还是附加校验位中的都能把它分离出来。

推导并使用长度为m位的码字的海明码,所需步骤如下:
1、确定最小的校验位数k,将它们记成D1、D
2、…、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⊕D4
B=P2⊕D2⊕D3⊕D4=0 得P2=D2⊕D3⊕D4
C=P3⊕D1⊕D2⊕D3⊕D4=0 得P3=D1⊕D2⊕D3⊕D4 以下计算访求同下
k个校验位是通过对m+k位复合码字进行奇偶校验而确定的。

其中:P1位负责校验海明码的第1、3、5、7、…(P1、D1、D2、D4、…)位,(包括P1自己)P2负责校验海明码的第2、3、6、7、…(P2、D1、D3、D4、…)位,(包括P2自己)
P3负责校验海明码的第4、5、6、7、…(P3、D2、D3、D4、…)位,(包括P3自己)
对m=4,k=3,偶校验的例子,只要进行式次偶性测试。

这些测试(以A、B、C表示)在图6所示各位的位置上进行。

图6 奇偶校验位置
因此可得到三个校验方程及确定校验位的三个公式:
A=B1⊕B3⊕B5⊕B7=0 得P1=D1⊕D2⊕D4
B=B2⊕B3⊕B6⊕B7=0 得P2=D1⊕D3⊕D4
C=B4⊕B5⊕B6⊕B7=0 得P3=D2⊕D3⊕D4
若四位信息码为1001,利用这三个公式可求得三个校验位P1、P2、P3值。

和海明码,
上面是发送方的处理
在接收方,也可根据这三个校验方程对接收到的信息进行同样的奇偶测试:
A=B1⊕B3⊕B5⊕B7=0;
B=B2⊕B3⊕B6⊕B7=0;
C=B4⊕B5⊕B5⊕B7=0。

若三个校验方程都成立,即方程式右边都等于0,则说明没有错。

若不成立即方程式右边不等于0,说明有错。

从三个方程式右边的值,可以判断那一位出错。

例如,如果第3位数字反了,则C=0(此方程没有B3),A=B=1(这两个方程有B3)。

可构成二进数CBA,以A为最低有效位,则错误位置就可简单地用二进数CBA=011指出。

同样,若三个方程式右边的值为001,说明第1位出错。

若三个方程式右边的值为100,说明第4位出错。

海明码的码距应该是3,所以能纠正1位出错。

而奇偶校验码的码距才是2,只能发现1位出错,但不能纠正(不知道那一位错)。

无校验的码距是1,它出任何一位出错后还是合法代码,所以也就无法发现出错。

这是关于海明码的经典说法,即码距为3,可以发现2位,或者纠正1位错。

应满足
2k-1≥m+k。

但在清华的王爱英主编的《计算机组成与结构》(该书已成为国内的权威)中还提出了一种码距为4的海明码,可以发现2位,并且纠正1位错。

应满足2(k-1)≥m+k。

由于王爱英书上对这两种概念没有很仔细解释(特别对码距为3的海明码),过渡很突然。

有些书简单抄袭时没有仔细消化,所以出现一些概念错。

对于一般码距为3的海明码,应该是“可以发现2位,或者纠正1位错”,而不是“可以发现2位,并且纠正1位错”。

在试题中出现过类似的错误。

若四位信息码为1001,利用这三个公式可求得三个校验位P1、P2、P3值。

和海明码,如图7则表示了信息码为1001时的海明码编码的全部情况。

而图8中则列出了全部16种信息
(D1D2D3D4=0000~1111)的海明码。

图7 四位信息码的海明编码
图8 未编码信息的海明码。

相关文档
最新文档