檢錯與糾錯 奇偶校驗碼與海明校驗碼

2021-10-01 12:24:46 字數 1855 閱讀 2575

海明校驗碼

元件故障、雜訊干擾等因素常常導致計算機在傳輸、儲存或處理的過程**現錯誤,故採用專門的邏輯電路對訊號進行編碼有便於檢測錯誤甚至校驗錯誤。本文介紹奇偶檢驗碼和海明碼。

這是一種最簡單且應用最廣泛的檢錯碼,用的是以為校驗位的奇偶校驗。分成水平奇校驗和水平偶校驗。

設資料x是乙個n位字,在其高位前增加1位奇校驗位,保證資料(包括奇校驗位在內)的n+1位中,1的個數為奇數,這也就是奇校驗稱呼的由來。

例:有x = 0100010,採用水平奇校驗時,由於x本身的1的個數是2個,所以在高位前新增1使得x的1的個數是奇數個,即x變成10100010.

與奇校驗類似,水平偶校驗在資料的高位前新增一位校驗位使得此資料各位上1的個數為偶數。當傳輸到對方的時候可以通過對傳過來的資料x進行檢測,如果沒有出現問題則可認為在傳輸或者儲存的過程中沒有發生1位錯誤。

例:有x = 0100010,採用水平奇校驗時,由於x本身的1的個數是2個,所以在高位前新增0使得x的1的個數是偶數個,即x變成00100010.當傳輸到對方的時候可以通過對傳過來的資料x進行檢測,如果沒有出現問題則可認為在傳輸或者儲存的過程中沒有發生1位錯誤。

對於出現一位錯誤的情況,奇偶校驗可以檢測出錯誤但卻不能檢測出錯誤的準確位置,同時,當資料出現兩位同時出現錯誤會導致檢錯碼失去作用,但由於實現起來非常簡單容易由此得到了廣泛的應用。對於上述提到的兩個問題,偉大的先人(是不是說老了,其實很多人還挺年輕的)在上面兩個校驗碼的基礎之上相繼發明了垂直奇偶校驗碼和水平垂直檢驗碼(在這我就不多說了)。

為了針對更複雜更龐大的資料能及時檢錯和糾錯,通常將原資料配成海明編碼。

指在一種編碼系統中任意兩組合法**之間的最少二進位制位數的差異。

根據糾錯理論:

l - 1 = d + c 且 d >= c

即編碼最小距離l越大,則其檢測錯誤的位數d越大,糾正錯誤的位數c也越大,且糾錯能力恆小於或等於檢錯能力。如當編碼最小距離l=3時,最多能檢錯兩位,或能檢錯一位、糾錯一位。海明碼就是根據這一理論提出的具有一位糾錯能力的編碼。

為了使檢測的二進位制**具有糾錯能力,需新增位檢測位,新增的檢測位的位數k有下面的公式得到:、

2^k > = n + k + 1

插入的位置分別是2的0次方,2的1次方,2的2次方以此類推,各位新增的檢測碼的值由在二進位制數字置數有含有檢測碼的所有位置上的數進行模二加得到。

例:x = 10101

通過上面的公式可以得到k=4,故要插入4位檢測碼,將每位檢測碼稱為pi,每位資料碼稱為di,則有:

p1 = d1 + d2 + d4 + d5 = 1

p2 = d1 + d3 + d4 = 1

p3 = d2 + d3 + d4 = 1

p4 = d5 = 1

故新增的檢測碼是1111,所以最後傳輸的資料是11101011。

當接收方接收到資料以後,首先提取出檢測碼1111,然後求出指錯字,設指錯字為gi,通過下列計算出指錯字gi:

g1 = p1 + d1 + d2 + d4 + d5 = 0

g2 = p2 + d1 + d3 + d4 = 0

d3 = p3 + d2 + d3 + d4 = 0

d4 = p4 + d5 = 0

上面求出的指錯字是無資料出錯的狀態下的,當有資料出錯時指錯字的大小就是出錯資料位的位置。

海明碼優點多多(當初學習的時候感覺發明這種檢錯碼的人簡直是天才!!!),但當檢測出錯誤並得到錯誤資料位位置後的實際糾錯的方式並沒有太過先進的地方(雖然已經很好了),同時也只能檢測並糾錯一位資料位錯誤。

這是我的人生中的第一篇部落格,打算記錄下自己在學習計算機組成原理中感覺比較有意思的知識,大家以後多多關照(≧▽≦)/啦!

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

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

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

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

校驗碼 奇偶校驗碼

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