符号長7ビット,情報ビット数4ビットのハミング符号による誤り訂正の方法を,次のとおりとする。
受信した7ビットの符号語 x_1 x_2 x_3 x_4 x_5 x_6 x_7(x_k=0又は1)に対して
c_0 = x_1 +x_3 +x_5 +x_7
c_1 = x_2+x_3 +x_6+x_7
c_2 = x_4+x_5+x_6+x_7
(いずれもmod 2での計算)
を計算し,c_0,c_1,c_2の中に少なくとも一つは0でないものがある場合には,
i = c_0+c_1×2+c_2×4
を求めて,左からiビット目を反転することによって誤りを訂正する。
受信した符号語が1000101であった場合,誤り訂正後の符号語はどれか。
正答4
解説
正解は4です。
ハミング符号は、検査ビットを付けることで1ビットの誤りを検出し、その位置まで特定して訂正できる符号です。
問題の手順どおりにc_0、c_1、c_2を計算し、誤り位置iを求めます。
【計算】
受信語1000101より、x_1=1、x_2=0、x_3=0、x_4=0、x_5=1、x_6=0、x_7=1です。
c_0=x_1+x_3+x_5+x_7=1+0+1+1=3で、mod 2では1です。
c_1=x_2+x_3+x_6+x_7=0+0+0+1=1です。
c_2=x_4+x_5+x_6+x_7=0+1+0+1=2で、mod 2では0です。
i=c_0+c_1×2+c_2×4=1+2+0=3です。
左から3ビット目の0を1に反転すると、1010101になります。
【選択肢別解説】
1:× 1000001は左から5ビット目を反転した結果です。
計算で求めた誤り位置は3ビット目です。
2:× 1000101は受信語そのままです。
c_0とc_1が0でないので、誤りがあり訂正が必要です。
3:× 1001101は左から4ビット目を反転した結果です。
誤り位置iは4ではなく3です。
4:○ 左から3ビット目を反転した1010101が正しい訂正結果です。
検算するとc_0、c_1、c_2はすべて0になります。
【ポイント】
(7,4)ハミング符号で訂正できるのは1ビットの誤りだけです。
2ビットの誤りがあると、別のビットを誤って反転してしまいます。
2ビット誤りの検出まで行いたい場合は、検査ビットを1つ追加した拡張ハミング符号を使います。
検査式の値を2進数として読むと、誤りビットの位置がそのまま得られる仕組みです。