糾錯編碼-海明碼


一.海明碼

海明碼只能發現雙比特錯誤,糾正單比特錯誤

二.工作原理

“動一發而牽全身”,因為海明碼是一個多重校驗碼,也就是碼字中的信息碼位同時被多個校驗碼進行校驗

三.工作流程

1.確定校驗碼位數

海明不等式2^r>=k+r+1,r為冗余信息位,k為信息位
eg:要發送的數據為D=101101
則數據的位數k=6
滿足的不等式最小r為4
也就是D=101101的海明碼應該有6+4=10位,其中原始數據6位,校驗碼4位

2.確定校驗碼和數據的位置

還是上面的那個例子D=101101,假設這4位校驗碼分別為P1,P2,P3,P4,數據從左往右為D1,D2...D6
校驗碼必須是在2n次方位置,如第1、2、4、8、16、32,...位(對應2^0 2^1 2^2 2^3 2^4 2^5……,是從最左邊的位數起的),這樣一來就知道了信息碼的分布位置,也就是非2n次方位置,如第3、5、6、7、9、10、11、12、13,...位(是從最左邊的位數起的)

                     
數據位 1 2 3 4 5 6 7 8 9 10
代碼 P1 P2 D1 P3 D2 D3 D4 P4 D5 D6
實際值 1 0 1 1 0 1

3.求出校驗碼的值

                                                D=101101
                     
二進制 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
數據位 1 2 3 4 5 6 7 8 9 10
代碼 P1 P2 D1 P3 D2 D3 D4 P4 D5 D6
實際值 0 0 1 0 0 1 1 1 0 1

可以看出P1對應的二進制第一位為1(看二進制是幾位的話就看最后一個數據位是幾位二進制格式)可以發現D1,D2,D4,D5對應的二進制第一位也是1,則P1代碼校驗的數據為D1,D2,D4,D5
令所有要校驗的位異或=0(即同0異1)
1 0 1 0
P1⊕D1⊕D2⊕D4⊕D5⊕=0 可推出P1=0
1 0 0
同理P2對應的二進制第二位是1,則P2代碼校驗的數據為D1,D3,D4,D6
1 1 1 1
P2⊕D1⊕D3⊕D4⊕D6⊕=0 可推出P2=0
0 1 0
同理P3對應的二進制第三位是1,則P3代碼校驗的數據為D2,D3,D4
0 1 1
P3⊕D2⊕D3⊕D4=0 可推出P3=0
1 0
同理P4校驗的數據為D5,D6
0 1
P3⊕D5⊕D6=0 可推出P4=0
1
具體的計算方法我參閱了http://www.cnblogs.com/scrutable/p/6052127.html,即

p1(第1個校驗位,也是整個碼字的第1位)的校驗規則是:從當前位數起,校驗1位,然后跳過1位,再校驗1位,再跳過1位,....。這樣就可得出p1校驗碼位可以校驗的碼字位包括:第1位(也就是p1本身)、第3位、第5位、第7位、第9位、第11位、第13位、第15位,...。然后根據所采用的是奇校驗,還是偶校驗,最終可以確定該校驗位的值。

p2(第2個校驗位,也是整個碼字的第2位)的校驗規則是:從當前位數起,連續校驗2位,然后跳過2位,再連續校驗2位,再跳過2位,……。這樣就可得出p2校驗碼位可以校驗的碼字位包括:第2位(也就是p2本身)、第3位,第6位、第7位,第10位、第11位,第14位、第15位,...。同樣根據所采用的是奇校驗,還是偶校驗,最終可以確定該校驗位的值。

p3(第3個校驗位,也是整個碼字的第4位)的校驗規則是:從當前位數起,連續校驗4位,然后跳過4位,再連續校驗4位,再跳過4位,……。這樣就可得出p4校驗碼位可以校驗的碼字位包括:第4位(也就是p4本身)、第5位、第6位、第7位,第12位、第13位、第14位、第15位,第20位、第21位、第22位、第23位,...。同樣根據所采用的是奇校驗,還是偶校驗,最終可以確定該校驗位的值。

p4(第4個校驗位,也是整個碼字的第8位)的校驗規則是:從當前位數起,連續校驗8位,然后跳過8位,再連續校驗8位,再跳過8位,……。這樣就可得出p4校驗碼位可以校驗的碼字位包括:第8位(也就是p4本身)、第9位、第10位、第11位、第12位、第13位、第14位、第15位,第24位、第25位、第26位、第27位、第28位、第29位、第30位、第31位,...。同樣根據所采用的是奇校驗,還是偶校驗,最終可以確定該校驗位的值。

綜上所述101101的海明碼為0010011101

4.檢驗並糾錯

                                               D=101101
                     
二進制 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
數據位 1 2 3 4 5 6 7 8 9 10
代碼 P1 P2 D1 P3 D2 D3 D4 P4 D5 D6
實際值 0 0 1 0 0 1 1 1 0 1

故101101的海明碼為0010011101
假設第五位出錯,因此接收到的數據位為00101111101
對所有要校驗的位異或運算
0 1 1 1 0
P1⊕D1⊕D2⊕D4⊕D5⊕=1
1 0 1 1

0 1 1 1 1
P2⊕D1⊕D3⊕D4⊕D6=0
1 0 1 0

0 1 1 1
P3⊕D2⊕D3⊕D4=1
1 0 1

1 0 1
P3⊕D5⊕D6=0=0
1 0
從P4往P1寫可得到0101,即二進制序列為0101,恰好對應的二進制5,這樣就找到了出錯的位置,即出錯位是第五位


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM