1. 程式人生 > >計算機組成原理學習筆記-海明校驗碼

計算機組成原理學習筆記-海明校驗碼

說明:可以先看實際舉例再回頭看其他說明便於快速理解。

一、特點

既可檢錯也可糾錯

二、用途背景

原因:資訊傳輸時因為種種原因會出現部分資訊發生改變的情況,即二進位制資訊的某個別位出現錯誤的情況。
用途:通過在原資訊的特定位置加上海明碼的方法,來實現對一串資料位中的某個(注意是“某個”,大多數情況下只會出現一個位出錯,
若多位出錯則該校驗法失效)出錯位的糾錯(即錯誤定位和糾正)

二、預備定義和文字約定

  1. 資訊位:用於存放要傳輸資訊資料的二進位制0和1;
  2. 校驗位:即在原本資訊位中插入的二進位制校驗碼0和1。
  3. 資訊碼:資訊位構成的二進位制序列
  4. 海明校驗碼(後面簡稱校驗碼)
    :由所有校驗位組成的二進位制序列
  5. I 1 _ 1 ……I n _ n
    :第一到第n個資訊位
  6. r 0 _0 ……r n _ n
    :第一到第n個校驗位

三、主要步驟

  1. 確定校驗位個數:根據要傳輸的資訊位個數,確定要插入的校驗位個數,要滿足2r ≥ I + r + 1(r為校驗位個數,I為資訊位個數)
  2. 確定校驗位插入位置:由低位到高位依次插入所有位,要求2n位置下插入的都是校驗位
  3. 確定校驗碼並插入:1. 求出每個資訊位的位置十進位制拆解成2的冪次方多項式之和,每個係數不為0的冪次方(假設為n)確定將影響r n _n 的值的資訊位。(比如:第7位要插入I 4 _4 ,十進位制位置7拆解為22+21+20,即說明這個資訊位I 4 _4 會影響r 2 _2 ,r 1 _1 ,r 1 _1 )。然後r n _n =每個會影響該校驗位的資訊位的異或
  4. 資料傳輸
  5. 接收資料
  6. 重新求校驗碼:因為接受的資料校驗位的位置可以確定,即用忽略掉所有2n位後得到的資訊位按照3重新求得校驗碼
  7. 校驗碼比對:取接收的校驗碼和重新求得的校驗碼按位進行異或操作,得到一個與校驗碼的等長二進位制序列.
  8. 錯誤定位 : 將上述等長序列化為十進位制,即得到出錯位所在的位置。
  9. 糾錯:對接收資料中的出錯位取反

四、核心思想

n個校驗位能記錄至多2n-1個位的奇偶資訊:
  • **為什麼-1?**這裡是為了巧妙利用校驗位的安插位置,使得校驗位的改變,能表示出錯的十進位制位置化成二進位制後,對應位的改變。傳輸資料的n個位從1開始。因此去掉全0的序列。
  • (去掉全0的序列後) n個校驗位組成的二進位制序列有2n種,每種序列化為十進位制d,確定傳輸資料中d位置的位的狀態,通過傳輸前後校驗碼的異或比對,即能確定狀態發生改變的位的位置,即實現的錯誤定位。而對二進位制的糾錯,只需對出錯位取反即可。

四、實際舉例

假設要傳輸二進位制資訊10111,五位資訊位為I5I4I3I2I1,而接收到的資訊碼為11111,整個傳輸及糾錯流程又是怎樣?

  1. 確定校驗位個數r
    代入公式2r ≥ I + r + 1 後,2r ≥ 5 + r + 1,得到r=4.
  2. 確定校驗位插入位置
    校驗位個數確定,總位數就確定為9位了。對應2n位置下將插入的都是校驗位,剩下的依次將插入資訊位,如下表:
9 8 7 6 5 4 3 2 1 總位數
I5 I4 I3 I2 I1 資訊位
r3 r2 r1 r0 校驗位
  1. 確定校驗碼並插入
    ∵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 校驗位
  1. 傳輸後接收後重新計算海明校驗碼
    接收到的資料如下表
9 8 7 6 5 4 3 2 1 總位數
1 1 1 1 1 資訊位
1 0 0 1 校驗位

同步驟3,求得新校驗碼為:1110

  1. 校驗碼比對
    用新校驗碼1111與接收到的舊校驗碼1001進行按位異或運算,得到:0111

  2. 錯誤定位
    將5求得的比對結果化為十進位制為7,即得出接收資料中,錯誤位置為7

  3. 糾錯
    對錯誤位置按位取反

9 8 7 6 5 4 3 2 1 總位數
1 1->0 1 1 1 資訊位
1 0 0 1 校驗位

得到資訊碼為10111,即為正確資訊

## 如有謬誤,歡迎指正