當前位置:編程學習大全網 - 編程語言 - 求海明碼概述.

求海明碼概述.

海明碼

1.海明碼的概念

海明碼是壹種可以糾正壹位差錯的編碼。它是利用在信息位為k位,增加r位冗余位,構成壹個n=k+r位的碼字,然後用r個監督關系式產生的r個校正因子來區分無錯和在碼字中的n個不同位置的壹位錯。它必需滿足以下關系式:

2^r>=n+1 或 2^r>=k+r+1

海明碼的編碼效率為:

R=k/(k+r)

式中 k為信息位位數

r為增加冗余位位數

2.海明碼的生成與接收

方法壹:

1)海明碼的生成。

例1.已知:信息碼為:"0010"。海明碼的監督關系式為:

S2=a2+a4+a5+a6

S1=a1+a3+a5+a6

S0=a0+a3+a4+a6

求:海明碼碼字。

解:1)由監督關系式知冗余碼為a2a1a0。

2)冗余碼與信息碼合成的海明碼是:"0010a2a1a0"。

設S2=S1=S0=0,由監督關系式得:

a2=a4+a5+a6=1

a1=a3+a5+a6=0

a0=a3+a4+a6=1

因此,海明碼碼字為:"0010101"

2)海明碼的接收。

例2.已知:海明碼的監督關系式為:

S2=a2+a4+a5+a6

S1=a1+a3+a5+a6

S0=a0+a3+a4+a6

接收碼字為:"0011101"(n=7)

求:發送端的信息碼。

解:1)由海明碼的監督關系式計算得S2S1S0=011。

2)由監督關系式可構造出下面錯碼位置關系表:

S2S1S0

000

001

010

100

011

101

110

111

錯碼位置

無錯

a0

a1

a2

a3

a4

a5

a6

3)由S2S1S0=011查表得知錯碼位置是a3。

4)糾錯--對碼字的a3位取反得正確碼字:"0 0 1 0 1 0 1"

5)把冗余碼a2a1a0刪除得發送端的信息碼:"0010"

方法二:(不用查表,方便編程)

1)海明碼的生成(順序生成法)。

例3.已知:信息碼為:" 1 1 0 0 1 1 0 0 " (k=8)

求:海明碼碼字。

解:1)把冗余碼A、B、C、…,順序插入信息碼中,得海明碼

碼字:" A B 1 C 1 0 0 D 1 1 0 0 "

碼位: 1 2 3 4 5 6 7 8 9 10 11 12

其中A,B,C,D分別插於2k位(k=0,1,2,3)。碼位分別為1,2,4,8。

2)冗余碼A,B,C,D的線性碼位是:(相當於監督關系式)

A->1,3,5,7,9,11;

B->2,3,6,7,10,11;

C->4,5,6,7,12;(註 5=4+1;6=4+2;7=4+2+1;12=8+4)

D->8,9,10,11,12。

3)把線性碼位的值的偶校驗作為冗余碼的值(設冗余碼初值為0):

A=∑(0,1,1,0,1,0)=1

B=∑(0,1,0,0,1,0)=0

C=∑(0,1,0,0,0) =1

D=∑(0,1,1,0,0) =0

4)海明碼為:"1 0 1 1 1 0 0 0 1 1 0 0"

2)海明碼的接收。

例4.已知:接收的碼字為:"1 0 0 1 1 0 0 0 1 1 0 0"(k=8)

求:發送端的信息碼。

解:1)設錯誤累加器(err)初值=0

2)求出冗余碼的偶校驗和,並按碼位累加到err中:

A=∑(1,0,1,0,1,0)=1 err=err+20=1

B=∑(0,0,0,0,1,0)=1 err=err+21=3

C=∑(1,1,0,0,0) =0 err=err+0 =3

D=∑(0,1,1,0,0) =0 err=err+0 =3

由err≠0可知接收碼字有錯,

3)碼字的錯誤位置就是錯誤累加器(err)的值3。

4)糾錯--對碼字的第3位值取反得正確碼字:

"1 0 1 1 1 0 0 0 1 1 0 0"

5)把位於2k位的冗余碼刪除得信息碼:"1 1 0 0 1 1 0 0"

  • 上一篇:C語言四則運算
  • 下一篇:arduino是什麽意思
  • copyright 2024編程學習大全網