容易忘記的海明碼

 
海明碼是一種具有糾錯功能的校驗碼。本文簡單地介紹海明碼的計算方法。
海明碼的目的是能夠糾正一位誤碼。假設信息碼共有 n 位,海明碼共有 h 位,那麼總共的碼長爲 n + h 位。爲能檢測出 n + h 位編碼中其中一位的錯誤,海明碼必須能夠表示至少 n + h + 1 種狀態,其中 n + h 種表示 n + h 位編碼中有一位錯誤,另外還需要一種來表示整個編碼正確無誤。則海明碼的長度需要滿足下列關係:
2 h >= n + h + 1
於是根據這個式子我們可以得出以下的關係表:
海明碼的插入位置順序爲:An=2(n-1)方
以 4 位信息位爲例,由上表可以看出需要的海明碼長度爲 3。
設信息位爲 x4x3x2x1,添加的 3 位海明碼爲 a3a2a1,信息碼和海明碼組合之後得到的碼爲
a1 a2 x1 a3 x2 x3 x4
海明碼是一種具有糾錯功能的校驗碼。本文簡單地介紹海明碼的計算方法。
海明碼的目的是能夠糾正一位誤碼。假設信息碼共有 n 位,海明碼共有 h 位,那麼總共的碼長爲 n + h 位。爲能檢測出 n + h 位編碼中其中一位的錯誤,海明碼必須能夠表示至少 n + h + 1 種狀態,其中 n + h 種表示 n + h 位編碼中有一位錯誤,另外還需要一種來表示整個編碼正確無誤。則海明碼的長度需要滿足下列關係:
2 h >= n + h + 1
於是根據這個式子我們可以得出以下的關係表:
h 2 3 4 5 6 7 8
n 1 2~4 5~11 12~26 27~57 58~120 121~247
以 4 位信息位爲例,由上表可以看出需要的海明碼長度爲 3。
設信息位爲 x4x3x2x1,添加的 3 位海明碼爲 a3a2a1,信息碼和海明碼組合之後得到的碼爲 H7H6H5H4H3H2H1
錯誤 H1 H2 H3 H4 H5 H6 H7
C1 0 1 0 1 0 1 0 1 C1 = H1 + H3 + H5 + H7 = 0
C2 0 0 1 1 0 0 1 1 C2 = H2 + H3 + H6 + H7 = 0
C3 0 0 0 0 1 1 1 1 C3 = H4 + H5 + H6 + H7 = 0
如上表,在H1~H7中添加的 3 位海明碼使得 C1~C3 的值爲零。其中C1~C3爲校驗和。這樣當 Hn 傳輸出錯時,有 (C3C2C1)2 = n。
令 H1 = a1, H2 = a2, H4 = a3,
則得出
H7H6H5H4H3H2H1 = x4x3x2a3x1a2a1
將上面的關係代入C1~C3的計算公式,得到
C1 = H1 + H3 + H5 + H7 = a1 + x1 + x2 + x4 = 0
C2 = H2 + H3 + H6 + H7 = a2 + x1 + x3 + x4 = 0
C3 = H4 + H5 + H6 + H7 = a3 + x2 + x3 + x4 = 0

a1 + x1 + x2 + x4 = 0
a2 + x1 + x3 + x4 = 0
a3 + x2 + x3 + x4 = 0

