自己的了解 幫助自己複習用的 寫的可能會有錯誤
漢明碼(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 |
就是序号順序和檢測碼順序得保持一緻
而且寫漢明碼和姐漢明碼方向應該一緻(應該是對的我驗證了一下就因為我看的一個教程 方向錯了 我做的作業全錯 嗚嗚嗚 )
不過預設從左向右 别整那些騷的了