你看得懂的海明碼校驗和糾錯原理(二)

2021-06-13 16:23:33 字數 1754 閱讀 4586

4.    實現校驗和糾錯

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

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

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

再假設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」(因為二進位制中每一位只能是這二者之一)。

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

你看得懂的海明碼校驗和糾錯原理(二)

接上篇 以下內容摘自筆者最新出版的最新著作 深入理解計算機網路 一書 本書原始目錄 4.實現校驗和糾錯 雖然上一步已把各位校驗碼求出來了,但是如何實現檢測出哪一位在傳輸過程中出了差錯呢?海明碼也只能檢測並糾正一位錯誤 它又是如何實現對錯誤的位進行糾正呢?其實最關鍵的原因就是海明碼是乙個多重校驗碼,也...

你看得懂的海明碼校驗和糾錯原理(一)

以下內容摘自筆者最新出版的著作 深入理解計算機網路 一書 本書原始目錄參見此文 海明碼 hamming code 是乙個可以有多個校驗位,具有檢測並糾正一位錯誤 的糾錯碼,所以它也僅用於通道特性比較好的環境中,如以太區域網中,因為如果通道特性不好的情況下,出現的錯誤通常不是一位。海明碼的檢錯 糾錯基...

你看得懂的海明碼校驗和糾錯原理(二)

接上篇 以下內容摘自筆者即將出版的最新著作 深入理解計算機網路 一書。本書將於12月底出版上市,敬請留意!本書原始目錄 4.實現校驗和糾錯 雖然上一步已把各位校驗碼求出來了,但是如何實現檢測出哪一位在傳輸過程中出了差錯呢?海明碼也只能檢測並糾正一位錯誤 它又是如何實現對錯誤的位進行糾正呢?其實最關鍵...