常用校驗碼(奇偶校驗,海明校驗,CRC)學習總結

2022-08-14 05:09:10 字數 4021 閱讀 5638

因為在資料訪問和傳送的過程中,由於元器件或者噪音的干擾等原因會出現錯誤,這個時候我們就需要採取相應的措施,發現並糾正錯誤,對於錯誤的檢測和校正,大多採取「冗餘校驗」的思想,即除原資料外,額外增加若干位編碼,這些新增的**稱為校驗位。

若干位**組成的乙個字稱為碼字,而兩個碼字具有不同**的位數為這兩個碼字的距離,而碼制裡各種碼字間最小的距離稱為碼距。

比如8421碼,1001和0000,有兩位不同,所以距離是2,而0010和0011的距離為1,是最小的距離,故8421碼碼距為1

那麼,碼距有什麼用呢?答案是碼距和這種型別的碼的檢錯,糾錯能力有關。

如8421碼,由於碼距是1,無檢錯,糾錯能力,比如資料0000,如果其中一位變化,變成0001,那麼,這個資料仍然是合法的。

再如奇偶校驗碼中奇校驗碼,如100000000和010000000,碼距為2,我們可以發現,如果資料中有一位變化了,如100000000變為110000000,我們可以很容易地判斷出資料出錯了,因為110000000不符合奇校驗的編碼(校驗位和資料位一起所含1的個數為奇數)

我們可以發現,校驗碼可以幫助擴大碼距,從而找出錯誤。

碼距與檢錯、糾錯能力的關係(當d≤4)

1.編碼方式

例如(加粗為校驗位):

資料奇校驗的編碼

偶校驗的編碼

00000000

100000000

000000000

01010100

001010100

101010100

01111111

001111111

101111111

由於資料傳輸過程一般是出現一位錯誤,而奇偶校驗碼能發現奇數個錯誤,所以奇偶校驗的實用價值還是很高的。

2.實現原理

那麼,奇偶校驗是怎麼來發現錯誤的呢?根據二.資料是如何校驗的我們可以知道,在資料傳輸之前,我們會求一次校驗位,傳輸後,會求一次校驗位,那麼,在奇偶校驗中,我們通過比較這兩個校驗位是否相同,一般是採用異或的方式,若結果為1,則說明有奇數個錯誤,結果為0,則說明正確或者偶數個錯誤。

1.引入

2.海明校驗碼 最簡單求法

我們以8位資料位,4(5)位校驗位為例

我們將海明校驗碼表示為(h13) h12 h11 h10 h9h8h7 h6 h5h4h3h2h1

其中加粗的部分為校驗位,校驗位所在位置為2^(i-1),i=1,2,3...

我們還可以把它寫成(p5) d8 d7 d6 d5p4d4 d3 d2p3d1p2p1

其中p代表的是校驗位,d代表資料位

我們來看看這個表是怎麼畫出來的

校驗位的值為同行資料位相異或得到,至於p5,則是由所有資料位和校驗位一起異或得到。

3.海明校驗碼判斷修復錯誤

下面引入乙個錯誤字s的概念

其實錯誤字s也就是傳輸前後分別求的校驗位的異或值,奇偶校驗碼只要看乙個錯誤字,而海明校驗碼則要考慮多個錯誤字。

s4 ~ s1為全0,說明沒錯. s4 ~ s1不為全0,說明有錯. s5=1說明1位出錯,而s5=0說明2位錯,不再有效,且不能查出是哪2位出錯。

s4~s1的編碼值對應的則是出錯的海明碼位號(不太清楚圖表可以返回上面的**對照):

如1100,對應d8出錯

如1011,對應d7出錯

如1010,對應d6出錯

如1001,對應d5出錯......

4.校驗碼位數的確定

前面看完後,一定有人會有疑問,為什麼八位資料位我要四位或者五位校驗位,三位不行麼?六位不行麼?那麼,請繼續看看下面

