標籤:
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
所以校正的海明碼為:
校正之:海明碼校正、同位