海明碼距離及檢錯糾錯問題和CRC校驗


海明校驗碼

兩個長度相等的字符串的海明距離是在相同位置上不同的字符的個數,也就是將一個字符串替換成另一個字符串需要的替換的次數。海明距離與檢錯和糾錯的關系:

1.海明距離為d+1的編碼能檢測出d位差錯。

因為在距離為d+1的檢驗碼中,只改變d位的值,不可能產生另一個合法碼。如奇偶校驗碼,海明距離為2,能查出單個錯。

2.海明距離為2d+1的編碼,能糾正d位差錯。

因為此時,如果一個碼字有d位發生差錯,它仍然距離原來的碼字距離最近,可以直接恢復為該碼。

(奇偶校驗碼,海明距離為2,可以檢出單個錯)

糾正單比特錯的冗余位下界,m為數據位數,r為校驗位數  
         (m+R+1)≤2^r

1.每一個碼字從左到右編號,最左邊為第1位

2.校驗位和數據位

  • 凡編號為2的乘冪的位是校驗位,如1、2、4、8、16、……。
  • 其余是數據位,如3、5、6、7、9、……。
  • 3.每一個校驗位設置根據:包括自己在內的一些位的集合的奇偶值(奇數或偶數)。

    海明碼糾錯過程(只糾錯1位)

  • 首先將差錯計數器置“0”。
  • 當海明碼數據到達接收端后,接收端逐個檢查各個校驗位的奇偶性。
  • 如發現某一校驗位和它所檢測的集合的奇偶性不正確,就將該檢驗位的編號加到差錯計數器中。
  • 待所有校驗位核對完畢:
  • 若差錯計數器仍為“0”值,則說明該碼字接收無誤。
  • 非“0”值,差錯計數器的值為出錯位的編號,將該位求反就可得到正確結果。
  •    

    循環冗余檢錯碼CRC

    可以檢測到所有長度小於等於r的突發錯誤

    廣泛用於各種網絡,幾乎所有的局域網

    使用CRC編碼時發送方和接收方必須預先商定一個生成多項式G(x),假設有一個m為的幀M(x),使用G(x)生成的幀的步驟如下:

  • 假設G(x)的階為r, 那么M(x)在末尾添加r個0,得到 m+r位的位模式 。
  • 利用模2出發,用G(x)去除 ,得到對應的余數(總是小於等於r位)。
  • 利用 減去(模2減法)第2步中得到的余數,得到的位模式就是即將被傳輸的帶校驗和的幀
  •   

    小結:

    Sender

  • 在數據幀的低端加上r個零,對應多項式為XrM(x)
  • 采用模2除法,用G(x)去除XrM(x),得余數
  • 采用模2減法,用XrM(x)減去余數,得到帶CRC校驗和的幀
  •   

    Receiver

  • 用收到的幀去除以G(x)
  • 為零:無錯誤產生。非零:發生了錯誤,重傳

  • 免責聲明!

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



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