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

2021-09-03 05:51:33 字數 2539 閱讀 3330

接上篇:

以下內容摘自筆者即將出版的最新著作

《深入理解計算機網路》

一書。本書將於12月底出版上市,敬請留意!!

本書原始目錄:4.

實現校驗和糾錯

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

)海明碼的差錯檢測

現假設整個碼字一共是

18位,根據表

5-1可以很快得出,其中有

5位是校驗碼,再根據本節前面介紹的校驗碼校驗規則可以很快得出各校驗碼所校驗的碼字位,如表

5-2所示。 表

5-2 

各校驗碼校驗的碼位對照表

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

所有校驗碼所在的位是只由對應的校驗碼進行校驗,如第

1位(只由

p1校驗)、第

2位(只由

p2校驗)、第

4位(只由

p3校驗)、第

8位(只由

p4校驗)、第

16位(只由

p5校驗),……。也就是這些位如果發生了差錯,影響的只是對應的校驗碼的校驗結果,不會影響其它校驗碼的校驗結果。這點很重要,如果最終發現只是乙個校驗組中的校驗結果不符,則直接可以知道是對應校驗組中的校驗碼在傳輸過程中出現了差錯。 l

所有資訊碼位均被至少兩個校驗碼進行了校驗,也就是至少校驗了兩次。檢視對應的是哪兩組校驗結果不符,然後根據表

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

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

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

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

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