海明校驗碼理解 糾錯原理

2021-08-18 09:16:17 字數 1699 閱讀 8042

二、海明校驗碼如何糾錯:

雖然上一步已把各位校驗碼求出來了,但是如何實現檢測出哪一位在傳輸過程中出了差錯呢?(海明碼也只能檢測並糾正一位錯誤)它又是如何實現對錯誤的位進行糾正呢?其實最關鍵的原因就是海明碼是乙個多重校驗碼,也就是碼字中的資訊碼位同時被多個校驗碼進行校驗,然後通過這些碼位對不同校驗碼的聯動影響最終可以找出是哪一位出錯了。

1)海明碼的差錯檢測

現假設整個碼字一共是18位,根據表5-1可以很快得出,其中有5位是校驗碼,再根據本節前面介紹的校驗碼校驗規則可以很快得出各校驗碼所校驗的碼字位,如表5-2所示。

表5-2  各校驗碼校驗的碼位對照表

從表中可以得出以下兩個規律:

海明碼校驗的方式就是各校驗碼對它所校驗的位組進行「異或運算」,即:

g1=p1⊕b1⊕b2⊕b4⊕b5⊕……

g2=p2⊕b1⊕b3⊕b4⊕b6⊕b7⊕b10⊕b11⊕……

g3= p3⊕b2⊕b3⊕b4⊕b8⊕b9⊕b10⊕b11⊕……

g4= p4⊕b5⊕b6⊕b7⊕b8⊕b9⊕b10⊕b11⊕……

g5= p5⊕b12⊕b13⊕b14⊕b15⊕b16⊕b17⊕b18⊕b19⊕b20⊕b21⊕b11⊕b23⊕b24⊕b25⊕b26⊕……

正常情況下(也就是整個碼字不發生差錯的情況下),在採用偶校驗時,各校驗組通過異或運算後的校驗結果均應該是為0,也就是前面所說的g1、g2、g3、g4,……均為0,因為此時1為偶數個,進行異或運算後就是0;而採用奇校驗時,各組校驗結果均應是為1。

現在舉乙個例子來說明,假設傳輸的海明碼為111

0001

11101

(一共12位,帶陰影的4位就是校驗碼),從中可以知道它有四個校驗組:g1、g2、g3、g4,然而到達接收端經過校驗後發現只有g4=1(也就是只有這組校驗結果不等於0),通過前面介紹的校驗規律可以很快地發現是g4校驗組中的p4校位碼(也就是整個碼字中的第8位)錯了(因為只有一組校驗結果出現差錯時,則肯定只是對應的校驗位出了差錯),也就是最終的碼字變成了:11100000

1101。

再假設g3、g4兩個校驗值都不為0,也就是都等於1。通過表5-2中比較g3、g4兩個校驗組(注意本示例中碼字長度一共才12位,只需要比較前12位)中共同校驗的碼位可是以很快發現是b8,也就是第12位出現了差錯,也就是最終的碼字變成了:111000011100

。【經驗之談】在這裡一定要注意,最終有多少個校驗組出現差錯也不是隨意的,一定要結合實際傳輸的碼字長度來考慮。如上例是一共12位,如果換成了是16位的碼字,且當b9位出現差錯時,則g1、g3、g4一定會同時出現錯誤,因為b9這個位是三個校驗組同時校驗的,只要它一出錯,肯定會同時影響這三個校驗組的值。同理,如果是b11位出現了差錯,因為它同時受g1、g2、g3、g4四個校驗組校驗,所以這四個校驗組結果都將出現錯誤。

2)海明碼的差錯糾正

檢測出了是哪位差錯還不夠,因為海明碼具有糾正一位錯誤的能力,所以還需要完成糾錯過程。這個過程的原理比較簡單,就是直接對錯誤的位進行取反,或者加「1」操作,使它的值由原來的「1」變成「0」,由原來的「0」變成「1」(因為二進位制中每一位只能是這二者之一)。

以上就是海明碼的整差錯檢測和差錯糾正原理了,確實比單純的奇偶校驗碼複雜些,但只要理清了思路,也還是比較簡單的。

海明校驗碼

這是關於計算機基礎的知識。我們都知道計算機系統執行時,各個部件之間要進行資料交換,為了確保資料在傳送的過程中正確無誤,一是提高硬體電路的可靠性,二是提高 的校驗能力,包括查錯和糾錯。此文主要是從海明碼的校驗能力來說,也是使用校驗碼的方法來檢測傳送的資料是否出錯。它的實現原理,是在m個資料位之外加上k...

海明校驗碼

是由貝爾實驗室的richard hamming設計的,是一種利用奇偶性來檢錯和糾錯的檢驗方法。海明碼的構成方法是在資料位之間的特定位置上插入k個校驗位,通過擴大碼距來實現檢錯和糾錯。實現原理 是在m個資料位之外加上k個校驗位,從而形成乙個m k位的新的碼字,使新的碼字的碼距比較均勻地拉大。把資料的每...

海明校驗碼

計算機組成中的海明校驗碼,相信學過的都會有了解,那麼對其中校驗位的確定,我想似乎有些人不是很明白,今天我來詳細的把如何確定校驗位分享一下 首先看下基本的概念 2 r k r 1 其中r為校驗位 k為資訊位 資訊位是已知的,那麼如何確定校驗位呢,用乙個例子來說明 例如 二進位製碼1011 求它的海明編...