詳解_數據校驗(奇偶校驗、CRC校驗、海明校驗)

一、基本概念

在信息傳輸中,由於多種原因,可能造成數據出現錯誤。信息接收方常常需要對接收到的信息進行數據校驗(檢錯和糾錯)。常用的數據校驗方法有奇偶校驗、CRC校驗、海明校驗等。

1.碼距的概念:
  • 兩個二進制數的碼距:兩個二進制數進行位的異或運算後,得到的二進制數裏,位值爲1的個數,也就是兩個二進制數對應位位值不相同的個數。
  • 編碼的最小碼距:同一編碼中,任意兩個合法編碼之間不同二進數位數(即碼距)的最小值。
  • 碼距越大,抗干擾能力越強,糾錯能力越強,數據冗餘越大,編碼效率越低。編碼時,選擇碼距必須考慮信息發生差錯的概率和系統能容許的最小差錯率。
2.校驗編碼

校驗編碼:在原始的二進制數(有效數據)中按照一定原則增加冗餘項(校驗數據)得到新的數據,並作爲實際傳輸中的數據。即,通過增加校驗位,進而增加碼距,以便校驗數據。

3.碼距和校驗的關係
  1. 在一個碼組內爲了檢測e個錯位的誤碼,要求最小碼距d應該滿足: d>=e+1;
  2. .在一個碼組內爲了糾正t個錯位的誤碼,要求最小碼距d應該滿足: d>=2t+1。

碼距與校驗能力的關係

二、奇偶校驗

1.基本原理

奇偶校驗(Parity Check)利用在信息後面附加一個奇偶校驗位來進行校驗。
事先通信雙方約定是採用奇校驗還是偶校驗,假設採用偶校驗,則發送方在信息後面附加一位使所有信息(包括校驗位)中一共有偶數個1,在接收方檢驗信息中1的個數,若爲奇數個則判定出錯。

優點:編碼簡單,實現方便;
缺點:碼距爲2,只能檢錯不能糾錯,當發生偶數個錯誤時,不能檢測出來。
奇偶校驗

2.雙向奇偶校驗

爲此,發展出了二維的雙向奇偶校驗。將要發送的d位數組成m行n列的二維矩陣,並使用m+n+1個校驗位編碼。碼距上升爲4,可糾正1位錯誤。
在這裏插入圖片描述

三.CRC校驗

循環冗餘編碼(Cyclic Redundancy Check,又稱多項式編碼)是數據通信領域中最常用的一種查錯校驗碼,其特徵是信息字段和校驗字段的長度可以任意選定。相比於奇偶校驗碼只能校驗一位錯誤,循環冗餘校驗碼(CRC)的檢錯能力更強,可以檢測出多處錯誤。

1.模2除運算規則

在這裏插入圖片描述
在這裏插入圖片描述

2.基本原理

在這裏插入圖片描述
在這裏插入圖片描述

3.編碼方法

在這裏插入圖片描述
在這裏插入圖片描述

4.檢錯方法

在這裏插入圖片描述

5.糾錯方法

基本方法:根據特定碼制、特定生成多項式確定一個出錯餘數表,即CRC碼不同位的出錯在驗證時都會得到不同的餘數,對照餘數表就可以確定是哪一位出錯了。
循環糾錯法
在這裏插入圖片描述
但這都只是一位出錯的糾錯,多位糾錯就不太清楚了。

四、海明校驗

1.基本原理

海明碼(Hamming Code)是一個可以有多個校驗位,具有檢測並糾正一位錯誤代碼的糾錯碼,所以也僅用於信道特性比較好的環境中,如以太局域網。它的檢錯、糾錯基本思想如下:
(1)將有效信息按某種規律分成若干組,每組安排一個校驗位通過異或運算進行校驗,得出具體的校驗碼。
(2)在接收端同樣通過異或運算看各組校驗結果是否正確,並觀察出錯的校驗組,或者多個出錯的校驗組的共同校驗位,得出具體的出錯比特位。
(3)對錯誤位取反來將其糾正。
在這裏插入圖片描述
在這裏插入圖片描述

2.確定校驗碼位置

海明碼的校驗碼的位置必須是在2n次方位置(n從0 開始,分別代表從左邊數起分別是第1、2、4、8、16……),信息碼也就是在非2n次方位置。

3. 確定校驗碼

校驗位置選擇原則:第i位校驗碼從當前校驗碼位開始,每次連續校驗i位後再跳過i位,然後再連續校驗i位,再跳過i位,以此類推。確定每個校驗碼所校驗的比特位:
P1校驗碼位校驗的碼字位爲:第1位(也就是P1本身)、第3位、第5位、第7位、第9位、第11位、第13位、第15位,……。
P2校驗碼位校驗的碼字位爲:第2位(也就是P2本身)、第3位,第6位、第7位,第10位、第11位,第14位、第15位,……。
最後每組通過異或邏輯運算(與偶校驗原理一樣),使每組的運算結果爲0,即可得出第i位校驗碼的值。
在這裏插入圖片描述

4. 編碼舉例

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

5.特點分析

在這裏插入圖片描述
在這裏插入圖片描述

總結

還在學習,有待補充。
有問題請留言。

參考資料

  • 計算機組成原理_華科https://www.icourse163.org/course/HUST-1003159001
  • 詳解差錯控制之碼距、檢錯與糾錯
    https://blog.csdn.net/suchto/article/details/7382366?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
  • 差錯檢測和糾錯技術
    https://blog.csdn.net/dillon2015/article/details/54290068
  • CRC差錯校驗原理及實例
    https://blog.csdn.net/qq_35409955/article/details/71698920
  • 史上最通俗的海明碼編碼計算、檢錯和糾錯原理解析
    https://blog.csdn.net/lycb_gz/article/details/35976723
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章