1. 程式人生 > >海明校驗碼理解+糾錯原理

海明校驗碼理解+糾錯原理

一、如何求海明校驗碼(主要想看看如何求每一個校驗碼對應的校驗的資訊位):

    二、海明校驗碼如何糾錯:

你看得懂的海明碼校驗和糾錯原理:

   

    雖然上一步已把各位校驗碼求出來了,但是如何實現檢測出哪一位在傳輸過程中出了差錯呢?(海明碼也只能檢測並糾正一位錯誤)它又是如何實現對錯誤的位進行糾正呢?其實最關鍵的原因就是海明碼是一個多重校驗碼,也就是碼字中的資訊碼位同時被多個校驗碼進行校驗,然後通過這些碼位對不同校驗碼的聯動影響最終可以找出是哪一位出錯了。

1)海明碼的差錯檢測

    現假設整個碼字一共是18位,根據表5-1可以很快得出,其中有5位是校驗碼,再根據本節前面介紹的校驗碼校驗規則可以很快得出各校驗碼所校驗的碼字位,如表5-2所示。

    表5-2  各校驗碼校驗的碼位對照表


      從表中可以得出以下兩個規律:

  •      所有校驗碼所在的位是隻由對應的校驗碼進行校驗,如第1位(只由p1校驗)、第2位(只由p2校驗)、第4位(只由p3校驗)、第8位(只由p4校驗)、第16位(只由p5校驗),……。也就是這些位如果發生了差錯,影響的只是對應的校驗碼的校驗結果,不會影響其它校驗碼的校驗結果。這點很重要,如果最終發現只是一個校驗組中的校驗結果不符,則直接可以知道是對應校驗組中的校驗碼在傳輸過程中出現了差錯
  •    所有資訊碼位均被至少兩個校驗碼進行了校驗,也就是至少校驗了兩次。檢視對應的是哪兩組校驗結果不符,然後根據表5-2就可以很快確定是哪位資訊碼在傳輸過程中出了差錯。

      海明碼校驗的方式就是各校驗碼對它所校驗的位組進行“異或運算”,即:

G1=p1⊕b1⊕b2⊕b4⊕b5⊕……

G2=p2⊕b1⊕b3⊕b4⊕b6⊕b7⊕b10⊕b11⊕……

G3= p3⊕b2⊕b3⊕b4⊕b8⊕b9⊕b10⊕b11⊕……

G4= p4⊕b5⊕b6⊕b7⊕b8⊕b9⊕b10⊕b11⊕……

G5= p5⊕b12⊕b13⊕b14⊕b15⊕b16⊕b17⊕b18⊕b19⊕b20⊕b21⊕b11⊕b23⊕b24⊕b25⊕b26⊕……

    正常情況下(也就是整個碼字不發生差錯的情況下),在採用偶校驗時,各校驗組通過異或運算後的校驗結果均應該是為0,也就是前面所說的G1、G2、G3、G4,……均為0,因為此時1為偶數個,進行異或運算後就是0;而採用奇校驗時,各組校驗結果均應是為1

    現在舉一個例子來說明,假設傳輸的海明碼為111000111101(一共12位,帶陰影的4位就是校驗碼),從中可以知道它有四個校驗組:G1、G2、G3、G4,然而到達接收端經過校驗後發現只有G4=1(也就是隻有這組校驗結果不等於0),通過前面介紹的校驗規律可以很快地發現是G4校驗組中的p4校位碼(也就是整個碼字中的第8位)錯了(因為只有一組校驗結果出現差錯時,則肯定只是對應的校驗位出了差錯),也就是最終的碼字變成了:111000001101。

    再假設G3、G4兩個校驗值都不為0,也就是都等於1。通過表5-2中比較G3、G4兩個校驗組(注意本示例中碼字長度一共才12位,只需要比較前12位)中共同校驗的碼位可是以很快發現是b8,也就是第12位出現了差錯,也就是最終的碼字變成了:111000011100

    【經驗之談】在這裡一定要注意,最終有多少個校驗組出現差錯也不是隨意的,一定要結合實際傳輸的碼字長度來考慮。如上例是一共12位,如果換成了是16位的碼字,且當b9位出現差錯時,則G1、G3、G4一定會同時出現錯誤,因為b9這個位是三個校驗組同時校驗的,只要它一出錯,肯定會同時影響這三個校驗組的值。同理,如果是b11位出現了差錯,因為它同時受G1、G2、G3、G4四個校驗組校驗,所以這四個校驗組結果都將出現錯誤。

    2)海明碼的差錯糾正

    檢測出了是哪位差錯還不夠,因為海明碼具有糾正一位錯誤的能力,所以還需要完成糾錯過程。這個過程的原理比較簡單,就是直接對錯誤的位進行取反,或者加“1”操作,使它的值由原來的“1”變成“0”,由原來的“0”變成“1”(因為二進位制中每一位只能是這二者之一)。

    以上就是海明碼的整差錯檢測和差錯糾正原理了,確實比單純的奇偶校驗碼複雜些,但只要理清了思路,也還是比較簡單的。

