海明碼具有檢錯糾錯能力,用於傳輸質量較好的信道,因為出錯太多檢測不出來。
m位數據需要滿足具有r位校驗碼
m+r ≤ 2r-1
校驗位放在2n位置上,如??1? 111? 1111 111? 111...
校驗碼依次在20、 21、 22、 23、 24位置上,有的是從后往前寫的,結果不影響,知道怎么算就行。
例1,計算1011的海明碼及檢驗
1. 算校驗位
原數據1011, 有4位數據位, 需滿足4+r≤2r-1這個公式, 求得r=3,表明有3個檢驗位,以下用a、b、c、...來代替
得到ab1c011
2. 算校驗位值
令發送方和接受方都采用偶檢驗的方法,也就是保證1的個數為偶數。采用奇檢驗結果也一樣,但收發雙方一定要用相同的檢驗方法。
a b 1 c 0 1 1
第一位檢驗位a的計算方法:從a開始檢驗一位,跳過一位,即20位,利用偶檢驗確定a。
第二位檢驗位b的計算方法:從b開始檢驗兩位,跳過兩位,即21位,利用偶檢驗確定b。
第三位檢驗位c的計算方法:從c開始檢驗四位,跳過四位,即22位,利用偶檢驗確定c。
a b 1 c 0 1 1
a 1 0 1 偶檢驗確定a=0
a b 1 c 0 1 1
b 1 1 1 偶檢驗確定b=1
a b 1 c 0 1 1
后面沒有了,所以就是c 0 1 偶檢驗確定c=0
代入abc得海明碼0110 011
3. 檢驗
傳輸海明碼,若在信道上受到干擾,導致一位編碼出現異常由0110 011→0111 011
根據確定檢驗位的值來檢驗,第n組 檢驗2n位,跳過2n位,分別把每組的數據異或,得出錯位置。這里的異或也就是相當於偶檢驗的過程,1的個數為偶數G就為0。
0 1 1 1 0 1 1
G1=0⊕1⊕0⊕1=0
0 1 1 1 0 1 1
G2=1⊕1⊕1⊕1=0
0 1 1 1 0 1 1
G3=1⊕0⊕1⊕1=1
由於發送端采用的是偶檢驗那么G3G2G1=000可說明傳送中沒有出錯,G3G2G1=100轉化為十進制說明海明碼第4位出錯,將第四位糾錯后變成0110 011
例2,計算0111 011的海明碼及檢驗
1. 算校驗位
m=7,根據m+r ≤ 2r-1求得r=4
a b 0 c 1 1 1 d 0 1 1
2. 算校驗位值
令發送方和接受方都采用偶檢驗的方法,也就是保證1的個數為偶數。
a b 0 c 1 1 1 d 0 1 1
a b 0 c 1 1 1 d 0 1 1
a 0 1 1 0 1 偶檢驗確定a=1
a b 0 c 1 1 1 d 0 1 1
b 0 1 1 1 1 偶檢驗確定b=0
a b 0 c 1 1 1 d 0 1 1
c 1 1 1 偶檢驗確定c=1
a b 0 c 1 1 1 d 0 1 1
d 0 1 1 偶檢驗確定d=0
代入abcd得海明碼1001 1110 011
3. 檢驗
傳輸海明碼,若在信道上受到干擾,導致一位編碼出現異常由1001 1110 011→1001 1110 111
根據確定檢驗位的值來檢驗,第n組 檢驗2n位,跳過2n位,分別把每組的數據異或,得出錯位置。
1 0 0 1 1 1 1 0 1 1 1
G1=1⊕0⊕1⊕1⊕1⊕1=1
1 0 0 1 1 1 1 0 1 1 1
G2=0⊕0⊕1⊕1⊕1⊕1=0
1 0 0 1 1 1 1 0 1 1 1
G3=1⊕1⊕1⊕1=0
1 0 0 1 1 1 1 0 1 1 1
G4=0⊕1⊕1⊕1=1
由於發送端采用的是偶檢驗那么G4G3G2G1=0000可說明傳送中沒有出錯,G4G3G2G1=1001轉化為十進制說明海明碼第9位出錯,將第9位糾錯后變成1001 1110 011
例3,計算0111 0110 11的海明碼及檢驗
再來個多的,再多就沒有意義了。
1. 算校驗位
m=10,根據m+r ≤ 2r-1求得r=4
a b 0 c 1 1 1 d 0 1 1 0 1 1
2. 算校驗位值
令發送方和接受方都采用偶檢驗的方法,也就是保證1的個數為偶數。
a b 0 c 1 1 1 d 0 1 1 0 1 1
a b 0 c 1 1 1 d 0 1 1 0 1 1
a 0 1 1 0 1 1偶檢驗確定a=0
a b 0 c 1 1 1 d 0 1 1 0 1 1
b 0 1 1 1 1 1偶檢驗確定b=1
a b 0 c 1 1 1 d 0 1 1 0 1 1
c 1 1 1 1 1偶檢驗確定c=1
a b 0 c 1 1 1 d 0 1 1 0 1 1
d 0 1 1 0 1 1偶檢驗確定d=0
代入abcd得海明碼0101 1110 0110 11
3. 檢驗
傳輸海明碼,若在信道上受到干擾,導致一位編碼出現異常由0101 1110 0110 11→0001 1110 0110 11
根據確定檢驗位的值來檢驗,第n組 檢驗2n位,跳過2n位,分別把每組的數據異或,得出錯位置。
0001 1110 0110 11
G1=0⊕0⊕1⊕1⊕0⊕1⊕1=0
0001 1110 0110 11
G2=0⊕0⊕1⊕1⊕1⊕1⊕1=1
0001 1110 0110 11
G3=1⊕1⊕1⊕1⊕0⊕1⊕1=0
0001 1110 0110 11
G4=0⊕0⊕1⊕1⊕0⊕1⊕1=0
由於發送端采用的是偶檢驗那么G4G3G2G1=0000可說明傳送中沒有出錯,G4G3G2G1=0010轉化為十進制說明海明碼第2位出錯,將第2位糾錯后變成0101 1110 0110 11