軟考筆記(2)--校驗碼(海明碼)

概念

海明碼(Hamming Code)是一種利用奇偶性來檢錯和糾錯的校驗方法。海明碼的構成方法是在數據位之間的特定位置上插入k個校驗位,通過擴大碼距來實現檢錯和糾錯。

要點

現在舉個例子,以下均以該例子說明。
例子:
有個數據位爲8的數據D7D6D5D4D3D2D1D0=01101001,求海明碼。
先上結果:

H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
D7 D6 D5 D4 P4 D3 D2 D1 P3 D0 P2 P1

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
0 1 1 0 P4 1 0 0 P3 1 P2 P1

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
0 1 1 0 0 1 0 0 1 1 0 1

要點1(計算校驗位個數)

設數據位是n位,校驗位是k位,則n和k必須滿足以下關係:
2k - 1 ≥ n + k
例如一個數據的數據位爲8位,求需要多少位校驗碼,則有2k - 1 ≥ 8 + k,可以得到k最小應該爲4,即24 - 1 ≥ 8 + 4

要點2(計算校驗位位置)

2-1 (海明碼總位數)

設校驗位爲P,數據位爲D,海明碼爲H,則海明碼H的位數爲校驗碼和數據的位數相加。

2-2 (校驗碼位置)

校驗位P在海明碼的第2i-1位,即Hj = Pi,j=2i-1,i從1開始計數。無論是海明碼、校驗位還是數據位,均從右向左排列,即從低位向高位排列。
可先填入校驗碼的位置,再將數據位依次從低位到高位填入。
例如:

H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
D7 D6 D5 D4 P4(24-1位) D3 D2 D1 P3(23-1位) D0 P2(22-1位) P1(21-1位)

要點3 (數據由哪些校驗碼進行校驗)

根據上面求出的校驗碼的位置或者2i-1的公式,即可知道P4、P3、P2、P1的下標分別爲8、4、2、1。
現在要確定一下每位數據均由哪些校驗碼進行校驗的。
方法:數據爲的下標等於校驗位的下標之和。
D0=H3,3=2+1,即用H2、H1進行校驗,即P2、P1
D1=H5,5=4+1,即用H4、H1進行校驗,即P3、P1
D2=H6,6=4+2,即用H4、H2進行校驗,即P3、P2
D3=H7,7=4+2+1,即用H4、H2、H1進行校驗,即P3、P2、P1
D4=H9,9=8+1,即用H8、H1進行校驗,即P4、P1
D5=H10,10=8+2,即用H8、H2進行校驗,即P4、P2
D6=H11,11=8+2+1,即用H8、H2、H1進行校驗,即P4、P2、P1
D7=H12,12=8+4,即用H8、H4進行校驗,即P4、P3

要點4 (計算校驗碼的值)

校驗碼的值爲有參與校驗的數據依次從低到高異或的值。
要點3可以看出以下規律:
P1參與了D0、D1、D3、D4、D6等數據位的校驗。
P2參與了D0、D2、D3、D5、D6等數據位的校驗。
P3參與了D1、D2、D3、D7等數據位的校驗。
P4參與了D4、D5、D6、D7等數據位的校驗。
所以:(D7D6D5D4D3D2D1D0=01101001)
P1 = D0⊕D1⊕D3⊕D4⊕D6 = 1⊕0⊕1⊕0⊕1 = 1
P2 = D0⊕D2⊕D3⊕D5⊕D6 = 1⊕0⊕1⊕1⊕1 = 0
P3 = D1⊕D2⊕D3⊕D7 = 0⊕0⊕1⊕0 = 1
P4 = D4⊕D5⊕D6⊕D7 = 0⊕1⊕1⊕0 = 0

要點5(錯誤校驗)

確定錯誤校驗G4G3G2G1,校驗碼有幾位,錯誤校驗就有幾位。
如果採用偶校驗則結果全爲0時沒有錯誤,如果採用奇校驗則結果全爲1時沒有錯誤
G1 = P1D0⊕D1⊕D3⊕D4⊕D6 = 1⊕1⊕0⊕1⊕0⊕1 = 0
G2 = P2D0、D2、D3、D5、D6 = 0⊕1⊕0⊕1⊕1⊕1 = 0
G3 = P3D1、D2、D3、D7 = 1⊕0⊕0⊕1⊕0 = 0
G4 = P4D4、D5、D6、D7 = 0⊕0⊕1⊕1⊕0 = 0

則G4G3G2G1 = 0000,表示沒有異常。假如結果爲0100則轉爲十進制爲8,表示第八位存在異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章