相關推薦

理解+糾錯原理

一、如何求海明校驗碼(主要想看看如何求每一個校驗碼對應的校驗的資訊位):    二、海明校驗碼如何糾錯:你看得懂的海明碼校驗和糾錯原理:       雖然上一步已把各位校驗碼求出來了,但是如何實現檢測出哪一位在傳輸過程中出了差錯呢?(海明碼也只能檢測並糾正一位錯誤)它又是如何

【軟考】:(計算機組成原理)

具體的原理可以直接百度不多說,直接寫怎麼解決 一、前提: 資料位中僅有一位出錯,這是海明碼產生的依據 二、異或運算 相同為0,不同為1,異或的符號為“xor”或者“⊕”,例如:1 xor 1 = 0,1 xor 0 = 1 三、基本公式 2^r≥k+r+1   其中r

計算機組成原理學習筆記-

說明:可以先看實際舉例再回頭看其他說明便於快速理解。 一、特點 既可檢錯也可糾錯 二、用途背景 原因:資訊傳輸時因為種種原因會出現部分資訊發生改變的情況,即二進位制資訊的某個別位出現錯誤的情況。 用途:通過在原資訊的特定位置加上海明碼的方法,來實現對一串資料位中的某個(注

直觀 因此 span 錯位 二進制位 奇偶校驗位 成了 solid 等式成立 一、概述   由Richard Hamming於1950年提出、目前還被廣泛采用的一種很有效的校驗方法,是只要增加少數幾個校驗位,就能檢測出二位同時出錯、亦能檢測出一位出錯並能自動恢復該出錯位的正

(靠譜的解釋)

text 位置 等於 alt pan font 滿足 fill tex https://www.cnblogs.com/zsswpb/p/5771636.html 【定義】 海明碼(Hamming Code)是利用奇偶性來檢錯和糾錯的校驗方法。海明碼的構成方法是

——揭開求解之謎

引言        計算機系統在執行時,各個部件之間要進行資料交換,為了確保資料在傳送過程中正確無誤,通常使用校驗碼的方法來檢測傳送的資料是否出錯。合理的設計錯誤編碼以及編碼規則,捨得資料在傳送中出現

——如何求解

   引言    在學習計算機組成原理的時候接觸到了海明校驗碼,其實這個東西我們在學習專業課的時候接觸過類似的東西, 當再次見到的時候比較熟悉,但是有很多的人對這塊的知識比較模糊,不是很清楚,在知

常用(奇偶,CRC)學習總結

結果 post 1的個數 增加 src 所在 如果 ble 繼續 常用校驗碼(奇偶校驗,海明校驗,CRC)學習總結 一.為什麽要有校驗碼? 因為在數據存取和傳送的過程中,由於元器件或者噪音的幹擾等原因會出現錯誤,這個時候我們就需要采取相應的措施,發現並糾正錯誤,對於錯誤的

計算機組成原理奇偶

例: 資料             奇校驗編碼          偶校驗編碼   01110101      001110101 &nbs

計算機分類及原理

由於元件故障和噪聲干擾等因素常常導致計算機在處理資訊的過程中出現錯誤。為了防止資訊在傳輸過程的錯誤,將訊號採用專門的邏輯電路進行編碼以檢測錯誤,甚至校正錯誤。 通常的方法是在每個字上新增一些校驗位,用來確定字中出現錯誤的位置。    在計算機中有三種常見的檢驗碼,分別

:奇偶明碼,CRC

大多數情況下,使用檢錯碼,查錯後請求重發; 只有在單工通道(沒有反向反饋),才使用糾錯功能 1. 奇偶校驗 1.1 原理 有效資料:data_code msg = data_code + check

CAN匯流排中迴圈冗餘原理

在CAN系統中為保證報文傳輸的正確性,需要對通訊過程進行差錯控制。目前常用的方法是反饋重發,即一旦收到接收端發出的出錯資訊,傳送端便自動重發,此時的差錯控制只需要檢錯功能。常用的檢錯碼有兩類:奇偶校驗碼和迴圈冗餘校驗碼。奇偶校驗碼是一種最常見的檢錯碼,其實現方法簡單,但檢錯能

[技術棧]CRC原理及C#程式碼實現CRC16、CRC32計算FCS

1.CRC、FCS是什麼 CRC,全稱Cyclic Redundancy Check,中文名稱為迴圈冗餘校驗,是一種根據網路資料包或計算機檔案等資料產生簡短固定位數校驗碼的一種通道編碼技術,主要用來檢測或校驗資料傳輸或者儲存後可能出現的錯誤。它是利用除法及餘數的原理來作錯誤偵測的。 FCS,全稱Frame C

18位身份證驗證算法

div style charat span true class fun cnblogs test function checkCode(card){ if (/^\d{17}[\dxX]$/.test(card)) {

計算身份證(最後一位)

map git 校驗碼 meta ffi spa class ++ msg 在線預覽 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <

Python3.x:獲取登錄界面圖片

urn and code 實例 return align ace get pan Python3.x:獲取登錄界面校驗碼圖片 實例代碼: # python3 # author lizm # datetime 2018-06-01 18:00:00 # -*- coding

數據概述

相加 gop 都是 作用 異或 並且 所有 排列 big [TOC] 奇偶校驗碼 最簡單實用的一種校驗數據的方式。在原始數據的後面加一個校驗位來實現數據的校對。 若原始數據為:\(D=(D_1,D_2...D_n)?\) 偶校驗:$D_偶 = D_1 \bigoplus D

java modbus crc16 socket給傳送的資料新增crc

首先crc16校驗碼的生成的原理在上一篇部落格裡面已經說過了; 前提:xframe配置京金華伺服器的埠號,繫結ip地址和埠號 程式要實現什麼? 這個程式主要實現的是伺服器傳送資料到客戶端,然後客戶端傳送資料到伺服器端; 是一問一答的形式; 只有伺服器傳送,客戶端才會應答 傳送

怎麼計算crc16資料的

第一、CRC-16校驗碼計算方法: 常用查表法和計演算法。計算方法一般都是: (1)、預置1個16位的暫存器為十六進位制FFFF(即全為1),稱此暫存器為CRC暫存器; (2)、把第一個8位二進位制資料(既通訊資訊幀的第一個位元組)與16位的CRC暫存器的低    

身份證第18位()的計算方法

1、將前面的身份證號碼17位數分別乘以不同的係數。從第一位到第十七位的係數分別為:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。2、將這17位數字和係數相乘的結果相加。3、用加出來和除以11,看餘數是多少?4、餘數只可能有0-1-2-3-4-5-6-7-8-9-10這11個數字。其分