1、奇偶校驗碼
奇偶校驗通過在編碼中增加一個校驗位來使編碼中的1的個數為奇數(奇校驗)或者偶數(偶校驗),從而使碼距變為2.對於奇校驗,它可以檢測代碼中奇數位出錯的編碼,但不能發現偶數位出錯的情況。既當合法編碼中奇數位出現錯誤。也就是1變成0或者0變成1,其編碼的奇偶性就發生了變化,從而發現錯誤。但是這種校驗只能發現出現了錯誤但是不知道具體是哪一位發生了錯誤。
8421碼的奇偶校驗碼
十進制數 | 8421 BCD碼 | 帶奇校驗位的8421碼 | 帶偶校驗位的8421碼 |
0 | 0000 | 0000 1 | 0000 0 |
1 | 0001 | 0001 0 | 0001 1 |
2 | 0010 | 0010 0 | 0010 1 |
3 | 0011 | 0011 0 | 0011 0 |
4 | 0100 | 0100 1 | 0100 1 |
5 | 0101 | 0101 0 | 0101 0 |
6 | 0110 | 0110 1 | 0110 0 |
7 | 0111 | 0111 0 | 0111 1 |
8 | 1000 | 1000 0 | 1000 1 |
9 | 1001 | 1001 1 | 1001 0 |
常用的奇偶校驗有三種:水平奇偶校驗,垂直奇偶校驗校驗和水平垂直奇偶校驗。
水平奇偶校驗:對每一種數據的編碼添加校驗位,使信息位與校驗位處於同一行
垂直奇偶校驗:這種校驗將數據分為若干組,一組一行,整齊排列,再加上一行校驗位,針對每一列采樣奇校驗或偶校驗。
對32位數據:10100101 00110110 11001100 10101011 進行校驗:
編碼分類 | 垂直奇校驗 | 垂直偶校驗 |
數據 | 10100101 00110110 11001100 10101011 |
10100101 00110110 11001100 10101011 |
校驗位 | 00001011 | 11110100 |
就是這個意思:--------------------------------------------------------------------------------------------------------------
水平校驗與垂直水平校驗都類似。
2.海明碼
海明碼也是利用奇偶校驗和糾錯校驗的方法,海明碼的構成是:在數據位之間插入k個校驗位,通過擴大碼距來時間檢查和糾錯。例如:對於8位的數據,需要4個校驗位來進行校驗。如,令數據位:D7、D6、D5、D4、D3、D2、D1、D0和校驗位位:P4、P3、P2、P1。則編碼位置:
H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
D7 D6 D5 D4 P4 D3 D2 D1 P3 D0 P2 P1
校驗碼的設置位置在2^i的位置上。每個校驗位只校驗數據中位置號的二進制編碼和自身位置號的二進制編碼相匹配的數據:
即如下圖所示:
因此校驗關關系為:
P1偶校驗:P1、D0、D1、D3、D4、D6
即:P1=D0⊕D1⊕D3⊕D4⊕D6
P2偶校驗:P2、D0、D2、D3、D5、D6
即:P2=D0⊕D2⊕D3⊕D5⊕D6
P3偶校驗:P3、D1、D2、D3、D7
即:P3=D1⊕D2⊕D3⊕D7
P4偶校驗:P4、D4、D5、D6、D7
即:P4=D4⊕D5⊕D6⊕D7
海明碼的錯誤檢測也非常簡單,對使用海明碼的數據進行如下計算即可:
G1=P1⊕D0⊕D1⊕D3⊕D4⊕D6
G2=P2⊕D0⊕D2⊕D3⊕D5⊕D6
G3=P3⊕D1⊕D2⊕D3⊕D7
G4=P4⊕D4⊕D5⊕D6⊕D7
對於所得的值,若采用偶校驗,則全為0表示接受的數據無誤(奇校驗則全為1)當G4G3G2G1不全為0,說明發生了錯誤,而且是G4G3G2G1的十進制值指出了錯誤的位置:如:G4G3G2G1=1010,則說明H10(D5)出了問題,將其取反便可糾正。
設數據01101001,采用四個校驗位求其偶校驗的海明碼:
0 1 1 0 1 0 0 1
D7 D6 D5 D4 D3 D2 D1 D1
P1=D0⊕D1⊕D3⊕D4⊕D6=1⊕0⊕1⊕0⊕1=1
P2=D0⊕D2⊕D3⊕D5⊕D6=1⊕0⊕1⊕1⊕1=0
P3=D1⊕D2⊕D3⊕D7=0⊕0⊕1⊕0=1
P4=D4⊕D5⊕D6⊕D7=0⊕1⊕1⊕0=0
所以校驗的海明碼為: