史上最通俗的海明碼編碼計算、檢錯和糾錯原理解析

合法代碼集:所謂合法代碼集就是當代碼由於未知因素導致出錯後,計算機可是識別到錯誤的代碼。不合法代碼集:{(001), (010), (101), (111)}。如果(101)出錯,可能是(111),那麼無法判斷是錯誤代碼還是本來就是(111),因此不合法。下面給出合法代碼集:{001),(100), (111},當有一位發生變化時並不會和代碼集中的其他代碼發生衝突,因此合法。

編碼的最小距離:合法代碼集中任意兩組合法代碼之間二進制位數的最少差異。編碼的檢錯、糾錯能力與編碼最小距離直接相關,公式描述爲:L-1 = D+C(D>=C)

L: 編碼的最小距離

D: 檢錯的位數

C:糾錯的位數

漢明碼:具有一位糾錯能力的編碼方案,實質上是使用特殊分組方式的奇偶校驗。

奇偶校驗:假定需要傳輸的數據是“00100011”,那麼在原數據加上一個校驗位,使得“1”的個數是偶數個:“100100011”。當傳輸到另一端的時候,檢查“1”的個數是否是偶數個,如果還是偶數,那麼表示沒有錯誤,否則就是失效的數據。

帶分組的奇偶校驗:爲了更加精確的定位出錯的二進制位,那麼可是將二進制位分組,將“00100011”分成“0010”和“0011”,分別在兩個分組前加上一個校驗位:“10010”和“00011”,這就構成了“1001000011”,發送到對方的時候,將每個分組的“1”查找一遍,然後考察是否是偶數個,即可更加精確的定位到是哪個分組出錯。

漢明碼的編碼:上邊說的都是基於劃分的分組方式,漢明碼是基於非劃分的分組方式。假定存在如下數據位:

圖片1.png

我們將這個長度的代碼分成3組,每組包含1個校驗位,總共包含4個數據位,如下圖所示:

圖片2.png

將3個組分別命名爲Group1Group2Group3,那麼將會產生三個校驗位結果:

Group3

Group2

Group1

Result

0

0

0

沒有錯誤

0

0

1

Group1中有錯誤,1的位置出錯.

1

0

1

Group1Group3公共區域出錯,5位置出錯.

...

...

...

...

既然有了校驗位,那麼這些校驗位應該放到哪裏呢?我們上面將數據按位劃分了組:

Group1: {1, 3, 5, 7};

Group2: {2, 3, 6, 7};

Group3: {4, 6, 6, 7}.

實際上,我們的分組方式就是按照漢明碼的編碼規則劃分的,因此要考察每個分組的特徵:

Group1: {1, 3, 5, 7};

Group2: {2, 3, 6, 7};

Group3: {4, 6, 6, 7}.

顯然,應該放到2n-1位。

如果是二進制代碼的話產生的校驗值會有如下特徵:

Group1:xxxx1

Group2:xxx1x

Group3:xx1xx

Group4:x1xxx

...

從右向左,如果Group1的第一位是1,表示Group1獨有的比特位出錯。如果是Group1的第一位和Group4的第四位同時是1,表示Group1Group4共有且其他組沒有的比特位出錯。

綜上所述,漢明碼總共有三個要素:

漢明碼的組成需要添加多少位校驗位

因爲每個組都有一個校驗位,所以多少個校驗位就是多少個組,設校驗位包含k位,原始數據比特位有n位,在加上一種沒有錯誤的情況,因此是2k >= n+k+1(和畫圖一樣的道理)

校驗位在整個編碼中的位置

2n-1

校驗位的取值

根據採用的是奇校驗還是偶校驗有關。

漢明碼使用交替跳躍的方式選擇每個組中應該包含的比特位,比如:

Group1:選取1位,跳躍1位;

Group2:選取2位,跳躍2...

漢明碼的校驗:

Group1 = 1⊕357

Group2 = 2⊕367

...

測試題:求“0101”按照偶校驗配置的漢明碼

原始數據長度n = 4; 分組個數:k = 3; 漢明碼排序:

比特位序號

1

2

3

4

5

6

7

漢明碼

C1

C2

0

C4

1

0

1

下面是每個分組的情況:

C1分組情況:

1

3

5

7

C1

0

1

1

C1分組已經有偶數個1”,因此C1 = 0;同理,C2 = 1; C4 = 0

因此,漢明碼爲:“0100101


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章