以下是筆者一節視頻課程中的PPT內容,細緻而又非常通俗地講解了海明碼的編碼計算、檢測錯和錯誤修正原理,如果因為PPT比較簡潔看不明白,可結合我的視訊來看,本節課程的視頻連結如下(可免費觀看,我全部課程5折搶購中!):http://edu.51cto.com/lesson/id-21540.html
(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位,以此類推。確定每個校正碼所校正的位元位:P1校正碼位校正的碼字位為:第1位(也就是P1本身)、第3位、第5位、第7位、第9位、第11位、第13位、第15位,……。
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位
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