天天看點

漢明碼的學習筆記

自己的了解 幫助自己複習用的 寫的可能會有錯誤

漢明碼(Hamming Code )

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

說人話 就是 我想發送一串二進制資料 例如 10010

但我又怕發送過程中出現意外就用檢測碼的形式保證不會出錯,出錯了也可以通過檢測碼查出哪位出錯了因為二進制隻有01,錯了就能改正。

發送biubiubiu

我想發 10010

首先 根據公式 2 k > = n + k + 1 2^{k}>=n+k+1 2k>=n+k+1 n位二進制位數 k位檢測位數

算出k最小為4

也就是5位的二進制資料10010要插入4位檢測碼

但插入并不是直接放在資料最前或是最後

4位檢測碼是按照 2 i 2^{i} 2i

位放入二進制資料中

二進制資料序号 1 2 3 4 5 6 7 8 9
序号用二進制表示 0001 0010 0011 0100 0101 0110 0111 1000 1001
資料串 C1 C2 1 C3 1 C4

根據序号的二進制進行分組

滿足 XXX1 的位第一組

序号 1 3 5 7 9
資料串 C1 1 1

滿足 XX1X 的為第二組

序号 2 3 6 7
資料串 C2 1 1

滿足 X1XX 的為第三組

序号 4 5 6 7
資料串 C3 1

滿足1XXX的為第四組

序号 8 9
資料串 C4

Ci為第幾位檢測碼 可以發現每組資料串都有一位檢測碼 分别對其進行偶校驗 就可以得出檢測碼了 進而得到最終的漢明碼

第一組 C1為0

第二組 C2為0

第三組 C3為1

第四組 C4為0

是以最後的海明碼為 001100100 然後就可以biubiubiu 發過去了

接收duangduangduang

接收一串海明碼怎麼查錯及提取有效資料嘞

還是以上面發送的為例 001 100 100在發送過程中第6位錯了變成了001 101 100

看我操作就行了

接收duangduangduang

分組進行偶校驗 滿足給0 不滿足給1

二進制資料序号 1 2 3 4 5 6 7 8 9
序号用二進制表示 0001 0010 0011 0100 0101 0110 0111 1000 1001
資料串 1 1 1 1

滿足 XXX1 的位第一組 滿足偶校驗 給0

序号 1 3 5 7 9
資料串 1 1

滿足 XX1X 的為第二組 不滿足偶校驗 給1

序号 2 3 6 7
資料串 1 1 1

滿足 X1XX 的為第三組 不滿足偶校驗 給1

序号 4 5 6 7
資料串 1 1 1

滿足1XXX的為第四組 滿足偶校驗 給0

序号 8 9
資料串

按照組數從大到小列出為 0110 卧槽 正好就是6的二進制表示

就是第6位錯了 改過來就得了 001 100 100 ✔

有效資訊的話就是 去掉第1,2,4,8位的檢驗碼

為 10010√

呐呐呐 就結束了

奇偶檢驗

添加一位檢測位,使得二進制資料中滿足奇偶原則

配偶原則 就是檢測二進制資料中‘1’的個數如果為奇數個,檢測位就為‘1’使得滿足二進制資料中‘1’的個數滿足偶數個,如果個數為偶數,檢測位則為‘0’ 這就是配偶原則也叫偶校驗

配奇原則就是檢測二進制資料中‘1’的個數 如果為奇數,檢測位為‘0’,如果為偶數,檢測位為‘1’以此滿足配奇數原則,也叫奇校驗

為啥子呢

會做了 我們來搞搞原理

漢明碼的學習筆記

一串資料 1 2 3 4 5 6 7

分為三組

第一組 1 2 3 4

第二組 2 3 5 6

第三組 3 4 6 7

7個數中其中有一個是錯的

我們還可以知道三個組有哪些是全對的 那些是錯的

我們就能判斷出 哪個數錯了 神不神奇wow

eg.

第一組錯了 ,第二三組對了 看圖 就能知道 1是錯的

第一二錯了 第三組對了 看圖得知 2是錯的

簡單的原理就是這個原理

我也說不清

自己體會

那就這樣吧

寫部落格号累 寫一上午了

我要去打csgo了

我要繼續去學習了

其他一些想說的

漢明碼 預設隻錯一位

漢明碼 順序的話可以從右向左 也就是可以

二進制資料序号 9 8 7 6 5 4 3 2 1
資料串 C4 C3 C2 C1

就是序号順序和檢測碼順序得保持一緻

而且寫漢明碼和姐漢明碼方向應該一緻(應該是對的我驗證了一下就因為我看的一個教程 方向錯了 我做的作業全錯 嗚嗚嗚 )

不過預設從左向右 别整那些騷的了

繼續閱讀