漢明碼校驗-糾錯

漢明碼 : 是一個可以有多個校驗位,具有檢測并糾正一位錯誤代碼的糾錯碼
采用漢明碼糾錯,需要按以下步驟來進行:計算校驗位數→確定校驗碼位置→確定校驗碼→實現校驗和糾錯

計算校驗位數

獲得 校驗位數公式: K+r <= 2r - 1

其中:K 代表收到的有效信息位數,r 表示需要添加的校驗碼位數。
比如:收到的信息碼為 10011101,則 K = 8

根據上面的公式,求得需要添加的校驗碼位數為:r = 4

確定校驗碼位置

知道了校驗碼的位數,那么它們該放到信息碼的哪些位置呢?

校驗碼必須是放在 2的 n 次方位置,如第1、2、4、8、16、32,……位(對應20、21、22、23、24、25,……,是從最左邊的位數起的)

我們以 Pn 表示第 n 個校驗碼,假如我們收到的信息碼是 10011101,把校驗碼按照上面的位置插入其中,則生成了新的信息碼:P1P21P3001P41101

確定校驗碼

首先,我們要知道,校驗位的值代表了代碼字中部分數據位的奇偶性(最終要根據是采用奇校驗,還是偶校驗來確定),其所在位置決定了要校驗的比特位序列。

每一個校驗位 ,要校驗的 比特位序列計算規則如下:

Pn(第 n 個校驗位,也是整個信息碼字的第n位)的校驗規則是:從當前位數起,校驗 2n-1 位,然后跳過 2n-1 位,再校驗 2n-1 位,再跳過 2n-1 位,……

比如 P1,就是從第1位起,也就是從 P1 起,校驗 1 位,然后跳過 1 位,再校驗 1 位,......
那么 P1 要校驗的碼字為:P110110

P2,就是從第2位起,也就是從 P2 起,校驗 2 位,然后跳過 2 位,再校驗 2 位,......
那么 P2 要校驗的碼字為:P210110

類推出 P3 要校驗的碼字為:P30011
P4 要校驗的碼字為:P41101

根據上面獲得比特位序列得知, P1 校驗碼校驗的位數是6位。這6位中除了第1位(也就是 P1 位)不能確定外,其余5位的值都是已知的,分別為:1、0、1、1、0。現假設采用的是偶校驗(也就是要求整個被校驗的位中的“1”的個數為偶數;如果“1”的個數為奇數,則是奇校驗),從已知的5位碼值可知,已有3個“1”,所以此時P1位校驗碼的值必須為“1”,得出P1 = 1

依次推算出 P2 = 1P3 = 0P4 = 1

最后得出漢明碼為:111000111101

實現校驗和糾錯

根據以上說的漢明碼的配偶原則和配奇原則我們來看漢明碼的糾錯。設接收到的錯誤漢明碼(按配偶原則配置)是111000111111,我們可以根據上述規律來確定出錯位。

二進制序號 1 2 3 4 5 6 7 8 9 10 11 12
接收到的漢明碼 1 1 1 0 0 0 1 1 1 1 1 1
校驗碼位置 P1 P2 P3 P4

那么新的檢測位是(采用偶校驗, 偶數個1)
P1 = 第1位+第3位+第5位+第7位+第9位+第11位,即P1 = 1+1+0+1+1+1 = 1
P2 = 第2位+第3位+第6位+第7位+第10位+第11位,即P2 = 1+1+0+1+1+1 = 1
P3 = 第4位+第5位+第6位+第7位+第12位,即P3 = 0+0+0+1+1 = 0
P4 = 第8位+第9位+第10位+第11位+第12位,即P4 = 1+1+1+1+1 = 1

根據 P4P3P2P1 構成的二進制是 1011,將 1011 轉換成十進制為 11,說明是第 11 位出錯,或者根據配偶原則的規律,其“1”的個數必須是偶數也能判斷出是第11位,所以第11位應將“1”改為“0”,那么正確的漢明碼應為 111000111101

那么為什么在漢明碼糾錯過程中,新的檢測位
P4P3P2P1 的狀態即指出了編碼中錯誤的信息位?

漢明碼屬于分組奇偶校驗,P4P3P2P1 = 0000,說明接收方生成的校驗位和收到的校驗位相同,否則說明出錯。由于分組時校驗位只參加 一組 奇偶校驗,有效信息參加至少 兩組 奇偶校驗,如果校驗位出錯,P4P3P2P1 的某一位將為1,剛好對應位號8、4、2、1;如果有效信息出錯,將引起 P4P3P2P1 中至少兩位為1。

故,上面的第 11 位出錯時,造成 P4P2P1 都出錯了。

好了,漢明碼校驗就是這些了,覺得有幫到您,點贊支持一下吧??

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容