a3 = x4 + x3 + x2
a2 = x4 + x3 + x1
a1 = x4 + x2 + x1

 
仔細讀讀下面的文字也許你就明白了:呵呵
海明碼(Hamming Code )編碼的關鍵是使用多餘的奇偶校驗位來識別一位錯誤。
碼字(Code Word) 按如下方法構建:
1、把所有2的冪次方的數據位標記爲奇偶校驗位(編號爲1, 2, 4, 8, 16, 32, 64等的位置)
2、其他數據位用於待編碼數據. (編號爲3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17等的位置)
3、每個奇偶校驗位的值代表了代碼字中部分數據位的奇偶性,其所在位置決定了要校驗和跳過的比特位順序。
位置1:校驗1位,跳過1位,校驗1位,跳過1位(1,3,5,7,9,11,13,15,…)
位置2:校驗2位,跳過2位,校驗2位,跳過2位 (2,3,6,7,10,11,14,15,…)
位置4:校驗4位,跳過4位,校驗4位,跳過4位 (4,5,6,7,12,13,14,15,20,21,22,23,…)
位置8:校驗8位,跳過8位,校驗8位,跳過8位(8-15,24-31,40-47,…)
如果全部校驗的位置中有奇數個1,把該奇偶校驗位置爲1;如果全部校驗的位置中有偶數個1,把該奇偶校驗位置爲0.
舉例說明:
一個字節的數據:10011010
構造數據字(Data Word),對應的校驗位留空_ _ 1 _ 0 0 1 _ 1 0 1 0
計算每個校驗位的奇偶性 ( ?代表要設置的比特位):
位置1檢查1,3,5,7,9,11:
? _ 1 _ 0 0 1 _ 1 0 1 0. 偶數個1,因此位置1設爲0,即: 0 _ 1 _ 0 0 1 _ 1 0 1 0
位置2檢查2,3,6,7,10,11:
0 ? 1 _ 0 0 1 _ 1 0 1 0. 奇數個1,因此位置2設爲1,即: 0 1 1 _ 0 0 1 _ 1 0 1 0
位置4檢查4,5,6,7,12:
0 1 1 ? 0 0 1 _ 1 0 1 0. 奇數個1,因此位置4設爲1,即: 0 1 1 1 0 0 1 _ 1 0 1 0
位置8檢查8,9,10,11,12:
0 1 1 1 0 0 1 ? 1 0 1 0. 偶數個1,因此位置8設爲0,即: 0 1 1 1 0 0 1 0 1 0 1 0
因此碼字爲: 011100101010.
查找並糾錯一位錯誤
上例中構建了一個碼字 011100101010,假定實際接收到的數據是011100101110. 則接收方可以計算出哪一位出錯並對其進行更正。方法就是驗證每一個校驗位。記下所有出錯的校驗位,可以發現校驗位2和8的數據不正確. 錯誤校驗位 2 + 8 = 10, 則位置10的數據出錯。一般說來,對所有校驗位進行檢查, 將所有出錯的校驗位置相加, 得到的就是錯誤信息所在的位置
 
海明碼是一種具有糾錯功能的校驗碼。本文簡單地介紹海明碼的計算方法。
海明碼的目的是能夠糾正一位誤碼。假設信息碼共有 n 位,海明碼共有 h 位,那麼總共的碼長爲 n + h 位。爲能檢測出 n + h 位編碼中其中一位的錯誤,海明碼必須能夠表示至少 n + h + 1 種狀態,其中 n + h 種表示 n + h 位編碼中有一位錯誤,另外還需要一種來表示整個編碼正確無誤。則海明碼的長度需要滿足下列關係:
2 h >= n + h + 1
於是根據這個式子我們可以得出以下的關係表:
h 2 3 4 5 6 7 8
n 1 2~4 5~11 12~26 27~57 58~120 121~247
以 4 位信息位爲例,由上表可以看出需要的海明碼長度爲 3。
設信息位爲 x4x3x2x1,添加的 3 位海明碼爲 a3a2a1,信息碼和海明碼組合之後得到的碼爲 H7H6H5H4H3H2H1
錯誤 H1 H2 H3 H4 H5 H6 H7
C1 0 1 0 1 0 1 0 1 C1 = H1 + H3 + H5 + H7 = 0
C2 0 0 1 1 0 0 1 1 C2 = H2 + H3 + H6 + H7 = 0
C3 0 0 0 0 1 1 1 1 C3 = H4 + H5 + H6 + H7 = 0
如上表,在H1~H7中添加的 3 位海明碼使得 C1~C3 的值爲零。其中C1~C3爲校驗和。這樣當 Hn 傳輸出錯時,有 (C3C2C1)2 = n。
令 H1 = a1, H2 = a2, H4 = a3,
則得出
H7H6H5H4H3H2H1 = x4x3x2a3x1a2a1
將上面的關係代入C1~C3的計算公式,得到
C1 = H1 + H3 + H5 + H7 = a1 + x1 + x2 + x4 = 0
C2 = H2 + H3 + H6 + H7 = a2 + x1 + x3 + x4 = 0
C3 = H4 + H5 + H6 + H7 = a3 + x2 + x3 + x4 = 0

