一、海明碼檢錯/糾錯基本思想
海明碼(Hamming Code)是一個能夠有多個校驗位。具有檢測並糾正一位錯誤代碼的糾錯碼,所以也僅用於信道特性比較好的環境中。如以太局域網。它的檢錯、糾錯基本思想例如以下:
(1)將有效信息按某種規律分成若干組,每組安排一個校驗位通過異或運算進行校驗。得出詳細的校驗碼
(2)在接收端相同通過異或運算看各組校驗結果是否正確,並觀察出錯的校校組。或者多個出錯的校驗組的共同校驗位。得出詳細的出錯比特位
(3)對錯誤位取反來將其糾正
二、海明碼計算
海明碼計算要按下面步驟來進行:計算校驗碼位數→確定校驗碼位置→確定校驗碼
1. 計算校驗碼位數
假設用N表示加入了校驗碼位后整個傳輸信息的二進制位數。用K代表當中有效信息位數,r表示加入的校驗碼位數,它們之間的關系應滿足:N=K+r≤2r-1(是為了確保r位校驗碼能校驗所有的數據位,由於r位校驗碼所能表示的最大十進制數為2r-1,同一時候也確保各位碼本身不被其它校驗碼校驗)
信息碼位數 |
1 |
2~4 |
5~11 |
12~26 |
27~57 |
58~120 |
121~247 |
校驗碼位數 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
2. 確定校驗碼位置
海明碼的校驗碼的位置必須是在2n次方位置(n從0 開始,分別代表從左邊數起各自是第1、2、4、8、16……)。信息碼也就是在非2n次方位置
3. 確定校驗碼
- 校驗位置選擇原則:第i位校驗碼從當前校驗碼位開始,每次連續校驗i位后再跳過i位。然后再連續校驗i位。再跳過i位。以此類推。
確定每一個校驗碼所校驗的比特位:
- P2校驗碼位校驗的碼字位為:第2位(也就是P2本身)、第3位。第6位、第7位,第10位、第11位,第14位、第15位,……。
- P3校驗碼位校驗的碼字位為:第4位(也就是P4本身)、第5位、第6位、第7位,第12位、第13位、第14位、第15位,第20位、第21位、第22位、第23位,……。
- Pn校驗碼位校驗的碼字位為:第2n-1位(也就是Pn本身)、第2n-1+1位、第2n-1+2位、第2n-1+3位、……、第2n-1位。第3×2n-1位、第3×2n-1+1、……、第2×2n-1位。第5×2n-1位、第5×2n-1+1位、第3×2n-1位,……、第7×2n-1位、第7×2n-1+1位、……、第4×2n-1位,……,第(2m-1) 2n-1位、……第m×2n-1位
最后每組通過異或邏輯運算(與偶校驗原理一樣)。使每組的運算結果為0,就可以得出第i位校驗碼的值
4. 實現校驗和糾錯
把以上這些校驗碼所校驗的位分成相應的組,則在接收端的對各校驗位再進行邏輯“異或運算”,假設採用的是偶校驗,正常情況下均為0。
假設發現多組校驗結果不對,則查看這些組中公共校驗的數據位(僅僅有數據位才可能被幾個校驗碼進行校驗),以終於確定是哪個數據位出了差錯(海明碼僅僅能檢查一位出錯);
最后,對所找到的出錯數據位取反就可以實現糾錯。

三、海明碼計算演示樣例
原信息碼:10011101(1)確定校驗碼位數
原始信息碼一共8。依據前面的表可得知校驗碼位數為4
(2)確定校驗碼位置
??1?001?1101
(2)計算機各位校驗碼
Pn校驗碼位校驗的碼字位為:第2n-1位(也就是Pn本身)、第2n-1+1位、第2n-1+2位、第2n-1+3位、……、第2n-1位,第3×2n-1位、第3×2n-1+1、……、第2×2n-1位。第5×2n-1位、第5×2n-1+1位、第3×2n-1位。……、第7×2n-1位、第7×2n-1+1位、……、第4×2n-1位,……,第(2m-1) 2n-1位、……第m×2n-1位
P1(n=1):1、3、5、7、9、11 #----檢驗的bit位,下同
1 1 0 1 1 0 #----相應位的值,下同
P2(n=2):2、3、6、7、10、11
1 1 0 0 1 1
P3(n=3):4、5、6、7、12
0 0 0 1 1
P4(n=4):8、9、10、11、12
1 1 1 0 1
終於得出插入校驗碼后的信息碼為:111000111101
【我的視頻課程所有 5折秒殺中。7月1號晚24點前有效!】
我的視頻課程主頁:http://edu.51cto.com/pack/view/id-3.html
購終身會員。享所有課程 ,加入本人微信公眾帳號“ 王達大講堂 ”了解詳情
