漢明碼的原理 生成和檢驗

2021-07-25 19:10:28 字數 2221 閱讀 2880

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

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

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

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

**長度和檢測位數的關係n

k(最小) 1

22~4 3

5~11 4

12~26 5

27~57 6

58~120 7

當k的位數確定後,便可根據承擔的檢測任務設定他們在傳送**中的位置和他們的取值。首先,將所要檢測的**分為p

n組,分多少個組,我們通過k的值來確定。下面我用乙個例子來說明。

假設將要進行檢測的二進位制**為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,例如編號是1,3,5,7....的就分入第一組,如果第二位是1的,例如編號2,3,6,7,10...的就分入第二組,以此類推將所有的編號分入相應的組中。下面我麼來看例子0101是如何產生漢明碼的(採用配偶原則),

序號名稱

c1c2

b4c4

b3b2

b1傳送數

其中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位檢測位,詳細情況如下表。

二進位制序號

漢明碼c1

c2c4c8

按配奇原則配置,則

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

二進位制序號

接收到的漢明碼

那麼新的檢測位是

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,

漢明碼(Hamming Code)原理及實現

漢明碼實現原理 漢明碼 hamming code 是廣泛用於記憶體和磁碟糾錯的編碼。漢明碼不僅可以用來檢測轉移資料時發生的錯誤,還可以用來修正錯誤。要注意的是,漢明碼只能發現和修正一位錯誤,對於兩位或者兩位以上的錯誤無法正確和發現 設將要進行檢測的二進位制 為n位,為使其具有糾錯能力,需要再加上k位...

漢明碼(Hamming Code)原理及實現

漢明碼實現原理 漢明碼 hamming code 是廣泛用於記憶體和磁碟糾錯的編碼。漢明碼不僅可以用來檢測轉移資料時發生的錯誤,還可以用來修正錯誤。要注意的是,漢明碼只能發現和修正一位錯誤,對於兩位或者兩位以上的錯誤無法正確和發現 漢明碼的實現原則是在原來的資料的插入k位資料作為校驗位,把原來的n為...

計算機組成原理 漢明碼生成,校驗

想要檢測的二進位制 為n位,需要加上k位檢測為,組成n k 位的 此時應滿足的等式為 2 k n k 12 k代表2的k次方,根據二進位制的位數n,求出k 此時 k取最小值檢測位安插檢測位的位置n k位的二進位制從左向右第1,2,3 n k位。將檢測位記作ci i 1 2 4 8 2 k 1 檢測位...