ハミング符号による誤り訂正の一例


前提

符号長:7ビット
情報数:4ビット

受信する符号語は7つあり、それぞれに「0か1」が入ることになる。


誤り検出方法

誤り検出の方法の計算ロジックとしては以下のようなものがある。
・各変数の作成
TMP_A =
1番目のビットの値 + 3番目のビットの値 + 5番目のビットの値 + 7番目のビットの値

TMP_B =
2番目のビットの値 + 3番目のビットの値 + 6番目のビットの値 + 7番目のビットの値

TMP_C =
4番目のビットの値 + 5番目のビットの値 + 6番目のビットの値 + 7番目のビットの値

mod_TMP_A = TMP_Aを2で割った余りの値
mod_TMP_B = TMP_Bを2で割った余りの値
mod_TMP_C = TMP_Cを2で割った余りの値

「mod_TMP_A、mod_TMP_B、mod_TMP_C」の中に0でないものがあった場合は、
誤りが存在すると判断して、
i = mod_TMP_A + (mod_TMP_B✕2) + (mod_TMP_C✕4)
を計算して、左からiビット目を反転することによって誤りを訂正する。

例として、受信した符号語が「1000101」だとして、
実際に値を代入して、誤りの検出、修正を行う。

TMP_A = 1+0+1+1
TMP_B = 0+0+0+1
TMP_C = 0+1+1+0
つまり
TMP_A = 3
TMP_B = 1
TMP_C = 2
となる。

続いて、mod変数の計算を行う。
mod_TMP_A = 1
mod_TMP_B = 1
mod_TMP_C = 0
となる。

mod_TMP_Cが0となったので、誤りが存在すると判断して、以下の計算を行う。
i= 1 + (1 ✕ 2) + 0 ✕ 4
よって
i = 3となる。
なので、左から3ビット目が誤っていると判断して、その値を反転させる。
結果として、受信した「1000101」は「1010101」となり誤りが訂正されたことになる。