復号手法のソースを表示
←
復号手法
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
'''復号手法'''(ふくごうしゅほう、{{lang-en-short|Decoding methods}})は、[[符号理論]]における[[復号]]の手法であり、受信したメッセージを所定の[[符号]]の[[符号語]]の並びに変換する手法である。本項目では、主な復号手法を解説する。これらの手法は[[2元対称通信路]]などの[[通信路]]上を転送されるメッセージの復号に使われる。 == 本項目における記号 == 以降の記述において、<math>C \subset \mathbb{F}_2^n</math> は長さ <math>n</math> の[[符号]]、<math>x,y</math> は <math>\mathbb{F}_2^n</math> の元、<math>d(x,y)</math> は <math>x,y</math> 間の[[ハミング距離]]を表す。なお、<math>C</math> は[[線型符号]]とは限らない。 == 最適復号 == メッセージ <math>x \in \mathbb{F}_2^n</math> を受信したとき、'''最適復号'''(Ideal Observer Decoding)では、 :<math>\mathbb{P}(y \mbox{ sent} \mid x \mbox{ received})</math> が最大となるような符号語 <math>y \in C</math> を選択する。すなわち、メッセージ <math>x</math> の解釈として最適と考えられる符号語 <math>y</math> を選択する。 === 復号における規定 === 各符号語の確率はユニークではない。受信メッセージの解釈として複数の符号語が同じ確率となる場合もある。その場合、送信側と受信側の間で復号に関する規定を定めておく。一般的な規定は次のどちらかである。 # 符号語の再送を要求する。 # 最も確率の高い符号語群から無作為に1つを選択する。 == 最尤復号 == メッセージ <math>x \in \mathbb{F}_2^n</math> を受信したとき、'''[[最尤法|最尤]]復号'''(Maximum Likelihood Decoding)では、 :<math>\mathbb{P}(x \mbox{ received} \mid y \mbox{ sent})</math> が最大となるような符号語 <math>y \in C</math> を選択する。すなわち、<math>x</math> を受信したときの[[条件付き確率]]の最も高い符号語 <math>y</math> を選択する。なお、全ての符号語の出現確率が同じである場合、これは「最適復号」と等価である。 :<math> \begin{align} \mathbb{P}(x \mbox{ received} \mid y \mbox{ sent}) & {} = \frac{ \mathbb{P}(x \mbox{ received} , y \mbox{ sent}) }{\mathbb{P}(y \mbox{ sent} )} \\ & {} = \mathbb{P}(y \mbox{ sent} \mid x \mbox{ received}) \cdot \frac{\mathbb{P}(x \mbox{ received})}{\mathbb{P}(y \mbox{ sent})} \\ & {} \propto \mathbb{P}(y \mbox{ sent} \mid x \mbox{ received}) \end{align} </math> 最終行では<math>x \mbox{ received}</math> が固定されていることと、 <math>\mathbb{P}(y \mbox{ sent}) </math>が<math>y \mbox{ sent}</math> 依存性を持たないことを使っている。なお「最適復号」と同様、確率が同じ符号語がある場合の規定をしておく必要がある。 == 最小距離復号 == メッセージ <math>x \in \mathbb{F}_2^n</math> を受信したとき、'''最小距離復号'''(Minimum Distance Decoding)では[[ハミング距離]] :<math>d(x,y) = \# \{i : x_i \not = y_i \}</math> が最小となる符号語 <math>y \in C</math> を選択する。すなわち、なるべく <math>x</math> に近い符号語 <math>y</math> を選択する。 (履歴記憶のない)離散通信路における誤り発生確率 <math>p</math> が2分の1未満の場合、「最小距離復号」と「最尤復号」は同じである。なぜなら :<math>d(x,y) = d\,</math> としたとき、 :<math> \begin{align} \mathbb{P}(y \mbox{ received} \mid x \mbox{ sent}) & {} = (1-p)^{n-d} \cdot p^d \\ & {} = (1-p)^n \cdot \left( \frac{p}{1-p}\right)^d \\ \end{align} </math> となり(''p'' が2分の1未満なので)、''d'' を最小化することで値が最大になる。 最小距離復号は「最近傍復号(Nearest Neighbour Decoding)」とも呼ぶ。[[標準配列]]を使うと容易または自動的に行える。最小距離復号は、以下の条件が成り立つ場合に使いやすい。 # 誤り発生確率 ''p'' が、シンボルの位置とは無関係である。 # 誤り同士も無関係に独立して生じる(メッセージ内のある位置で誤りが発生したという事実が、他の位置での誤り発生に影響しない)。 これらの条件は2元対称通信路では妥当である。しかし例えば[[DVD]]の場合、ある箇所に傷が付くと、その周辺のシンボルや符号語で誤りが発生する確率が高くなり、誤り同士が相互に関係し、かつシンボルの位置が関係してくる。 他の復号手法と同様、復号が一意に定まらない場合の規定を予め決めておく必要がある。 == シンドローム復号 == 長さ <math>n</math> で最小ハミング距離 <math>d</math> の符号 <math>C\subset \mathbb{F}_2^n</math>は、最小距離復号により <math>t = \left\lfloor\frac{d-1}{2}\right\rfloor</math> 個以下の通信路で発生した誤りを訂正できる。'''シンドローム復号'''(Syndrome Decoding)は、[[線型符号]]のために最小距離復号を高効率に行う復号手法である。シンドローム復号は符号の線型性を利用して小さな[[ルックアップテーブル]]を使うことで復号を可能にする。以下ではその方法を説明する。 符号語 <math>y \in \mathbb{F}_2^n</math> を通信する際、誤りパターン <math>e \in \mathbb{F}_2^n</math> が発生したとする。すると受信されるメッセージは <math>x=y+e</math> となる。シンドローム復号では、与えられた符号の[[パリティ検査行列]] <math>H\in \mathbb{F}_2^{(n-k)\times n}</math>を用いて受信したメッセージ <math>x </math> のシンドローム <math>Hx</math>を計算する。ここで<math>k</math>は符号語のなす部分空間の次元である。パリティ検査行列<math>H</math>は全ての <math>x \in C</math> について<math>Hx = 0</math>となる性質を持つため :<math>Hx = H(y+e) =Hy + He = 0 + He = He</math> が成立する。<math>t</math> 個を超える誤りが発生しない前提で全ての誤りパターン <math>e \in \mathbb{F}_2^n</math> について値 <math>He</math> を事前に求めておきルックアップテーブルを作成しておけば、<math>x</math>のシンドロームから誤りパターン<math>e</math>を得ることができる。誤りパターン <math>e</math> が得られれば、送信されたメッセージは<math>x = z - e</math>の関係により簡単に求められる。 MATLABではシンドローム復号に用いるためのシンドローム復号のためのルックアップテーブルを生成する関数[https://jp.mathworks.com/help/comm/ref/syndtable_ja_JP.html syndtable]が用意されている MATLABによる例:<syntaxhighlight lang="matlab" line="1"> H = hammgen(3) % Hはパリティ検査行列 %% H = [ 1 0 0 1 1 0 1; %% 0 1 0 1 1 1 0; %% 0 0 1 0 1 1 1] G = gen2par(H) % Gは生成行列 %% G = [ 1 1 0 1 0 0 0; %% 0 1 1 0 1 0 0; %% 1 1 1 0 0 1 0; %% 0 0 1 0 0 0 1] t = syndtable(H) % tはシンドローム復号のためのルックアップテーブルである %% t = [ 0 0 0 0 0 0 0 %1行目は He = [0 0 0] に対応する e %% 0 0 1 0 0 0 0 %2行目は He = [0 0 1] に対応する e %% 0 1 0 0 0 0 0 %3行目は He = [0 1 0] に対応する e %% 0 0 0 0 1 0 0 %4行目は He = [0 1 1] に対応する e %% 1 0 0 0 0 0 0 . %% 0 0 0 0 0 0 1 . %% 0 0 0 1 0 0 0 . %% 0 0 0 0 0 1 0 ] %8行目は He = [1 1 1] に対応する e y = mod([0 1 0 1] * G, 2) % yは送信するメッセージ %% y = [1 1 0 0 1 0 1] e = [0 0 0 1 0 0 0]; x = mod (y + e, 2) % xは受信するメッセージ %% x = [1 1 0 1 1 0 1] Hx = mod(parmat2 * x',2)' %%シンドロームを計算 Hx = [1 1 0] →7行目を'ルックアップ'するとeがわかる →x-eでyを求める y_decoded = mod(x + t(7,:), 2) %% y_decoded = [1 1 0 0 1 0 1] </syntaxhighlight> 全ての符号語に対してハミング距離を直接計算する場合は全ての符号語<math>|C|=2^k</math>個のハミング距離を計算する必要がある一方でシンドローム復号の場合に用いるルックアップテーブルのサイズは :<math> \sum_{i=0}^{\left\lfloor\frac{d-1}{2}\right\rfloor} \binom{n}{i} </math> となる。 == 関連項目 == * [[誤り検出訂正]] == 参考文献 == * Hill, Raymond. (1988). ''A First Course In Coding Theory'', New York: Oxford University Press. {{DEFAULTSORT:ふくこうしゆほう}} [[Category:符号理論]] [[Category:数学に関する記事]]
このページで使用されているテンプレート:
テンプレート:Lang-en-short
(
ソースを閲覧
)
復号手法
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報