蔡澤禹提示您:看後求收藏(品書網www.vodtw.tw),接著再看更方便。
訊號在傳輸的過程中會不可避免的發生錯誤,而糾錯碼就可以發現和改正這個錯誤。
1948年,夏農在《通訊的數學理論》中通道編碼定理指出:只要採用適當的糾錯碼,就可以在多類通道撒謊能夠傳輸訊息,誤位元速率可以很小。
1950年,漢明發現了可以糾正一個獨立錯誤的線性分組碼。
格雷給粗一種可以糾正三個錯誤的完備碼。
海明碼(hamming code)是一個可以有多個校驗位,具有檢測並糾正一位錯誤程式碼的糾錯碼,所以它也僅用於通道特性比較好的環境中,如以太區域網中,因為如果通道特性不好的情況下,出現的錯誤通常不是一位。
海明碼的檢錯、糾錯基本思想是將有效資訊按某種規律分成若干組,每組安排一個校驗位進行奇偶性測試,然後產生多位檢測資訊,並從中得出具體的出錯位置,最後透過對錯誤位取反(也是原來是1就變成0,原來是0就變成1)來將其糾正。
要採用海明碼糾錯,需要按以下步驟來進行:1、計算校驗位數;2、確定校驗碼位置;3、確定校驗碼;4、實現校驗和糾錯
1.計算校驗位數
要使用海明碼糾錯,首先就要確定傳送的資料所需要要的校驗碼(也就是“海明碼”)位數(也稱“校驗碼長度”)。它是這樣的規定的:假設用N表示新增了校驗碼位後整個資訊的二進位制位數,用K代表其中有效資訊位數,r表示新增的校驗碼位,它們之間的關係應滿足:N=K+r≤2r-1
如K=5,則要求2r?r≥5+1=6,根據計算可以得知r的最小值為4,也就是要校驗5位資訊碼,則要插入4位校驗碼。如果資訊碼是8位,則要求2 r? r≥ 8 + 1 = 9,根據計算可以得知r的最小值也為4。
資訊碼位數與校驗碼位數之間的關係
資訊碼位數分別為1、2~4、5~11、12~26、27~57、58~120、121~247的時候,則校驗碼位數分別為2、3、4、5、6、7、8。
2.確定校驗碼位置
上一步我們確定了對應資訊中要插入的校驗碼位數,但這還不夠,因為這些校驗碼不是直接附加在資訊碼的前面、後面或中間的,而是分開插入到不同的位置。但不用擔心,校驗碼的位置很容易確定的,那就是校驗碼必須是在2^n的位置,如第1、2、4、8、16、32,……位(對應20、21、22、23、24、25,……,是從最左邊的位數起的),這樣一來就知道了資訊碼的分佈位置,也就是非2^n位置,如第3、5、6、7、9、10、11、12、13,……位(是從最左邊的位數起的)。
舉一個例子,假設現有一個8位資訊碼,即b1、b2、b3、b4、b5、b6、b7、b8,它需要插入4位校驗碼,即p1、p2、p3、p4,也就是整個經過編碼後的資料碼(稱之為“碼字”)共有12位。根據以上介紹的校驗碼位置分佈規則可以得出,這12位編碼後的資料就是p1、p2、b1、p3、b2、b3、b4、p4、b5、b6、b7、b8。
現假設原來的8位資訊碼為,因現在還沒有求出各位校驗碼值,現在這些校驗碼位都用“?”表示,最終的碼字為:??1?001?1101。
3.確定校驗碼
這些校驗碼的值不是隨意的,每個校驗位的值代表了程式碼字中部分資料位的奇偶性(最終要根據是採用奇校驗,還是偶校驗來確定),其所在位置決定了要校驗的位元位序列。總的原則是:第i位校驗碼從當前位開始,每次連續校驗2^(n-1)位後再跳過i位,然後再連續校驗2^(n-1)位,再跳過2^(n-1)