計算機組成原理學習筆記-海明校驗碼
阿新 • • 發佈:2018-11-19
說明:可以先看實際舉例再回頭看其他說明便於快速理解。
一、特點
既可檢錯也可糾錯
二、用途背景
原因:資訊傳輸時因為種種原因會出現部分資訊發生改變的情況,即二進位制資訊的某個別位出現錯誤的情況。
用途:通過在原資訊的特定位置加上海明碼的方法,來實現對一串資料位中的某個(注意是“某個”,大多數情況下只會出現一個位出錯,
若多位出錯則該校驗法失效)出錯位的糾錯(即錯誤定位和糾正)
二、預備定義和文字約定
- 資訊位:用於存放要傳輸資訊資料的二進位制0和1;
- 校驗位:即在原本資訊位中插入的二進位制校驗碼0和1。
- 資訊碼:資訊位構成的二進位制序列
- 海明校驗碼(後面簡稱校驗碼)
- I ……I :第一到第n個資訊位
- r ……r :第一到第n個校驗位
三、主要步驟
- 確定校驗位個數:根據要傳輸的資訊位個數,確定要插入的校驗位個數,要滿足2r ≥ I + r + 1(r為校驗位個數,I為資訊位個數)
- 確定校驗位插入位置:由低位到高位依次插入所有位,要求2n位置下插入的都是校驗位
- 確定校驗碼並插入:1. 求出每個資訊位的位置十進位制拆解成2的冪次方多項式之和,每個係數不為0的冪次方(假設為n)確定將影響r 的值的資訊位。(比如:第7位要插入I ,十進位制位置7拆解為22+21+20,即說明這個資訊位I 會影響r ,r ,r )。然後r =每個會影響該校驗位的資訊位的異或
- 資料傳輸
- 接收資料
- 重新求校驗碼:因為接受的資料校驗位的位置可以確定,即用忽略掉所有2n位後得到的資訊位按照3重新求得校驗碼
- 校驗碼比對:取接收的校驗碼和重新求得的校驗碼按位進行異或操作,得到一個與校驗碼的等長二進位制序列.
- 錯誤定位 : 將上述等長序列化為十進位制,即得到出錯位所在的位置。
- 糾錯:對接收資料中的出錯位取反
四、核心思想
n個校驗位能記錄至多2n-1個位的奇偶資訊:
- **為什麼-1?**這裡是為了巧妙利用校驗位的安插位置,使得校驗位的改變,能表示出錯的十進位制位置化成二進位制後,對應位的改變。傳輸資料的n個位從1開始。因此去掉全0的序列。
- (去掉全0的序列後) n個校驗位組成的二進位制序列有2n種,每種序列化為十進位制d,確定傳輸資料中d位置的位的狀態,通過傳輸前後校驗碼的異或比對,即能確定狀態發生改變的位的位置,即實現的錯誤定位。而對二進位制的糾錯,只需對出錯位取反即可。
四、實際舉例
假設要傳輸二進位制資訊10111,五位資訊位為I5I4I3I2I1,而接收到的資訊碼為11111,整個傳輸及糾錯流程又是怎樣?
- 確定校驗位個數r
代入公式2r ≥ I + r + 1 後,2r ≥ 5 + r + 1,得到r=4. - 確定校驗位插入位置
校驗位個數確定,總位數就確定為9位了。對應2n位置下將插入的都是校驗位,剩下的依次將插入資訊位,如下表:
9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 總位數 |
---|---|---|---|---|---|---|---|---|---|
I5 | I4 | I3 | I2 | I1 | 資訊位 | ||||
r3 | r2 | r1 | r0 | 校驗位 |
- 確定校驗碼並插入
∵I5的位置為9 = 23+20,影響r3,r0.
I4的位置為7 = 22+21+20,影響r2,r1,r0.
I3的位置為6 = 22+21,影響r2,r1.
I2的位置為5 = 22+20,影響r2,r0.
I1的位置為3 = +21+20,影響r1,r0.
r0 = I1 ⊕I2⊕ I4⊕I5 = 1
r1 = I1 ⊕ I3⊕I4 = 0
r2 = I2⊕ I3⊕ I4 = 0
r3 = I5 = 1
得到校驗碼為:1001
插入後如下表:
9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 總位數 |
---|---|---|---|---|---|---|---|---|---|
1 | 0 | 1 | 1 | 1 | 資訊位 | ||||
1 | 0 | 0 | 1 | 校驗位 |
- 傳輸後接收後重新計算海明校驗碼
接收到的資料如下表
9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 總位數 |
---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 資訊位 | ||||
1 | 0 | 0 | 1 | 校驗位 |
同步驟3,求得新校驗碼為:1110
-
校驗碼比對
用新校驗碼1111與接收到的舊校驗碼1001進行按位異或運算,得到:0111 -
錯誤定位
將5求得的比對結果化為十進位制為7,即得出接收資料中,錯誤位置為7 -
糾錯
對錯誤位置按位取反
9 | 8 | 7 |
6 | 5 | 4 | 3 | 2 | 1 | 總位數 |
---|---|---|---|---|---|---|---|---|---|
1 | 1->0 |
1 | 1 | 1 | 資訊位 | ||||
1 | 0 | 0 | 1 | 校驗位 |
得到資訊碼為10111,即為正確資訊
## 如有謬誤,歡迎指正