在校正碼體系中,有各種校正的方法:有同位、海明碼校正、迴圈冗餘校正。今天就跟大家共同探討一下常用的迴圈冗餘校正吧。
迴圈冗餘校正(CRC,Cyclic Redundancy Check),是最常用的一種差錯校正碼,其特徵是資訊欄位和校正欄位的長度可以任意選定。已經被廣泛應用於網路通訊即磁碟儲存。 多項式:一個位元可以用一個多項式來表示,如1011 表示為 x3+x1+x0 。最高次冪n,可以轉為長度為n+1的位元。
CRC編碼組成:在K位資訊碼後再拼接R位的校正碼,整個編碼長度為N位,因此,這種編碼又叫(N,K)碼。 產生多項式:編碼方程除以資訊碼的多項式,得到餘數多項式即為校正碼,解碼方程將接收到的資訊除以產生多項式,若餘數=0,則說明正確,反則,則傳輸出錯,餘數的大小即為錯誤位置。 校正碼的具體產生過程為: ①假設發送資訊用資訊多項式C(X)表示,將C(x)左移R位,則可表示成C(x)*2的R次方,這樣C(x)的右邊就會空出R位,這就是校正碼的位置。 ②移位後的資訊 除以 產生多項式G(x)得到的餘數多項式,可轉為R位二進位。 ③將餘數嵌入到原資訊的後面。例如:資訊位為10100110 , 產生多項式為a(x)= x5+x4+x+1 則C(x)=a(x)* x5 = (x7+x5+x2+x)* x5 = x12+ x10 +x7+x6
餘數為x4+x3 ,轉為二進位為11000,所以CRC碼為10100110110000 。以上方法是用多項式來解的,現在我們換用二進位方式來試試。 資訊位為10100110 , 產生多項式為a(x)= x5+x4+x+1。 則a(x)轉換為二進位為110011,資訊位左移 R位(即最高次冪+1=6位),即在資訊為後補5個0 ,得10100110000000,再除以a(x)轉換的110011,取R位餘數,即6位。然後將餘數嵌入到原資訊的後面 。看圖:
餘數為110000,6位,正好,補充到資訊位的後面為:10100110110000,跟上面的方法結果一致。