漢明碼的原理、生成和檢驗

在計算機運行過程中,由于種種原因導致數據在存儲過程中可能出現差錯,為了能夠及時發現錯誤并且將錯誤糾正,通常可以將原數據配成漢明編碼。

漢明碼具有一位糾錯能力。

設將要進行檢測的二進制代碼為n位,為使其具有糾錯能力,需要再加上k位的檢測位,組成n+k位的代碼。那么,新增加的檢測位數k應滿足:

2^k ≥n+k+1或2^k-1≥n+k


屏幕快照 2018-04-09 上午10.24.48.png

當k的位數確定后,便可根據承擔的檢測任務設定他們在傳送代碼中的位置和他們的取值。首先,將所要檢測的代碼分為Pn組,分多少個組,我們通過k的值來確定。下面我用一個例子來說明。
假設將要進行檢測的二進制代碼為0101,位數n=4,根據公式2^k≥n+k+1可以得出k的值是3,所以最終形成的漢明碼應為n+k=7位。

所以分組分為P1、P2、P4。原因則是第一組是20、第二組則是21 、同理第三組則是2^2 、依次列推分組應按照2^(k-1)。 同時以后根據分組產生的數插入的位置也是按照此規律插入,比如第一組插入2^0、 即第1位,第二組插入2^1 、即第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,...位)

每一組中包含的數又是如何確定的呢?我們來看下面這個表格


屏幕快照 2018-04-09 上午10.28.19.png

將編號轉成二進制從右向左,如果第一位是1,例如編號是1,3,5,7....的就分入第一組,如果第二位是1的,例如編號2,3,6,7,10...的就分入第二組,以此類推將所有的編號分入相應的組中。下面我么來看例子0101是如何產生漢明碼的(采用配偶原則),


屏幕快照 2018-04-09 上午10.29.21.png

如果按照配偶原則來配置漢明碼,則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位檢測位,詳細情況如下表。
屏幕快照 2018-04-09 上午10.30.08.png

按配奇原則配置,則

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,我們可以根據上述規律來確定出錯位。


屏幕快照 2018-04-09 上午10.31.08.png

那么新的檢測位是
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.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容