今天覆習計算機組成原理中看到了漢明碼的計算,其中有些知識書上沒有完全講到,我這裏根據自己的複習梳理下計算的幾個方法。
檢測位的小組
首先檢測位的小組的劃分書上說的有點不好理解,這裏一種比較容易的理解方法是:
C1:小組中的數最後一個數的二進制數爲1:1,3,5,7,9,11
C2:小組中的倒數第二個數的二進制數爲1:2,3,6,7,10,11
C4:小組中的倒數第三個數的二進制數爲1:4,5,6,7,12,13
C8:小組中的倒數第四個數的二進制數爲1:8,9,10,11,12,13
…
依次類推
在做題的過程中,基本上只需要記住前四組的前六位就可以了
根據不同的代碼長度n,所需要的檢測位的個數爲:2^k>= n+ k + 1
經常用的就是:
n | k |
---|---|
1 | 2 |
2~4 | 3 |
5~11 | 4 |
然後檢測位的插入位置是1,2,4,8,…,2^k-1
例如插入三個檢測位,傳遞信息爲:b1b2b3b4,則它們的位置安排如下:
二進制序號 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
名稱 | C1 | C2 | b1 | C4 | b2 | b3 | b4 |
計算
求相應的漢明碼
例子:0101 求相應的漢明碼
二進制序號 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
名稱 | C1 | C2 | 0 | C4 | 1 | 0 | 1 |
配偶原則:
配奇原則:
配偶原則:使小組位中的1的個數爲偶數
奇配原則:取配偶原則的相反數
簡單的方法就是直接在二進制序號找出小組中的數
C1:1,3,5,7
C2:2,3,6,7
C4:4,5,6,7
最後得到0101的漢明碼爲(配偶原則):0100101
最後得到0101的漢明碼爲(配奇原則):1001101
漢明碼的糾錯
例子:接收到的漢明碼爲 0011001,求欲傳送的代碼
二進制序號 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
名稱 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
對於任意不同的n位信息,下面的步驟均可以配置漢明碼:
配偶原則:
即P1 P2 P4 = 000,表示沒有位錯誤,故欲傳送的信息爲:1001
配奇原則:
即P1 P2 P4 = 111,表示第七位錯誤,可糾正爲:0011000 ,故欲傳送的信息爲:1000