海明碼(漢明碼)


海明碼(漢明碼)

概念

漢明碼(Hamming Code),是在電信領域的一種線性調試碼,以發明者理查德·衛斯里·漢明的名字命名。漢明碼在傳輸的消息流中插入驗證碼,當計算機存儲或移動數據時,可能會產生數據位錯誤,以偵測並更正單一比特錯誤。由於漢明編碼簡單,它們被廣泛應用於內存(RAM)。——百度百科

編碼方式

海明碼可以對一位比特錯誤起到檢錯和糾錯的作用,對於海明碼的編碼方式包涵以下幾個過程

確定校驗位數

在海明碼中,校驗位(\(x\))和信息位(\(y\))滿足如下關系:

\[2^x \geq x +y \]

根據此公式容易求出檢驗位和信息位的數量,有如下對應關系:

信息位位數 1 2~4 5~11 12~26 27~57 58~120
校驗碼位數 2 3 4 5 6 7

確定校驗位位置

海明碼中校驗位位置是固定的均為2的冪次的位置(1,2,4,8,……)

確定校驗位的值

海明碼編碼時對於每個校驗位會將信息位分組,每一個校驗位會覆蓋多個信息位,對每個校驗位其能覆蓋的信息位有如下特點:

\[h為信息位地址\\ p為校驗位地址\\ p\&q>0 \]

對於每個校驗位所覆蓋的區域,采用校驗方式確定校驗碼的值,一般為偶校驗

糾錯和檢錯

確定校驗位數

在得到海明碼之后,我們可以通過總位數來計算出相應的信息位和檢驗位各有多少,根據上述公式即可,同理即可得到校驗位地址,並獲得各個校驗碼

檢錯

假設各個校驗碼是由偶校驗得到的,那么我們再次計算接收端的海明碼對應的各個校驗位的值,然后將新得到的校驗位的值與發送來的值相比較,相同則證明該校驗位覆蓋的范圍內的信息位全部是正確的,否則則該校驗碼所覆蓋的范圍內的信息位存在錯誤,通過各個校驗碼的比較我們可以確定那幾個分組存在錯誤,通過查看分組的交集,便可以確定錯誤的信息位的位置

糾錯

得到錯誤的信息位之后,對其取反即可

示例

發送端信息碼:1010110

信息碼位數為7,所以可以確定校驗碼位數為4,海明碼總位數為11

校驗碼位置為:1,2,4,8

計算校驗碼的值:(偶校驗方式)

\[p1 = 偶校驗(h1,h3,h5,h7,h9,h11) = 0\\ p2 = 偶校驗(h3,h6,h7,h10,h11) = 1\\ p4 = 偶校驗(h5,h6,h7) = 1\\ p8 = 偶校驗(h9,h10,h11) = 0\\ \]

獲得海明碼為:01110100110

接收端海明碼為:01110100111

確定校驗位:1,2,4,8

計算校驗碼值:

\[p1 = 偶校驗(h1,h3,h5,h7,h9,h11) = 1\\ p2 = 偶校驗(h3,h6,h7,h10,h11) = 1\\ p4 = 偶校驗(h5,h6,h7) = 0\\ p8 = 偶校驗(h9,h10,h11) = 1\\ \]

由此確定錯誤位為11位,因為特殊的分組方式,所以這里計算結果從高位開始排出為1011(二進制)=11,也可確定錯誤位


免責聲明!

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



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