1. 程式人生 > >校驗碼:奇偶校驗,海明碼,CRC

校驗碼:奇偶校驗,海明碼,CRC

大多數情況下,使用檢錯碼,查錯後請求重發;

只有在單工通道(沒有反向反饋),才使用糾錯功能

1. 奇偶校驗

1.1 原理

有效資料:data_code

msg = data_code + check_code   

check_code一般是1位,使msg中“1”的個數為偶數(或奇數)

1.2 分類

水平校驗:只檢不糾

垂直校驗:只檢不糾

水平垂直校驗:只能糾正1位錯,(互補的錯不行)

2. 海明碼

2.1 海明距離(HD)

海明距離(HD):兩個碼字的對應位元取值不同的位元數

檢d個位查錯:HD >= d + 1   (至少有一碼代表無效)

糾d個位查錯:HD >= 2d + 1   

2.2 原理

傳送端在 k 位元資訊上附加 r 位元冗餘資訊(即校驗位元),構成 n=k+r 位元的碼字,且滿足條件:2^r≥n+1,即 2^r≥k+r+1。其中,每個校驗位元和某幾個特定的資訊位元構成偶校驗的關係。

eg:

P1 P2 D3P4D5D6D7P8D9D10D11
             其中,P1、P2、P4、P8 為插入的校驗位元,D3D5D6D7D9D10D11 為原來ASCII碼的資訊位元。

如果把各資訊位元的下標寫成 2 的冪次之和,即下標3=1+2,5=1+4,6=2+4,7=1+2+4,9=1+8,10=2+8,11=1+2+8,這表示:資訊位元 D3 要參與校驗位元 P1、P2 的生成、資訊位元 D5 要參與校驗位元 P1、P4 的生成,……,等等。
            則各校驗位元由下式決定:
                P1 = D3+D5+D7+D9+D11       
                P2 = D3+D6+D7+D10+D11
                P4 = D5+D6+D7
                P8 = D9+D10+D11    

          S1 = P1+D3+D5+D7+D9+D11     
          S2 = P2+D3+D6+D7+D10+D11
          S4 = P4+D5+D6+D7
          S8 = P8+D9+D10+D11

if  S1= S2 = S4 = S8 = 0, 則無錯;
else  有錯.
 錯誤位置在 S= S8 S4 S2 S1 處,


 ‘A’的 ASCII 碼為1000001, 由於海明碼為
               P1P2D3P4D5D6D7P8D9D10D11的形式,
          即此處 D3=D11=1, D5=D6=D7=D9 =D10=0,
          則由 P1 = D3+D5+D7+D9+D11,P2 = D3+D6+D7+D10+D11,
                   P4 = D5+D6+D7,P8 = D9+D10+D11    
          得:P1=0,P2=0,P4=0,P8=1
              ∴傳送端形成的海明碼為 00100001001
          若接收方接收錯誤,收到:00100001011 (D10錯誤)
          則檢/糾錯過程如下:計算校正因子S1、S2、S4、S8,
          得: S1=0,S2=1,S4=0,S8=1
              ∵ S2= S8= 1          ∴ 檢測有錯,
          錯誤位置在 S=1010 處即D10,將D10取反即可.


3. CRC(迴圈冗餘校驗碼)

3.1 原理

將位串看成係數為 0 或 1 的多項式。
         如位串1 0 1 0 0 1 1 1 即對應於多項式: x^7 + x^5 + x^2 + x + 1
收發雙方約定一個多項式G(x),傳送方用位串及 G(x)進行某種運算得到校驗和,並在幀的末尾加上校驗和,使帶校驗和的幀的多項式能被 G(x) 整除; 接收方收到後,用 G(x) 除多項式,若有餘數,則傳輸有錯。

3.2 校驗和計算

G(x)的最高階和最低階係數必須為1

設G(x)為n階,待發送資料M = k (bits)

則校驗和(冗餘碼)長度為r(bits)

M = 1010001101 , n = 5, G(x) = P = 110101

將餘數 R 作為冗餘碼新增在資料 M 的後面傳送出去,即傳送的資料是101000110101110,或 2^n * M + R

常用的G(x)

N K 碼距d G(x)多項式 G(x)
7 4 3

x3+x+1

1011
7 4 3

x3+x2+1

1101
7 3 4

x4+x3+x2+1

11101
7 3 4

x4+x2+x+1

10111
15 11 3

x4+x+1

10011
15 7 5

x8+x7+x6+x4+1

111010001
31 26 3

x5+x2+1

100101
31 21 5

x10+x9+x8+x6+x5+x3+1

11101101001

63 57 3

x6+x+1

1000011

63 51 5

x12+x10+x5+x4+x2+1

1010000110101

1041 1024

x16+x15+x2+1

11000000000000101