a1 + x1 + x2 + x4 = 0
a2 + x1 + x3 + x4 = 0
a3 + x2 + x3 + x4 = 0

a3 = x4 + x3 + x2
a2 = x4 + x3 + x1
a1 = x4 + x2 + x1

 
仔細讀讀下面的文字也許你就明白了:呵呵
海明碼(Hamming Code )編碼的關鍵是使用多餘的奇偶校驗位來識別一位錯誤。
碼字(Code Word) 按如下方法構建:
1、把所有2的冪次方的數據位標記爲奇偶校驗位(編號爲1, 2, 4, 8, 16, 32, 64等的位置)
2、其他數據位用於待編碼數據. (編號爲3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17等的位置)
3、每個奇偶校驗位的值代表了代碼字中部分數據位的奇偶性,其所在位置決定了要校驗和跳過的比特位順序。
位置1:校驗1位,跳過1位,校驗1位,跳過1位(1,3,5,7,9,11,13,15,…)
位置2:校驗2位,跳過2位,校驗2位,跳過2位 (2,3,6,7,10,11,14,15,…)
位置4:校驗4位,跳過4位,校驗4位,跳過4位 (4,5,6,7,12,13,14,15,20,21,22,23,…)
位置8:校驗8位,跳過8位,校驗8位,跳過8位(8-15,24-31,40-47,…)
如果全部校驗的位置中有奇數個1,把該奇偶校驗位置爲1;如果全部校驗的位置中有偶數個1,把該奇偶校驗位置爲0.
舉例說明:
一個字節的數據:10011010
構造數據字(Data Word),對應的校驗位留空_ _ 1 _ 0 0 1 _ 1 0 1 0
計算每個校驗位的奇偶性 ( ?代表要設置的比特位):
位置1檢查1,3,5,7,9,11:
? _ 1 _ 0 0 1 _ 1 0 1 0. 偶數個1,因此位置1設爲0,即: 0 _ 1 _ 0 0 1 _ 1 0 1 0
位置2檢查2,3,6,7,10,11:
0 ? 1 _ 0 0 1 _ 1 0 1 0. 奇數個1,因此位置2設爲1,即: 0 1 1 _ 0 0 1 _ 1 0 1 0
位置4檢查4,5,6,7,12:
0 1 1 ? 0 0 1 _ 1 0 1 0. 奇數個1,因此位置4設爲1,即: 0 1 1 1 0 0 1 _ 1 0 1 0
位置8檢查8,9,10,11,12:
0 1 1 1 0 0 1 ? 1 0 1 0. 偶數個1,因此位置8設爲0,即: 0 1 1 1 0 0 1 0 1 0 1 0
因此碼字爲: 011100101010.
查找並糾錯一位錯誤
上例中構建了一個碼字 011100101010,假定實際接收到的數據是011100101110. 則接收方可以計算出哪一位出錯並對其進行更正。方法就是驗證每一個校驗位。記下所有出錯的校驗位,可以發現校驗位2和8的數據不正確. 錯誤校驗位 2 + 8 = 10, 則位置10的數據出錯。一般說來,對所有校驗位進行檢查, 將所有出錯的校驗位置相加, 得到的就是錯誤信息所在的位置
錯誤 H1 H2 H3 H4 H5 H6 H7
C1 0 1 0 1 0 1 0 1 C1 = H1 + H3 + H5 + H7 = 0
C2 0 0 1 1 0 0 1 1 C2 = H2 + H3 + H6 + H7 = 0
C3 0 0 0 0 1 1 1 1 C3 = H4 + H5 + H6 + H7 = 0
如上表,在H1~H7中添加的 3 位海明碼使得 C1~C3 的值爲零。其中C1~C3爲校驗和。這樣當 Hn 傳輸出錯時,有 (C3C2C1)2 = n。
令 H1 = a1, H2 = a2, H4 = a3,
則得出
H7H6H5H4H3H2H1 = x4x3x2a3x1a2a1
將上面的關係代入C1~C3的計算公式,得到
C1 = H1 + H3 + H5 + H7 = a1 + x1 + x2 + x4 = 0
C2 = H2 + H3 + H6 + H7 = a2 + x1 + x3 + x4 = 0
C3 = H4 + H5 + H6 + H7 = a3 + x2 + x3 + x4 = 0

