差錯控制編碼的原理是:發(fā)送方對準備傳輸的數據進行抗干擾編碼,即按某種算法附加上一定的冗余位,構成一個碼字后再發(fā)送。接收方收到數據后進行校驗,即檢查信息位和附加的冗余位之間的關系,以檢查傳輸過程中是否有差錯發(fā)生。差錯控制編碼分檢錯碼和糾錯碼兩種,檢錯碼是能自動發(fā)現差錯的編碼,糾錯碼是不僅能發(fā)現差錯而且能自動糾正差錯的編碼。計算機網絡中常用的差錯控制編碼是奇偶校驗碼、循環(huán)冗余碼和海明校驗碼。
1. 奇偶校驗碼
奇偶校驗碼是一種最簡單的檢錯碼。其原理是:通過增加冗余位來使得碼字中1的個數保持為奇數(奇校驗)或偶數(偶校驗)。例如,偶校驗:11010100,11011011
在實際使用時,奇偶校驗可分為以下三種方式。
(1) 垂直奇偶校驗
(2) 水平奇偶校驗
(3) 水平垂直奇偶校驗
2. 循環(huán)冗余碼
循環(huán)冗余碼又稱crc碼(cyclic redundancy code),簡稱循環(huán)碼。crc碼檢錯能力強,且容易實現,是目前最廣泛的檢錯碼編碼方法之一。在計算機網絡和磁盤數據存儲中,crc被廣泛采用。
crc是一種檢錯碼,其編碼過程涉及二進制多項式和模2運算知識。如比特串b7b6b5b4b3b2b1b0的二進制多項式形式是b7*x7+ b6*x6+b5*x57+b4*x4+ b3*x3+ b2*x2+ b1*x1+ b0*x0+,若比特串取值為10101110,則該比特串可被表示成二進制多項式x7+x5+ x3+x2+ 1。
二進制多項式的加減法運算以2為模,即加減時不進、錯位,如同邏輯異或運算,乘除法可看成是多次加減法運算。
采用crc校驗時,發(fā)送方和接收方事先約定一個生成多項式g(x),并且g(x)的最高項和最低項的系數必須為1。
crc編碼由兩部分組成,如圖2-35所示。10101110111信息串編碼校驗塊
發(fā)送端的crc校驗塊編碼步驟
(1) 將要發(fā)送的二進制數據(k位比特序列),對應一個(k-1)階多項式k(x);再選取一個收發(fā)雙方預先約定的r階生成碼多項式g(x),即g(x)的最高次冪為r。
(2) 在原數據比特串尾添加r個0,即,xrk(x)。
(3) 進行模2除法xrk(x)/g(x),得到商q(x),并求得余數r(x)。r(x)即為校驗塊。
(4) 用r(x)替代xrk(x)最后的r個0(即xrk(x) - r(x)),得到待傳送的crc碼多項式(數據位加校驗位)t(x)。
3、海明校驗碼
首先介紹碼距的概念。一個編碼系統(tǒng)中任意兩個合法編碼之間不同的二進制位數叫這兩個碼字的碼距,而整個編碼系統(tǒng)中任意兩個碼字的最小碼距就是該編碼系統(tǒng)的碼距。為了使一個系統(tǒng)能糾正一位差錯,碼距最小是3。最小距離為3時,或能糾正一位錯,或能檢測二位錯,但不能同時糾正一位錯并檢測二位錯。編碼信息糾錯和檢錯能力的提高需要進一步增大編碼系統(tǒng)的碼距。碼距越大,糾錯能力越強,但數據冗余也越大,即編碼效率低了。
海明校驗碼是由richard hamming于1950年提出,目前還被廣泛采用的一種很有效的校驗方法,是只要增加少數幾個校驗位,就能檢測出二位同時出錯、亦能檢測出一位出錯并能自動恢復該出錯位的正確值的有效手段,后者被稱為自動糾錯。它的實現原理,是在k個數據位之外加上r個校驗位,從而形成一個k+r位的新的碼字,使新的碼字的碼距比較均勻地拉大。把數據的每一個二進制位分配在幾個不同的偶校驗位的組合中,當某一位出錯后,就會引起相關的幾個校驗位的值發(fā)生變化,這不但可以發(fā)現出錯,還能指出是哪一位出錯,為進一步自動糾錯提供了依據。
海明不等式
設n為校驗碼的位數,k是有效信息位,r是校驗位(分成r組作奇偶校驗,能產生r位檢錯信息)
海明碼應滿足 n=k+r≤2r-1(海明不等式),若r=3 則n=k+r≤7 所以k≤4