假定資料位數為n,校驗碼為k位,則故障字位數也為k位。k位故障字所能表示的狀態最多是2k,每種狀態可用來說明一種出錯情況。

若只有一位錯,則結果可能是:

資料中某一位錯 (n種可能)

校驗碼中有一位錯 (k種可能)

無錯 ( 1 種可能)

假定最多有一位錯,則n和k必須滿足下列關係:

2^k≥1+n+k, 即:2^k-1≥n+k

所以當資料有8位時,校驗碼和故障字都應有至少4位。

5.分組方式的選擇

看了前面,可能有人會對校驗位的位置選擇有疑問,為什麼要符合公式2^(i-1) i=1,2...?上述的**為什麼要那樣寫?

首先,我們知道,資料位是和校驗位一起被儲存的,通過將他們按照某種方式排列成乙個n+k的碼字,將該碼字上的每一位出錯位置和故障字的數值建立聯絡,那麼我們就能通過故障字的值來判斷哪一位發生了錯誤

以乙個八位的資料為例,該資料有四個校驗位,在第二條規則中,我們可以知道,故障字的值為0001,0010,0100,1000這四種情況,對應四個校驗位p1,p2,p3,p4發生錯誤,故我們將這四個校驗位分別位於碼字的第0001(1),0010(2),0100(4),1000(8)位,按照最後乙個規則,將其他多位為1的情況作為八位資料m1-m8發生錯誤。故資料位m1-m8分別位於碼字的第0011(3),0101(5),0110(6),0111(7),1001(9),1010(10),1011(11),1100(12)位,排列為m8m7m6m5p4m4m3m2p3m1p2p1

1.為什麼大批量資料不用奇偶校驗?

在每個字元後增加一位校驗位會增加大量的額外開銷;尤其在網路通訊中,對傳輸的二進位制位元流沒有必要再分解成乙個個字元,因而無法採用奇偶校驗碼。

2.模2運算

在介紹crc碼之前,有必要介紹下計算crc碼必要的模2運算:

模2運算不考慮加法進製和減法借位,上商的原則是當部分餘數首位是1時商取1,反之商取0。然後按模2相減原則求得最高位後面幾位的餘數。這樣當被除數逐步除完時,最後的餘數字數比除數少一位。這樣得到的餘數就是校驗位。

3.基本思想
4.crc碼求法

5.crc碼檢錯

將收到的crc碼用約定的生成多項式g(x)去除,如果碼字無誤則餘數應位0,如果有某一位出錯,則餘數不為0,不同位數出錯餘數不同.

常用校驗碼(奇偶校驗碼 海明校驗碼 CRC校驗碼)

一 奇偶校驗碼 二 海明校驗碼 三 crc校驗碼 計算機系統執行時,各個部之間要進行資料交換.交換的過程中,會有發生誤碼的可能 即0變成1或1變成0 由於計算機的儲存是通過二進位制 來實現的的,誤碼會導致儲存的內容發生改變。為確保資料在傳送過程正確無誤,常使用檢驗碼.我們常使用的檢驗碼有三種.分別是...

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

奇偶校驗 奇偶校驗包含奇校驗和偶校驗兩種校驗。奇校驗 odd parity 約定的編碼規律是,讓整個校驗碼 包含有效資訊和校驗位 中 1 的個數為奇數。偶校驗 even parity 約定的編碼規律是,讓整個校驗碼中 1 的個數為偶數。有效資訊 被校驗的資訊 部分可能是奇性 1 的個數為奇數 的,也...

校驗碼 奇偶校驗碼

1.奇偶校驗碼 通過在編碼中增加一位校驗位來使編碼中1的個數為奇數或者偶數,校驗位可以在原編碼的前面或者後面加。通過加入校驗位後的1個數是奇數還是偶數,可分為兩種 奇校驗 1的個數為奇數 偶校驗 1的個數為偶數 下圖為奇校驗和偶校驗的設定方法。例如 m的ascii碼77,二進位制表示為0100110...