海明碼 CRC冗餘校驗碼

2022-03-16 17:19:54 字數 3333 閱讀 4398

海明碼(也叫漢明碼)具有一位糾錯能力。本文以1010110這個二進位制數為例解釋海明碼的編碼和校驗方法

設資料有n位,校驗碼有x位。則校驗碼一共有2x種取值方式。其中需要一種取值方式表示資料正確,剩下2x-1種取值方式表示有一位資料出錯。因為編碼後的二進位制串有n+x位,因此x應該滿足

2x-1 ≥ n+x   

使不等式成立的x的最小值就是校驗碼的位數。在本例中,n=7,解得x=4。

校驗碼在二進位制串中的位置為2的整數冪。剩下的位置為資料。如圖所示。位置1

2345

6789

1011

內容x1x21

x3010

x4110

將每個位置,都拆成校驗位位置值相加,可知道乙個校驗位跟哪些資料位有關係 

以求x2的值為例。為了直觀,將**中的位置用二進位制表示。

位置0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

內容x1

x2

1x30

1

0x41

1

0

為了求出x2,要使所有位置的第二位是1的資料(即形如**1*的位置的資料)的異或值為0。即x2^1^1^0^1^0 = 0。因此x2 = 1。

同理可得x1 = 0, x3 = 1, x4 = 0。

位置0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011內容0

1110

1001

10因此1010110的海明碼為01110100110。

校驗假設位置為1011的資料由0變成了1,校驗過程為:

將所有位置形如***1, **1*, *1**, 1***的資料分別異或。

***1: 0^1^0^0^1^1 = 1

**1*: 1^1^1^0^1^1 = 1

*1**: 1^0^1^0 = 0 

1***: 0^1^1^1 = 1

以上四組中,如果一組異或值為1,說明該組中有資料出錯了。***1 **1* 1***的異或都為1,說明出錯資料的位置為1011。

crc的實現原理十分易於硬體實現,因此被廣泛的應用於計算機網路上的差錯控制。crc校驗碼需根據crc生成多項式進行。

關於軟考中涉及到的海明碼和crc校驗碼,主要是兩種的驗證方式。海明碼的校驗過程比較複雜,在計算機中不經常用,而crc校驗碼比較容易,先確定校驗碼的位數,以及除數是什麼?所以個人感覺想要掌握這兩種情況,就需要分析的方式。

例項:原始報文為11001010101,其多項式為x4+x3+x+1。在原始報文的後面若干個0(等於校驗碼的位數,而生成多項式的最高冪次就是校驗位數,即使用該生成多項式產生的校驗碼為4位)作為被除數,除以生成多項式所對應的二進位制數。

x4+x3+x+1對應的二進位制為11011,則除數作為11011

運算時可借位,但被借的位數值不變,如01減10=11

然後把0011新增到原始報文的後面就是結果110010101010011。 

海明碼的編碼和校驗方法

【軟考】——海明碼和crc碼

設資料有n位,校驗碼有x位。則校驗碼一共有2x種取值方式。其中需要一種取值方式表示資料正確,剩下2x-1種取值方式表示有一位資料出錯。因為編碼後的二進位制串有n+x位,因此x應該滿足

2x-1 ≥ n+x   

使不等式成立的x的最小值就是校驗碼的位數。在本例中,n=7,解得x=4。

校驗碼在二進位制串中的位置為2的整數冪。剩下的位置為資料。如圖所示。位置1

2345

6789

1011

內容x1x21

x3010

x4110

將每個位置,都拆成校驗位位置值相加,可知道乙個校驗位跟哪些資料位有關係 

以求x2的值為例。為了直觀,將**中的位置用二進位制表示。

位置0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

內容x1

x2

1x30

1

0x41

1

0

為了求出x2,要使所有位置的第二位是1的資料(即形如**1*的位置的資料)的異或值為0。即x2^1^1^0^1^0 = 0。因此x2 = 1。

同理可得x1 = 0, x3 = 1, x4 = 0。

位置0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011內容0

1110

1001

10因此1010110的海明碼為01110100110。

校驗假設位置為1011的資料由0變成了1,校驗過程為:

將所有位置形如***1, **1*, *1**, 1***的資料分別異或。

***1: 0^1^0^0^1^1 = 1

**1*: 1^1^1^0^1^1 = 1

*1**: 1^0^1^0 = 0 

1***: 0^1^1^1 = 1

以上四組中,如果一組異或值為1,說明該組中有資料出錯了。***1 **1* 1***的異或都為1,說明出錯資料的位置為1011。

CRC冗餘校驗碼

1 基本概念 crc cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行相似的演算法以保證資料傳輸的正確性與完整性。2 基本原理 這裡先介紹 模2除法 的知識,與 算數除法 類似,只不過 模2除法 ...

校驗碼 漢明碼 CRC碼

資料校驗碼 任意兩個碼字之間最少變化的二進位制位數,被稱為資料校驗碼的碼距 例如用四位二進位制數表示16種狀態,此時碼距為1,即兩個碼字之間最少僅有乙個二進位制不同,這種編碼沒有檢錯能力。檢糾錯能力實現原理 在編碼中,除去合法的碼字外,再加入一些非法的碼字,當某個合法的碼字出現錯誤時,就變成為非法碼...

CRC校驗(迴圈冗餘校驗碼)

一 概念 crc即迴圈冗餘校驗碼 是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。二 工作原理 迴圈冗餘校...