海明校验码的原理详解
海明码校验知识讲解
海明校验码
海明码是一种可以纠正一位差错的编 码。它是利用在信息位为k位,增加r位冗 余位,构成一个n=k+r位的码字,然后用r 个监督关系式产生的r个校正因子来区分 无错和在码字中的n个不同位置的一位错。 它必需满足以下关系式:
2r ≥ k+r+1 或 2r ≥ n+1
海明校验码
• 由err≠0可知接收码字有错, • 3)码字的错误位置就是错误累加器
(err)的值3。 • 4)纠错--对码字的第3位值取反得正确
码字:
• "1 0 1 1 1 0 0 0 1 1 0 0" • 5)把位于2的k次方位的冗余码删除得
信息码:"1 1 0 0 1 1 0 0"
上例中构建了一个码字 011100101010, 假定实际接收到的数据 011100101110. 则接收方可以计算出哪一位出错并对其进 行更正。方法就是验证每一个校验位。记 下所有出错的校验位,可以发现校验位2 和8的数据不正确. 错误校验位 2 + 8 = 10, 则位置10的数据出错。一般说来,对所有 校验位进行检查, 将所有出错的校验位置 相加, 得到的就是错误信息所在的位置.
奇偶校验规律
校验位的取值(0或1)将使整个校 验码中“1”的个数为奇数或偶数,所以有 两种可供选择的校验规律:
奇校验──整个校验码(有效信息位 和校验位)中“1”的个数为奇数。
偶校验──整个校验码中“1”的个数 为偶数。
2.简单奇偶校验 简单奇偶校验仅实现横向的奇偶校验,
下表给出几个字节的奇偶校验码的编码结 果。最高一位为校验位,其余8位为信息 位。在实际应用中,多采用奇校验,因为 奇校验中不存在全“0”代码,在某些场合 下更便于判别。
海明校验码的原理详解
海明校验码的原理详解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位复合码字进行奇偶校验而确定的。
海明码详解(精)
海明码详解这两天也在研究海明码的问题,把我的理解说给你吧,按照我说的可以顺利得到海明码步骤:一、确定校验码的位数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有关系。
海明码详解
海明码详解①海明校验的基本思想将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。
实质上,海明校验是一种多重校验。
②海明校验的特点它不仅具有检测错误的能力,同时还具有给出错误所在准确位置的能力。
一.校验位的位数校验位的位数与有效信息的长度有关设: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位。
海明校验码
例如:欲传递信息为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,即第一位。 可是第一位不是欲传送的信息位,而是检 测位,在一般情况下,可以不予纠正。
海明码和CRC
一、海明码校验法1.海明码海明码是采用多位校验码的方式,在信息数据中合理加入校验位,将码距均匀拉大,校验中的每一位都对不同的信息数据位进行奇偶校验。
海明码是利用在信息位为K位,增加r位冗余位,构成一个n=k+r的码字,然后用r个监督关系式产生r 个校正因子来区分区无错和在码字中的n个不同位置的一位错,它必需满足关系式:2r>=n+1或2r>=k+r+12.海明码的生成与接收方法一:1)海明码的生成。
例1.已知:信息码为:"0010"。
海明码的监督关系式为:S2=a2+a4+a5+a6S1=a1+a3+a5+a6S0=a0+a3+a4+a6求:海明码码字。
解:1)由监督关系式知冗余码为a2a1a0。
2)冗余码与信息码合成的海明码是:"0010a2a1a0"。
设S2=S1=S0=0,由监督关系式得:a2=a4+a5+a6=1a1=a3+a5+a6=0a0=a3+a4+a6=1因此,海明码码字为:"0010101"2)海明码的接收。
例2.已知:海明码的监督关系式为:S2=a2+a4+a5+a6S1=a1+a3+a5+a6S0=a0+a3+a4+a6接收码字为:"0011101"(n=7)求:发送端的信息码。
解:1)由海明码的监督关系式计算得S2S1S0=011。
2)由监督关系式可构造出下面错码位置关系表:S2S1S0000001010100011101110111错码位置无错a0a1a2a3a4a5a63)由S2S1S0=011查表得知错码位置是a3。
4)纠错--对码字的a3位取反得正确码字:"0 0 1 0 1 0 1"5)把冗余码a2a1a0删除得发送端的信息码:"0010"例 3.若海明码的监督关系为:S0=a0+a3+a4+a6 ;S1=a1+a3+a5+a6 ;S2=a2+a4+a5+a6 。
海明码编码计算、检错和纠错原理解析
海明码编码计算、检错和纠错原理解析一、海明码检错/纠错基本思想海明码(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位,……。
4位数据海明校验码的生成与纠错
数据在传输或存储过程中常常会出现错误,为了保证数据的完整性和准确性,通常会采用校验码来进行数据校验和纠错。
海明码是一种常用的校验码之一,它能够在一定程度上实现数据的纠错和校验。
本文将详细介绍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. 能够有效检测和纠正数据中出现的错误。
海明码编码与校验
海明码编码与校验(1)海明码的工作原理在传输的数据中加入几个校验位,并把数据的每个二进制位分配在几个奇偶校验组中。
当某一位出错后,就会有关的几个校验组的值的变化,这不但可以发现出错,还能指出那一位出错,为自动纠正提供了依据。
假设校验位的个数为r,则它能表示2r个信息,用其中的一个信息指出“没有错误”,其余的2r-1个信息指出错误发生在哪一位。
然而错误也可能发生在校验位,因此只有k=2r-1-r个信息能用于纠正被传送数据的位数。
满足以下关系:2r≥k+r+1(3.1.1)(2)模拟海明码工作的例子例1:要发送0101编码,求其海明码解:已知要发送的编码为0101,则k=4,根据(3.1.1)公式求出rmin=3。
r=3校验位插入的位置:P1=21-1=1………第一位P2=22-1=2………第二位P3=23-1=4………第三位则模拟编码位:7 6 5 4 3 2 10 1 0 * 1 * *D4 D3 D2 P3 D1 P2 P1D1=P1+P2,D1位置为 3=(0011)2D2=P1+P3,D2位置为 5=(0101)2D3=P2+P3,D3位置为 6=(0110)2D4=P1+P2+P3 ,D4位置为7=(0111)2求校验位PP1=D1⊕D2⊕D4=1 (对应上面二进制数右起第一位为1的参与异或操作)P2=D1⊕D3⊕D4=0P3=D2⊕D3⊕D4=1注:⊕为异或操作(相同为0,不同为1)得到最终的海明码:7 6 5 4 3 2 10 1 0 1 1 0 1D4 D3 D2 P3 D1 P2 P1↑↑ ↑例2:传输后得到错误码0001101,找出错误位并改正。
解:则模拟编码位:7 6 5 4 3 2 10 0 0 1 1 0 1D4 D3 D2 P3 D1 P2 P1S1=P1⊕D1⊕D2⊕D4=0S2=P2⊕D1⊕D3⊕D4=1S3=P3⊕D2⊕D3⊕D4=1排列S3,S2,S1=110(110)2=(6)10说明右起第六位出错!正确的码为:0101101。
海明编码实现的原理
海明编码实现的原理在数据编码中,加入几个校验位,并把数据的每一个二进制位分配在多个奇偶校验组中。
当某一个位出错后,就会引起有关的几个校验组的值发生变化,这样不但可以发现出错,还可以指出是哪一位出错,为自动纠错提供了依据。
码距:是指在一组编码中任何两个编码之间最小的距离。
距离:是指两个编码中相同位值不同的个数。
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 D0 1 0 1 1 1 0 1 0 0 1 1求指误字EkEk-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位出错,第1是1,取反得0,正确的海明编码是:10110010011其有效数据位是:1001011 ASCII值=75是字符K。
海明码编码计算、检错和纠错原理解析
一、海明码检错/纠错基本思想海明码(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。
海明校验码原理
海明校验码原理
海明校验码是用来检测和纠正二进制数据传输中的错误的编码方式,其实现原理如下:
1. 数据转换:首先需要将要传输的数据转换成二进制码形式。
2. 生成海明码:根据生成规则生成海明校验码。
生成海明码的步骤如下:
- 确定校验位数:根据要传输的数据确定校验位的个数。
- 确定校验位的位置:将二进制数据码按一定规则排列,将二进制数据码的每一位(包括校验位)都与校验位位置有关联。
- 生成校验位:根据规则算出校验位的值,将其填入海明校验码的相应位置。
- 得到海明码:将数据码和校验位合并成海明码。
3. 传输:以海明码的形式进行传输。
4. 检测和纠正错误:接收方收到海明码时,先对码中的每个二进制数进行校验,以检测是否存在错误。
如果存在错误,可以根据海明码的规则进行修正。
如果存在多个错误,则无法进行修正。
海明校验码是一种比较简单有效的纠错码,但是其校验能力有限,无法纠正大量的错误。
海明校验码的设计原理
海明校验码的设计原理今天来聊聊海明校验码的设计原理。
你知道吗?我们生活中有很多时候都需要检查信息有没有出错,就好比我们去超市买东西,售货员要核对商品价格扫码有没有扫错,这就像是一种简单的校验过程。
在计算机的数据世界里,也有一个类似的超级校验器,那就是海明校验码。
海明校验码的原理其实还挺巧妙的。
想象一下,我们在一个仓库里放了很多箱子(数据位),这些箱子排得很整齐。
海明校验码就像给这些箱子安排了一些管理员(校验位)。
这些管理员的位置是有规定的,他们可不是随便站在某个地方。
比如说,第1个校验位(管理员)负责查看特定几个箱子的数据有没有问题,第3个校验位(管理员)又负责另外一组不同的箱子。
我一开始也不明白,为什么要这么复杂地安排这些管理员(校验位)呢?其实这里面是有数学规律的。
海明码设计的时候是让校验位按照2的幂次方的位置来分布的,就像1、2、4、8、16……这样的位置。
为什么这样呢?这就要说到它的校验方法了。
打个比方吧,校验位就像是一个个探测器。
当数据出错的时候,这些探测器会根据自己负责的那些箱子(数据位)发现异常,然后通过一些特定的运算,就能准确地找到是哪个箱子(位)的数据出现了错误。
比如说,假如发现是1号、3号探测器报警了,就说明是特定的某个数据位出现了问题。
这里的1号、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的数据出错。一般说来,对所有校验位进行检查, 将所有出错的校验位置相加, 得到的就是错误信息所在的位置.
常用校验码(奇偶校验码、海明校验码、CRC校验码)
常⽤校验码(奇偶校验码、海明校验码、CRC校验码)计算机系统运⾏时,各个部之间要进⾏数据交换. 为确保数据在传送过程正确⽆误,常使⽤检验码. 我们常使⽤的检验码有三种. 分别是奇偶校验码、海明校验码和循环冗余校验码(CRC)。
奇偶校验码(Parity Codes)奇偶校验码最简单,但只能检测出奇数位出错. 如果发⽣偶数位错误就⽆法检测. 但经研究是奇数位发⽣错误的概率⼤很多. ⽽且奇偶校验码⽆法检测出哪位出错.所以属于⽆法矫正错误的校验码。
奇偶校验码是奇校验码和偶校验码的统称. 它们都是通过在要校验的编码上加⼀位校验位组成. 如果是奇校验加上校验位后,编码中1的个数为奇数个。
如果是偶校验加上校验位后,编码中1的个数为偶数个。
例:原编码奇校验偶校验0000 0000 1 0000 00010 0010 0 0010 11100 1100 1 1100 01010 1010 1 1010 0如果发⽣奇数个位传输出错,那么编码中1的个数就会发⽣变化. 从⽽校验出错误,要求从新传输数据。
⽬前应⽤的奇偶校验码有3种.⽔平奇偶校验码对每⼀个数据的编码添加校验位,使信息位与校验位处于同⼀⾏.垂直奇偶校验码把数据分成若⼲组,⼀组数据排成⼀⾏,再加⼀⾏校验码. 针对每⼀⾏列采⽤奇校验或偶校验例: 有32位数据10100101 00110110 11001100 10101011垂直奇校验垂直偶校验10100101 10100101 数据00110110 0011011011001100 1100110010101011 1010101100001011 11110100 校验⽔平垂直奇偶校验码就是同时⽤⽔平校验和垂直校验例:奇校验奇⽔平偶校验偶⽔平10100101 1 10100101 0 数据00110110 1 00110110 011001100 1 11001100 010101011 0 10101011 100001011 0 11110100 1 校验我们把传送过来的1100111000逐位相加就会得到⼀个1,应该注意的的,如果在传送中1100111000变成为0000111000,通过上⾯的运算也将得到1,接收⽅就会认为传送的数据是正确的,这个判断正确与否的过程称为校验。
海明码详解(原创)
海明码详解(原创)湖南人文科技学院数学系杨炼一、问题的提出海明码是奇偶校验的一种扩充。
它采用多位校验码的方式,在这些校验位中的每一位都对不同的信息数据位进行奇偶校验,通过合理地安排每个校验位对原始数据进行校验位组合,可以达到发现错误,纠正错误的目的。
海明码是一种可以纠正一位差错的编码。
海明码校验是为了保证数据传输正确而提出的,本来就是一串要传送的数据,如: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为校验位数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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时,信息位和校验位的分布情况。
?
码字位置B1B2B3B4B5B6B7
校验位x x x
信息位x x x x
复合码字P1P2D1P3D2D3D4
图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?未编码信息的海明码。