前言
我們知道,發送端在發送資料給接收端時,在傳輸鏈路中 有可能受到干擾導致資料傳輸錯誤,因此在接受端我們需要對接收到的資料進行檢驗,驗證資料是否正確,如果資料發生了錯誤,接收端會選擇對資料進行糾錯或者要求發送端進行重發,
一、奇偶校驗
在計算機發展的早期我們常采用的校驗方法是 奇偶校驗,用1個位元位來標記校驗結果,所以 當我們的資料有n位時,要傳輸給接收端的資料有n+1位,
采用奇校驗時,若所要傳輸的資料 含有奇數個1,則校驗位為0 ;反之,含有偶數個1,則校驗位為1,
采用偶校驗時,若所要傳輸的資料 含有偶數個1,則校驗位為0 ;反之,含有奇數個1,則校驗位為1,
奇偶校驗功能簡單,實作起來容易,但是它只能發現資料發生了錯誤,無法確定是哪個位置發生了錯誤,只能要求發送方重發,且 當資料發生了偶數個錯誤時,奇偶檢驗無法發現錯誤,也就是說它沒有糾錯功能,因此我們采用更為先進的海明碼,
二、海明碼
海明碼不僅具有糾錯功能,還能根據驗算程序判斷出發生錯誤的位置,下面讓我們來看看海明碼的計算原理叭,
(1)海明碼有三個重要性質:
①假設 資料位為 n 位,校驗位有 k 位,則海明碼有 n + k 位,且 n 和 k 需滿足 2𝑘 ? 1 ≥ n + k 等式( 可以用 2k ? 1 > n 簡化計算 ),如:
當 n = 8 時,則 k = 4 ;
當 n = 16 時,則 k = 5 ,
②用符號 D 代表資料位,P 代表校驗位,H 代表海明碼,則 P𝑖 = 𝐻2𝑖?1 ,也就是說 第 i 個校驗位在海明碼的第 2𝑖?1 個位置上,當確定好校驗位在海明碼的位置之后,剩下的位置則由資料位進行填充,
根據①和②,我們便可以確定資料位為 n 時,校驗位 k 的值及海明碼的格式( 這里以資料位為 8 位舉例 ):

根據①,因為 n = 8 且 2k-1>n ,所以 k = 4 ,所以海明碼有 8 + 4 = 12 位,
根據②,可以覺得4個校驗位 P1、P2、P3、P4 分別在海明碼的 H1、H2、H4、H8 的位置上,如上圖所示,
③每一位海明碼都會被校驗到,其中,被校驗的海明碼它的下標等于參與校驗的所有檢驗碼下標之和( 對應存放 D 時 ),而校驗位由自身校驗( 對應存放 P 時 ),
根據③我們可以確定每一位海明碼,它是由哪些校驗碼進行校驗的,而這些校驗碼便構成了該海明碼的校驗碼組,如下圖所示,

很容易看出 P 所在的海明碼的校驗位組都是校驗位,而 D 所在的海明碼的校驗位組遵循“被校驗的海明碼它的下標等于參與校驗的所有檢驗碼下標之和”,如 H12 中的校驗位組是 P3 和 P4 ,是因為 12 = 8 + 4 ,即 H12 的校驗位組由 H8 和 H4 組成,
(2)海明碼的校驗方式
在 采用偶檢驗 時,各檢驗位的值等于含有該檢驗位的資料位的異或運算結果,


補充:異或運算的規則是:
0 ? 0 = 0 0 ? 1 = 1
1 ? 1 = 0 1 ? 0 = 1
至此發送端就確定完每一位海明碼的值應該為 0 還是 1 了, 那么接收端要如何確定收到的海明碼是否正確呢?若是不正確時,其錯誤的位置又要如何確定?
三、海明碼的檢錯及糾錯
接收端在接收到海明碼后,對將校驗位 P 與其相對應的資料位 D 進行異或運算,并根據運算結果生成編碼結果 G4G3G2G1(這里還是以資料位 8 位時舉例,若是 16 位,則結果為 G5G4G3G2G1),

注意觀察 P 和后面的 D 組資料之間的關系,如果進行偶檢驗,沒有錯誤時,G4G3G2G1 應該全為0( 奇檢驗時無錯全為1 ),不全為0則說明發生了錯誤,且 G4G3G2G1的值化成十進制值 m 就指出了海明碼的第 m 個位置出現了錯誤,如 G4G3G2G1 = 1000 說明海明碼 H8 出現了錯誤,
以上筆記源于書本未能講解清楚,自己琢磨出來的,供大家交流學習,如有錯誤之處,歡迎指正!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/255207.html
標籤:其他
上一篇:基于阻抗控制的工業機器人軌跡跟蹤系統 Simulink/Simscape 仿真
下一篇:day01 計算機基礎和環境搭建
