海明碼是可以發現雙位元錯誤,並可以糾正單位元錯誤的編碼方案。(一般來講,檢錯編碼不一定具有糾錯能力,但是糾錯編碼具有檢錯能力)。
其工作流程可以分為以下四個步驟:
(1)確定校驗碼位數r;
(2)確定校驗碼和資料的位置;
(3)求出校驗碼的值;
(4)檢錯並糾錯。
在以下的工作流程中,我們要傳送的資料d=101101.
我們使用海明不等式來確定校驗碼的位數r,海明不等式的形式如下:
2^r>=k+r+1
其中:k為資料的位數(資訊位數);
可以滿足不等式的最小r為校驗碼的位數(冗餘資訊位數)
在確定校驗碼p和資料d的位置的時候,我們的資料位按照1,2,3,…的順序排布,按照下列原則:
(1)p1,p2,…,pn:放在2的n(n>=0)次方的位置上;
(2)d1,d2,…,dm:在校驗碼已經排放好的基礎上,將d按序把剩下的空填滿。
注意:p的值暫放不填,將d的值按位填進去。
資料位12
3456
78910
**p1
p2d1
p3d2
d3d4
p4d5
d6實際值10
1101
首先,在步驟的**基礎上,加上資料位對應的二進位制,更改後的**如下:
二進位制0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
資料位123
4567
8910**
p1p2
d1p3
d2d3
d4p4
d5d6
實際值101
101接著按照如下的步驟操作:
(1)先找到p所對應的的二進位制中1所在的位置
(2)再去看d中哪些數的對應位上的值也是1
(3)找到滿足條件的d,再將p和這些d的實際值依次進行異或,令結果為等於0
(4)即可求出p(實際值)
將p的值填入表中,得:
二進位制0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
資料位123
4567
8910**
p1p2
d1p3
d2d3
d4p4
d5d6
實際值001
0011
101由此,我們可以得到101101的海明碼為 0010011101.
在接收端,我們採用如下步驟進行判斷所接收的資料串是否發生錯誤:
(1)按照前個步驟的做法。將p和對應的d(帶入實際接收到值)進行異或
(2)將得到的結果按照倒序的方式進行排列
(3)排列好的結果,即資料出錯位數的二進位制值
(4)在找到出錯位後,我們將其實際接收的值改為其相反的數即可。(1->0,0->1)
對應的位數的二進位制表示為0101,即5.
所以第五位出錯,我們將第五位的1改為0即可。
海明碼(漢明碼)的工作機制
一 海明碼的形成方式 1 首先海明碼是由資訊位和校驗位組成的 2 資訊位校驗位的關係 校驗位的位數r 資訊位的位數i 2 r 1 i r 3 校驗位的位置是2的整數次方 如 1 2 4 8 4 海明碼位數分組 因為海明碼其實是分組的奇偶校驗碼,所以有個分組的概念 1 1 3 5 7 2 2 3 6 ...
漢明碼或者海明碼的計算或者糾錯
設k為有效資訊的位數,r為校驗位的位數,則整個碼字的位數n應滿足不等式 n k r 2r 1 是2的r次方 若要求海明碼能檢測出2位錯誤,則再增加1位校驗位。例如 二進位制編碼位10101100,共8位所以k 8,可以得出校驗位r的位數為4位。位號 1 n 是那些權值為2的那些位,即2 0 2 1 ...
漢明碼(海明碼)你了解多少?帶你探秘背後秘密
如何編碼?如何校驗?在計算機儲存中,可能受其它原因,導致儲存出現錯誤,0變成1,1變成0,存放資料以漢明碼的方式儲存,可以進行資料的校正,具有一位糾錯能力。在介紹漢明碼之前舉乙個例子說明一下分組校驗 比如有乙個位元組的資料 1000 0101 黃色為檢驗位 資料說明 1 1010 0001 該資料1...