海明碼校驗程式設計
(1)海明碼編碼:
輸入:一串二進位制資料串
輸出:插入海明碼後的二進位制資料串
(2)海明碼糾錯:
輸入:一串含海明碼的二進位制資料串
輸出:通過海明碼校驗,檢查該二進位制串是否有錯,若有錯誤,則對錯誤位進行糾錯,將糾錯後的二進位制串輸出。
這裡我們僅從程式設計實現的角度分析海明碼的編碼及糾錯的實現演算法,書本上採用的是矩陣相乘的方法,但矩陣相乘的方法程式執行效率不高,故通過在網上的搜尋及自己的總結,得出如下的程式實現演算法。
2.1 海明碼編碼的原理分析
編碼步驟
(1) 根據資訊位數,確定校驗位數。
k—資訊位數
r—校驗位數
求出滿足不等式的最小r,即為校驗位數。
(2)計算校驗位公式
特別注意:
校驗位 r n所在位數為
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /> 2^n ,其餘由資訊位填充。
位數和資訊位由1起始,而校驗位由0起始。
將每個資訊位元由位置對應的位數寫成2的冪之和的形式。
例如i8對應的第十二位12=2^3+2^2 ,i7對應的第十一位11=2^3+2^1+2^0 ,i6對應的第十位10=2^3+2^1,i5對應的第九位9=2^3+2^0 一直寫到對應的第三位。
校驗位r n由前面位數寫成2的冪之和中包含2 ^n的位數對應的資訊為之和構成
例如r3=i8+i7+i6+i5
(3)求校驗位。
根據計算公式求出各校驗位。
(4) 求海明碼
根據上面的**填充後,寫出海明碼。
例 對一段資訊1011,寫出海明碼。
根據上面步驟,解答如下
1、 2^r≥4+r+1,確定校驗位位3位2^3≥4+3+1.
2、 根據步驟
7=2^2+2^1+2^0, 6=2^2+2^1, 5=2^2+2^0,3=2^1+2^0,
r2=i4+i3+i2
r1=i4+i3+i1
r0=i4+i2+i1
3、 根據公式的r2 = 0, r1 =0, r0 =1
4、 添入**
得海明碼1010101
2.2 海明碼糾錯原理分析
(1)根據海明碼的資訊位和校驗位的分布規則,找出接收到的資料的資訊位以及校驗位。
如有已經編碼的資料 1100 1001 0111,則可以根據上表得到編碼的資訊為:1100 0011;校驗位為:1011。
(2)接收端對校驗位進行驗證
sn= rn ( 校驗)+ rn (接收)
(3)判斷校正因子是否有錯,並改正。
sn sn-1 sn-2……s0二進位制對應的是那位就是那位出錯,將其改正完成糾錯。如1001為第九位,將第九位1變0 (或0變1) 即可。
基於以上原理,我們對軟體進行了初步的規劃和設計:
(1) 為了提供友好的使用者介面,我們採用visual c++的mfc框架構建應用程式,使用乙個簡單的對話方塊程式,包含兩個部分,一部分為海明碼編碼部分,另一部分為海明碼糾錯部分。
(2) 由於本程式僅僅是海明碼原理性的驗證性程式,故只設計了對最長8位資料的海明碼的編碼,以及最長12位的海明碼校驗。
(3) 從上述原理可知,海明碼的編碼和糾錯可以使用如上所述的公式進行,故資料結構只需要採用乙個vector容器存放相應的資料即可,不需要其他負責的資料結構。
4.1 資料結構的設計
定義五個bool型的容器,vector,分別代表:輸入串暫存器、海明編碼暫存器、海明碼檢錯暫存器、海明碼檢錯資料暫存器、海明碼檢錯校驗值暫存器
其中:輸入串暫存器:用於存放使用者輸入的二進位制串
海明編碼暫存器:存放加入海明碼校驗碼後的二進位制串
海明碼檢錯暫存器:存放需要糾錯的二進位制串
海明碼檢錯資料暫存器:存放需要糾錯的二進位制串的資料部分
海明碼檢錯校驗值暫存器:存放需要糾錯的二進位制串的校驗碼部分
4.2 模組劃分
模組功能概述:
(1)海明碼編碼
輸入模組:獲取使用者的輸入二進位制串,並判斷輸入的正確性
暫存器初始化模組:將使用者的輸入字串轉化成0、1形式的數字串存放到輸入串暫存器中,並且將資料依次存放到海明編碼暫存器,存放時將2的冪次的位置空出來(置0)作為存放校驗碼。
校驗碼計算模組:根據上面描述的編碼演算法對校驗碼的值進行計算並儲存在對應的位置。
顯示模組:將海明編碼暫存器中的二進位制串轉化成字串的形式以供輸出。
(2)海明碼糾錯
輸入模組:獲取使用者的輸入二進位制串,並判斷輸入的正確性
暫存器初始化模組:將使用者的輸入字串轉化成0、1形式的數字串存放到檢錯暫存器中,根據當前位置是否為2的冪次將二進位制串分為資料和校驗碼分別存放到檢錯資料暫存器和檢錯校驗值暫存器
海明碼糾錯模組:根據上面描述的糾錯演算法對資料進行校驗,並糾錯。
顯示模組:將檢錯暫存器中正確的二進位製碼轉化成字串的形式以供輸出。
4.3 程式流程圖
海明碼校驗原理
海明校驗的基本思想 將有效資訊按某種規律分成若干組,每組安排乙個校驗位,做奇偶測試,就能提供多位檢錯資訊,以指出最大可能是哪位出錯,從而將其糾正。實質上,海明校驗是一種多重校驗。海明校驗的特點 它不僅具有檢測錯誤的能力,同時還具有給出錯誤所在準確位置的能力。一 校驗位的位數 校驗位的位數與有效資訊的...
資料校驗之海明碼
在計算機的世界裡,所有資料都以二進位制的形式存在,而網際網路的出現讓計算機之間的溝通成為可能,它們彼此通過相互傳遞資料實現對話.那怎麼確保一台計算機向另一台計算機傳送的資料沒有因為網路波動造成資料跳變呢?因此為了確保每台計算機接受到的資料都是準確無誤的,我們需要創造一種校驗機制以保證傳輸資料的正確性...
資料校驗 奇偶校驗 海明碼
2.海明碼 2 實現 計算機中的資料都是用0 1表示的,在物理層面,就是高電平和低電平,這就存在資料出錯的可能性。首先講資料進行分組,比如8位是一組,每一組對應乙個校驗碼位。如果8位資料有奇數個1,那麼校驗碼位就是1,如果8位資料位有偶數個1,那麼校驗碼位就是0。第一,如果是兩位資料位同時發生錯誤,...