海明校验
轉自:https://www.cnblogs.com/zsswpb/p/5771636.html
做了調整與補充
?
【定義】
海明碼(Hamming Code)是利用奇偶性來檢錯和糾錯的校驗方法。海明碼的構成方法是在數據位之間的確定位置插入k個校驗位,通過擴大嗎距來實現檢錯和糾錯。 對于數據位m的數據,加入k位的校驗碼,它應滿足香農第二定理:n=m+k?≤ 2k-1 說明:這里的m是指我們待編有效信息的位數,例如110101就是m=6,然后代入m,6+k ≤2k-1得到m=6,k≥4(取最小值),這樣組成10位海明校驗碼。 【例子】 設數據為01101001,試采用校驗位求其偶校驗方式的海明碼。 根據上面的公式得到,m=8,k≥4 (1)確定數據位D和校驗位P在海明碼中的位置: 由海明碼編碼規則可知:?pi在海明碼的第2i-1,比如P4=2^(4-1)=8,所以位于第8位| 海明碼H | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 校驗位 | P1 | P2 | ? | P3 | ? | ? | ? | P4 | ? | ? | ? | ? |
| 數據位 | ? | ? | D0 | ? | D1 | D2 | D3 | ? | D4 | D5 | D6 | ?D7 |
(2)確定校驗關系
這個難點在于如何確定校驗位組。 舉一個例子來說:H3=D0,海明碼下標為3,我們必須用已知的校驗位(P1,P2,P3,P4)來表示3,這里3就可以等于1+2。 比如P1 的校驗位為表格中紅色標記出來所對應的海明碼的位數 (3)故:P1校驗:P1,D0,D1,D3,D4,D6 P1=D0⊕D1⊕D3⊕D4⊕D6=0⊕1⊕0⊕1⊕0=0 P2=D0⊕D2⊕D3⊕D5⊕D6=0⊕1⊕0⊕0⊕0=1 P3=D1⊕D2⊕D3⊕D7=1⊕1⊕0⊕1=1 P4=D4⊕D5⊕D6⊕D7=1⊕0⊕0⊕1=0 ⊕符號:代表異或,相同則為0,不同則為1。只要仔細一定可以計算正確。 我們按照表格海明碼的位置插入P1~P4到數據中,所以海明校驗碼:010111001001 (4)設置指錯字G4,G3,G2,G1 G4=P4⊕D4⊕D5⊕D6⊕D7 G3=P3⊕D1⊕D2⊕D3⊕D7 G2=P2⊕D0⊕D2⊕D3⊕D5⊕D6 G1=P1⊕D1⊕D3⊕D4⊕D6 G1G2G3G4為0000,則數據傳輸沒有錯誤。 以上面的數據傳輸為例子: G4=0 G3=0 G2=0 G1=0 若數據傳輸之后變成010111001000 則 G4=P4⊕D4⊕D5⊕D6⊕D7=0⊕1⊕0⊕0⊕0=1 G3=P3⊕D1⊕D2⊕D3⊕D7=1⊕1⊕1⊕0⊕0=1 G2=P2⊕D0⊕D2⊕D3⊕D5⊕D6=1⊕0⊕1⊕0⊕0⊕0=0 G1=P1⊕D1⊕D3⊕D4⊕D6=0⊕0⊕1⊕0⊕1⊕0=0 G4G3G2G1組成的二進制數為:1100,也就是12,說明第12位出現的錯誤 (5)海明校驗缺點 1)海明校驗的每一步還是使用的奇偶校驗,因此當G中同時出現兩個錯誤時,G1G2G3G4依然為0000,例如D1,D2出錯,010100001001 G4=P4⊕D4⊕D5⊕D6⊕D7=0⊕1⊕0⊕0⊕0⊕1=0 G3=P3⊕D1⊕D2⊕D3⊕D7=1⊕0⊕0⊕0⊕1=0 G2=P2⊕D0⊕D2⊕D3⊕D5⊕D6=1⊕0⊕0⊕0⊕0⊕0=1 G1=P1⊕D1⊕D3⊕D4⊕D6=0⊕0⊕0⊕1⊕0=1?
2)同時,G4G5G6G1=0000不一定數據傳輸過程中就沒有錯誤,只有當只有一位發生錯誤時,才能檢測出來。
G1G2G3G4=0011,也就是第3位出現錯誤,很明顯這是不準確的。
轉載于:https://www.cnblogs.com/Mayfly-nymph/p/11098213.html
總結
- 上一篇: ubuntu 安装git
- 下一篇: 认知实习培训第四天总结