計算機校驗碼分類及原理

2021-07-24 09:59:36 字數 3076 閱讀 2701

由於元件故障和雜訊干擾等因素常常導致計算機在處理資訊的過程中出現錯誤。為了防止資訊在傳輸過程的錯誤,將訊號採用專門的邏輯電路進行編碼以檢測錯誤,甚至校正錯誤。

通常的方法是在每個字上新增一些校驗位,用來確定字中出現錯誤的位置。

在計算機中有三種常見的檢驗碼,分別是:

奇偶校驗碼,海明校驗碼,迴圈冗餘碼

<1>奇偶校驗碼

這是最簡單的校驗方式,在資訊編碼的時候,將字的最高位作為校驗位。需要說明的事奇偶校驗也有兩種校驗方式:奇校驗和偶校驗。

奇校驗:在最高位新增0或1,使字編碼中的「1」的個數為奇數。

偶校驗:在最高位新增0或1,使字編碼中的「1」的個數為偶數。

校驗特點:一次能校驗更多的資料,效率較高,系統實現也比較簡單,檢測可靠性有所提高,但仍然不能檢測出所有的錯誤。

<2> 海明校驗碼

海明校驗是一種多重校驗, 將有效資訊按某種規律分成若干組,每組安排乙個校驗位,做奇偶測試,就能提供多位檢錯資訊,以指出最大可能是哪位出錯。假設k個資料位設定r個校驗位,則應滿足:

^r>=k+r+1

校驗位分布2^0,2^1,2^2...2^n位上,如下所示(以4位資料位為例):

校驗的位置為:

由此可以看出,校驗位置的資料分別校驗:

接下來採用異或運算得出具體的r的值:

r1=1,r2=0,r3=0;

再將值分別填入資訊位即可。

<3>迴圈冗餘碼

奇偶校驗碼作為一種檢錯碼雖然簡單,但是漏檢率太高。在計算機網路和資料通訊中用e得最廣泛的檢錯碼,是一種漏檢率低得多也便於實現的迴圈冗餘碼crc (cyclic redundancy .code),crc碼又稱為多項式碼。

任何乙個由二進位制數字串組成的**,都可以惟一地與乙個只含有0和1兩個係數的多項式建立一一對應的關係。例如,**1010111對應的多項式為x6+x4+x2+x+1,同樣.多項式x5+x3+x2+x+1對應的**為101111。

crc碼在傳送端編碼和接收端校驗時,都可以利用事先約定的生成多項式g(x)來得到。 k位要傳送的資訊位可對應於乙個(k-1)次多項式k(x),r位冗餘位則對應於乙個(r-1)次多項式r(x),由k位資訊位後面加上r位冗餘位組成的 n=k+r位碼字則對應於乙個(n-1)次多項式t(x)=xr·k(x)+r(x)。例如

資訊位:1011001→k(x)=x6+x4+x3+1

冗餘位:1010→r(x)=x3+x

碼字:10110011010→t(x)=x4·k(x)+r(x)

=x10+x8+x7+x4+x3+x

由資訊位產生冗餘位的編碼過程,就是已知k(x)求r(x)的過程。在crc碼中可以通過找到乙個特定的r次多項式g (x)(其最高項xr的係數恒為1),然後用xr·k (x)去除以g(x),得到的余式就是r(x)。特別要強調的是,這些多項式中的"+"都是模2加(也即異或運算);此外,這裡的除法用的也是模2除法, 即除法過程中用到的減法是模2減法,它和模2加法的運算規則一樣,都是異或運算,這是一種不考慮加法進製和減法借位的運算,即

0+o=0,0+1=1,1+0=1,1+1=0

0-0=0,0-1=1,1-0=1,1-1=0

在進行基於模2運算的多項式除法時,只要部分餘數首位為1,便可上商1,否則上商0。然後按模2減法求得餘數,該餘數不計最高位。當被除數逐位除完時,最後得到比除數少一位的餘數。此餘數即為冗餘位,將其新增在資訊位後便構成crc碼字。

