漢明碼-Hamming Code學習筆記


漢明碼 Hamming code

漢明碼是一種線性調試碼,可以糾正一位錯誤;而擴展漢明碼可以檢測出兩位錯誤。

漢明碼編碼以及糾錯過程

編碼

對於給出的一串數碼,根據糾錯碼原理,我們知道對於n位的原串,至少需要使得糾錯碼位數k滿足:\(n+k \le 2^k - 1\)
以長度為11的數碼為例,則需要4位糾錯碼(不選擇12位的原因將在擴展漢明碼中解釋)
漢明碼的糾錯碼位於第\(2^{k},k=1,2,\dots\)
如將11位數碼與四位糾錯碼的最終編碼為\(N_1,N_2,N_3,N_4,N_5,N_6,N_7,N_8,N_9,N_{10},N_{11},N_{12},N_{13},N_{14},N_{15}\)
並且在偶校驗方法時規則為:設該校驗位為\(2^i\),則\(該校驗位= \oplus^{n}_{k=1} N_{ 二進制碼展開含2^i的數}\)
(注:偶校驗即保證該組數據中1的個數為偶數)

\[N_1 = N_3 \oplus N_5 \oplus N_7 \oplus N_9 \oplus N_{11} \oplus N_{13} \oplus N_{15} \\ N_2 = N_3 \oplus N_6 \oplus N_7 \oplus N_{10} \oplus N_{11} \oplus N_{14} \oplus N_{15} \\ N_4 = N_{5} \oplus N_{6} \oplus N_{7} \oplus N_{12} \oplus N_{13} \oplus N_{14} \oplus N_{15}\\ N_8 = N_{9} \oplus N_{10} \oplus N_{11} \oplus N_{12} \oplus N_{13} \oplus N_{14} \oplus N_{15} \\ \]

直觀的表示在4*4的方格中則是

最后將0位空出,其余位依次排列,最后就得到了一組共11+4=15位的漢明碼。

糾錯

當接收到一份信息時,我們只需要4個計算校驗和,他們的形式與剛剛計算校驗碼類似,僅僅是將校驗位加入運算而已。

\[G_1 = N_1 \oplus N_3 \oplus N_5 \oplus N_7 \oplus N_9 \oplus N_{11} \oplus N_{13} \oplus N_{15} \\ G_2 = N_2 \oplus N_3 \oplus N_6 \oplus N_7 \oplus N_{10} \oplus N_{11} \oplus N_{14} \oplus N_{15} \\ G_3 = N_{4} \oplus N_{5} \oplus N_{6} \oplus N_{7} \oplus N_{12} \oplus N_{13} \oplus N_{14} \oplus N_{15}\\ G_4 = N_{8} \oplus N_{9} \oplus N_{10} \oplus N_{11} \oplus N_{12} \oplus N_{13} \oplus N_{14} \oplus N_{15} \]

得到一個新的數碼{G_4,G_3,G_2,G_1},假定只會出現一位錯誤,那么校驗和為0000則可以認為沒有出錯。
當出現錯誤時,任何一位出現時,校驗碼將等於它的下標。
例如:
$ 100010011011011 $ 他的第三位是錯誤的

可以得到校驗碼為0011=3,這樣就可以糾正錯誤了。

漢明碼原理

不難看出,漢明碼的設計與二進制表示有着密切關系,將漢明碼就錯位設置在\(2^k\)處並且將每個就錯位都分配與之對應的一半的數碼,這樣就是為了在編碼改變時,能夠恰好影響對應的校驗和,從而校驗和的排列最后為\(G_1 2^1+G_2 2^2+ G_3 2^3+G_4 2^4=出錯位置下標\)

擴展漢明碼

在剛剛的漢明碼中,我們只能檢查並糾正一位錯誤,如果同時有兩位出錯,那么對於已有的漢明編碼來說,是無法分辨的。我們只能按照以往的規則,認為是一位出錯。
還記得剛剛沒有使用的第0位嗎,現在我們將這一位當做整個數串的總奇偶校驗位,可以達到檢測兩位錯誤的作用:
(假設均為偶校驗)

  1. 如未發生錯誤,漢明校驗位校驗和為0,總校驗和為0
  2. 如果發生一位錯誤,那么總校驗和為1
  3. 如果發生兩位錯誤,那么總校驗和為0

這樣我們就可以發現發生了兩位錯誤,更多的錯誤就超過了漢明碼的檢測及糾錯能力范圍了。

參考資料

三藍一棕賽高!
https://www.bilibili.com/video/BV1WK411N7kz
https://www.bilibili.com/video/BV1pV411y7E8


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM