剛剛上計算機組成原理課的時候,或許會覺得漢明碼的橫空出世太神奇了,它是怎麼知道二進位制資訊在傳輸過程中哪一位傳錯的呢?開始只是死記,後來發現太難記住了,於是想一**竟,究竟是什麼支配著這種編碼糾錯的可靠性。
首先我們要知道的是,漢明碼是只具有一位糾錯能力的編碼,那麼二進位制資訊的傳輸校驗可以在最多只有一位發生誤傳這個假設下討論。
這個問題的乙個數學模型是:傳送方將一串任意長度的01**通過一定的處理,使得**的在只有一位發生傳送錯誤(不包括一位**的增加或者缺失)或者完全正確的傳輸送達接收方的前提下,接收方能還原傳送方傳送的**。
漢明碼給出了乙個完美的解答。它的解決方案如下:設欲檢測的二進位制**有n位,為使其具有糾錯能力,需要增加k位檢測為。為了能準確對錯誤定位以及指出**沒錯,新增添的檢測位數k應滿足
k的位數確定以後,便可由它們所承擔的檢測任務設定設定它們在被檢測**中的位置以及它們的取值。
設 位**自左向右依次編為第1,2,3,4,…., 位,而將k為檢測為記作 (這裡的c應該是check的首字母把。。。),重點來了:
檢測的 小組包含1,3,5,7,9,11…………位。
檢測的 小組包含2,3,6,7,10,11,14,15……位
檢測的 小組包含4,5,6,7,12,13,14,15,……位
檢測的 小組包含8,9,10,11,12,13,14,15,24,……位
為什麼要這樣分呢?
不難發現 小組都是奇數的,我們可以這樣給他劃分:
再來看 小組,可以這樣劃分:
小組,可以這樣劃分:
小組,可以這樣劃分:
注意到奇數有乙個共同點,就是它的二進位制最低位都是1,其中的規律看清楚了吧。
小組裡面每一組只有1個元素,乙個小組加2就變成下乙個小組,如
小組裡面每一組只有2個元素,乙個小組加4就變成下乙個小組,如
小組裡面每一組只有4個元素,乙個小組加8就變成下乙個小組,如
這不禁讓我想到他們的二進位制表示會出現這樣的情況,因為 小組每乙個都是奇數,所以
的二進位制表示最低位一定是1,因為
1 3 5 7 9 11 13
二進位制 1 11 101 111 1001 1011 1101
而 小組二進位制表示次低位為1,因為
2 3 6 7 10 11 14
二進位制 10 11 110 111 1010 1011 1110
而 小組二進位制表示倒數第三位為1,因為
4 5 6 7 12 13 14
二進位制 100 101 110 111 1100 1101 1110
討論到這裡,它的校驗原理就幾乎全部出來了。因為每一組都有乙個固定的數字不變,如 每乙個數的倒數第 位一定為1,其他位則包含有所有的可能。那它是怎麼校驗的呢?為了看得更加具體,我們假設只有第10位**傳輸出錯因為10的二進位制表示是1010,假設採取的是偶校驗(其實奇偶校驗只是實現檢驗的乙個工具,跟校驗原理沒有任何關係),那麼第10位在 和 這兩個小組裡面,因為
(因為是偶校驗,奇校驗類似,自己分析),所以有以下式子:
因此:同理,
而對於其他不含有第十位的小組來說,它們的校驗值一定是零,於是生成的出錯**位置就被指出來了,它就是1010這個位置。實現了校驗。總而言之,漢明碼的精髓所在就是依次確定出錯位置的每一位二進位制值(是位置的二進位制值,比如第十個位置,就是依次確定1010這四個數,至少需要4個校驗位來確定),所以
的出現就顯而易見了。因為這個式子能確保n個資訊位加上k個校驗位後數值小於 , 是個什麼數呢?它是k位二進位制能表示的最大的數 ,所以加上k個校驗位以後,不需要增加校驗位的位數。。。。這是在複習機組的時候不小心發現的,但是機組考得好爛,哎,考了就考了吧,沒法去追究了。。。。
原資訊碼:10011101
(1)確定校驗碼位數
原始資訊碼一共8,根據前面的錶可得知校驗碼位數為4
(2)確定校驗碼位置
??1?001?1101
(2)計算機各位校驗碼
pn校驗碼位校驗的碼字位為:第2n-1位(也就是pn本身)、第2n-1+1位、第2n-1+2位、第2n-1+3位、……、第2n-1位,第3×2n-1位、第3×2n-1+1、……、第2×2n-1位,第5×2n-1位、第5×2n-1+1位、第3×2n-1位,……、第7×2n-1位、第7×2n-1+1位、……、第4×2n-1位,……,第(2m-1) 2n-1位、……第m×2n-1位
p1(n=1):1、3、5、7、9、11 #—-檢驗的bit位,下同
11 0 1 1 0 #—-對應位的值,下同
p2(n=2):2、3、6、7、10、11
11 0 0 1 1
p3(n=3):4、5、6、7、12
00 0 1 1
p4(n=4):8、9、10、11、12
11 1 0 1
最終得出插入校驗碼後的資訊碼為:111000111101
漢明碼或者海明碼的計算或者糾錯
設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 ...
漢明碼的原理 生成和檢驗
在計算機執行過程中,由於種種原因導致資料在儲存過程中可能出現差錯,為了能夠及時發現錯誤並且將錯誤糾正,通常可以將原資料配成漢明編碼。漢明碼具有一位糾錯能力。設將要進行檢測的二進位制 為n位,為使其具有糾錯能力,需要再加上k位的檢測位,組成n k位的 那麼,新增加的檢測位數k應滿足 2k n k 1或...
計算機組成原理 漢明碼生成,校驗
想要檢測的二進位制 為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 檢測位...