奇偶效驗碼
奇偶校驗碼是奇校驗碼和偶校驗碼的統稱。它們都是通過在要校驗的編碼上加一位校驗位組成。
奇校驗碼:加上校驗位后,編碼中 1 的個數為奇數個。
偶校驗碼:加上校驗位后,編碼中 1 的個數為偶數個。
水平奇偶效驗碼
例:
原編碼 | 奇校驗 | 偶校驗 |
0000 | 0000 1 | 0000 0 |
0010 | 0010 0 | 0010 1 |
1100 | 1100 1 | 1100 0 |
1010 | 1010 1 | 1010 0 |
垂直奇偶效驗碼
例:
有32位數據 10100101 00110110 11001100 10101011
垂直奇校驗 | 垂直偶校驗 | |
原編碼 | 10100101 | 10100101 |
00110110 | 00110110 | |
11001100 | 11001100 | |
10101011 | 10101011 | |
校驗碼 | 00001011 | 11110100 |
缺點:
只能檢測出奇數位出錯,且無法檢測出哪位出錯。
設原編碼為0000,傳輸的過程中變成了1001。若使用奇校驗,原編碼是00001,傳輸過后會變成10011,1仍然是奇數個,無法校驗;如果使用偶校驗,原編碼是00000,傳輸過后會變成10010,1仍然是偶數個,同樣無法校驗。
海明碼
海明碼也是利用奇偶性來校驗數據的,它是一種多重奇偶校驗檢錯系統。通過在數據位之間插入k個校驗位,來擴大碼距,從而實現檢錯和糾錯。
注:碼距指兩個碼組對應位上數字的不同位的個數。
假設數據位數為m,向其(2的冪次方,如1,2,4,8……)各位插入k位校驗碼,且滿足m+k+1<2k
例:101101100,求海明碼。
101101100,9+k+1<2k
解得,k=4,即校驗碼位數為4位
位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
原始信息位 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | ||||
用到的校驗碼 | 校驗位1 | 校驗位2 | 1+2=3 | 校驗位3 | 1+4=5 | 2+4=6 | 1+2+4=7 | 校驗位4 | 1+8=9 | 2+8=10 | 1+2+8=11 | 4+8=12 | 1+4+8=13 |
即得每個校驗位校驗了哪些位置:
bit1=3,5,7,9,11,13
bit2=3,6,7,10,11
bit4=5,6,7,12,13
bit8=9,10,11,12,13
通過原始信息位,對各位進行模2運算(異或:相同為0,不同為1)得:
bit1=1,0,1,0,1,0=1
bit2=1,1,1,1,1=1
bit4=0,1,1,0,0=0
bit8=0,1,1,0,0=0
得校驗碼分別為:1,1,0,0