在計算機執行過程中,由於種種原因導致資料在儲存過程中可能出現差錯,為了能夠及時發現錯誤並且將錯誤糾正,通常可以將原資料配成漢明編碼。
漢明碼具有一位糾錯能力。
設將要進行檢測的二進位制**為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 檢測位...