計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)知識之海明碼

字號:

$2.5.4海明碼
     海明碼是由R.HmIMI1ing在1950年首次提出的,它是一種可以糾正一位差錯(cuò)的編碼。
     可以借用簡單奇偶校驗(yàn)碼的生成原理來說明海明碼的構(gòu)造方法。若k(=n-1)位信息位an-1an-2…a1加上一位偶校驗(yàn)位a0,構(gòu)成一個(gè)n位的碼字an-1an-2...a1a0,則在接收端校驗(yàn)時(shí),可按關(guān)系式
    S=an-1+an-2+…+a1+a0
    來計(jì)算。若求得S=0,則表示元錯(cuò);若S=1,則有錯(cuò)。上式可稱為監(jiān)督關(guān)系式,S稱為校.正因子。.在奇偶校驗(yàn)情況下,只有一個(gè)監(jiān)督關(guān)系式和一個(gè)校正因子,其取值只有0或1兩種情.況,分別代表元錯(cuò)和有錯(cuò)兩種結(jié)果,還不能指出差錯(cuò)所在的位置。不難設(shè)想,若增加冗余位,也即相應(yīng)地增加了監(jiān)督關(guān)系式和校正因子,就能區(qū)分更多的情況。如果有兩個(gè)校正因子.
    S1和S0,則S1S0取值就有00、01、10或11四種可能的組合,也即能區(qū)分四種不同的情況。若其中一種取值用于表示無錯(cuò)(如00),則另外三種(01、10及11)便可以用來指出.不同情況的差錯(cuò),從而可以進(jìn)一步區(qū)分出是哪一位錯(cuò)。
     設(shè)信息位為k位,增加r位冗余位,構(gòu)成一個(gè)n=k+r位的碼字。若希望用r個(gè)監(jiān)督關(guān)系式產(chǎn)生的r個(gè)校正因子來區(qū)分元錯(cuò)和在碼字中的n個(gè)不同位置的一位錯(cuò),則要求滿足以下關(guān)系式:
    2r>=n+1 或 2r>=k+r+1
     以k=4為例來說明,則要滿足上述不等式,必須r>=3。假設(shè)取r=3,則n=k+r=7,即在4位信息位a6a5a4a3后面加上3位冗余位a2a1a0,構(gòu)成7位碼字a6a5a4a3a2a1a0,其中a2、a1和a0分別由4位信息位中某幾位半加得到,在校驗(yàn)時(shí),a2、a1和a0就分別和這些位半.加構(gòu)成三個(gè)不同的監(jiān)督關(guān)系式。在無錯(cuò)時(shí),這三個(gè)關(guān)系式的值S2、S1和S0全為"0"。若a2錯(cuò),則S2=1,而S1=S0=0;若a1錯(cuò),則S1=1,而S2=S0=0;若a0錯(cuò),則s0=1,而S2=S1=0。S2、S1和S0這三個(gè)校正因子的其它4種編碼值可用來區(qū)分a3、a4、a5、a6中的一位錯(cuò),其對應(yīng)關(guān)系如表2.1。當(dāng)然,也可以規(guī)定成另外的對應(yīng)關(guān)系,這并不影響討論的一般性。
    表2.1 S2 S1 S0 值與錯(cuò)碼位置的對應(yīng)關(guān)系
     S2 S1 S0   000  001 010 100  011  101  110  111
    錯(cuò)碼位置   無錯(cuò) a0  a1  a2  a3 a4   a5  a6
    由表可見,a2、a4、a5或a6的一位錯(cuò)都應(yīng)使S2=1,由此可以得到監(jiān)督關(guān)系式..
    S2=a2+a4+a5+a6....
    同理可得:S1=a1+a3+a5+a6..
    S0=a0+a3+a4+a6
    在發(fā)送端編碼時(shí),信息位a6、a5、a4和句的值取決于輸入信號,它們在具體的應(yīng)用中有l(wèi)確定的值。冗余位電、a1和ao的值應(yīng)根據(jù)信息位的取值按監(jiān)督關(guān)系式來確定,使上述三式l中的S2、S1和S0取值為零,即
    a2+a4+a5+a6=0
    a1+a3+a5+a6=0
    a0+a3+a4+a6=0
    由此可求得:
    a2=a4+a5+a6
    a1=a3+a5+a6
    a0=a3+a4+a6
    已知信息位后,按上述三式即可算出各冗余位。對于本例來說,各種信息位算出的冗余位如表2.2所示。
    表2.2 由信息位算得海明碼冗余位
    信息位    冗余位   信息位    冗余位
    a6a5a4a3  a2a1a0  a6a5a4a3   a2a1a0
    0000     000     1000     111
    0001     011     1001     100
    0010     101     1010     010
    0011     110     1011     001
    0100     110     1100     001
    0101     101     1101     010
    0110     011     1110     100
    0111     000     1111     111
     在接收端收到每個(gè)碼字后,按監(jiān)督關(guān)系式算出S2、S1和S0,若它們?nèi)珵?0",則認(rèn)為無錯(cuò);若不全為"0",在一位錯(cuò)的情況下,可查表2.1來判定是哪一位錯(cuò),從而糾正之。例如碼字0010101傳輸中發(fā)生一位錯(cuò),在接收端收到的為0011101,代入監(jiān)督關(guān)系式可算得S2=0、S1=1和S0=1,由表2.1可查得S2S1S0=011對應(yīng)于a3錯(cuò),因而可將0011101糾正為00101010。
     上述海明碼的編碼效率為4/7。若K=7,按2r>=k+r+1可算得r至少為4,此時(shí)編碼.效率為7/11??梢?信息位位數(shù)越多時(shí)編碼效率就越高