1. 程式人生 > >計算機網路第三章(3)

計算機網路第三章(3)

糾一位錯誤的海明碼

設一個系統中,編碼後的碼字位數是 n,則 n=m+r。因為要傳輸的資料位是 m 位,該系統需要傳輸的正確的碼字個數應該是2m,而全部碼字的個數是2n。
如果每個正確碼字發生1位錯,能夠被糾錯,至少發生1位錯不會變成另外1個正確的碼字,如果n位碼字的每一位都發生一次跳變,變成一個錯誤的碼字,那麼每個碼字至少需要n+1個碼字(海明碼位數為2檢查1)來表示它,所以,下面這個式子成立:
在這裡插入圖片描述

糾正單個錯需要的冗餘位跟資料位的關係

(m+r+1)<=2^r
根據這個公式,可以計算出傳輸m位資料,至少需要的冗餘位數r,比如,傳輸m=5位,需要的冗餘位r=4

糾正單個錯誤需要的校驗位的下界滿足:
m r n(碼字的總位數)
1 2 3
2~4 3 5~7
5~11 4 9~15
12~26 5 17~31
27~57 6 33~63
58~120 7 65~127

海明糾錯碼

校驗位和資料位
凡編號為2的乘冪的位是校驗位,如1、2、4、8、16、……
其餘是資料位,如3、5、6、7、9、……
每一個校驗位設定根據:包括自己在內的一些位的集合的奇偶值(奇數或偶數)。

*校驗位
將某一位資料位的編號展開成2的乘冪的和,那末每一項所對應的位即為該資料位的校驗位(收方使用)。 反過來,校驗位的校驗集合也包含這個資料位。
如: 11 = 1 + 2 + 8
29 = 1 + 4 + 8 + 16
校驗位1的檢驗集合為所有奇數位。
校驗位2的檢驗集合:2、3、6、7、10、11、…
校驗位4的檢驗集合:4、5、6、7、……
校驗位8的檢驗集合:8、9、10、11、……
校驗位的計算(m=7,r=4)

例項:發方怎麼計算校驗驗位?
先來看第一個校驗位,它的校驗集合是所有的奇數位,對應的值分別是1、0、1、0、0,2個1,是偶數了,所以,校驗位1只能填入0;
再看第二個校驗位,其校驗集合是第2、3、6、7、10、11位,對應的值分別是1、0、1、0、0, 2個1,是偶數了,所以,校驗位2只能填入0;
校驗位4對應的校驗集合是第4、5、6、7為,對應的值分別是0、0、1,只有1個1,是奇數,所以,校驗位4需要填入1,使校驗集合的1的個數是偶數。
同樣的道理,校驗位8需要填入0
最後,發方得到了編碼後的碼字是00110010000

接收方如何糾錯

首先將差錯計數器置“0”,counter=0。
當碼字到達接收端後,接收端逐個檢查各個校驗位的奇偶性。
如發現某一校驗位和它所檢測的集合的奇偶性不正確,就將該檢驗位的編號加到差錯計數器中。最後,所有的校驗位都檢查完成之後,檢查計數器counter的值
Counter=0,無差錯
counter ≠0,出錯,該值指明出錯的位

例:接收糾錯
一個採用了糾1位錯海明碼的系統,傳輸資料位數1位,冗餘位4位,現在接收方收到了碼字如下:00111000100,那麼:
首先校驗每個校驗位,計數器counter初始化:
第一位:00111000100,校驗集合有3個1,錯
第二位:00111000100,校驗集合有1個1,錯
第四位:00111000100,校驗集合有2個1,對
第八位:00111000100,校驗集合有1個1,錯
累加出錯位編號:conuter=1+2+8=11
可計算得其第11位出錯,將該位由0改為1,即糾正得到正確結果: 00111000101

利用海明碼糾正突發錯誤

有時候,一個尖峰電壓,可能導致突發錯誤。我們可以利用糾1位錯的海明碼糾正這樣的突發錯誤。
將連續的k個碼字按行排列成矩陣
傳送資料時,按列傳送碼字,每列k位
如果一個突發性錯誤長度是k位,則在k個碼字中,至多隻有一位受到影響,正好可用海明碼糾錯改位後恢復