仍以上例中k(x)=x6+x4+x3+1為例(即資訊位為1011001),若g(x)=x4+x3+1

(對應**11001),取r=4,則x4·k(x)=x10+x8+x7+x4(對應**為0110010000),其由模2除法求余式r(x)的過程所示如下:

得到的最後餘數為1010,這就是冗餘位,對應r(x)=x3+x。

由於r(x)是xr·k(x)除以g(x)的余式,那麼下列關係式必然滿足

xr·k(x)=g(x)q(x)+r(x)

其中q(x)為商式。根據模二運算規則r(x)+r(x)=0的特點,可將上式改記為

[xr-k(x)+r(x)]/g(x)=q(x)

即    t(x)/g(x)=q(x)

由此可見,通道上傳送的碼字多項式t(x)=xr-k(x)+r(x)。若傳輸過程無錯,則接收方收到的碼字也對應於此多項式,也即接收到的碼字多項式能被g(x)整除。因而接收端的校驗過程就是將接收到的碼字多項式除以g(x)的過程。若余式為零則認為傳輸元差錯;若余式不為零則傳輸有差錯。

例如,前述例子中若碼字10110011010經傳輸後由於受雜訊的干擾,在接收端變成為10110011100,則求余式的除法如下:

求得的余式不為零,相當於在碼字上面半加上了差錯模式00000000110。差錯模式對應的多項式記為e(x),上例中e(x)=x2+x。有差錯時,接收端收到的不再是t(x),而是t(x)與e(x)之模二加,即

[t(x)+e(x)]/g(x)=t(x)/g(x)+e(x)/g(x)

若e(x)/g(x)=0,則這種差錯就能檢測出來;若e(x)/g(x)=0,那麼由於接收到的碼字多項式仍然可被g(x)整除,錯誤就檢測不出來,也即發生了漏檢。

理論上可以證明迴圈冗餘校驗碼的檢錯能力有以下特點:

(1)可檢測出所有奇數字錯。

(2)可檢測出所有雙位元的錯。

(3)可檢測出所有小於、等於校驗位長度的突發錯。

crc碼是由r-k(x)除以某個選定的多項式後產生的,所以該多現式稱生成多項式。一般來說,生成多項式位數越多校驗能力越強。但並不是任何乙個r+1位的二進位制數都可以做生成多項式。目前廣泛使用的生成多項式主要有以下四種:

(1)crc12=x12+x11+x3+x2+1

(2)crc16=x16+x15+x2+1(ibm公司)

(3)crc16=x16+x12+x5+1(ccitt)

(4)crc32=x32+x26+x23+x22+x16+x11+x10+x8+x7+x5+x4+x2+x+1

計算機組成 校驗碼

crc校驗及其應用 海明校驗及其實現 同一編碼中,任意兩個合法編碼之間不同二進位制位數的最小值 例 0011與0001的碼距為1,一位錯誤無法識別 校驗碼中增加冗餘位的目的就是增加碼距 碼距與檢查或糾錯能力的關係 1 碼距 e 1 可檢測e個錯誤 2 碼距 2t 1 可糾正t個錯誤 3 碼距 e t...

計算機校驗碼的思考 挖掘之三

校驗碼是用來校驗計算機部件之間交換的資料正確性。但是為什麼說計算機中乙個傳輸錯誤在乙個校驗單元中最多有乙個,很少出現兩個以上的錯位呢?通常來說計算機部件之間資料傳輸的可靠性是很高的,假設是99 以上的正確率。為了表示的更清楚,我們就假設錯位率為1 這樣的話,在乙個位元組中,有7位是可以用來傳輸真實資...

計算機網路 鏈路層 CRC校驗碼

我們在大學 計算機網路 或者是 計算機組成原理 中學過crc校驗碼。做個總結。不想看原理直接翻到例子那裡,簡潔明瞭。迴圈冗餘校驗碼,是眾多校驗碼中的一種,是用來校驗傳送過來的資料是否被修改過的碼。他們的簡單工作原理,可以用乙個10進製的不嚴謹例子表示。首先接收方和傳送方要共同約定,傳送的數字都能被3...