海明码例举详解
海明码的计算(精)
海明码的计算(精)海明码的计算:码距:是不同码字的海明距离的最小值。
(1)可查出多少位错误:可以发现“≤码距-1”位的错误(2)可以纠正多少位错误:可以纠正“<码距/2”位的错误,因此如果要能纠正n位错误,则所需最小的码距是:2n+1。
计算:海明码是放置在2的幂次位上的即1,2,4,8,16,32,而对于信息位为m的原始数据,需加入k位的校验码,它满足m+k+1<.海明码的求法:一、有一种简单的方法,则是从第1位开始,遇到校验位留下空格。
如原始信息为101101100,并采用偶校验:1011011001 2 3 4 5 6 7 8 9 10 11 12 13二、然后概据以下公式填充校验位:1,2,4,8B1=B3⊕B5⊕B7⊕B9⊕B11⊕B13=1⊕0⊕1⊕0⊕1⊕0=1B2=B3⊕B6⊕B7⊕B10⊕B11=1⊕1⊕1⊕1⊕1=1B4=B5⊕B6⊕B7⊕B12⊕B13=0⊕1⊕1⊕0⊕0=0B8=B9⊕B10⊕B11⊕B12⊕B13=0⊕1⊕1⊕0⊕0=0三、最后将结果填入,得到结果:11100110011001 2 3 4 5 6 7 8 9 10 11 12 13海明码的纠错:如下给出一个加入了校验码的的信息,并说明有一位的错误,要找出错误位:11100110010001 2 3 4 5 6 7 8 9 10 11 12 13将B1,B2,B4,B8代入上式的公式中:B1=B1⊕B3⊕B5⊕B7⊕B9⊕B11⊕B13=1⊕1⊕0⊕1⊕0⊕0⊕0=1 B2=B2⊕B3⊕B6⊕B7⊕B10⊕B11=1⊕1⊕1⊕1⊕1⊕0=1B4=B4⊕B5⊕B6⊕B7⊕B12⊕B13=0⊕0⊕1⊕1⊕0⊕0=0B8=B8⊕B9⊕B10⊕B11⊕B12⊕B13=0⊕0⊕1⊕0⊕0⊕0=1然后从高位往下写,B8+B4+B2+B1=1011=11(十进制)即11位出错。
海明码题目
海明码:通常讨论的海明码,是一种可以纠正一位错的编码。
思路:是利用在k位信息位中增加r位冗余位,构成一个长度n=k+r的码子编码效率:R=k/(k+r)海明码生成步骤:1、根据信息位确定校验位长度规则:满足公式2r>=k+r+1的最小r就是校验位数,其中k为信息位长度如:信息位为8位,则校验位满足2r>=8+r+1,可得到最小r=4,也就是说校验位要有4位2、长度确定就可以求校验位校验位r n的位置为2n(也就是说都是2的倍数),其余位置由信息位填充例:上述信息位为8位,得到校验位应为4位,在校验位和信息和按照如下表格确定在最终I1I2的位置为5=4+1=22+20I3的位置为6=4+2=22+21I4的位置为7=4+2+1=22+21+20I5的位置为9=8+1=23+20I6的位置为10=8+2=23+21I7的位置为11=8+2+1=23+21+20I8的位置为12=8+4=23+22r n的值等于上述可被r n校验的各个信息位数据的模二相加之和:r0=I1+ I2+ I4+ I5+ I7(模二相加)3、纠错和检错机制题目:信息位8位的海明码,在接收到报文1100 1010 0000,判断传输是否出错,如果是错误的,求出发送端发送的信息位。
1)根据信息位长,可知道校验位长42)根据接收到的报文填充如下的表格3)由表可知:信息位数据位-11000100 校验位数据-10004)根据信息位,结合上面分析的验证关系,可计算出发送端的校验位(模二加法)r’3= I8+ I7+ I6+ I5=1+1+0+0=0r’2= I8+ I4+ I3+ I2=1+0+1+0=0r’1= I7+ I6+ I4+ I3 + I1=1+0+0+1=0r’0= I7+ I5+ I4+ I2+ I1=1+0+0+0+0=1接收端可根据以下关系验证是否出错(模二加法)S3= r3+ r’3=1+0=1S2= r2+ r’2=0+0=0S1= r1+ r’1=0+0=0S0= r0+ r’0=0+1=1最后得到监督位:S3 S2 S1 S0 如果结果全0 表示接收正确,非全0则将之转化为十进制,其对应位置就是出错的信息位,将出错的信息位取反即可得到正确的数据上述结果非全0,二进制为:1001,对应十进制为9,即表明接收到的数据的第9位出错,也就是I5出错,将之由0改为1,可得到发送端信息位为:11010100。
海明码的实验报告
海明码的实验报告一、实验目的和背景海明码(Hamming Code)是一种能够检测和纠正单一错误的错误检测和纠正编码方法,它使用了冗余位(Redundancy Bit)来增加数据的可靠性。
本实验的目的是通过编写程序来实现海明码的生成、纠正和检测功能,并验证海明码的可靠性。
二、实验内容与步骤1. 生成海明码:编写程序实现海明码的生成功能,读取输入的原始数据并生成相应的海明码。
2. 引入错误:编写程序在生成的海明码中引入1个错误位。
3. 纠正错误:编写程序实现海明码的错误纠正功能,通过纠正之后的码字与原始数据进行比对,验证纠正效果。
4. 检测错误:编写程序实现海明码的错误检测功能,通过检测错误的海明码数据,输出错误位置。
三、实验过程与结果1. 生成海明码根据海明码的生成规则,我们编写了一个生成海明码的程序。
用户在控制台输入原始数据,程序经过处理后输出相应的海明码。
例如,输入数据为`1101`,生成的海明码为`1101001`。
2. 引入错误在生成的海明码中,我们通过编写程序随机选择一个位置并进行改写,引入1个错误位。
例如,原本生成的海明码为`1101001`,改写后为`1101101`。
3. 纠正错误根据海明码的纠正规则,我们编写了一个纠正错误的程序。
用户输入引入错误后的海明码,程序经过处理后输出经过纠正后的码字。
例如,输入的海明码为`1101101`,经过纠正后输出的码字为`1101001`。
4. 检测错误根据海明码的检测规则,我们编写了一个检测错误的程序。
用户输入海明码,程序经过处理后输出错误位置。
例如,输入的海明码为`1101101`,程序输出错误位置为`5`。
四、实验结果分析通过实验结果可以得出以下结论:1. 海明码的生成功能能够准确地将原始数据转换成相应的海明码。
2. 引入错误后,海明码的纠正功能可以将引入的错误位纠正回原始数据。
3. 海明码的检测功能能够准确地检测出错误位置。
综上所述,海明码具有较高的可靠性,能够有效地检测和纠正单一错误。
计算机基础:海明码是什么?
计算机基础:海明码是什么?海明码:奇偶校验码的⼀种扩充。
只能检验和恢复⼀位。
例如:求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。
海明码详解
海明码是由R·hamming 在1950所提出的,它可以纠正一位差错的编码,但它的编码效率要比正反码高,现以奇偶校验码为例,a0=a1⊕a2⊕a3⊕…⊕a n-1其中a0是校验码,接收时可按关系式S= a0⊕a1⊕a2⊕a3⊕…⊕a n-1进行计算时,若S=0则无差错,若S=1则表明出错,则上面的S式子称为监督关系式,S 称为校正因子。
在奇偶校验的情况下,只有一个监督关系式和一个校正因子,其取值只有两种可能(0或1),分别表示正确和出错两种情况,而不能指出出错的位置。
若有两个校正因子,则有四种可能,一种表示无错,另三种表示出错,并可以指出出错的位置。
一般来说,若信息位为k位,冗余位为r位,则数据位n=k+r,用r的监督关系式来产生r个校正因子,区分无错和在n个不同的位置的一位错,则要求满足公式2 r≥ n+1 或 2 r≥ k+r+1此式子称为海明公式,r叫海明距离,若k=4时则r>=3,当取r=3时,n=k+r=4+3=71.编码步骤(1)根据信息位数,确定校验位数,2r≥k+r+1,其中,k为信息位数,r为校验位数。
求出满足不等式的最小r,即为校验位数。
表1-2有效信息位数k与校验位位数r的对应关系(2)计算机校验位公式。
表1-3其实可以当成一个公式来套用,如有已经编码的数据1100 1001 0111。
我们只需把这些数据填充到校验公式,即可得到信息位与校验位。
表1-3 校验位公式表填充的方法是这样的,首先看数据的最低位(即右边第1位),最低位为1,把1填充在公式表的r0位置,接着取出数据的次低位数据(即右边第2位),把它填充到r1位置,把右边第3位数填充到I1位置。
依此类推,我们可以得到表1-4。
表1-4 校验位公式实例表表中第2行数据为1100 001 1,这就是数据1100 1001 0111的编码信息,而表格第3行是1 011,这便是校验位。
注意:·校验位r n 所在位数为2n·信息位下标从1开始,而校验位下标从0开始。
海明码_计算机网络_[共2页]
5.3 差错控制193 【例 5-1】 已知:信息码M :110011 信息多项式:M (X )=X 5+X 4+X +1生成码P :1101 生成多项式:P (X )=X 3+X 2+1(n =3)求:冗余码和码字。
解:① 被除数是信息码M 后添加n =3个0,即110011000。
② 除数是P 即1101。
③ 用模2运算(见图5-9)。
由计算结果知冗余码是1001,码字就是1100111001。
在接收端把收到的数据以帧为单位进行CRC 检验。
用CRC 进行差错检验的过程很简单:接收方用P 去除接收到的k +n 位比特。
如果余数为0,则认为正确而被收下得到信息码;如果余数为非0,则接收方认为发生错误,就丢弃该帧,请求对方重发。
【例 5-2】 已知:接收码字:1100111001 多项式:T (X )=X 9+X 8+X 5+X 4+X 3+1生成码P : 11001 生成多项式:P (X )=X 4+X 3+1(n =4)求:码字的正确性。
若正确,则指出冗余码和信息码。
解:① 用字码除以生成码,余数为0,如图5-10所示,所以码字正确。
图5-9 求冗余码的例子 图5-10 求码字正确性的例子② 因n =4,所以冗余码是:1001,信息码是:110011现在广泛使用的生成多项式P ( X )有如下几种:CRC-16 = x 16+x 15+x 2+1CRC16-CCITT =x 16+x 12+x 5+1CRC-32 = x 32 +x 26+x 23+ x 22+ x 16+ x 12+ x 11+ x 10+ x 8+ x 7+ x 5+ x 4+x 2+x +1CRC 码不能100%地发现错误,余数为0时可能发生差错。
一般产生多项式阶数越高,检错能力越强。
凡是接收方数据链路层接收的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错。
通常都这样近似地认为:凡是接收方数据链路层接收的帧均无差错。
海明码编码计算、检错和纠错原理解析
海明码编码计算、检错和纠错原理解析一、海明码检错/纠错基本思想海明码(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位,……。
海明码最通俗易懂的讲解
M1 M 2 M 3 M 4 M 5 M 6 M 7 M 8 M 9 M10
甲 P1
P2
P3
P4
③ 确定数据的位置 这个很简单,除了校验码的位置其余的就是数据的位置,填充进去就可以了,于是可以
把数据信息先填进去,见“乙”行,下面就是最关键的部分,求出校验位的值啦!!!
M1 甲 P1
乙
M2 M3
P2
D1
1
M4 M5 M6 M7
P3
D2
D3
D4
0
1
1
M 8 M 9 M10
P4
D5
D6
0
1
④ 求出校位的值 这个公式不是难,99%左右的考生都能看懂海明码的求解过程,但是真正能够过目不忘
的相信就是极少数了,很多考生在论坛抱怨躺在床上眼睛一闭,一睁,就忘记了一半。眼睛
再一闭,一睁,基本上就等于没有看了。与其这样,倒不如考前几天突击一下。其实完全没
e1 M1 M 3 M 5 M 7 M 9 = 0 1 1 1 0 = 1 e2 M2 M 3 M 6 M 7 M10 =0 1 1 1 1 = 0 e3 M4 M 5 M 6 M 7 =0 1 1 1 = 1 e4 M8 M 9 M10 = 1 0 1 = 0 按照 e4、e3、e2、e1的排序方式得到的二进制序列为:0101,恰好对应十进制 5,是不
M1 M 2 M 3 M 4 M 5 M 6 M 7 M 8 M 9 M10
甲 P1
P2
D1
P3
D2
D3
D4
P4
D5
D6
乙0
0
1
海明码详解
海明码详解①海明校验的基本思想将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。
实质上,海明校验是一种多重校验。
②海明校验的特点它不仅具有检测错误的能力,同时还具有给出错误所在准确位置的能力。
一.校验位的位数校验位的位数与有效信息的长度有关设: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。
海明码原理
对于各种信息位算出的冗余位如表: 对于各种信息位算出的冗余位如表:
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
海明码例举详解
S1=0⊕1⊕1⊕1⊕0 =1
S2=0⊕1⊕1⊕1⊕1 =0
S3=0⊕1⊕1⊕1
=1
S4=1⊕0⊕1
=0
按照S4S3S2S1排列得到的二进制数为:0101,对应的 值十进制为5,找到错误位置!纠错!把1改为0!
S3=M4⊕M5⊕M6⊕M7
=P3⊕D2⊕D3⊕D4
S4=M8⊕M9⊕M10 =P4⊕D5⊕D6
如果海明码没有错误信息,S1、S2、S3、S4都为0, 等式右边的值也得为0,由于是异或,所以Pi( i=1,2,3…)的值跟后边的式子必须一样才能使整个式 子的值为零,即:Pi=后边的式子的值,即:
这个公式在验证纠错的时候还会用得到,只要记住这个 公式的推导就可以解决所有问题了。
图2
接下来就是代入求值的过程了,注意“⊕”这个符号 ,这是异或符号。按照图1中的指示,把相应的值代 入到图2 的公式里,可以得到如下内容
S1=M1⊕M3⊕M5⊕M7⊕M9 =P1⊕D1⊕D2⊕D4⊕D5
S2=M2⊕M3⊕M6⊕M7⊕M10=P2⊕D1⊕D3⊕D4⊕D6
海明码详解
以D= 101101这个数字的海明码推导为例
海明码步骤: 一、确定校验码的位数k 二、确定校验码的位置 三、数据的位置 四、求出校验位的值
一、 确定校验码的位数k
数据的位数m=6,公式来计算满足条件的k的最小值 2的k次方-1>=m+k 即:2的k次方-1>=6+k 解此不等式得在我们得到了D=101101的正确海明码就是
那么出错的时候是怎么验证出来的呢?比如第5位错 了,第5位现在的值是0,如果错了,它只能是1,二 进制就这两种值即:我们得到了这样的一组编码, 现在要找出错误的位置(假定你不知道哪里错)
海明码
海明码由R Hamming 在1950年提出的,它是一种可以纠正一位差错的编码。
用到的基础内容:1、二进制异或运算⊕2、奇偶校验3、码字4、海明距离码字:一个帧包括d个数据位,R个校验位,N=d+R,则此N比特单元称为N位码字海明距离(Hamming distance):两个码字之间不同的比特的位数目。
也叫码距。
在奇偶校验情况下,只有一个监督关系式,一个校正因子,其取值只有两种(0或1),分别代表了无错和有错两种情况,而不能指出差错所在的位置。
所以人们想要增加冗余位,就相应地增加监督关系式和校正因子,就能区分更复杂的情况。
例如:若有两个(2位)校正因子,则其取值就有4钟可能:00、01、10或11,就能区分4种不同情况。
若其中一种表示无错,另外三种不但可以用来指出有错,还可用来区分错误的情况,如指出具体的码字是哪一位错等。
一般而言,数据位为D位,增加R位冗余位,构成N=D+R 位码字。
若希望用R个监督关系式产生的R个校正因子来区分无错和在码字中的N个不同位置的一位错,则要求:2R≧N+1或者2R≧D+R+1下面取信息位为6位时4位的纠错情况。
1、确定R的位数由2R≧D+R+1得R=4构成10位码字。
a9 a8 a7 a6 a5 a4 a3 a2 a1 a0其中:a9 a8 a7 a6 a5 a4位数据位a3 a2 a1 a0位冗余位,用于指出码字出错的错误位置。
a3 a2 a1 a0分别由4位数据位中的某几位异或计算而得到其值规定该码字纠错位编码规则为下表:码字传送后接收方接收码字为:D1 D2 D3 D4 D5 D6 D7 D8 D9 D10如此。
那么要生成海明码的具体算法怎么做呢?假设要计算D=101101这组二进制的海明码,按下面的步骤:1、自然是先确定校验码的位数R。
这里R=4,由前面的介绍可知。
2、确定检验码的位置。
这里设4位校验为P1、P2、P3、P4,信息位由左到右为:D1 D2 D3 D4 D5 D6编码后共6+4=10位,计为M1、M2、M4、…、M10校验码Pi取(i取0、1、2、3)在编码中的位置为2i对应如下表:3、确定数据的位置,对应填入就可以了4、求出冗余校验位的值数据位的位值可以由校验位的位值相加(+)计算得出:D1(3=2+1)= P2 + P1D2(5=4+1)= P3 + P1D3(6=4+2)= P3 + P2D4(7=4+2+1)= P3 + P2 + P1D5(9=8+1)= P4 + P1D6(10=9+1)= P4 + P2然后用异或⊕计算相关的校验位的值P1与D1、D2、D4、D5相关P1=D1⊕D2⊕D4⊕D5=1⊕0⊕1⊕0,P1=0P2与D1、D3、D4、D6 相关P2= D1⊕D3⊕D4⊕D6=1⊕1⊕1⊕1,P2=0P3与D2、D3、D4相关P3= D2⊕D3⊕D4=0⊕1⊕1,P3=0P4与D5、D6相关P4= D5⊕D6 =0⊕1,P4=1于是结果为:用海明编码的D1、D2、…、D6的码字M1、M2、M4、…、M10为:001 001 110 1小结:编写海明码的过程:1、确定校验位R的位数2、确定校验R各个位在码字中的位置3、确定数据位的位置4、计算校验R的各个位的值如果接收的数据出错要如何纠错呢?请接着往下看。
海明码详解(原创)
海明码详解(原创)湖南人文科技学院数学系杨炼一、问题的提出海明码是奇偶校验的一种扩充。
它采用多位校验码的方式,在这些校验位中的每一位都对不同的信息数据位进行奇偶校验,通过合理地安排每个校验位对原始数据进行校验位组合,可以达到发现错误,纠正错误的目的。
海明码是一种可以纠正一位差错的编码。
海明码校验是为了保证数据传输正确而提出的,本来就是一串要传送的数据,如: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)出错;依次类推。
海明码和CRC编码的图解和详细计算过程
一、CRC编码1、已知多项式和原报文,求CRC编码,如:使用多项式G(x)=x^5 + x^4 + x +1,对报文10100110进行CRC编码,则编码后的报文是什么?方法与步骤:步骤1:对报文10100110,在末尾添加所给多项式的最高次阶个0,如本题为x^5,则添加5个0,变为:1010011000000。
步骤2:由多项式G(x)=x^5 + x^4 + x +1,得其阶数为1的二进制编码为:110011。
步骤3:步骤1中求得的1010011000000对步骤2中求得的110011进行模二除法,所得到的余数即为校验码,把校验码添加在原报文尾部即为所求的编码报文1010011011000,具体如下:2.已知道接收到的CRC编码,求原编码或判断是否出错,如:已知G(x)=x^5 + x^4 + x +1,接收的为1010011011001,问是否出错?步骤一:由多项式G(x)=x^5 + x^4 + x +1,得其阶数为1的二进制编码为:110011。
步骤二:用接收的报文1010011011001对步骤一的110011进行模二除法,看余数是否为0,如为0则正确,如不为0,则出错,计算余数为1,则出错。
如下图:二、海明码1.求海明码,如:求1011海明码。
步骤一:求校验码位数r,公式为:2^r ≥r+k+1的最小r。
题目中为2^3≥3+4+1,所以取r=3,即校验码为3位。
步骤二:画图,并把原码的位编号写成2的指数求和的方式,其中位编号长度为原码和校验码个数之和,从1开始。
校验码插在2的阶码次方的位编号下,且阶小于r。
如下:原码的位编号写成2的指数求和:7=2^2+2^1+2^0;6=2^2+2^1;5=2^2+2^0;3=2^1+2^0;步骤三:求校验位,即每个校验位的值为步骤二中“原码的位编号写成2的指数求和”式子中相应2的阶出现的位编号下原码的值异或。
即:r0=I4异或I2异或I1=1; (2^0次出现在7,5,3位,其对应的值为I4,I2,I1)r1=I4异或I3异或I1=0; (2^1次出现在7,6,3位,其对应的值为I4,I3,I1)r2=I4异或I3异或I2=0; (2^0次出现在7,6,5位,其对应的值为I4,I3,I2)把r0,r1,r2带入海明码,得所求的海明码为:10101012.已知海明码,求原码或判断是否出错并改正错位,如:信息位8位的海明码,接收110010100000时,判断是否出错,并求出发送端信息位。
海明码计算解析案例
海明码计算解析案例例题1:使用海明码进行纠错,7位码长(X7X6X5X4X3X2X1),其中4位数据,监督关系式为:C0 = x1+x3+x5+x7C1 = x2+x3+x6+x7C2 = x4+x5+x6+x7如果接收到的码字为1000101,那么纠错后的码字是()解答:接收到的码字为1000101,代入关系式。
得X7=X3=X1=1,X6=X5=X4=X2=0。
得出:C2=1,C1=0,C0=1,得C2C1C0=101,代入8421码,等于5,可知第五位出错。
纠错后的码字为:1010101从左往右1000101分别对应X7X6X5X4X3X2X1,将x1—x7带入c0 = x1+x3+x5+x7c1 = x2+x3+x6+x7c2 = x4+x5+x6+x7运算,即可得C2=1,C1=0,C0=1,对应101等于5,可知第五位出错。
注意,上面的加号是异或的符号。
例题2:已知海明码的监督关系式为:S2=a2+a3+a4+a6S1=a1+a4+a5+a6S0=a0+a3+a4+a5接收端收到的码字为a6a5a4a3a2a1a0=1010100,问在最多一位错的情况下发送端发送的码字是什么?(写出推演过程)。
答案:1)根据海明码的监督关系式,得下表:2)将a6a5a4a3a2a1a0=1010100分别代入海明码的监督关系式得:(其中"+"号表示异或运算):s2=1+0+1+1=1s1=0+1+0+1=0s0=0+0+1+0=1即s2s1s0=1013)查表可知:接收到的比特序列第4位有错,正确的应是:a6a5a4a3a2a1a0=1011100例1. 已知:信息码为:"0010"。
海明码的监督关系式为:S2=a2+a4+a5+a6S1=a1+a3+a5+a6S0=a0+a3+a4+a6求:海明码码字。
解:1) 由监督关系式知冗余码为a2a1a0。
2) 冗余码与信息码合成的海明码是:"0010a2a1a0"。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
以D= 101101这个数字的海明码推导为例
海明码步骤: 一、确定校验码的位数k 二、确定校验码的位置 三、数据的位置 四、求出校验位的值
一、 确定校验码的位数k
数据的位数m=6,公式来计算满足条件的k的最小值 2的k次方-1>=m+k 即:2的k次方-1>=6+k 解此不等式得:满足不等式的最小k=4,也就是 D=101101这个数字的海明码应该有6+4=10位,其中原 数据6位,校验码4位。
M3 M3 M5 M9
M4 P3
⊕ ⊕ ⊕ ⊕
M5 D2 0
M5 M6 M6 M10
M6 D3 1
⊕ ⊕ ⊕
M7 M7 M7
⊕ ⊕
M9 M10
M7 D4 1
M8 P4
M9 D5 0
M10 D6 1
把图4中的值,带入到图2 的公式里 S1=0⊕1⊕1⊕1⊕0 =1 S2=0⊕1⊕1⊕1⊕1 =0 S3=0⊕1⊕1⊕1 =1 S4=1⊕0⊕1 =0 按照S4S3S2S1排列得到的二进制数为:0101,对应的 值十进制为5,找到错误位置!纠错!把1改为0!
M1 甲 P1 乙
M2 P2
M3 D1 1
M4 P3
M5 D2 0
M6 D3 1
M7 D4 1
M8 P4
M9 D5 0
M10 D6 1
丙
1
0
1
1
0
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吧! 这个公式在验证纠错的时候还会用得到,只要记住这个 公式的推导就可以解决所有问题了。
M1 甲 P1
M2
M3
M4
M5
M6
M7
M8
M9
M10
P2
D1
P3
D2
D3
D4
P4
D5
D6
乙
1
0
1
1
0
1
图1
三、数据的位置
这个很简单,除了校验码的位置其余的就是数据的 位置,填充进去就可以了,见图中“甲”行的蓝色 字体,于是可以先把数据信息填进去,见“丙”行, 下面就是最关键的部分,求出校验位的值
二、确定校验码的位置
设这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
0
0
1
0
1
1
1
1
0
1
M1 M2 M3 M4 M5 M6 M7 M8 M9 M10
0
0
1
0
1
11Βιβλιοθήκη 101 现在又要用到公式了,请看图
S1 S2 S3 S4 = = = =
M1 甲 乙 P1
M1 M2 M4 M8
M2 P2
⊕ ⊕ ⊕ ⊕
M3 D1 1
如果海明码没有错误信息,S1、S2、S3、S4都为0, 等式右边的值也得为0,由于是异或,所以Pi (i=1,2,3…)的值跟后边的式子必须一样才能使整个 式子的值为零,即:Pi=后边的式子的值,即: P1 =D1⊕ D2⊕ D4⊕ D5 P2 =D1⊕ D3⊕ D4⊕ D6 P3 =D2⊕ D3⊕ D4 P4 =D5⊕ D6
仔细想一下异或的含义,以S4= P4⊕D5⊕D6为例,S4=0, 就是说P4⊕D5⊕D6=0,那么P4和(D5⊕D6)必须一样 (即P4= D5⊕D6),那么异或的结果才能为零!(不要 以算术加减法来理解,要用逻辑数学的思维!) 那么可以算出Pi的值了吧? P1 =D1⊕D2⊕D4⊕D5 = 1⊕ 0⊕1⊕0=0 P2 =D1⊕D3⊕D4⊕D6 = 1⊕ 1⊕1⊕1=0 P3 =D2⊕D3⊕D4 = 0⊕1⊕1=0 P4 =D5⊕D6 =0⊕1=1 把Pi的值填写到图1中,看“丙”行,就可以得到 haimming(海明)编码!
M1 M2 M3 M4 M5 M6 M7 M8 M9 M10
甲 P1 乙 P2 D1 1 P3 D2 0 D3 1 D4 1 P4 D5 0 D6 1
丙
0
0
1
0
0
1
1
1
0
1
五、海明码校验过程
现在我们得到了D=101101的正确海明码就是
0 0 1 0 0 1 1 1 0 1
那么出错的时候是怎么验证出来的呢?比如第5位错 了,第5位现在的值是0,如果错了,它只能是1,二 进制就这两种值即:我们得到了这样的一组编码, 现在要找出错误的位置(假定你不知道哪里错)
S1
=
M1
⊕
M3
⊕
M5
⊕
M7
⊕
M9
S2
=
M2
⊕
M3
⊕
M6
⊕
M7
⊕
M10
S3
=
M4
⊕
M5
⊕
M6
⊕
M7
S4
=
M8
⊕
M9
⊕ 图2
M10
接下来就是代入求值的过程了,注意“⊕”这个符 号,这是异或符号。按照图1中的指示,把相应的值 代入到图2 的公式里,可以得到如下内容 S1=M1⊕M3⊕M5⊕M7⊕M9 =P1⊕D1⊕D2⊕D4⊕D5 S2=M2⊕M3⊕M6⊕M7⊕M10=P2⊕D1⊕D3⊕D4⊕D6 S3=M4⊕M5⊕M6⊕M7 =P3⊕D2⊕D3⊕D4 S4=M8⊕M9⊕M10 =P4⊕D5⊕D6