海明码

--本文摘自网络--


海明码是由R·hamming 在1950所提出的,它可以纠正一位差错的编码,但它的编码效率要比正反码高,现以奇偶校验码为例,

a0=a1a2a3an-1 

其中a0 是校验码,接收时可按关系式 

S= a0a1a2a3an-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=7

1.编码步骤

(1)根据信息位数,确定校验位数,2r≥k+r+1,其中,k为信息位数,r为校验位数。求出满足不等式的最小r,即为校验位数。

1-2有效信息位数k与校验位位数r的对应关系

k

r最小值

1~4

3

5~11

4

12~26

5

27~57

6

58~120

7

 

(2)计算机校验位公式。

1-3其实可以当成一个公式来套用,如有已经编码的数据 1100 1001 0111。我们只需把这些数据填充到校验公式,即可得到信息位与校验位。

1-3 校验位公式表

12

11

10

9

8

7

6

5

4

3

2

1

位数

I8

I7

I6

I5

 

I4

I3

I2

 

I1

 

 

信息位

 

 

 

 

r3

 

 

 

r2

 

r1

r0

校验位

  填充的方法是这样的,首先看数据的最低位(即右边第1),最低位为1,把1填充在公式表的r0位置,接着取出数据的次低位数据(即右边第2),把它填充到r1位置,把右边第3位数填充到I1位置。依此类推,我们可以得到表1-4

1-4 校验位公式实例表

12

11

10

9

8

7

6

5

4

3

2

1

位数

1

1

0

0

 

0

0

1

 

1

 

 

信息位

 

 

 

 

1

 

 

 

0

 

1

1

校验位

  表中第2行数据为1100 001 1,这就是数据1100 1001 0111的编码信息,而表格第3行是1 011,这便是验位。

  注意:

  ·校验位rn 所在位数为2n,其余由信息位从右至左填充;

  ·信息位下标从1开始,而校验位下标从0开始。

  例如:I8 对应的第十二位12=23+22I7,对应的第十一位11=23+21+20I6 对应的第十位10=23+21I5 对应的第九位9=23+20,一直写到I1对应的第三位。

   (可以看出它们都可写成8421这几个数之和。12=8+411=8+2+110=8+29=8+1。。。)

  校验位rn 由前面位数写成2的幂之和中包含2n 的位数对应的信息位之和构成

例如:

 r3=I8 I7 I6 I5

(r3看成23,然看23参与组成了哪些位。发现它参与组成I8I7I6I5)

 

 注意:其中 ”是异或运算,在异或运算中:

0 1=1;      1 0=1;      0 0=0;       1 1=0;

  (3)求校验位。根据上面我们所说的计算公式可以求出校验位。

  (4)求海明码。根据上面的表格填充后,写出海明码。

2.纠错步骤

  (1)根据海明码的信息位和校验位的分布规则,找出接收到的数据的信息位以及校验位。

1-5校验位公式表

12

11

10

9

8

7

6

5

4

3

2

1

位数

I8

I7

I6

I5

 

I4

I3

I2

 

I1

 

 

信息位

 

 

 

 

r3

 

 

 

r2

 

r1

r0

校验位

  如有已经编码的数据 1100 1001 0111,则可以根据上表得到编码的信息为:1100 001 1;校验位为:1 011,详细过程在编码步骤已详细说明。

2)接收端对校验位进行验证

 Sn= rn ( 校验) rn (接收)

  (3)判断校正因子是否有错,并改正。

  Sn  Sn-1  Sn-2……S0二进制转成十进制对应的是位就是位出错,将其改正完成纠错。如1001为第九位,将第九位10 (01) 即可。

例题1    求信息1011的海明码。

解答:

  我们可以按照上面所说的编码步骤进行解题:

  (1)2r≥4+r+1,确定校验们为323≥4+3+1

  (2)列出公式表格。

1-6校验位公式表

7

6

5

4

3

2

1

位数

I4

I3

I2

 

I1

 

 

信息位

 

 

 

r2

 

r1

r0

校验位

(校验位rn 所在位数为2n( 因校验位是3位,所以n=0,1,2)从而算出校验位为第421位。


7=22+21+206=22+215=22+203=21+20

r2=I4 I3I2

 r1= I4 I3I1

 r0= I4 I2I1

(3)根据公式得r 2 =0r1 =0r0=1。过程如下:

r2=I4 I3I2=1⊕0⊕1=0

  r1= I4 I3I1=1⊕0⊕1=0

  r0= I4 I2I1=1⊕1⊕1=1

  (4)加入表格。

1-7 对表1-6填充数据后的表格

7

6

5

4

3

2

1

位数

1

0

1

 

1

 

 

信息位

 

 

 

0

 

0

1

校验位

  则海明码为1010101

例题2

  信息位8位的海明码,在接收到报文110010100000,判断传输是否出错,并求出发送端发送的信息位。

解答:

  2r≥8+r+1,确定校验位为424≥4+4+1

1-8校验位公式表

12

11

10

9

8

7

6

5

4

3

2

1

位数

I8

I7

I6

I5

 

I4

I3

I2

 

I1

 

 

信息位

 

 

 

 

r3

 

 

 

r2

 

r1

r0

校验位

  按照上面的海明码信息位和校验位的分布情况表,对接收数据进行分解:

1-9 对表1-8填充数据后的表格

12

11

10

9

8

7

6

5

4

3

2

1

位数

1

1

0

0

 

0

1

0

 

0

 

 

信息位

 

 

 

 

1

 

 

 

0

 

0

0

校验位

从而得到信息位为11000100,校验位为1000

  因为12=23+22 ;11=23+21; 9=23+20;7=22+21+20; 6=22+21 ;5 =22+20;3=21+20 ;

  可得发送端校验位:

r3= I8I7 I6I5;

r2= I8 I4 I3 I2;

  r1= I7 I6 I4 I3  I1;

  r0= I7 I5 I4I2I1

  接收端可根据以下关系验证是否出错

  S3= r3 I8 I7I6  I5;

  S2= r2 I8 I4  I3 I2;

  S1= r1 I7 I6  I4  I3 I1;

  S0= r0 I7 I5  I4  I2I1;

  注意:其中的rn为接收端校验位。

由上面的算式得S3 S2 S1 S0=10011001转成十进制是9从而得知是原信息位第九位出错,所以正确的信息位为11010100。此外,若S3 S2 S1 S0全为0,则证明传输正确。

(原信息位第九位出错,通过查表1-8可知第九位是I5,将先前得到的信息位11000100从右往左数5位,发现是0,将它改为1,就得到正确的信息位11010100。

例题3

  若海明码的监督关系式为:

  S0=a0a3a4a5

  S1=a1a4a5a6

  S2=a2a3a5a6

  接收端收到的码字为:a6a5a4a3a2a1a0=1010100

  那最多一位错的情况下发送端的发送信息位是什么?

(附:海明码编码效率为:R=k/k+r,根据海明距离,信息位长度k越大,则R越高。如:k=4   r=3   R=4/7  k=7   r=4   R=7/11

用海明码只能纠正一位错。码距大于1,才能检错。码距大于d,才能检出 d 位错。纠错编码, 码距大于 2d , 可纠 d 位错。)

解答:a6 a5 a4 a3 a2 a1 a0对应的数字代入上述监督关系式得:

  S0=0010=1

  S1=0101=0

  S2=1001=0

  得出S2S1S0=001 根据值与错码位置的对应关系所以a0错误,发送端的发送信息应为1010101。

(从右至左排列为S2S1S0=001或说是从大至小排列为S2S1S0=001。将其转换为十进制为1,说明是第一位出错即a0出错。)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值