2014年3月30日 星期日

漢明碼

漢明碼(Hamming Code),是在電信領域的一種線性偵錯碼,以發明者理察·衛斯里·漢明的名字命名。漢明碼在傳輸的訊息流中插入驗證碼,以偵測並更正單一位元錯誤。由於漢明編碼簡單,它們被廣泛應用於記憶體(RAM)。其 SECDED(single error correction, double error detection)版本另外加入一檢測位元,可以偵測兩個或以下同時發生的位元錯誤,並能夠更正單一位元的錯誤。因此,當傳送端與接收端的位元樣式的漢明距離 (Hamming distance) 小於或等於1時(僅有 1 bit 發生錯誤),可實現可靠的通訊。相對的,簡單的奇偶檢驗碼除了不能糾正錯誤之外,也只能偵測出奇數個的錯誤。


下列通用演算法可以為任意位數位產生一個可以糾錯一位(英語:Single Error Correcting)的漢明碼。
  1. 從1開始給數字的資料位(從左向右)標上序號, 1,2,3,4,5...
  2. 將這些資料位的位置序號轉換為二進制, 1, 10, 11, 100, 101, 等.
  3. 資料位的位置序號中所有為二的冪次方的位(編號1,2,4,8,等,即資料位位置序號的二進制表示中只有一個1)是校驗位
  4. 所有其它位置的資料位(資料位位置序號的二進制表示中至少2個是1)是資料位
  5. 每一位的封包含在特定的兩個或兩個以上的校驗位中,這些校驗位取決於這些資料位的位置數值的二進制表示
    1. 校驗位 1 覆蓋了所有資料位位置序號的二進制表示倒數第一位是1的資料:1(校驗位自身,這裡都是二進制,下同),11,101,111,1001,等
    2. 校驗位 2 覆蓋了所有資料位位置序號的二進制表示倒數第二位是1的資料:10(校驗位自身),11,110,111,1010,1011,等
    3. 校驗位 4 覆蓋了所有資料位位置序號的二進制表示倒數第三位是1的資料:100(校驗位自身),101,110,111,1100,1101,1110,1111,等
    4. 校驗位 8 覆蓋了所有資料位位置序號的二進制表示倒數第四位是1的資料:1000(校驗位自身),1001,1010,1011,1100,1101,1110,1111,等
    5. 簡而言之,所有校驗位覆蓋了資料位置和該校驗位位置的二進制與的值不為0的數。

沒有留言:

張貼留言