(57)【特許請求の範囲】
【請求項１】
低密度パリティ検査符号のメッセージ・パッシング復号方式に基づく復号装置であって、
前記低密度パリティ検査符号のパリティ検査行列は、置換行列のクロネッカー積の構造を持つ成分から構成され、
受信値および前記復号方式の過程で発生するメッセージを格納する複数のメモリ手段と、
前記クロネッカー積の成分を構成する一方の置換行列に対応し、その置換行列の複数の置換に基づいて、前記メモリ手段のアドレスを発生する複数のアドレス発生手段と、
前記複数のアドレス発生手段の発生したアドレスに基づいて、前記複数のメモリ手段から受信値又はメッセージを読み出す、前記復号方式における複数の変数ノード関数手段と、
前記復号方式における複数のチェックノード関数手段と、
前記クロネッカー積の成分を構成する他方の置換行列に対応し、その置換行列の複数の置換に基づいて、前記変数ノード関数手段と前記チェックノード関数手段との接続を定める複数のシャッフルネットワーク手段とを有し、
復号過程において、前記アドレス発生手段における前記置換の変更と、前記シャッフルネットワーク手段における前記置換の変更とを同一周期で行うことを特徴とする誤り訂正符号復号装置。
【請求項２】
前記アドレス発生手段は１個で、すべての前記メモリ手段に対してアドレスを発生し、
前記シャッフルネットワーク手段は１個で、すべての前記変数ノード関数手段と接続されることを特徴とする請求項１に記載の誤り訂正符号復号装置。
【請求項３】
前記メモリ手段は前記メッセージとともにその和を格納することを特徴とする請求項１又は請求項２に記載の誤り訂正符号復号装置。
【請求項４】
前記アドレス発生手段をカウンタで実現することを特徴とする請求項１から請求項３のいずれかに記載の誤り訂正符号復号装置。
【請求項５】
前記シャッフルネットワーク手段の置換をガロア体演算に基づき決定することを特徴とする請求項１から請求項４のいずれかに記載の誤り訂正符号復号装置。
【請求項６】
前記復号方式はmin-sumアルゴリズムに基づき、前記チェックノード関数手段の出力であるメッセージを１より小さい係数を乗じて補正することを特徴とする請求項１から請求項５のいずれかに記載の誤り訂正符号復号装置。
【請求項７】
前記復号方式はmin-sumアルゴリズムに基づき、前記チェックノード関数手段は入力メッセージの絶対値の最小値とそのインデックス、および入力メッセージの２番目の最小値および入力メッセージの正負の情報を保持することを特徴とする請求項１から請求項６のいずれかに記載の誤り訂正符号復号装置。
【請求項８】
前記アドレス発生手段のみを変更することで異なる符号の復号に対応することを特徴とする請求項１から請求項７のいずれかに記載の誤り訂正符号復号装置。
【請求項９】
前記アドレス発生手段および前記シャッフルネットワーク手段の一つに対応する前記変数ノード関数手段の組に対して、その出力において符号語ビットが非常に高い確率で０であるというメッセージを常に送信する機能を設けることで不均一低密度パリティ検査符号の復号を実現することを特徴とする請求項１から請求項８のいずれかに記載の誤り訂正符号復号装置。
【請求項１０】
低密度パリティ検査符号のメッセージ・パッシング復号方式に基づく復号を行わせるプログラムであって、
前記低密度パリティ検査符号のパリティ検査行列は、置換行列のクロネッカー積の構造を持つ成分から構成され、
前記プログラムはコンピュータを、
前記クロネッカー積の成分を構成する一方の置換行列に対応し、その置換行列の複数の置換に基づいて、受信値および前記復号方式の過程で発生するメッセージを格納する複数のメモリ手段のアドレスを発生する複数のアドレス発生手段と、
前記複数のアドレス発生手段の発生したアドレスに基づいて、前記複数のメモリ手段から受信値又はメッセージを読み出す、前記復号方式における複数の変数ノード関数手段と、
前記復号方式における複数のチェックノード関数手段と、
前記クロネッカー積の成分を構成する他方の置換行列に対応し、その置換行列の複数の置換に基づいて、前記変数ノード関数手段と前記チェックノード関数手段との接続を定める複数のシャッフルネットワーク手段として機能させ、
復号過程において前記アドレス発生手段における前記置換の変更と前記シャッフルネットワーク手段における前記置換の変更とを同一周期で行わせる
ことを特徴とするプログラム。
【請求項１１】
前記メモリ手段に前記メッセージとともにその和が格納されていることを特徴とする請求項１０に記載のプログラム。
【請求項１２】
前記プログラムは、前記シャッフルネットワーク手段における置換をガロア体演算に基づき決定することを特徴とする請求項１０又は請求項１１に記載のプログラム。
【請求項１３】
前記復号方式はmin-sumアルゴリズムに基づき、前記チェックノード関数手段の出力であるメッセージを１より小さい係数を乗じて補正することを特徴とする請求項１０から請求項１２のいずれかに記載のプログラム。
【請求項１４】
前記復号方式はmin-sumアルゴリズムに基づき、前記チェックノード関数手段は入力メッセージの絶対値の最小値とそのインデックス、および入力メッセージの２番目の最小値および入力メッセージの正負の情報を保持することを特徴とする請求項１０から請求項１３のいずれかに記載のプログラム。
【請求項１５】
前記アドレス発生手段の機能のみを変更することで異なる符号の復号に対応することを特徴とする請求項１０から請求項１４のいずれかに記載のプログラム。
【請求項１６】
前記アドレス発生手段および前記シャッフルネットワーク手段の一つに対応する前記変数ノード関数手段の組に対して、その出力において符号語ビットが非常に高い確率で０であるというメッセージを常に送信する機能を設けることで不均一低密度パリティ検査符号の復号を実現することを特徴とする請求項１０から請求項１５のいずれかに記載のプログラム。
【請求項１７】
低密度パリティ検査符号のメッセージ・パッシング復号方式に基づく復号方法であって、
前記低密度パリティ検査符号のパリティ検査行列は置換行列のクロネッカー積の構造を持つ成分から構成され、
前記クロネッカー積の成分を構成する一方の置換行列に対応し、その置換行列の複数の置換に基づいて、受信値および復号方式の過程で発生するメッセージが格納されたメモリのから受信値およびメッセージを読み出すアドレスを発生するステップと、
前記クロネッカー積の成分を構成するもう一方の置換行列に対応し、前記アドレス発生の置換の変更と同一周期で変更される前記置換行列の置換に基づいて、前記復号方式における複数の変数ノード関数と前記復号方式における複数のチェックノード関数とを結びつけるステップと
を有することを特徴とする誤り訂正符号復号方法。
【請求項１８】
前記メモリには、メッセージとともにその和が格納されていることを特徴とする請求項１７に記載の訂正符号復号方法。
【請求項１９】
変数ノード関数とチェックノード関数とを結びつけは、ガロア体演算に基づき決定することを特徴とする請求項１７又は請求項１８に記載の誤り訂正符号復号方法。
【請求項２０】
前記復号方式はmin-sumアルゴリズムに基づき、前記チェックノード関数の出力であるメッセージを１より小さい係数を乗じて補正することを特徴とする請求項１７から請求項１９のいずれかに記載の誤り訂正符号復号方法。
【請求項２１】
前記復号方式はmin-sumアルゴリズムに基づき、前記チェックノード関数は入力メッセージの絶対値の最小値とそのインデックス、および入力メッセージの２番目の最小値および入力メッセージの正負の情報を保持することを特徴とする請求項１７から請求項２０のいずれかに記載の誤り訂正符号復号方法。
【請求項２２】
メモリのアドレスの発生を変更することにより、異なる符号の復号に対応することを特徴とする請求項１７から請求項２１のいずれかに記載の誤り訂正符号復号方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は誤り訂正符号化および復号処理に関し、特に低密度パリティ検査符号（Low-Density Parity-Check Code, 以下、LDPC符号と略す）に対する復号装置に関する。
【０００２】
【従来の技術】
誤り訂正符号は符号化、復号という処理によってデータ伝送時に混入するノイズの影響を低減する技術である。符号化は送信するデータに冗長を付加する処理であり、符号化されたデータを符号語と呼ぶ。通信路に送出された符号語はノイズの影響を受けて受信時には符号語の一部のビットが反転するといったエラーが起こる。復号はこのエラーの影響を受けた受信語から冗長を利用してデータを復元する処理である。
【０００３】
LDPC符号は1960年代に提案された誤り訂正符号であるが、ターボ符号との関連が指摘され、１９９０年代後半になって注目を集めるようになった（例えば、非特許文献１参照。）。
【０００４】
【非特許文献１】
D.J.C.Macky and R.M.Neal, “Good error correcting codes based on very sparse  matrices,” IEEE Transactions on Information Theory 45 pp.399-431, 1999
【０００５】
誤り訂正符号は、一般に推定処理である復号処理が符号化処理に比べて複雑となる。特に、訂正能力の高い大きな符号長の符号で最尤復号、もしくはそれに近い復号性能を出す場合には非常に複雑度が高い処理が必要となる。
【０００６】
LDPC符号は、非常に０の多いパリティ検査行列を持つ、ということで特徴付けられ、この性質から比較的効率の良い高性能復号法が存在している。この復号方法はメッセージ・パッシング復号方式（Message-Passing decoding, 以下、MP復号と略す）と呼ばれている。
【０００７】
以下、LDPC符号のMP復号について説明を行う。尚、簡単のために符号はバイナリであり、変調方式はBPSKでエラーなしの場合は符号語のビット０に対しては＋１、ビット１には−１という軟判定値が受信値となるとする。
【０００８】
LDPC符号におけるMP復号は、パリティ検査行列に対応するタナーグラフと呼ばれる２分グラフを用いて説明される。図１４にパリティ検査行列Ｈと対応するタナーグラフＧの例を示す。
【０００９】
タナーグラフＧのノードは、変数ノードとチェックノードとの２種類に分類される。変数ノードは行列Ｈの列、つまり符号語ビットに対応する。チェックノードは行列Ｈの行に対応する。これに対して行列Ｈで１が立っている関係にあるノード間をエッジで結ぶことによって対応するグラフが構成され、このグラフを行列Ｈに対するタナーグラフと呼ぶ。
【００１０】
LDPC符号の復号法はグラフのエッジに割り当てられた“メッセージ”と呼ばれる量をノードにおいて反復的に更新することで実行される。メッセージはチェックノードから変数ノードと、変数ノードからチェックノードとの２種類が存在し、それぞれノードで計算された符号語ビットの信頼度情報に相当する。
【００１１】
変数ノード、チェックノードでのアルゴリズムについては幾つかの方法が知られている。
【００１２】
最も復号特性が良い方法の一つとしてsum-productアルゴリズムがある。ここでは比較的複雑度の小さいmin-sumアルゴリズムとよばれる方法について説明する。
【００１３】
ある変数ノードに対応する符号語ビットの受信値をｒ、この変数ノードへのチェックノードからのメッセージをc(1)，(2), …, c(d_v)とおく（d_vはこの変数ノードから出ているエッジの個数）。この変数ノードはc(1)に対応するエッジの終点のチェックノードに対しては[式１]で表されるv(1)を送出する。
[式１]  v(1) ←  r + c(2) + … + c(d_v)
v(i) (i=2,…,d)についても同様にrとc(j)（j≠i）との和として算出する。
【００１４】
一方、あるチェックノードへのメッセージをv(1),…,v(d_c) としたとき（d_cはこのチェックノードから出ているエッジの個数）、このチェックノードはv(1)に対応するエッジの終点の変数ノードに対して[式２]で表されるc(1)を送出する。
[式２] c(1) ← sgn(v(2),…,v(d_c))・min{|v(2)|,…,|v(d_c)|}
ここでsgn(v(2), …,v(d_c))はv(i)（i=2,…,d_c）の正負の符号(+1または-1)を乗じた値であり、|a|はaの絶対値、minは最小値を選択する関数である。
【００１５】
c(i)(i=2,…,d)についても同様にv(j)(j≠i)を用いて算出する。
【００１６】
LDPC符号ではノードあたりのエッジの個数が小さいため、[式１]、[式２]の処理の複雑度は小さくて済む。
【００１７】
すべてのノードに対して一通り[式１]及び[式２]を実行する処理の単位を１  iteration処理と呼ぶことにする。MP復号はこの１  iteration処理を繰り返すことで遂行される。繰り返し回数は通常１０から３０回程度である。
【００１８】
最終的な０，１の判定（硬判定）は各符号語ビットにおいて、[式３] の正負を判定することによって行われる。
[式３]  r+c(1)+ … +c(d_v)
この硬判定結果がすべてのチェックノードを満たした時点でMP復号の反復処理は終了する。
【００１９】
グラフＧ全体をそのまま装置化できれば高速化が期待できるが、LDPC符号は通常長い符号長（1000〜）で使用するため、これは困難となる。そこで、メッセージをメモリに格納し、回路を共有してグラフＧのノードを部分的に並列に動作させて装置複雑度とスループットの調節を図ることになる。
【００２０】
この方針に沿って、はじめに部分的に並列に動作する復号器を設計し、それに合致する符号を構成する符号化方式設計がある（例えば、非特許文献２）。
【００２１】
【非特許文献２】
E.Bautillon, J.Castura, and F.R.Kschischang, “Decoder-First Code Design”, the 2ndInternational Symposium on Turbo Codes and Related Topics, pp.459-462, 2000
【００２２】
図１５は非特許文献２に開示された復号器の構成図である。
【００２３】
図１５の復号器について説明する。
【００２４】
メモリ手段１５０１は受信値および[式２]のメッセージc(i)を保持し、図１５の復号器ではこれを複数個持つ。
【００２５】
アドレス発生手段１５０２は、メモリ手段１５０１にアクセスするアドレスを発生し、メモリ手段１５０１と１対１に対応している。
【００２６】
変数ノード関数手段１５０３は、[式１]の処理を実行する回路であり、メモリ手段１５０１と１対１に対応している。
【００２７】
チェックノード関数手段１５０４は、[式２]の処理を実行する回路である。入出力の個数はタナーグラフにおけるチェックノードのエッジの個数と一致している。
【００２８】
シャッフルネットワーク手段１５０５は、変数ノード関数手段１５０３とチェックノード関数手段１５０４との接続を定める。
【００２９】
この復号器では個々の変数ノード関数手段１５０３は、メモリ手段１５０１と１対１に対応しているため、メモリ手段１５０１へのアクセスの衝突なしに並列に動作させることが可能である。
【００３０】
なおかつ、このとき個々のチェックノード関数への全入力が一斉に得られるようになっているため、チェックノード関数手段１５０５も並列に動作させることができる。
【００３１】
このように図１５の復号器を用いて効率よく部分的な並列処理を実現できる。
【００３２】
【発明が解決しようとする課題】
しかしながら、図１５の復号器はその構成が最適化されているわけではなく、より簡易な構成にできる可能性がある。このとき、符号性能の劣化がないようにしなければならない。
【００３３】
また、非特許文献２ではアドレス発生手段やシャッフルネットワーク手段を具体的にどのように与えるのか述べられていない。
【００３４】
さらに、図１５の構成ではシャッフルネットワークがすべての変数ノード関数手段の出力を置換する形態となっているため、実装時のリソースの都合でさらに小さな部分で並列化を行うときには処理を制御するスケジュールが複雑になる恐れがあった。
【００３５】
そこで、本発明は上記課題に鑑みて発明されたものであって、その目的はLDPC符号の復号装置において従来装置と比べて簡易で、かつ柔軟度の高い並列復号器を提供することにある。
【００３６】
【課題を解決するための手段】
本発明の目的を達成する第１の発明は、低密度パリティ検査符号のメッセージ・パッシング復号方式に基づく復号装置であって、
前記低密度パリティ検査符号のパリティ検査行列は、置換行列のクロネッカー積の構造を持つ成分から構成され、
受信値および前記復号方式の過程で発生するメッセージを格納する複数のメモリ手段と、
前記クロネッカー積の成分を構成する一方の置換行列に対応し、その置換行列の複数の置換に基づいて、前記メモリ手段のアドレスを発生する複数のアドレス発生手段と、
前記複数のアドレス発生手段の発生したアドレスに基づいて、前記複数のメモリ手段から受信値又はメッセージを読み出す、前記復号方式における複数の変数ノード関数手段と、
前記復号方式における複数のチェックノード関数手段と、
前記クロネッカー積の成分を構成する他方の置換行列に対応し、その置換行列の複数の置換に基づいて、前記変数ノード関数手段と前記チェックノード関数手段との接続を定める複数のシャッフルネットワーク手段とを有し、
復号過程において、前記アドレス発生手段における前記置換の変更と、前記シャッフルネットワーク手段における前記置換の変更とを同一周期で行うことを特徴とする。
【００３７】
本発明の目的を達成する第２の発明は、上記第１の発明において、前記アドレス発生手段は１個で、すべての前記メモリ手段に対してアドレスを発生し、
前記シャッフルネットワーク手段は１個で、すべての前記変数ノード関数手段と接続されることを特徴とする。
【００３８】
本発明の目的を達成する第３の発明は、上記第１又は第２の発明において、前記メモリ手段は前記メッセージとともにその和を格納することを特徴とする。
【００３９】
本発明の目的を達成する第４の発明は、上記第１、第２又は第３の発明において、前記アドレス発生手段をカウンタで実現することを特徴とする。
【００４０】
本発明の目的を達成する第５の発明は、上記第１、第２、第３又は第４の発明において、前記シャッフルネットワーク手段の置換をガロア体演算に基づき決定することを特徴とする。
【００４１】
本発明の目的を達成する第６の発明は、上記第１、第２、第３、第４又は第５の発明において、前記復号方式はmin-sumアルゴリズムに基づき、前記チェックノード関数手段の出力であるメッセージを１より小さい係数を乗じて補正することを特徴とする。
【００４２】
本発明の目的を達成する第７の発明は、上記第１、第２、第３、第４、第５又は第６の発明において、前記復号方式はmin-sumアルゴリズムに基づき、前記チェックノード関数手段は入力メッセージの絶対値の最小値とそのインデックス、および入力メッセージの２番目の最小値および入力メッセージの正負の情報を保持することを特徴とする。
【００４３】
本発明の目的を達成する第８の発明は、上記第１、第２、第３、第４、第５、第６又は第７の発明において、前記アドレス発生手段のみを変更することで異なる符号の復号に対応することを特徴とする。
【００４４】
本発明の目的を達成する第９の発明は、上記第１、第２、第３、第４、第５、第６、第７又は第８の発明において、前記アドレス発生手段および前記シャッフルネットワーク手段の一つに対応する前記変数ノード関数手段の組に対して、その出力において符号語ビットが非常に高い確率で０であるというメッセージを常に送信する機能を設けることで不均一低密度パリティ検査符号の復号を実現することを特徴とする。
【００４５】
本発明の目的を達成する第１０の発明は、低密度パリティ検査符号のメッセージ・パッシング復号方式に基づく復号を行わせるプログラムであって、
前記低密度パリティ検査符号のパリティ検査行列は、置換行列のクロネッカー積の構造を持つ成分から構成され、
前記プログラムはコンピュータを、
前記クロネッカー積の成分を構成する一方の置換行列に対応し、その置換行列の複数の置換に基づいて、受信値および前記復号方式の過程で発生するメッセージを格納する複数のメモリ手段のアドレスを発生する複数のアドレス発生手段と、
前記複数のアドレス発生手段の発生したアドレスに基づいて、前記複数のメモリ手段から受信値又はメッセージを読み出す、前記復号方式における複数の変数ノード関数手段と、
前記復号方式における複数のチェックノード関数手段と、
前記クロネッカー積の成分を構成する他方の置換行列に対応し、その置換行列の複数の置換に基づいて、前記変数ノード関数手段と前記チェックノード関数手段との接続を定める複数のシャッフルネットワーク手段として機能させ、
復号過程において前記アドレス発生手段における前記置換の変更と前記シャッフルネットワーク手段における前記置換の変更とを同一周期で行わせることを特徴とする。
【００４６】
本発明の目的を達成する第１１の発明は、上記第１０の発明において、前記メモリ手段に前記メッセージとともにその和が格納されていることを特徴とする。
【００４７】
本発明の目的を達成する第１２の発明は、上記第１０又は第１１の発明において、前記プログラムが、前記シャッフルネットワーク手段における置換をガロア体演算に基づき決定することを特徴とする。
【００４８】
本発明の目的を達成する第１３の発明は、上記第１０、第１１又は第１２の発明において、前記復号方式はmin-sumアルゴリズムに基づき、前記チェックノード関数手段の出力であるメッセージを１より小さい係数を乗じて補正することを特徴とする。
【００４９】
本発明の目的を達成する第１４の発明は、上記第１０、第１１、第１２又は第１３の発明において、前記復号方式はmin-sumアルゴリズムに基づき、前記チェックノード関数手段は入力メッセージの絶対値の最小値とそのインデックス、および入力メッセージの２番目の最小値および入力メッセージの正負の情報を保持することを特徴とする。
【００５０】
本発明の目的を達成する第１５の発明は、上記第１０、第１１、第１２、第１３又は第１４の発明において、前記アドレス発生手段の機能のみを変更することで異なる符号の復号に対応することを特徴とする。
【００５１】
本発明の目的を達成する第１６の発明は、上記第１０、第１１、第１２、第１３、第１４又は第１５の発明において、前記アドレス発生手段および前記シャッフルネットワーク手段の一つに対応する前記変数ノード関数手段の組に対して、その出力において符号語ビットが非常に高い確率で０であるというメッセージを常に送信する機能を設けることで不均一低密度パリティ検査符号の復号を実現することを特徴とする。
【００５２】
本発明の目的を達成する第１７の発明は、低密度パリティ検査符号のメッセージ・パッシング復号方式に基づく復号方法であって、
前記低密度パリティ検査符号のパリティ検査行列は置換行列のクロネッカー積の構造を持つ成分から構成され、
前記クロネッカー積の成分を構成する一方の置換行列に対応し、その置換行列の複数の置換に基づいて、受信値および復号方式の過程で発生するメッセージが格納されたメモリのから受信値およびメッセージを読み出すアドレスを発生するステップと、
前記クロネッカー積の成分を構成するもう一方の置換行列に対応し、前記アドレス発生の置換の変更と同一周期で変更される前記置換行列の置換に基づいて、前記復号方式における複数の変数ノード関数と前記復号方式における複数のチェックノード関数とを結びつけるステップと
を有することを特徴とする。
【００５３】
本発明の目的を達成する第１８の発明は、上記第１７の発明において、前記メモリには、メッセージとともにその和が格納されていることを特徴とする。
【００５４】
本発明の目的を達成する第１９の発明は、上記第１７又は第１８の発明において、変数ノード関数とチェックノード関数とを結びつけは、ガロア体演算に基づき決定することを特徴とする。
【００５５】
本発明の目的を達成する第２０の発明は、上記第１７、第１８又は第１９の発明において、前記復号方式はmin-sumアルゴリズムに基づき、前記チェックノード関数の出力であるメッセージを１より小さい係数を乗じて補正することを特徴とする。
【００５６】
本発明の目的を達成する第２１の発明は、上記第１７、第１８、第１９又は第２０の発明において、前記復号方式はmin-sumアルゴリズムに基づき、前記チェックノード関数は入力メッセージの絶対値の最小値とそのインデックス、および入力メッセージの２番目の最小値および入力メッセージの正負の情報を保持することを特徴とする。
【００５７】
本発明の目的を達成する第２２の発明は、上記第１７、第１８、第１９、第２０又は第２１の発明において、メモリのアドレスの発生を変更することにより、異なる符号の復号に対応することを特徴とする。
【発明の実施の形態】
次に、本発明の実施の形態について図面を参照して詳細に説明する。
【００５８】
図１を参照すると、本発明は受信値およびMP復号で必要なメッセージを格納するメモリ手段１０１と、メモリ手段１０１にアクセスするアドレスを発生するアドレス発生手段１０２と、MP復号における変数ノードの処理を行う変数ノード関数手段１０３と、MP復号におけるチェックノードの処理を行うチェックノード関数手段１０４と、変数ノード手段１０３とチェックノード手段１０４とを接続するシャッフルネットワーク手段１０５とを含む。
【００５９】
これらの構成要素の概略を図１に基づいて述べる。以下、K及びDは復号器によって決定される整数で、kは1からK、 dは1からDまでの任意の整数をとるものとする。
【００６０】
メモリ手段１０１は、符号語ビットの組に対応するM(1,1)からM(K,D)までのDK個のメモリから成るメモリ群で、変数ノードに対応する受信値および変数ノードへの入力となるメッセージを格納する。エッジの本数が大きく、メッセージの量が大きい場合はM(k,d)も複数のメモリを用いて実現する場合もある。
【００６１】
アドレス発生手段１０２は、AG(1)からAG(K)までのK個の回路から成る。
【００６２】
AG(k)は同一値域を持つ複数の置換に基づきアドレスを発生し、M(k,1)からM(k,D)までのD個のメモリに対してアドレスを発生する。各AG(k)は複数の置換を周期的に使用する。尚、AG(k)はリアルタイムでアドレスを生成する回路として実現する場合もあるし、メモリ（ROM）を利用して実現する場合もある。
【００６３】
変数ノード関数手段１０３はMP復号における変数ノード処理を実行するVN(1,1)からVN(K,D)までのDK個の回路から成る。各VN(k,d)はメモリ手段１０２のM(k,d)から受信値、メッセージを読み込み、チェックノード関数手段の入力となる一つの出力を生成する。また、VN(k,d)はメモリ手段M(k,d)への書き込みを制御する機能も持つ。この機能は別途手段を用意して対処することも可能である。
【００６４】
チェックノード関数手段１０４は、MP復号におけるチェックノード処理を実行するCN(1)からCN(D)までのD個の回路から成る。複数の変数ノード生成手段１０３で生成されたメッセージを読み込み、それぞれの変数ノードの入力となるメッセージを生成する。生成されたメッセージはメモリ手段１０１に格納される。
【００６５】
シャッフルネットワーク手段１０５は、変数ノード関数手段１０３とチェックノード関数手段１０４とを連結するSN(1)からSN(K)までのK個の回路から成る。SN(k)はVN(k,1)からVN(k,D)とCN(1)からCN(D)のそれぞれ1つの入出力インターフェースが１対１に対応するように接続する。各SN(k)は集合{1,2,…,D}上の複数の置換を用いて実現される。
【００６６】
次に、図２、３、４、５を参照して本実施の形態の全体の動作について詳細に説明する。
【００６７】
図２は本発明の復号装置の動作の概略を示したフローチャートである。
【００６８】
まず、受信値を用いてメモリ手段１０１を初期化する（ステップ２０１）。
【００６９】
次に、アドレス発生手段１０２、シャッフルネットワーク手段１０５の設定を行う（ステップ２０２）。
【００７０】
続いて、設定されたアドレス発生手段１０２、シャッフルネットワーク手段１０５の下でメモリ手段１０１、変数ノード関数手段１０３およびチェックノード関数手段１０４を動作させてメッセージ更新処理を行う（ステップ２０３）。
【００７１】
次にMP復号における1 iteration処理が終了したかどうかを判断する（図２のステップ２０４）。
【００７２】
終了していない場合には、ステップ２０２に戻りアドレス発生手段１０２、シャッフルネットワーク手段１０５を次の設定としてメッセージ更新処理を行う。
【００７３】
ステップ２０４で1 iteration処理が終了している場合には、復号処理を終了するかどうか判断する（図２のステップ２０５）。この終了判定は硬判定結果がパリティ検査行列のすべてのチェックを満たすかどうかで判断する。硬判定結果はメモリ手段１０１に格納する方法も、別のメモリ手段を用意して格納する方法も考えられる。
【００７４】
ステップ２０５で終了と判定された場合には、復号結果を出力して復号処理を終了する（図２のステップ２０６）。終了と判定されなかった場合には、ステップ２０１に戻り、アドレス発生手段１０２、シャッフルネットワーク手段１０５を1 iteration処理の開始時の設定として復号処理を継続する。
【００７５】
図３、４はステップ２０２から２０５の処理の流れを詳しく示した図である。
【００７６】
図３は本発明の復号装置で適用されるLDPC符号のパリティ検査行列の構成を示している。
【００７７】
パリティ検査行列３０１は置換行列R(j,k)をJ×K個並べるパリティ検査符号の構成を示している。パリティ検査行列のブロックR(j,k)の構造式３０２はR(j, k)が更に二つの置換行列Q(j, k)とP(j, k)のクロネッカー積で表されていることを示している。R(j,k)はQ(j,k)の要素が１の場合にはP(j,k), 0の場合にはP(j,k)と同じ大きさの零行列で置き換えることで定義される行列である。
【００７８】
図１のDはP(j, k)の大きさに対応している。Q(j,k) が大きさEのとき、
R(j,k)はDEの大きさの置換行列となる。
【００７９】
図４は図３のパリティ検査行列に対して、アドレス発生手段１０２およびシャッフルネットワーク手段１０５の個数Kが図３の検査行列の列ブロックの個数と一致している場合のステップ２０２から２０５までの処理フローについて、特にステップ２０２について詳述した流れ図である。
【００８０】
まず、パリティ検査行列の行ブロックのインデックスjを初期値(j=1)に設定する（ステップ４０１）。
【００８１】
次に、アドレス発生手段１０２であるAG(1)からAG(K)をQ(j,1)からQ(j,K)に、シャッフルネットワーク手段１０５であるSN(1)からSN(K)をP(j,1)からP(j,K)に設定する（ステップ４０２）。
【００８２】
メッセージ更新処理のステップ４０３は後で詳述する。
【００８３】
次に、jを１インクリメントしてj=J+1となったら1 iteration処理終了と判定する（ステップ４０４、４０５）。
【００８４】
１  iteration処理が終了していないときにはステップ４０２に戻る。そうでないときにはステップ２０５と同一に終了判定をする（ステップ４０６）。
【００８５】
終了と判定されなかったときにはステップ４０１に戻り新たなiteration処理を開始する。
【００８６】
図５は図４のステップ４０３のメッセージ更新処理を説明する図である。以下、kは1からKまでのすべての整数をとり、dは1からDまでのすべての整数をとるとする。
【００８７】
置換行列Q(j,k)の大きさをEとして、Q(j,k)[e]でQ(j,k)のe行目で1が立っている位置を表すとする。まずQ(j,k)の行のインデックスeを初期設定(e=1)する（ステップ５０１）。
【００８８】
次に、アドレス発生手段１０２のAG(k)ではQ(j,k)[e]を発生する（ステップ５０２）。
【００８９】
続いて、変数ノード関数手段１０３のVN(k,d)はメモリ手段M(k,d)からQ(j,k)[e]に基づいて決定されるアドレスの受信値、メッセージを読み込み、チェックノード関数手段１０５へのメッセージを生成する。また、直前のステップでチェックノード関数手段で生成されたメッセージを用いてM(k,d)における直前のステップで指定されたアドレスの内容を更新する（ステップ５０３）。
【００９０】
次にVN(k,1)からVN(k, D)で生成されたメッセージをシャッフルネットワーク手段SN(k)を介してチェックノード関数手段１０５へ送出する（ステップ５０４）。
【００９１】
SN(k)は、置換行列P(j,k)で決定される順序で変数ノード関数手段とチェックノード関数手段とを連結している。
【００９２】
次に、チェックノード関数手段ではメッセージを生成する（ステップ５０５）。ここでCN(d)は各エッジに対してメッセージを生成する。
【００９３】
CN(d)で生成されたメッセージは、SN(k)に基づき変数ノード関数手段へ返される（ステップ５０６）。
【００９４】
次に、eを1インクリメントしてe=E+1となったらAG(k)がQ(j,k)に、SN(k)がP(j,k)に基づく処理は終了であると判定する（ステップ５０７、５０８）。
【００９５】
そうでないときにはステップ５０２に戻り処理を継続する。ステップ５０１から５０７までの処理はパイプライン化して行うことが可能である。
【００９６】
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。
【００９７】
本発明における大きな特徴の一つはシャッフルネットワーク手段１０５がSN(1)からSN(K)までの複数の局所的なシャッフルネットワークで構成されている点である。
【００９８】
なお、かつアドレス発生手段１０２もシャッフルネットワーク手段１０５と同一の単位でメモリ手段へのアドレスを発生しているために、この構成単位に基づいた任意の並列度で実装することが可能となる。つまり図３のパリティ検査行列における列ブロックの個数に依らずに図１においてKの大きさを適切に設定して、並列度と装置複雑度を調節した実装を行うことが可能となる。
【００９９】
本発明における第２の発明の実施の形態は図１で特にK=1の場合を示しており、図６を参照するとメモリ手段６０１（ M(1),…,M(D)）と、アドレス発生手段６０２（AG）と、変数ノード関数手段６０３（VN(1),…,VN(D)）と、シャッフルネットワーク手段６０４（SN）と、チェックノード関数手段６０５（CN(1),…,CN(d)）で構成される。アドレス発生手段６０２は１個の回路で共有し、図１の１０２と比較してより多くのアドレスパタンを生成できるようにする必要がある。同様にシャッフルネットワーク手段６０４は１個の回路からなり、図１の１０４と比較してより多くの置換を表すことが可能であるようにする必要がある。チェックノード関数手段２０５は図１の１０５と比較して一度の入力数が小さくなるためにより簡単な構成とすることも可能である。
【０１００】
図７は図３のパリティ検査行列を持つLDPC符号に対して図６の復号器を適用したときの処理の詳細な流れ図である（図５、図６との対比）。図７でｊは図３のパリティ検査行列の行方向のブロックのインデックス、kは列方向のブロックのインデックスを表す。
【０１０１】
また、eは図３のQ(j,k) (大きさE)の行のインデックスを表す。まずjを初期設定(j=1)する（ステップ７０１）。次にeを初期設定(e=1)する（ステップ７０２）。
【０１０２】
次に、kを初期設定(k=1)する（ステップ７０３）。設定されたj,kに基づいてアドレス生成手段６０２であるAG, シャッフルネットワーク手段６０４であるSNをそれぞれQ(j,k), P(j,k)に設定する（ステップ７０４）。
【０１０３】
次にAGでM(1),…,M(D)のアドレスQ(j,k)[e]を発生する（ステップ７０５）。
【０１０４】
次に、変数ノード関数手段６０３のVN(d)において読み込んだ情報に基づいてメッセージを生成するとともに、以前にチェックノード関数手段６０５で生成されたメッセージを用いてM(d)の内容を更新する（ステップ７０６）。
【０１０５】
次に、ステップ７０６で生成されたメッセージを、SNを通してチェックノード関数手段６０５へ送出する（ステップ７０７）。
【０１０６】
次に、チェックノード関数手段６０５のCN(d)においてメッセージ更新処理を行う（ステップ７０８）。ここで図５のステップ５０５と異なり、CN(d)では全入力が揃っていないため、各ステップではメッセージ生成の途中の段階までを行っておくことになる。次にSNを通じて、CN(d)で以前に生成されたメッセージの中で生成されたものを変数ノード関数手段に送出する（ステップ７０９）。これがステップ７０６のM(d)更新のためのメッセージとなる。
【０１０７】
次に、列方向のインデックスを更新して、列方向の処理が終了しているかどうかを判定する（ステップ７１０，７１１）。
【０１０８】
終了している場合にはCN(d)においてメッセージを生成する（ステップ７１２）。
【０１０９】
次に、Q(j,k)のインデックスを更新して、Q(j,k)の次の列についてメッセージ更新を行うかどうかを判定する（ステップ７１３，７１４）。
【０１１０】
図７のステップ７１５、７１６、７１７は図４の４０４、４０５、４０６と同一である。
【０１１１】
【実施例】
次に、具体的な実施例を用いて本実施の形態の動作を説明する。
【０１１２】
復号の前に符号化の方法であるが、これは図８に示すように、情報Uに対してパリティ検査行列に乗じて0になるように冗長Pを付加する処理を符号器８０１で行う。
【０１１３】
このときに使用する行列は復号器で使用するHそのものではなく、符号化が容易になるように列を入れ替えた行列H’が用いられることがある。
【０１１４】
この場合には復号器の順序になるようにインターリーブ８０３を介して送信する。
【０１１５】
次に図３のパリティ検査行列の具体例を図９に示す。図９はJ=2, K=3の場合で、パリティ検査行列構成要素９０１はQ(j,k)の例を示している（大きさE=2）。
【０１１６】
９０１において例えばQ(2,1)は左下の2×2の部分行列、Q(1,3)は右上の2×2の部分行列に対応する。パリティ検査行列構成要素９０２のP(j,k)の例についても同様である（大きさD=3）。パリティ検査行列９０３は９０１のQ(j,k)と９０２のP(j,k)のクロネッカー積で表される置換を部分行列とするパリティ検査行列である。
【０１１７】
以下、図９のパリティ検査行列に基づいて図１の復号器の実施例を述べる。
【０１１８】
図１０(a)はメモリ手段１０１の構成例を示しており、M(k,d)の各エントリが何番目の符号語ビットのデータを保持しているかを示している。例えばM(1,1)は第１、４番目の符号語ビット、M(2,1)第7,10番目の符号語ビットに対応するデータを保持していることを示している。一般にM(k,d)はDおきのE個の符号語ビットに対応するデータを保持している。図１０（ｂ）はM(k,d)の一つのエントリの構造を示している。
【０１１９】
図９のパリティ検査行列のグラフでは変数ノードのエッジの個数は２のため、２個のメッセージc(1),c(2)と受信値から構成されている。
【０１２０】
以下、図５、６の処理の流れを図９のパリティ検査行列の場合について述べる。
【０１２１】
最初にステップ４０１でj=1に設定され、AG(1), AG(2),AG(3),SN(1),SN(2),SN(3)は、それぞれQ(1,1),Q(1,2),Q(1,3),P(1,1),P(1,2),P(1,3)に基づいて設定される。
【０１２２】
次にステップ５０１でe=1に設定され、AG(1), AG(2), AG(3)でアドレスが発生される。
【０１２３】
図９の９０１のQ(j,k)は2種類の置換から構成されており、(j,k)=(1,1),(1,3),(2,2)については式[式4] というアドレスを発生する。
[式4] Q(j,k)[1] = 1, Q(j,k)[2] = 2
また、(j,k)=(1,2),(2,1),(2,3)については、式[式５] というアドレスを発生する。
[式５] Q(j,k)[1] = 2, Q(j,k)[2] = 1
よってj=1,e=1でAG(1),AG(2),AG(3)で発生されるアドレスは[式４]、[式５]からそれぞれ1, 2, 1である。このアドレスに対する符号語ビットのインデックスは図１０から順に1,2,3,10,11,12,13,14,15となる。当然であるが、図９の９０３の行列で最初の３行で要素が１である列番号に対応していることに注意する。
【０１２４】
第m番目の符号語ビットに対応する図１１のメッセージ、受信値をc(m,1),c(m,2),r(m)で表すとする。このときVN(k,d)で[式１]に基づいて生成されるメッセージv(k,d)は次のようになる。
[式６]
VN(1,1): v(1,1) ←  r(1) + c(1,2)
VN(1,2): v(1,2) ←  r(2) + c(2,2)
VN(1,3): v(1,3) ←  r(3) + c(3,2)
VN(2,1): v(2,1) ←  r(10) + c(10,2)
VN(2,2): v(2,2) ←  r(11) + c(11,2)
VN(2,3): v(2,3) ←  r(12) + c(12,2)
VN(3,1): v(3,1) ←  r(13) + c(13,2)
VN(3,2): v(3,2) ←  r(14) + c(14,2)
VN(3,3): v(3,3) ←  r(15) + c(15,2)
シャッフルネットワーク手段SN(1), SN(2), SN(3)は、９０２のP(1,1),P(1,2),P(1,3)の置換行列に基づくため、チェックノード関数手段CN(1),CN(2),CN(3)への入力は次のようになる。
CN(1): v(1,3), v(2,1), v(3,2)
CN(2): v(1,2), v(2,2), v(3,3)
CN(3): v(1,1), v(2,3), v(3,1)
CN(1), CN(2), CN(3)では[式２]に基づいてメッセージが生成される。
【０１２５】
ここで生成されるメッセージは[式６]から次のものである。
[式７]
CN(1): c(3,1), c(10,1), c(14,1)
CN(2): c(2,1), c(11,1), c(15,1)
CN(3): c(1,1), c(12,1), c(13,1)
ここで生成されたメッセージはSN(1), SN(2), SN(3)を介して送出され、M(k,d)を更新する。
【０１２６】
次のステップであるj=1, e=2ではステップ５０８の分岐からAG(k),SN(k)は、そのままで、M(k,d)でのアドレスがQ(j,k)[2]に対応する符号語ビットに関してのメッセージの処理を実行する。このとき、[式６]、[式７]は以下のようになる。
【０１２７】
VN(1,1): v(1,1) ←  r(1) + c(4,2)
VN(1,2): v(1,2) ←  r(2) + c(5,2)
VN(1,3): v(1,3) ←  r(3) + c(6,2)
VN(2,1): v(2,1) ←  r(10) + c(7,2)
VN(2,2): v(2,2) ←  r(11) + c(8,2)
VN(2,3): v(2,3) ←  r(12) + c(9,2)
VN(3,1): v(3,1) ←  r(13) + c(16,2)
VN(3,2): v(3,2) ←  r(14) + c(17,2)
VN(3,3): v(3,3) ←  r(15) + c(18,2)
CN(1): c(6,1), c(7,1), c(17,1)
CN(2): c(5,1), c(8,1), c(18,1)
CN(3): c(4,1), c(9,1), c(16,1)
次のステップであるj=2,e=1の場合はステップ４０５の分岐からステップ４０２に戻り、AG(1),AG(2),AG(3),SN(1),SN(2),SN(3)はそれぞれQ(2,1),Q(2,2),Q(2,3),P(2,1),P(2,2),P(2,3)に設定される。このとき[式６]、[式７]は以下のようになる。
【０１２８】
VN(1,1): v(1,1) ←  r(4) + c(4,1)
VN(1,2): v(1,2) ←  r(5) + c(5,1)
VN(1,3): v(1,3) ←  r(6) + c(6,1)
VN(2,1): v(2,1) ←  r(7) + c(7,1)
VN(2,2): v(2,2) ←  r(8) + c(8,1)
VN(2,3): v(2,3) ←  r(9) + c(9,1)
VN(3,1): v(3,1) ←  r(16) + c(16,1)
VN(3,2): v(3,2) ←  r(17) + c(17,1)
VN(3,3): v(3,3) ←  r(18) + c(18,1)
CN(1): c(6,2), c(8,2), c(16,2)
CN(2): c(4,2), c(9,2), c(18,2)
CN(3): c(5,2), c(7,2), c(17,2)
同様にj=2,e=2の処理を実行して1 iteration処理が終了する。
【０１２９】
以下、図１の構成要素のヴァリエーションについて述べる。
変数ノードの次数が高いときには図１１に示すように、メモリ手段の各エントリにおいてrの代わりにrとメッセージの和を保持しておく方法も考えられる。図１１では[式１]の処理が一度の減算で済むため、変数ノードの次数が高い場合には計算量の削減を図ることができる。
【０１３０】
次に、アドレス発生手段１０２については簡単な回路によってアドレスを発生することで装置複雑度を低減することができる。最も簡単な置換は巡回置換であり、これはカウンタを巡回的に用いて実現できる。カウンタの初期値を変更することで異なる置換を表すことができ、カウンタの周期を変えることで異なる符号長の符号の復号も実行可能となる。
【０１３１】
アドレス発生手段を巡回置換で構成した場合にはシャッフルネットワーク手段１０５はそれよりは複雑な置換とすることで符号性能を向上させることができる。この中でも回路としての実装が容易なものとして、ガロア体の乗除算や指数・対数演算を用いる方法が挙げられる。
【０１３２】
チェックノード関数手段１０５はMP復号をmin-sumアルゴリズムとすることで比較的実装が容易となるが、このとき復号性能が最良の場合であるsum-productアルゴリズムに比べて劣化する。この問題に対してチェックノードで生成されるメッセージに対しては１より小さい正数を乗ずることで特性を改善することができる。
【０１３３】
図６の第２の実施の形態において、チェックノード関数手段６０５は各ステップで１入力ずつ得ることになる。[式２]のmin-sumアルゴリズムを用いている場合には図１２に示すようにチェックノード関数手段を簡易に実現することが可能となる。変数ノード関数手段からのメッセージは分離手段１２００で絶対値部分と正負の符号部分に分離される。絶対値部分は二つの比較器１２０１、１２０４を用いて最小のもの二つを求める。レジスタ１２０２は最小の絶対値を、レジスタ１２０５は２番目に小さい絶対値を保持する。レジスタ１２０３は最小の絶対値となるインデックスを保持する。一方、正負の符号部分はレジスタ１２０６に保持するとともに全体の排他的論理和もレジスタ１２０７に保持しておく。これだけの情報を保持すれば[式２]の出力を各エッジに対して生成することは容易に行うことができる。
【０１３４】
以上、図３のパリティ検査行列ように行、列の１の個数が一定の正則なLDPC符号について実施例を示してきたが、本発明は非正則なLDPC符号の復号にも適用可能である。図４の(P(j,k)), (Q(j,k))においていくつかのブロックを零行列に置き換えることによって非正則なLDPC符号を構成することができる。
【０１３５】
このとき図１、６に示した復号器を適用することができる。図１の復号器の場合、零行列に当たる部分に対しては0である確率が非常に高いと常に設定することで対処することができる。また、図６の復号器では零行列にあたる部分は単にスキップすればよい。
【０１３６】
図１３は優れた符号特性が得られる非正則なパリティ検査行列の例で、J=5,K=10の図４の行列において置換行列をいくつか零行列に置き換えたものである（Pは置換行列、0は零行列）。本発明ではこのように置換行列を並べたパリティ検査行列を持つ符号の復号器として動作するため、与えられたJ,Kの下で最適な非正則なパリティ検査行列の構成を求めることが容易となる。
【０１３７】
尚、上述の第１の実施の形態及び第２の実施の形態における、アドレス発生手段１０２と、変数ノード関数手段１０３と、チェックノード関数手段１０４と、シャッフルネットワーク手段１０５との全部又は一部をプログラムで動作するＣＰＵやＭＰＵによって置き換えても良い。
【０１３８】
【発明の効果】
第１の効果は、アドレス発生手段１０２およびシャッフルネットワーク手段を複数の置換として実現し、かつアドレス発生手段を複数のメモリ手段に対応させることで符号性能を保ったまま装置規模削減を図ることができることである。
【０１３９】
符号性能を保つことができる理由は、アドレス発生手段１０２とシャッフルネットワーク手段１０５における置換を同一周期で変更するために図３に示すパリティ検査行列を持つLDPC符号の復号に対応でき、このパリティ検査行列の中では性能の良い符号が構成できるためである。
【０１４０】
第２の効果は、並列度と装置規模のトレードオフの調節が可能な柔軟な装置構成を与えることができることにある。その理由は、シャッフルネットワーク手段１０５の各シャッフルネットワークが変数ノード関数手段１０３の一部のものと局所的に連結されているために、この単位の倍数で任意の並列度で実装しても回路を実行するスケジュールが容易に組めることにある。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態の構成を示すブロック図である。
【図２】第１の実施の形態の動作の流れ図である。
【図３】第１の実施の形態に適用されるLDPC符号のパリティ検査行列の構成である。
【図４】第１の実施の形態の図３のパリティ検査行列に対する動作を示す流れ図である。
【図５】第１の実施の形態の図３のパリティ検査行列に対する動作を示す流れ図である。
【図６】本発明の第２の実施の形態の構成を示すブロック図である。
【図７】第２の実施の形態の動作の流れ図である。
【図８】本発明の復号装置に対する符号化装置のブロック図である。
【図９】第１の実施の形態に適用されるLDPC符号のパリティ検査行列の例を示す図である。
【図１０】第１の実施の形態におけるメモリ手段の構成例を示す図である。
【図１１】第１の実施の形態におけるメモリ手段の構成例を示す図である。
【図１２】第２の実施の形態におけるチェックノード関数手段の構成例を示す図である。
【図１３】本発明が適用される非正則なLDPC符号のパリティ検査行列の例を示す図である。
【図１４】  LDPC符号のパリティ検査行列とそのタナーグラフの例を示す図である。
【図１５】復号装置の従来例を示す図である。
【符号の説明】
１０１、６０１、１５０１    メモリ手段
１０２、６０２、１５０２    アドレス発生手段
１０３、６０３、１５０３    変数ノード関数手段
１０４、６０５、１５０４    チェックノード関数手段
１０５、６０４、１５０５     シャッフルネットワーク手段
【図１】
0004062435.tif 000002
【図２】
0004062435.tif 000003
【図３】
0004062435.tif 000004
【図４】
0004062435.tif 000005
【図５】
0004062435.tif 000006
【図６】
0004062435.tif 000007
【図７】
0004062435.tif 000008
【図８】
0004062435.tif 000009
【図９】
0004062435.tif 000010
【図１０】
0004062435.tif 000011
【図１１】
0004062435.tif 000012
【図１２】
0004062435.tif 000013
【図１３】
0004062435.tif 000014
【図１４】
0004062435.tif 000015
【図１５】
0004062435.tif 000016