a1 + x1 + x2 + x4 = 0
a2 + x1 + x3 + x4 = 0
a3 + x2 + x3 + x4 = 0

a3 = x4 + x3 + x2
a2 = x4 + x3 + x1
a1 = x4 + x2 + x1

 
仔細讀讀下面的文字也許你就明白了:呵呵
海明碼(Hamming Code )編碼的關鍵是使用多餘的奇偶校驗位來識別一位錯誤。
碼字(Code Word) 按如下方法構建:
1、把所有2的冪次方的數據位標記爲奇偶校驗位(編號爲1, 2, 4, 8, 16, 32, 64等的位置)
2、其他數據位用於待編碼數據. (編號爲3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17等的位置)
3、每個奇偶校驗位的值代表了代碼字中部分數據位的奇偶性,其所在位置決定了要校驗和跳過的比特位順序。
位置1:校驗1位,跳過1位,校驗1位,跳過1位(1,3,5,7,9,11,13,15,…)
位置2:校驗2位,跳過2位,校驗2位,跳過2位 (2,3,6,7,10,11,14,15,…)
位置4:校驗4位,跳過4位,校驗4位,跳過4位 (4,5,6,7,12,13,14,15,20,21,22,23,…)
位置8:校驗8位,跳過8位,校驗8位,跳過8位(8-15,24-31,40-47,…)
如果全部校驗的位置中有奇數個1,把該奇偶校驗位置爲1;如果全部校驗的位置中有偶數個1,把該奇偶校驗位置爲0.
舉例說明:
一個字節的數據:10011010
構造數據字(Data Word),對應的校驗位留空_ _ 1 _ 0 0 1 _ 1 0 1 0
計算每個校驗位的奇偶性 ( ?代表要設置的比特位):
位置1檢查1,3,5,7,9,11:
? _ 1 _ 0 0 1 _ 1 0 1 0. 偶數個1,因此位置1設爲0,即: 0 _ 1 _ 0 0 1 _ 1 0 1 0
位置2檢查2,3,6,7,10,11:
0 ? 1 _ 0 0 1 _ 1 0 1 0. 奇數個1,因此位置2設爲1,即: 0 1 1 _ 0 0 1 _ 1 0 1 0
位置4檢查4,5,6,7,12:
0 1 1 ? 0 0 1 _ 1 0 1 0. 奇數個1,因此位置4設爲1,即: 0 1 1 1 0 0 1 _ 1 0 1 0
位置8檢查8,9,10,11,12:
0 1 1 1 0 0 1 ? 1 0 1 0. 偶數個1,因此位置8設爲0,即: 0 1 1 1 0 0 1 0 1 0 1 0
因此碼字爲: 011100101010.
查找並糾錯一位錯誤
上例中構建了一個碼字 011100101010,假定實際接收到的數據是011100101110. 則接收方可以計算出哪一位出錯並對其進行更正。方法就是驗證每一個校驗位。記下所有出錯的校驗位,可以發現校驗位2和8的數據不正確. 錯誤校驗位 2 + 8 = 10, 則位置10的數據出錯。一般說來,對所有校驗位進行檢查, 將所有出錯的校驗位置相加, 得到的就是錯誤信息所在的位置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章