數據校驗碼概述
阿新 • • 發佈:2018-06-28
相加 gop 都是 作用 異或 並且 所有 排列 big
[TOC]
奇偶校驗碼
最簡單實用的一種校驗數據的方式。在原始數據的後面加一個校驗位來實現數據的校對。
若原始數據為:\(D=(D_1,D_2...D_n)?\)
偶校驗:$D_偶 = D_1 \bigoplus D_2 \bigoplus...D_n $
奇校驗:\(D_奇 = \overline{ D_1 \bigoplus D_2 \bigoplus...D_n }\)
驗算時:
\(F = \overline{D_1 \bigoplus D_2 \bigoplus...D_n \bigoplus D_奇}\)
\(F = D_1 \bigoplus D_2 \bigoplus...D_n \bigoplus D_偶\)
如果 \(F\) 的值為 0 ,則傳輸正確,否則錯誤
奇偶校驗碼只能檢查一位錯,並且無法糾錯
海明檢驗碼
若一共有 k 個數據位,則需要 r個檢驗位來完成一位糾錯,兩位檢錯。
$ 2^{r-1} \geq k + r$
新生成的數據為 k+r位,其中每個校驗位放在2的冪次方的位置上
其值為原始數據位在新的排列後,其位次的二進制中有對應位的數的異或和
最後一個校驗位的值是前面所有位的異或和,其作用是判斷是一位錯還是兩位錯
當接收方接收數據後。先看最後一位,若是1則代表一位錯。具體位置由各個位置的海明碼組成的二進制表示。
若是0,則若是其他位校驗碼都是0表示傳輸正確,否則就是兩位錯。
CRC循環校驗碼
前置技能:模2除法
傳輸前雙方約定好一個二進制串,設長度為r,要求最高位和最低位的值必須為1
先將原始數據右移r-1位,低位補0。
然後將這個數除之前的二進制串,得到的余數和之前處理好的數據相加。得到校驗碼。
PS.這個余數一定是要r-1位的,若不夠則高位補0
數據校驗碼概述