漢明碼
編碼過程
- 先根據信息位位數確定校驗位個數
- 按規則排列信息位與校驗位
- 給信息位分組並且分配一個相應的校驗位
- 根據分組中的信息位確定校驗位的取值
校驗位位數
k個校驗位必須能確定n個信息位和k個校驗位傳輸時是否發生bit跳變
k個校驗位能表示2k種情況,其中1種為無錯誤,剩下的2k-1種情況要能表示n個信息位和k個校驗位哪一個出錯了
因此校驗位的位數k必須滿足\(2^{k} - 1 \ge n + k\)
信息位與校驗位的位置
- 將校驗位放入2k(k>=0)的位置其余位置依次放入信息位
分組規則
- 將所有序號寫成2k(k>=0)之和(如 15=8+4+2+1),其中含有相同的2k(k>=0)的為一組(如下圖)
- 也可以這樣理解 將序號轉為k位(k為校驗位個數)2進制數, 第i位為1的分到第i分組
校驗位的取值
由於海明(漢明)碼采用的是偶校驗的策略, 所以每個分組中1的個數為偶數個
- 肉眼觀察分組中1的個數, 然后判斷校驗位為1還是0
- 或者將分組中的信息位相異或
糾錯
1bit發生錯誤可以糾錯 2bit發生錯誤可以發現但無法糾錯
將P1,P2,P3……所在的分組中的bit位相異或得到S1,S2,S3……
將S1,S2,S3……按照低位到高位的順序組成二進制數,若為0則無錯,若不為零則其對應的十進制數就是發生bit跳變的bit的序號