海明码能发现几位错误,海明码能纠错几位

http://www.itjxue.com  2023-01-16 20:41  来源:未知  点击次数: 

关于海明码的原理和计算

综合上面我们求一下信息1011的海明码是多少?

答:

我们知道信息位有4位,即为n=4,求得公式中校验位K=3。所以海明码一共7位:H7-H1 ; 信息位:D3-D0; 校验位:P3-P1。

求P3-P1在海明码中的位置。根据图中下面这句话。我们可以求得位置。

p1= 2的(1-1)次方=1

p2=2

p3=4

校验位在海明码中的位置:P1----1 P2----2 P3----4

现在我们需要求得P1-P3的值,我们的海明码就出来了。

eg: H7 下标为7, 校验码下标有1,2,4。 则需要7=4+2+1 。所以P1,P2,P3都参与了D3的校验。

接下来我们统计一个各个校验位校验的信号位有哪些。

P1----P1,D0,D1,D3

P2----P2,D0,D2,D3

P3----P3,D1,D2,D3

进行异或运算(相同为0,相异为1)

P1=D0⊕D1⊕D3=1 1 1=1

P2=D0⊕D2⊕D3=1 0 1=0

P3=D1⊕D2⊕D3=1 0 1=0

所以海明码为:1010101。

检错计算: 本来是1011,假如传过来的是1001。(D1出错了)

则从又到左D0=1 D1=0, D2=0, D3=1

G1=P1⊕D0⊕D1⊕D3=1 1 0 1=1

G2=P2⊕D0⊕D2⊕D3=0 1 0 1=0

G3=P3⊕D1⊕D2⊕D3=0 0 0*1=1

G3G2G1=101

如果是偶校验,则需要全部为0,如果是奇校验全部为1。

101的10进制。则是海明码里面的第5位出错。H5(D1)出错。则D1取反,得到。1001--1011 。 这样就实现了检错,改错了。

如何理解海明码可以发现双比特错,但是只能纠正单比特错?

纠错编码:

不仅可以发现错位,还可以指出错位的位置,为自动纠错提供数据。

海明码:

可以发现双比特错,但只能纠正单比特错。

海明码工作原理:

动一发而牵全身(在数据中有多个校验码,可能一个比特受多个校验码校验,当一个比特出了差错,可以通过校验码看出哪个比特出错)

海明码工作流程:

1.确定校验码位数r

n为有效信息的位数,k位校验码位数:

2^k=n+k+1;

例如:D=1010 (n=4)

带入上述公式得出 :

k = 3 得出对应的海明码位数为 4+3=7位

2.确定校验码和数据的位置

Note:二进制从0001开始,千万不要从0开始

校验码只能放在2的几次方的位置

p1 放在2的0次方 = 1p2 放在2的1次方 = 2p3 放在2的2次方 = 4D = 1 0 1 0 (D4--D1)| 二进制 | 0111 | 0110 | 0101 | 0100 | 0011 | 0010 | 0001 || 数据位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | | 代 码 | D4 | D3 | D2 | p3 | D1 | p2 | p1 | | 实际值 | 1 | 0 | 1 | | 0 | | | 剩下的位置放置原数据

3.求出校验码的值

Note:二进制从0001开始,千万不要从0开始| 二进制 | 0111 | 0110 | 0101 | 0100 | 0011 | 0010 | 0001 || 数据位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | | 代 码 | D4 | D3 | D2 | p3 | D1 | p2 | p1 | | 实际值 | 1 | 0 | 1 | | 0 | | | 以p1为例,p1二进制位末位是 1找所有二进制位位 1 的校验位 p1,D1,D2,D4 ==(?,0,1,1)

令所有要校验的位 异或 = 0: p1,D1,D2,D4 相互异或 (同0异1) 得到p1 = 0同理求出剩余

p2 找第二位是 1p3 找第三位是 1| 二进制 | 0111 | 0110 | 0101 | 0100 | 0011 | 0010 | 0001 || 数据位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | | 代 码 | D4 | D3 | D2 | p3 | D1 | p2 | p1 | | 实际值 | 1 | 0 | 1 | 0 | 0 | 1 | 0 |

4.检错并纠错

| 二进制 | 0111 | 0110 | 0101 | 0100 | 0011 | 0010 | 0001 || 数据位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | | 代 码 | D4 | D3 | D2 | p3 | D1 | p2 | p1 | | 实际值 | 1 | 0 | 1-0 | 0 | 0 | 1 | 0 |假设D2从 1变成了0 接收端做第三步的逆操作

令所有要检验的位异或运算

p1 = (0,0,0,1) = 1p2 = 0p3 = 1可以看出出错的是第 三 位和第 一 位是 1 的数 也就是 D2 出错了 将D2改正

海明码纠错

1 0 0 0 1 0 1

对应 X7X6X5X4 X3 X2 X1

那么

C0=X1+X3+X5+X7 =1+1+0+1=1

C1=X2+X3+X6+X7 =0+1+0+1=0

C2=X4+X5+X6+X7 =0+0+0+1=1

此处按偶校验!

则C0C1C2=101,那么转换成10进制数就是5,证明第5位出错!

所以原码字就为1010101

答案选 D

简单理解海明校验码

二进制数据经过传送、存取等环节,会发生误码(1变成0或0变成1),这就有如何发现及纠正误码的问题。所有解决此类问题的方法就是在原始数据(数码位)基础上增加几位校验位。我们常使用的检验码有三种. 分别是奇偶校验码、海明校验码和循环冗余校验码(CRC)。

海明校验码是由RichardHamming于1950年提出、目前还被广泛采用的一种很有效的校验方法。它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。但是因为这种海明校验的方法只能检测和纠正一位出错的情况。所以如果有多个错误,就不能查出了。

什么是码距?

两个码组对应位上数字的不同位的个数称为码组的距离,简称码距,又称海明(Hamming)距离。例如00110和00100码距为1,12345和13344码距为2,Caus和Daun码距为2。

海明校验码公式(假设为k个数据位设置r个校验位)

公式怎么得出来的呢?

假设有r个校验位,一个位子有0或1两种情况,r个位子就有2 r种排列情况,能表示2 r种状态。其中一个状态用来表示正确(没有错误发生)的这种情况。其余的2 r-1种状态来表示错误发生在哪一位。总共有k+r位,所以2 r-1一定要=总位子k+r。

按照该不等可以得出k与r的对应关系

注意:海明校验码是放在2的幂次位上的,即“1,2,4,8,16,32······”

实战求1011的海明码

第一步:求r的值(即校验位数)

直接根据公式代入得:

2^r-1 ≥ 4 + r

2^r-r ≥ 5

得到r最小为3

所以海明码的位数是4+3=7位

第二步:校验位和信息位对号入座

注意: 信息位的位置分配是从高位到低位依次存放

注意: 海明校验码是放在2的幂次位上的

位数|1|2|3|4|5|6|7

:-:|:-:|:-:|:-:|:-:|:-:|:-:

信息位|||1||1|0|1

校验位|r1|r2||r3|||

第三步:确定校验位的值

校验原则:被校验的海明位的下标等于所有参与校验该为的校验位的下标之和

然后将校验码校验的信息位的位置记录下来:

然后做对应信息位的异或运算(异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1))

代入表格得到

注意:按照从低位到高位的排列顺序得到海明码:1010101

(责任编辑:IT教学网)

更多

相关网页背景文章

推荐网页背景文章