漢明碼的原理、生成和檢驗
在計算機執行過程中,由於種種原因導致資料在儲存過程中可能出現差錯,為了能夠及時發現錯誤並且將錯誤糾正,通常可以將原資料配成漢明編碼。
漢明碼具有一位糾錯能力。
設將要進行檢測的二進位制程式碼為n位,為使其具有糾錯能力,需要再加上k位的檢測位,組成n+k位的程式碼。那麼,新增加的檢測位數k應滿足:
2k≥n+k+1或2k-1≥n+k
程式碼長度和檢測位數的關係
N |
K(最小) |
1 |
2 |
2~4 |
3 |
5~11 |
4 |
12~26 |
5 |
27~57 |
6 |
58~120 |
7 |
當k的位數確定後,便可根據承擔的檢測任務設定他們在傳送程式碼中的位置和他們的取值。首先,將所要檢測的程式碼分為P
假設將要進行檢測的二進位制程式碼為0101,位數n=4,根據公式2k≥n+k+1可以得出k的值是3,所以最終形成的漢明碼應為n+k=7位。
所以分組分為P1、P2、P4。原因則是第一組是20、第二組則是21 、同理第三組則是22 、依次列推分組應按照2k-1。同時以後根據分組產生的數插入的位置也是按照此規律插入,比如第一組插入20、即第1位,第二組插入21 、即第2位,以此類推。那麼組分好了,他們每一組中包含的位則是:
p1包含(1,3,5,7,9,11,...位)
p2包含(2,3,6,7,10,11,14,15,...位)
p3包含(4,5,6,7,12,13,14,15,...位)
每一組中包含的數又是如何確定的呢?我們來看下面這個表格
編號 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
… |
二進位制 |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
1000 |
1001 |
1010 |
1011 |
… |
序號 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
名稱 |
C1 |
C2 |
B4 |
C4 |
B3 |
B2 |
B1 |
傳送數 |
0 |
1 |
0 |
1 |
其中C1、C2、C4是我們插入的檢測位
如果按照配偶原則來配置漢明碼,則C1應使1 3 5 7位中“1”的個數為偶數;C2應使2 3 6 7位中“1”的個數為偶數;C4應使4 5 6 7位中“1”的個數為偶數。
按照上面我所說的則:
C1=③位+⑤位+⑦位,即C1=B4+B3+B1=0+1+1=0
C2=③位+⑥位+⑦位,即C2=B4+B2+B1=0+0+1=1
C4=⑤位+⑥位+⑦位,即C4=B3+B2+B1=1+0+1=0
所以0101的漢明碼應為C1C2B4C4B3B2B1,即0100101
漢明碼還存在配奇原則,下面來講一講配奇原則。按照配奇原則配置1100101的漢明碼。
根據1100101可知n=7。根據公式我們可以求出需要新增k=4位檢測位,詳細情況如下表。
二進位制序號 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
漢明碼 |
C1 |
C2 |
1 |
C4 |
1 |
0 |
0 |
C8 |
1 |
0 |
1 |
按配奇原則配置,則
C1=③位+⑤位+⑦位+⑨位+11位+1=1+1+0+1+1+1=1
C2=③位+⑥位+⑦位+10位+11位+1=1
C4=⑤位+⑥位+⑦位+1=0
C8=⑨位+10位+11位+1=1
所以按配奇原則新配置的漢明碼為11101001101
漢明碼的糾錯
根據以上說的漢明碼的配偶原則和配奇原則我們來看漢明碼的糾錯。設接收到的錯誤漢明碼(按配偶原則配置)是0100111,我們可以根據上述規律來確定出錯位。
二進位制序號 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
接收到的漢明碼 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
P1=①位+③位+⑤位+⑦位,即P1=0+0+1+1=0
P2=②位+③位+⑥位+⑦位,即P2=1+0+1+1=1
P4=④位+⑤位+⑥位+⑦位,即P4=0+1+1+1=1
根據P4P2P1構成的二進位制是110,將110轉換成十進位制為6,說明是第6位出錯,或者根據配偶原則的規律,其“1”的個數必須是偶數也能判斷出是第6位,所以第六位應將“1”改為“0”,那麼正確的漢明碼應為0100101。
那麼為什麼在漢明碼糾錯過程中,新的檢測位P4P2P1的狀態即指出了編碼中錯誤的資訊位?
漢明碼屬於分組奇偶校驗,P4P2P1=000,說明接收方生成的校驗位和收到的校驗位相同,否則不同說明出錯。由於分組時校驗位只參加一組奇偶校驗,有效資訊參加至少兩組奇偶校驗,若果校驗位出錯,P4P2P1的某一位將為1,剛好對應位號4、2、1;若果有效資訊出錯,將引起P4P2P1中至少兩位為1,如B1出錯,將使P4P1均為1,P2=0,P4P2P1=101,