海明碼編碼計(jì)算和糾錯(cuò)、CRC校檢碼計(jì)算

一、海明碼檢錯(cuò)/糾錯(cuò)基本思想

海明碼(Hamming Code)是一個(gè)能夠有多個(gè)校驗(yàn)位。具有檢測(cè)并糾正一位錯(cuò)誤代碼的糾錯(cuò)碼,所以也僅用于信道特性比較好的環(huán)境中。如以太局域網(wǎng)。它的檢錯(cuò)、糾錯(cuò)基本思想例如以下:
(1)將有效信息按某種規(guī)律分成若干組,每組安排一個(gè)校驗(yàn)位通過(guò)異或運(yùn)算進(jìn)行校驗(yàn)。得出詳細(xì)的校驗(yàn)碼
(2)在接收端相同通過(guò)異或運(yùn)算看各組校驗(yàn)結(jié)果是否正確,并觀察出錯(cuò)的校校組。或者多個(gè)出錯(cuò)的校驗(yàn)組的共同校驗(yàn)位。得出詳細(xì)的出錯(cuò)比特位。
(3)對(duì)錯(cuò)誤位取反來(lái)將其糾正。

二、海明碼計(jì)算

海明碼計(jì)算要按下面步驟來(lái)進(jìn)行:計(jì)算校驗(yàn)碼位數(shù)→確定校驗(yàn)碼位置→確定校驗(yàn)碼
1.計(jì)算校檢碼位數(shù)
??計(jì)算公式: m + k + 1 ≤ 2k (其中 m 是有效信息位數(shù),k表示加入校檢碼的位數(shù))

比如:10011101需要的校檢碼位數(shù)?此時(shí),m = 8,帶入公式得:8+k+1≤ 2k,所以 k = 4。(怎么算的?枚舉,枚舉,枚舉......_,就是估計(jì)帶入去算?。?01101100又需要多少位校檢碼呢?(還是4位)。
2.確定校檢碼位置
??海明碼的校檢碼的位置必須在2n(n從0開始)。也就是從左邊開始第1、2、4、8、16......).
根據(jù)第一步我們知道10011101需要4位校檢碼,那么校檢碼就在1、2、4、8的位置上。把有效信息按位置填入相應(yīng)位(不是校檢位),校檢位暫時(shí)留空,于是得到下圖:

1 2 3 4 5 6 7 8 9 10 11 12
1 0 0 1 1 1 0 1

3.計(jì)算各位校檢碼
??為了說(shuō)明先直接畫圖。
由于是4位校檢位,直接寫出4位2進(jìn)制的表。

8 4 2 1
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1
10 1 0 1 0
11 1 0 1 1
12 1 1 0 0
13 1 1 0 1
14 1 1 1 0
15 1 1 1 1

(1)第1位要填什么?從上表找出1這列全1對(duì)應(yīng)的十進(jìn)制數(shù):1、3、5、7、9、11、13、15(1沒(méi)有就不算),看第一個(gè)表中,3、5、7、9、11中分別是1、0、1、1、0為奇數(shù),所以第一位應(yīng)該填 1(假設(shè)采用偶校檢)。
(2)第2位要填什么?從上表找出2這列全1對(duì)應(yīng)的十進(jìn)制數(shù)2、3、6、7、10、11(2沒(méi)有)再對(duì)應(yīng)第一個(gè)表中為10110,數(shù)1個(gè)數(shù)為奇數(shù),所以第二位填 1。
(3)第4位看4這列對(duì)應(yīng)全1的 4、5、6、7、12(4沒(méi)有)對(duì)應(yīng)第一個(gè)表0011,1個(gè)個(gè)數(shù)為偶數(shù),所以填 0。
(4)第8位看8這列對(duì)應(yīng)全1的 8、9、10、11、12(8沒(méi)有)對(duì)應(yīng)第一個(gè)表為1101,所以填 1。
(5)最后校檢碼為 1101。
(6)將校檢碼插入信息碼

1 2 3 4 5 6 7 8 9 10 11 12
1 1 1 0 0 0 1 1 1 1 0 1

總結(jié):第n位校檢碼校檢的碼位,從自己開始校檢n位,然后空n位,在校檢n位。
例如:
第2位校檢2、3、(空)、(空)、6、7、(空)、(空)、10、11 ......
第4位校檢4、5、6、7、(空)、(空)、(空)、(空)、12、13、14、15 ......

