漢明碼的原理、生成和檢驗(yàn)

在計(jì)算機(jī)運(yùn)行過程中,由于種種原因?qū)е聰?shù)據(jù)在存儲(chǔ)過程中可能出現(xiàn)差錯(cuò),為了能夠及時(shí)發(fā)現(xiàn)錯(cuò)誤并且將錯(cuò)誤糾正,通??梢詫⒃瓟?shù)據(jù)配成漢明編碼。

漢明碼具有一位糾錯(cuò)能力。

設(shè)將要進(jìn)行檢測(cè)的二進(jìn)制代碼為n位,為使其具有糾錯(cuò)能力,需要再加上k位的檢測(cè)位,組成n+k位的代碼。那么,新增加的檢測(cè)位數(shù)k應(yīng)滿足:

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


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

當(dāng)k的位數(shù)確定后,便可根據(jù)承擔(dān)的檢測(cè)任務(wù)設(shè)定他們?cè)趥魉痛a中的位置和他們的取值。首先,將所要檢測(cè)的代碼分為Pn組,分多少個(gè)組,我們通過k的值來(lái)確定。下面我用一個(gè)例子來(lái)說(shuō)明。
假設(shè)將要進(jìn)行檢測(cè)的二進(jìn)制代碼為0101,位數(shù)n=4,根據(jù)公式2^k≥n+k+1可以得出k的值是3,所以最終形成的漢明碼應(yīng)為n+k=7位。

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

每一組中包含的數(shù)又是如何確定的呢?我們來(lái)看下面這個(gè)表格


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

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


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

如果按照配偶原則來(lái)配置漢明碼,則C1應(yīng)使1 3 5 7位中“1”的個(gè)數(shù)為偶數(shù);C2應(yīng)使2 3 6 7位中“1”的個(gè)數(shù)為偶數(shù);C4應(yīng)使4 5 6 7位中“1”的個(gè)數(shù)為偶數(shù)。

按照上面我所說(shuō)的則:

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的漢明碼應(yīng)為C1C2B4C4B3B2B1,即0100101

漢明碼還存在配奇原則,下面來(lái)講一講配奇原則。按照配奇原則配置1100101的漢明碼。

根據(jù)1100101可知n=7。根據(jù)公式我們可以求出需要添加k=4位檢測(cè)位,詳細(xì)情況如下表。
屏幕快照 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

漢明碼的糾錯(cuò)

根據(jù)以上說(shuō)的漢明碼的配偶原則和配奇原則我們來(lái)看漢明碼的糾錯(cuò)。設(shè)接收到的錯(cuò)誤漢明碼(按配偶原則配置)是0100111,我們可以根據(jù)上述規(guī)律來(lái)確定出錯(cuò)位。


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

那么新的檢測(cè)位是
P1=①位+③位+⑤位+⑦位,即P1=0+0+1+1=0

P2=②位+③位+⑥位+⑦位,即P2=1+0+1+1=1

P4=④位+⑤位+⑥位+⑦位,即P4=0+1+1+1=1

根據(jù)P4P2P1構(gòu)成的二進(jìn)制是110,將110轉(zhuǎn)換成十進(jìn)制為6,說(shuō)明是第6位出錯(cuò),或者根據(jù)配偶原則的規(guī)律,其“1”的個(gè)數(shù)必須是偶數(shù)也能判斷出是第6位,所以第六位應(yīng)將“1”改為“0”,那么正確的漢明碼應(yīng)為0100101。

那么為什么在漢明碼糾錯(cuò)過程中,新的檢測(cè)位P4P2P1的狀態(tài)即指出了編碼中錯(cuò)誤的信息位?

漢明碼屬于分組奇偶校驗(yàn),P4P2P1=000,說(shuō)明接收方生成的校驗(yàn)位和收到的校驗(yàn)位相同,否則不同說(shuō)明出錯(cuò)。由于分組時(shí)校驗(yàn)位只參加一組奇偶校驗(yàn),有效信息參加至少兩組奇偶校驗(yàn),如果校驗(yàn)位出錯(cuò),P4P2P1的某一位將為1,剛好對(duì)應(yīng)位號(hào)4、2、1;若果有效信息出錯(cuò),將引起P4P2P1中至少兩位為1,如B1出錯(cuò),將使P4P1均為1,P2=0,P4P2P1=101.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容