1. 程式人生 > >海明校驗碼——如何求解

海明校驗碼——如何求解

   引言

   在學習計算機組成原理的時候接觸到了海明校驗碼,其實這個東西我們在學習專業課的時候接觸過類似的東西, 當再次見到的時候比較熟悉,但是有很多的人對這塊的知識比較模糊,不是很清楚,在知道資訊位的情況下使怎樣確 定校驗位的?不知道怎樣確定最後的海明碼?不清楚校驗位是怎樣就進行校驗的?下面小編就從這幾方面以一個例項 為基礎來講解一下海明碼的相關知識。    首先我們應該查閱百度百科,瞭解一下海明碼的先關知識,《海明碼》    核心公式解讀:2^r≥k+r+1     其中k為資訊位的個數,r為校驗位的個數;那麼我們怎樣來確定校驗位呢?下面以一個經典的例項來講解:    例如:二進位制碼1011  求它的海明編碼 步驟如下:
   1、資訊位k=4,由上面公式知道,r的最小值為3,所以校驗位為3.    2、所以海明碼的位數為7位,那麼應該如何分配資訊位和校驗位的位置呢?以及校驗位的值為多少?    3、分配校驗位的位置:校驗位的位置分配有規律,一般都放置在2^n的位置處,也就是1、2、4、8...的位置上。    4、分配資訊位的位置:資訊位的位置分配都是從高位到低位依次存放。所以分配結果如圖:                                    5、開始確定R1、R2、R3的值,想要確定這幾個值,我們就應該知道每一個位置上的資訊位有那幾個校驗位來校 驗,校驗的原則是:想要校驗第幾位(i),那麼久應該滿足對應的那幾個校驗位的位置相加等於i,例如:我們校驗
第3位,3=1+2,所以就用R1和R2來校驗,想校驗第7位,7=1+2 +4,所以就用R1、 R2、R3來校驗。依據這個原則, 1101的校驗位的對應表如下:                                    完成了上面的分配以後,下面我們就從上面的表中找出,每一個校驗嗎參與的校驗有哪些?這是求解校驗碼的值 的很關鍵的一步,結果如下:              從上面的位置我們就能知道每一個校驗嗎參與的校驗的資訊位,然後就是用異或(相同的兩個數異或結果為0,不 同的兩個數異或後結果為1),這樣我們根據資訊位的位置,找到對應該位置上的值,進行異或,就能很快的的到結
果:R1=1;R2=0;R3=0;將這三個數依次新增到那張7位表中,就得到了7位的海明碼!!!    6、那麼海明碼是如何進行校驗的呢?上面得到的最終結果如下圖:         從上面的表中我們可以得到兩個規律:    1、所有的校驗碼所在的位只是有對應的校驗碼進行校驗,如第1位(只有R1校驗)、第2位(只有R2校驗)、第4 位(只有R3校驗),。。。。也就是這些位如果發生了差錯,影響的只是對應的校驗結果,不會影響其他校驗碼的校 驗結果。這一點非常的重要,如果最終發現知識一個校驗組中的校驗結果不符,則直接可以知道是對應校驗組中的校 驗碼在傳輸過程中出現餓了差錯。    2、所有的資訊嗎為均被至少兩個校驗碼進行了校驗,也就是至少校驗了兩次,檢視對應的是哪兩組校驗結果不 符,然後根據上表就可以很快的確定是哪位資訊嗎在傳輸過程中出現了差錯!!

   小結

   上面是對海明碼的一個校驗的簡單的介紹,如果讀者想對這個校驗過程深入研究,還需要查閱一些其他的資料, 在這篇部落格中主要是講解了對海明碼的求解過程!!所以如果讀者對海明碼的求解還是不太明白的話,可以給我發私 信和這QQ聯絡我,我們一起交流學習,共同探討這方面的知識!!