【例】二進(jìn)制碼 101101100,求它的海明編碼?
1.計(jì)算k,m = 9,m + k + 1 ≤ 2k,所以k = 4。
2.確定校檢碼位置:

1 2 3 4 5 6 7 8 9 10 11 12 13
1 0 1 1 0 1 1 0 0

3.確定校檢碼
(1)第1位,找到(1)、3、5、7、9、11、13位,為101010,1為奇數(shù),填1.
(2)第2位,找到(2)、3、6、7、10、11位,為11111,1為奇數(shù),填1.
(3)第4位,找到(4)、5、6、7、12、13位,為01100,1為偶數(shù),填0.
(4)第8位,找到(8)、9、10、11、12、13、(14)、(15)位、為01100,1為偶數(shù),填0,
(5)校檢碼為1100.

4.所以插入了校檢碼的信息碼:1110011001100。

三、糾錯(cuò)
??依然根據(jù)上面的例題,我們將11位上改為0.也就是:

1 2 3 4 5 6 7 8 9 10 11 12 13
1 1 1 0 0 1 1 0 0 1 0 0 0

<em>由于信息只有13位,下面()中的位數(shù)沒(méi)有,只是為了方便理解其分組</em>

(1)第1位,找到1、3、5、7、9、11、13位,為1101000,1為奇數(shù),錯(cuò)誤.
(2)第2位,找到2、3、6、7、10、11位,為111110,1為奇數(shù),錯(cuò)誤.
(3)第4位,找到4、5、6、7、12、13、(14)、(15)位,為001100,1為偶數(shù),正確.
(4)第8位,找到8、9、10、11、12、13、(14)、(15)位、為001000,1為奇數(shù),錯(cuò)誤。
所以出錯(cuò)位數(shù)應(yīng)該是 1+2+8=11位,將第11位0改為1即可糾正錯(cuò)誤!

<h2>三、CRC校檢碼</h2>

CRC的實(shí)現(xiàn)原理十分易于硬件實(shí)現(xiàn),因此被廣泛的應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)上的差錯(cuò)控制。CRC校驗(yàn)碼需根據(jù)CRC生成多項(xiàng)式進(jìn)行。

1.根據(jù)多項(xiàng)式確定代碼 P 以及R的位數(shù)(R位數(shù) = P位數(shù) -1)。
2.在信息 M 后面加 0,加 0 的個(gè)數(shù)等于 R位數(shù).
3.用 M 對(duì) P 做模2除法(也就是按位做異或)得到余數(shù)r。
4.余數(shù) r 不夠 R位數(shù),則在高位補(bǔ)0,得到的數(shù)即校檢碼。

異或:0 ⊕ 0 = 0;0 ⊕ 1 = 1;1 ⊕ 0 = 1;1 ⊕ 1 = 0;運(yùn)算數(shù)相同結(jié)果為0,不同結(jié)果為1

【例】現(xiàn)假設(shè)選擇的CRC生成多項(xiàng)式為G(X) = X4 + X3 + 1,要求出二進(jìn)制序列10110011的CRC校驗(yàn)碼。
(1)更具多項(xiàng)式確定代碼P以及R的位數(shù)
多項(xiàng)式為G(X) = X4 + X3 + 1,那么

X4 X3 X2 X1 X0(=1)
1 1 0 0 1

也就是代碼P = 11001,P為5位,R位數(shù)則為5 - 1 = 4位。
(2)在信息 M 后面加 0,加 0 的個(gè)數(shù)等于 R位數(shù).
M = 10110011,那么加 4 位 0 后得到 101100110000.
(3)用 M 對(duì) P 做模2除法(由于不關(guān)心商多少,直接去掉除法上面商部分_)。

模2除法

(4)將計(jì)算出來(lái)的CRC校驗(yàn)碼添加在原始幀的后面,真正的數(shù)據(jù)幀為101100110100,再把這個(gè)數(shù)據(jù)幀發(fā)送到接收端。
(5)接收端收到數(shù)據(jù)幀后,用上面選定的除數(shù),用模2除法除去,驗(yàn)證余數(shù)是否為0,如果為0,則說(shuō)明數(shù)據(jù)幀沒(méi)有出錯(cuò)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容