検査行列、シンドロームを用いた誤り符号訂正の例題

問題

下記の生成行列(1)G=(100011010101001110)

について下記の問いに答えよ。

(1)検査行列Hを求めよ。
(2)[1 1 1 0 0 1]を受信したときの誤り訂正をシンドロームを用いて行え。

検査行列とは

入力符号に対する出力符号の一致性を確認するための行列です。(パリティ検査行列とも言われます。)

よくHで表されます。

検査行列Hの定義

入力符号ベクトルをcとすると、下記の関係を満たす行列。

(2)Hct=cHt=0

入力符号と同じ信号を与えた時に出力0を返す行列です。

もし、出力符号yが入力符号cと等しければ同じく0を返します。逆に、不一致の場合は非0値を返すため、通信路のどこかでノイズが混じり、正しい値を受信できなかったことが分かります。

検査行列の求め方

以前の記事では、検査行列から生成行列Gを求める方法について説明しました。

と言うことは、当然逆もできるはずです。

本節では、生成行列から検査行列を求める方法について説明します。

手順1:生成行列Gを成分分解する

そうです。検査行列が最初から与えられた場合と同じく、生成行列の場合でも単位行列と情報・検査ビット関連行列に分解するところから始めれば良いです。

以前の記事で説明した手順2から逆の手順で検査行列を辿っていけば良いわけですね。

下記の式のように、行列Gの左側の列が単位行列に対応し、右側の列が情報・検査ビット関連行列にあたります。

(3)G=[IP]

手順2:情報・検査ビット関連行列を転置する

Pを転置し、行の成分の数だけ右に単位行列をくっつけて検査行列Hが完成します。

(4)H=[PtI]

シンドロームとは

出力符号yのエラー発生有無を調べるためのベクトルsです。

シンドロームの定義

出力符号ベクトルyと検査行列Hの転置の積を用いて表される。

(5)s=yHt

  • s=0のとき、出力符号にエラービットは無く、入力符号と等しい。
  • s0のとき、出力符号にエラービットがある。
    出力したsと同じ成分を持つ列が誤っているビットである。

生成符号を利用した誤り符号の抽出方法では、予め考えられる出力パターンを網羅しておき、それに当てはまらない出力が出た時にエラーとしていました。

しかし、シンドロームを使えば、結果を総当たりで検索せずとも、ピンポイントで調査することで誤りに気付くことができます。

証明

なぜ、s0が成立している時、誤りが発生しているとみなせるのでしょうか。本節では、端的に証明します。

入力符号cに対し、通信路中にエラーが発生したとする。エラー内容をエラーベクトルeで表現すると、出力符号y

(6)y=c+e

で表すことができる。これを(5)式に代入すると

(7)s=yHt=(c+e)Ht=cHt+eHt=eHt

になる。もしエラーが発生していなければ、エラーベクトルは0。エラーが発生しているときは非0になります。

この結果が、左辺sに波及するため、定義欄で記載した確認方法がとれるというわけですね。

解答例

(1)検査行列

行の数が3つなので、3列目までは単位行列である。

よって、4列目~6列目の成分を情報・検査ビット関連行列として取り出せばよく

(8)Pt=(011101110)

Ptの転置行列Pは、Ptと等しい。

よって、求める検査行列は

(9)H=[PtI]=(011100101010110001)

(2)シンドロームを用いた符号訂正

(5)式を用いてシンドロームを計算する

(10)s=(111001)(011101110100010001)=(001)

(0 0 1)と一致するHの成分は6列目

よって、受信符号の6番目の値が誤っている。

正しい受信符号は、[1 1 1 0 0 0]

タイトルとURLをコピーしました