關於數據校驗糾錯算法


最近對於數據傳輸的噪音損耗問題的解決方案查了些資料

就此做一個總結:

  數據損壞

    因為網線被老鼠啃了或者硬盤摔地上了導致數據錯了

 

    關於數據損壞的問題其實不限於網絡傳輸方面,可以涉及到所有和數據相關的方面,比如文件解壓,網絡通訊,保密數據的校驗(數據簽名)等等

  錯誤校驗

    即檢驗某一段數據是否有誤。

    因為是不是有誤光憑數據本身不可能知道,所以必須加上附加的認證方法

    當然最簡單的認證方法就是再傳一次數據,拿着數據一個個對着原本的數據對照一下。。。不過這樣不說太麻煩,如果要實現這個方法,第二次傳輸這個數據的時候,難以保證這個數據是不是也出現了錯誤

    另一方面,顯然數據越短,這段數據出現錯誤的概率越小,因為比特出錯概率(BER)是不變的。所以如果可以把這個認證的數據(校驗碼)壓縮成一段很短的數據就可以減少校驗碼出錯的情況了

    比如奇偶校驗(Parity Check)  或者說,數1校驗

      奇偶校驗制定了一個協議,規定數據中1的個數只能是偶數

      如果原始數據1是奇數,則加一個1在最前面;反之則加一個0在前面。

      如  0110101   和   11010010   都是符合規定的。  很顯然這個第一位就是校驗碼。

      那么如果數據出了錯誤,某個0變成1或者1變成0,那么接收者數一遍1發現不是偶數個,那么就證明數據錯了

    當然奇偶校驗的缺陷十分明顯,如果同時錯了2個或者偶數個位,那么錯誤將無法被檢測出來。。。

    所以我們需要更強的校驗算法,使校驗碼盡可能簡單的同時,讓失誤率盡可能小。

 

 

    具體實現方法就是加上hash算法,一個數據對應一個hash值,再用hash值代表原有數據的特征,作為校驗碼,從而達到一一對應的目的。

      例如把一段數據乘以10086再對23333取模,將這個hash結果作為校驗碼加在數據后面,然后接收者再做一遍hash得到他的hash值。

 

      如果兩者相同,可以看做兩組數據特征符合,於是數據得到驗證。

    (本質上奇偶校驗也是一種hash)

    當然另一方面,既然是hash那么就不可避免地會出現錯誤,比如數據出錯了,然而接收者得到的hash值正好和校驗碼一樣,或者說數據和校驗碼都錯了然而也正好吻合。所以這要求hash函數足夠強大。

             不過要指出的是,如果不幸校驗碼出錯的話,只能重發一個數據包過來。。

    現今使用的MD5算法就是一種通過hash實現的校驗算法,目前廣泛運用於機密文件校驗以及銀行系統交易數據等等。

    類似的還有廣泛使用的CRC循環冗余校驗算法,被使用於TCP/IP協議中。

    另外LRC、BCC、SHA等等算法也可用於錯誤校驗,只是hash函數大同小異,本質上差不多(吧)。還有個Nand ECC算法,沒太看懂。。。

    

  錯誤糾偏

    即糾正某一段數據的錯誤。

    目前看到可以糾正錯誤的有以下幾種算法:

      后向糾錯:通過錯誤校驗(數據不吻合校驗碼)知道數據錯了以后,要求重新發一遍數據。包括數據錯了和校驗碼錯了兩種情況(這也能叫算法??)(硬就是能了)

      前向糾錯(FEC算法):發送端在發送數據之前,加了一些預處理之后的數據(冗余數據),以在出現錯誤之后可以反推回去糾正錯誤。

        零階冗余:沒有冗余,就是發原來的數據

        一階冗余:在N包數據后面加一個冗余數據,這個數據按照某個方程生成(具體方程懶得打了有需要可以自行百度),插在數據塊的最末尾。

              (注:一包數據里面帶一個校驗碼,也就是一個整體)

                如果有一個數據壞了,找到這個數據的編號以后,通過其他好的數據將方程反推回去,可以反推回去這個數據。

        二階冗余:在N包數據后面加兩個冗余數據………………

              可以承受一個數據塊中有兩個數據壞了的情況(類比一下解方程組,兩個未知數兩個方程)

        三階冗余:…………

      一般到了三階冗余就已經可以保證很強的魯棒性了

 

      漢明碼(hamming code):https://blog.csdn.net/Yonggie/article/details/83186280不多bb貼鏈接,這位大神已經講得很清楚了

        缺點是只能承受一個錯誤的情況

        優點……除此之外都是優點,目前見到的唯一做到錯誤校驗和錯誤糾偏的算法了

 

      

 

    


免責聲明!

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



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