(57)【特許請求の範囲】
【請求項１】
入力された低密度パリティ検査符号から、低密度パリティ検査行列に対応した複数のチェックノード及び複数のビットノードの間でメッセージのやり取りをイタレーション毎に繰り返して復号しメッセージ計算式を近似しメッセージ数を削減したSum-Product-Algorithmを適用したLDPC復号装置であって、
時間的に前と後の関係にある少なくとも２つのイタレーションのうち一のイタレーションにおけるチェックノードのメッセージ計算の順番と、他のイタレーションにおけるチェックノードのメッセージ計算の順番とを変えるスケジュール部を備えている、ことを特徴とするLDPC復号装置。
【請求項２】
一のビットノードから前記一のビットノードに接続された全てのチェックノードへ同一メッセージを渡すように制御する手段を備えている、ことを特徴とする請求項１記載のLDPC復号装置。
【請求項３】
N個のクラスタ（クラスタサイズが１のとき１クラスタあたり１チェックノード）を有し、メッセージ計算の処理遅延Dのチェックノードでメッセージ計算を行う場合、
前記スケジュール部は、
第Xイタレーションの第Y番目にメッセージを計算するクラスタを、
(((Y-1)+(X-1)*(N-D))%N)+1    
（ただし、%は剰余を表す。）
とする、ことを特徴とする請求項１記載のLDPC復号装置。
【請求項４】
前記ビットノードから前記チェックノードに入力されるメッセージのうち前記チェックノードから前記ビットノードに入力されたメッセージに重み付けを行う手段を含む、ことを特徴とする請求項１記載のLDPC復号装置。
【請求項５】
一のビットノードから前記一のビットノードに接続された全てのチェックノードへ同一メッセージを渡すように制御する手段と、
前記ビットノードが、前記チェックノードに入力されるメッセージ内において、前記チェックノードから出力されたメッセージの割合が少なくなるように制御する手段と、
を備えている、ことを特徴とする請求項４記載のLDPC復号装置。
【請求項６】
前記チェックノードで過去に計算されたメッセージほど、前記メッセージの影響が少なくなるようにする、ことを特徴とする請求項４記載のLDPC復号装置。
【請求項７】
前記ビットノードが、前記チェックノードから受け取ったメッセージを保持し、以降、前記チェックノードからメッセージを受け取るたびに、前記保持するメッセージに対して１よりも小の正値の重みを乗算し乗算結果を保持する手段を備えている、ことを特徴とする請求項４記載のLDPC復号装置。
【請求項８】
前記ビットノードは、チェックノードからｉ回目（ｉは２以上の正数）にメッセージを受け取った際に、重み係数をｗとして、チェックノードからｊ回目（ただし、ｊは１以上でｉより小の整数）に受け取ったメッセージに対してｗ（ｉ−ｊ）を乗じたものと、ｉ回目（ｉは２以上の正数）の前記メッセージに基づき、前記チェックノードへのメッセージを計算する、ことを特徴とする請求項７記載のLDPC復号装置。
【請求項９】
入力された低密度パリティ検査符号から、低密度パリティ検査行列に対応した複数のチェックノード及び複数のビットノードの間でメッセージのやり取りをイタレーション毎に繰り返して復号しメッセージ計算式を近似しメッセージ数を削減したSum-Product-Algorithmを適用したLDPC復号装置において、
一のビットノードから、前記一のビットノードに接続された全てのチェックノードへ同一メッセージを渡すように制御する手段と、
時間的に前と後の関係にある少なくとも２つのイタレーションのうち一のイタレーションにおけるチェックノードのメッセージ計算の順番と、他のイタレーションにおけるチェックノードのメッセージ計算の順番とを変えることで、前記チェックノードに入力されるメッセージ内における、前記チェックノードと同一のチェックノードから以前に出力されたメッセージの割合が少なくなるように制御する手段と、
を備えている、ことを特徴とするLDPC復号装置。
【請求項１０】
入力された低密度パリティ検査符号から、低密度パリティ検査行列に対応した複数のチェックノード及び複数のビットノードの間でメッセージのやり取りをイタレーション毎に繰り返して復号しメッセージ計算式を近似しメッセージ数を削減したSum-Product-Algorithmを適用したLDPC復号方法であって、
時間的に前と後の関係にある少なくとも２つのイタレーションのうち一のイタレーションにおけるチェックノードのメッセージ計算の順番と、他のイタレーションにおけるチェックノードのメッセージ計算の順番とを変える工程を含む、ことを特徴とするLDPC復号方法。
【請求項１１】
一のビットノードから前記一のビットノードに接続された全てのチェックノードに対して同一メッセージが渡される、ことを特徴とする請求項１０記載のLDPC復号方法。
【請求項１２】
N個のクラスタ（クラスタサイズが１のとき１クラスタあたり１チェックノード）を有し、メッセージ計算処理遅延Dのチェックノードでメッセージ計算を行う場合、第Xイタレーションの第Y番目にメッセージを計算するクラスタを、
(((Y-1)+(X-1)*(N-D))%N)+1    
（ただし、%は剰余を表す。）とする、ことを特徴とする請求項１０記載のLDPC復号方法。
【請求項１３】
前記ビットノードから前記チェックノードに入力されるメッセージのうち前記チェックノードから前記ビットノードに入力されたメッセージに重み付けを行う工程を含む、ことを特徴とする請求項１０記載のLDPC復号方法。
【請求項１４】
一のビットノードから前記一のビットノードに接続された全てのチェックノードに対して同一メッセージを渡すように制御する工程と、
前記ビットノードが、前記チェックノードに入力されるメッセージ内において、前記チェックノードから出力されたメッセージの割合が少なくなるように制御する工程と、
を備えている、ことを特徴とする請求項１３記載のLDPC復号方法。
【請求項１５】
前記チェックノードで過去に計算されたメッセージほど、前記メッセージの影響が少なくなるようにする、ことを特徴とする請求項１３記載のLDPC復号方法。
【請求項１６】
前記ビットノードが、前記チェックノードから受け取ったメッセージを保持し、以降、前記チェックノードからメッセージを受け取るたびに、前記保持するメッセージに対して１よりも小の正値の重みを乗算し乗算結果を保持する工程を含む、ことを特徴とする請求項１３記載のLDPC復号方法。
【請求項１７】
前記ビットノードは、チェックノードからｉ回目（ｉは２以上の正数）にメッセージを受け取った際に、重み係数をｗとして、チェックノードからｊ回目（ただし、ｊは１以上でｉより小の整数）に受け取ったメッセージに対してｗ（ｉ−ｊ）を乗じたものと、ｉ回目（ｉは２以上の正数）の前記メッセージに基づき、前記チェックノードへのメッセージを計算する、ことを特徴とする請求項１６記載のLDPC復号方法。
【請求項１８】
入力された低密度パリティ検査符号から、低密度パリティ検査行列に対応した複数のチェックノード及び複数のビットノードの間でメッセージのやり取りをイタレーション毎に繰り返して復号しメッセージ計算式を近似しメッセージ数を削減したSum-Product-Algorithmを適用したLDPC復号処理を実行するコンピュータに、
時間的に前と後の関係にある少なくとも２つのイタレーションのうち一のイタレーションにおけるチェックノードのメッセージ計算の順番と、他のイタレーションにおけるチェックノードのメッセージ計算の順番とを変える処理を、実行させるプログラム。
【請求項１９】
請求項１８記載のプログラムにおいて、
N個のクラスタ（クラスタサイズが１のとき１クラスタあたり１チェックノード）を有し、メッセージ計算の処理遅延Dのチェックノードでメッセージ計算を行う場合、
第Xイタレーションの第Y番目にメッセージを計算するクラスタを、
(((Y-1)+(X-1)*(N-D))%N)+1    
（ただし、%は剰余を表す。）
とする、ことを特徴とするプログラム。
【請求項２０】
請求項１８記載のプログラムにおいて、
前記ビットノードから前記チェックノードに入力されるメッセージのうち前記チェックノードから前記ビットノードに入力されたメッセージに重み付けを行う処理を、
前記コンピュータに実行させるプログラム。
【請求項２１】
請求項２０記載のプログラムにおいて、
一のビットノードから前記一のビットノードに接続された全てのチェックノードへ同一メッセージを渡すように制御する処理と、
前記ビットノードが、前記チェックノードに入力されるメッセージ内において、前記チェックノードから出力されたメッセージの割合が少なくなるように制御する処理と、
を前記コンピュータに実行させるプログラム。
【請求項２２】
請求項２０記載のプログラムにおいて、
前記チェックノードで過去に計算されたメッセージほど、前記メッセージの影響が少なくなるようにする処理を、
前記コンピュータに実行させるプログラム。
【請求項２３】
請求項２０記載のプログラムにおいて、
前記ビットノードが、前記チェックノードから受け取ったメッセージを保持し、以降、前記チェックノードからメッセージを受け取るたびに、前記保持するメッセージに対して１よりも小の正値の重みを乗算し乗算結果を保持する処理を、
前記コンピュータに実行させるプログラム。
【請求項２４】
請求項２３記載のプログラムにおいて、
前記ビットノードは、チェックノードからｉ回目（ｉは２以上の正数）にメッセージを受け取った際に、重み係数をｗとして、チェックノードからｊ回目（ただし、ｊは１以上でｉより小の整数）に受け取ったメッセージに対してｗ（ｉ−ｊ）を乗じたものと、ｉ回目（ｉは２以上の正数）の前記メッセージに基づき、前記チェックノードへのメッセージを計算する処理を、
前記コンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、復号技術に関し、低密度パリティ検査符号（Low Density Parity Check Codes、「ＬＤＰＣ」と略記される）の復号に用いて好適な装置と方法並びにプログラムに関する。
【背景技術】
【０００２】
近年、誤り訂正技術は、無線、有線、記録システムにおいて幅広く利用されている。この中で低密度パリティ検査符号（ＬＤＰＣ）と、その復号法であるｓｕｍ−ｐｒｏｄｕｃｔアルゴリズム（以下「ＳＰＡ」と略記される）の組み合わせは、非常に強力な復号特性を持ち、次世代の誤り訂正符号として有望視されている。送信側の符号化器では、後述する検査行列Hを生成し、生成行列G（ｋ行ｎ列、ｋは情報長、ｎは符号語長）を求める（ただし、GHT＝０（Tは転置行列））。符号化器は情報長ｋのメッセージ（m1,m2,…,mk）を受け取り生成行列Gを用いて（m1,m2,…,mk）Gから符号語(c1,c2,…,cn)を生成し（ただし、(c1,c2,…,cn)HT＝０）、生成した符号語を変調して送信する。復号器では、通信路を介して受け取った変調信号を復調し、ＳＰＡによる繰り返し復号を行い、推定結果（もとの（m1,m2,…,mk））を出力する（特許文献１）。ＬＤＰＣ符号とＳＰＡ復号についてその概略を説明しておく。
【０００３】
ＬＤＰＣ符号は非常に疎な検査行列により定義される線形符号である。ＬＤＰＣ符号の検査行列は、「ターナーグラフ」と呼ばれる２部グラフにより表現できる。Ｍ＊Ｎ行列である検査行列Ｈが与えられているものとする。ターナーグラフを構成するノード（頂点）は、Ｎ個のビットノードと、Ｍ個のチェックノードから構成される。ビットノード、チェックノードは検査行列Ｈの列と行にそれぞれ対応しており、検査行列Ｈのｉ行ｊ列の要素が１の場合、ｊ番目のビットノードとｉ番目のチェックノードとが結ばれる。
【０００４】
一例として、検査行列Hが式（１）の場合、そのターナーグラフは、図５に示したものとなる。
【０００５】
0004526451.tif 000002
【０００６】
各ビットノードは、受信ビット（符号語の各シンボル）に対応し、各チェックノードはそれぞれが接続するビットノード間（シンボル間）のパリティ検査制約（条件）に対応する。上記検査行列Hにおいて、符号語長１０のメッセージ（m1,…,m10）についてパリティ検査条件として、チェックノード１はm1+m2+m3+m4=0に対応し、チェックノード２はm1+m5+m6+m7=0に対応し、チェックノード３はm1+m8+m9+m10=0に対応する。
【０００７】
ＳＰＡは、ＬＤＰＣ符号を定義する検査行列から構成されるターナーグラフ上でメッセージを送受して復号を行う。接続するビットノードとチェックノード間でのメッセージのやりとりの１往復分を「１イタレーション（one iteration）」と呼ぶ（なお、iterationはイテレーションともいう）。
【０００８】
十分な復号特性を得るためには複数回のイタレーションが必要となる。ノード間でやりとりされるメッセージのうちビットノードｎからチェックノードｍへのメッセージQnmは、次式（２）で与えられる。また、チェックノードｍからビットノードｎへのメッセージRmnは、次式（３）で与えられる。なお、複数回のイタレーションの後のビットノードにおけるメッセージQnmの計算結果の符号に応じて受信ビットの推定が行われる（符号の正負に応じて０、１）。
【０００９】
0004526451.tif 000003
【００１０】
ただし、式（２）のm'に関するRm'nの総和演算（ΣRm'n）におけるm'∈μ(n)のμ(n)はビットノードnに隣接するチェックノードのセット（集合）を表している。すなわち、検査行列Hの第ｎ列目の１がたっている行番号の集りであり、上式（１）の検査行列Hの場合、μ(1)={1,2,3}、μ(2)={1}である。
【００１１】
また、式（２）において、ln[pn(1)/pn(0)]は、入力LLR(Log Likelihood Ratio:対数尤度比)である。なお、ln[pn(1)/pn(0)]は、後述の（ln[P(yn｜xn=0)/P(yn｜xn=1)]）と同じものを表す。
【００１２】
0004526451.tif 000004
【００１３】
ただし、
0004526451.tif 000005
【００１４】
式（３）のn'に関するQn'mの総和演算（ΣQn'm）、及び、sign(Qn'm)の積演算Πsign(Qn'm)におけるn'∈ν(m)のν(m)は、チェックノードｍに隣接（接続）するビットノードのセット（集合）である。すなわち、式（１）の検査行列Hの第ｍ行目の１がたっている列番号であり、上式（１）の検査行列Hの場合、ν(１)＝{1,2,3,4}である。
【００１５】
ＬＤＰＣ復号器を実現する場合、従来より、チェックノードを複数のグループに分割し、パイプライン処理でメッセージ計算を行う構成が用いられている。このグループ分けを「クラスタリング」と呼び、計算順序を「スケジューリング」と呼ぶ。
【００１６】
図６は、式（１）で定義されるＬＤＰＣ符号を、クラスタサイズ１（１クラスタあたり１チェックノード）で復号した場合のメッセージ伝達の様子を示す図である。図６には、図５に示したターナーグラフ（クラスタサイズ１）の場合のビットノードとチェックノード間のメッセージ伝達の様子が示されている。図６において、図５と同様に、数字（ビットノード番号）を囲んだ丸印がビットノード、数字（チェックノード番号）を囲んだ長方形がチェックノードを表し、各ノードからの矢印がメッセージの伝搬を表している。
【００１７】
ビットノード１、２、３、４からチェックノード１へのメッセージQ11、Q21、Q31、Q41が送信され、チェックノード１からビットノード１、２、３、４へそれぞれメッセージR11、R12、R13、R14が送信される。次に、ビットノード１、５、６、７からチェックノード２へのメッセージQ12、Q52、Q62、Q72が送信され、チェックノード２からビットノード１、５、６、７へそれぞれメッセージR21、R25、R26、R27が送信される。次に、ビットノード１、８、９、１０からチェックノード３へのメッセージQ13、Q83、Q93、Q103が送信され、チェックノード３からビットノード１、８、９、１０へそれぞれメッセージR31、R38、R39、R310が送信される。上記した一連のメッセージ・パッシングが１イタレーションを構成する。
【００１８】
図５のターナーグラフはループを含んでいない。ここで、ループとは、あるノードから始まる周回路である。
【００１９】
ターナーグラフがループを含んでいない場合、ＳＰＡは、正確な事後確率を計算できる。
【００２０】
一方、次式（５）の検査行列Hで定義されるターナーグラフは、図７に示すように、長さ４のループを含んでいる。図７において、矢印はノード間でのメッセージの伝達の向きを示している。
【００２１】
0004526451.tif 000006
【００２２】
すなわち、図７に示すように、チェックノード１からビットノード３、ビットノード３からチェックノード２、チェックノード２からビットノード２、ビットノード２からチェックノード１へと長さ４のループとなる。
【００２３】
このように、メッセージが周回すると、復号器において、正確な事後確率が計算できなくなり、復号特性が劣化する。そして、このループが短いほど、復号特性の劣化が著しくなることが知られている（非特許文献１)。
【００２４】
ところで、ＬＤＰＣ復号器を実現する場合、メッセージを保存するレジスタ、もしくはメモリと、メッセージをやり取りするインターコネクトパスが、チップ面積の大部分を占める。
【００２５】
そこで、上式（２）を、次式（６）で近似することにより、メッセージ数を削減する方法が提案されている（非特許文献２）。
【００２６】
0004526451.tif 000007
【００２７】
上式（６）において、Rmnはチェックノードmからビットノードnへのメッセージであり、上式（３）で与えられる。
【００２８】
またm'に関するRm’nの総和演算（ΣRm’n）におけるm'∈{S(k)∩μ(n)}のS(k)は、時刻ｋにおいて、計算中のクラスタに含まれるチェックノードのセットであり、μ(n)はビットノードnに隣接するチェックノードのセットであり、∩はANDを表している。したがって、m'に関するRm’nの総和演算では、S(k)とμ(n)の両方に含まれるチェックノードm'からのメッセージRm’nの総和をとり、前の時刻k-1のQn(k-1)と加算したものを、時刻ｋのメッセージQ'n(k)としている。ビットノードｎから、ビットノードｎに接続するチェックノードに同一のメッセージQ'n(k)を渡す。
【００２９】
ビットノードのメッセージ計算処理では、チェックノードmからビットノードnへのメッセージRmnを、クラスタ単位で計算し、計算結果をQ'nに積算していく。
【００３０】
Q'n(k)の初期値Q'n(0)は、入力(通信路)LLRである。LLRは対数尤度比（ln[P(yn｜xn=0)/P(yn｜xn=1)]）である。なお、yIは受信シンボル、xIは送信シンボル、nIを平均０の白色ガウス雑音の加法的白色ガウス通信路とし（yi=xi+ni）、バイナリバイポーラ変換（0→+1、1→-1）が行われる。
【００３１】
上式（６）の近似により、１つのビットノードからは、全ての隣接するチェックノード（該１つのビットノードに接続する全てのチェックノード）に対して同一のメッセージが出力されることになる。このため、メッセージ保存用のレジスタ、及びインターコネクト・パス等のリソースを大幅に削減することができる。
【００３２】
また、上式（６）の近似により、式(２)と比較して、メッセージ計算の演算量をほぼ５０％以上削減することができる。すなわち、演算速度、処理性能を向上させる。
【００３３】
【特許文献１】特開２００３−２４４１０９号公報
【非特許文献１】D.J.C.Mackay，“Good error-correcting codes based on very sparse matrices”, IEEE Trans. Inform. Theory, vol.45, pp391-431(1999)
【非特許文献２】Yeo,E.; Pakzad, P.; Nikolic, B.; Anantharam,V, “High throughput low-density parity-check decoder architectures”， Global Telecommunications Conference 2001, Volume: 5 , 25-29 Nov. 2001, pp3019-3024
【発明の開示】
【発明が解決しようとする課題】
【００３４】
上記したように、上式（６）の近似により、式(２)と比較して、メッセージ計算の演算量を特段に削減するものであるが、以下のような課題を有している。この課題の検討は、本発明者の研究結果によるものである。
【００３５】
すなわち、上式（６）の近似においては、ターナーグラフ上にループが存在しない場合でも、チェックノードｍからビットノードｎに出力されたメッセージRmnが再び元のチェックノードｍに伝達されてしまう。この場合、短いループが存在する場合と同様に、事後確率が正確に計算できなくなり、その結果、誤り訂正能力の劣化を招くことになる。
【００３６】
例えば図５のターナグラフの場合、式（２）のQnmの計算においてμ(1)={1、2、3}である。ビットノード１からチェックノード１へのメッセージQ１１の計算におけるΣRm’nの総和演算は、m'∈μ(１)についてなされ、ΣRm’n＝R11+R21+R31とされ、式（２）においては、総和（R11+R21+R31）から、R11を差し引いているため、R21+R31となる。
【００３７】
一方、式（６）で近似を行った場合、Q'1(k)におけるΣRm’nの総和演算は、R11+R21+R31となり、このQ'n(k)が、ビットノード１からチェックノード１、２、３に伝達される。チェックノード１で受信するメッセージ中にR11が含まれ、実質的に、短いループが存在することと等価となる。
【００３８】
図８は、メッセージ計算のタイミング動作を示す図である。図８（Ａ）は、チェックノードにおけるメッセージの計算に遅延が無い場合のタイミング動作を示す図であり、図８（Ｂ）は、チェックノードにおけるメッセージの計算に２クロックサイクルの処理遅延がある場合のタイミング動作を示す図である。
【００３９】
図８（Ａ）、図８（Ｂ）において、入力メッセージは、図５、図６のビットノード１から各チェックノードに対する入力メッセージである。計算クラスタのC1、C2、C3は、第１、第２、第３クラスタを表しており、出力メッセージは、対応するクラスタから出力されるメッセージである。なお、図５、図６、図８では、１クラスタを１チェックノードとしており、チェックノード１は第１クラスタ（C1）としてグループ化され、チェックノード２は第２クラスタ（C2）としてグループ化され、チェックノード３は第３クラスタ（C3）としてグループ化されている。したがって、図５、図６、図８の場合、第１、第２、第３クラスタは、チェックノード１、２、３である。また、図中のRCXYは、第Yイタレーション時の第Xクラスタの出力を表している。入力メッセージのLは入力LLRの値である。
【００４０】
上式（６）の近似を用いた場合、ターナーグラフ上にループが存在しない場合でも、チェックノードから出力されたメッセージが再び元のチェックノードに伝達されてしまう。例えば、第１イタレーション時の第１クラスタC1の出力RC11（第１イタレーションの第１クラスタの出力であって、その内容はチェックノード１からビットノード１へのメッセージR11である）は、次の第２イタレーションにおいて、もとの第１クラスタC1（チェックノード１）へ渡される（図８（Ａ）、図８（Ｂ）参照）。
【００４１】
この結果、ターナーグラフ上にループが存在しない場合でも、短いループが存在する場合と同様に、事後確率が正確に計算できなくなり、誤り訂正能力が劣化することになる。
【００４２】
チェックノードのメッセージ計算に遅延がある場合、誤り訂正能力が大きく劣化する。これは、チェックノードに入力されるメッセージの内のそのチェックノードから出力されたメッセージの割合が大きくなるためである。
【００４３】
例えば、第２イタレーション時に第１クラスタC1に入力されるメッセージは、チェックノードでのメッセージ計算に遅延なしの場合、L+RC11+RC12+RC13である（図８（Ａ）参照）。ここで、Lは入力LLRの値である。これに対して、チェックノードでのメッセージ計算に２クロックサイクルの遅延がある場合、L+RC11になり（図８（Ｂ）参照）、第1クラスタC1の出力メッセージであるRC11の割合が大きくなる。このため、誤り訂正能力が劣化し、復号特性が低下する。
【課題を解決するための手段】
【００４４】
本願で開示される発明は、上記課題を解決するため、概略以下の構成とされる。
【００４５】
本発明の１つのアスペクトに係る装置は、入力された低密度パリティ検査符号から、低密度パリティ検査行列に対応した複数のチェックノード及び複数のビットノードの間でメッセージのやり取りをイタレーション毎に繰り返して復号する復号装置において、時間的に前と後の関係にある少なくとも２つのイタレーションのうち一のイタレーションにおけるチェックノードのメッセージ計算の順番と、他のイタレーションにおけるチェックノードのメッセージ計算の順番とを変える手段（スケジューラ）を備えている。
本発明において、N個のクラスタ（クラスタサイズが１のとき１クラスタあたり１チェックノード）を有し、メッセージ計算の処理遅延Dのチェックノードでメッセージ計算を行う場合、前記スケジュール部は、
第Xイタレーションの第Y番目にメッセージを計算するクラスタを、
(((Y-1)+(X-1)*(N-D))%N)+1    
（ただし、%は剰余を表す。）
とする。
【００４６】
本発明は、さらに、前記ビットノードにおいて、前記チェックノードから前記ビットノードに送信されたメッセージに対して重み付けを行う手段を備えた構成としてもよい。
【００４７】
本発明において、一のビットノードから、該ビットノードに接続された全てのチェックノードに対して同一メッセージを渡すように制御し、前記チェックノードに入力されるメッセージにおいて、前記チェックノードから出力されたメッセージの割合が少なくなるように制御する。
【００４８】
本発明においては、前記チェックノードで過去に計算されたメッセージほど、該メッセージの影響が少なくなるようにする。
【００４９】
本発明においては、前記ビットノードが、前記チェックノードから受け取ったメッセージを保持し、以降、前記チェックノードからメッセージを受け取るたびに、前記保持するメッセージに対して１よりも小の正値の重みを乗算し乗算結果を保持する手段を備えた構成としてもよい。
【００５０】
本発明においては、前記ビットノードは、チェックノードからｉ回目（ｉは２以上の正数）にメッセージを受け取った際に、重み係数をｗとして、チェックノードからｊ回目（ただし、ｊは１以上でｉより小の整数）に受け取ったメッセージに対してｗ（ｉ−ｊ）を乗じたものと、ｉ回目（ｉは２以上の正数）の前記メッセージに基づき、前記チェックノードへのメッセージを計算するようにしてもよい。
【００５１】
本発明の他のアスペクトに係る方法は、入力された低密度パリティ検査符号から、低密度パリティ検査行列に対応した複数のチェックノード及び複数のビットノードの間でメッセージのやり取りをイタレーション毎に繰り返して復号する復号方法であって、
時間的に前と後の関係にある少なくとも２つのイタレーションのうち一のイタレーションにおけるチェックノードのメッセージ計算の順番と、他のイタレーションにおけるチェックノードのメッセージ計算の順番とを変える工程を含む。
【００５２】
本発明の他のアスペクトに係るコンピュータ・プログラムは、
入力された低密度パリティ検査符号から、低密度パリティ検査行列に対応した複数のチェックノード及び複数のビットノードの間でメッセージのやり取りをイタレーション毎に繰り返して復号するコンピュータに、時間的に前と後の関係にある少なくとも２つのイタレーションのうち一のイタレーションにおけるチェックノードのメッセージ計算の順番と、他のイタレーションにおけるチェックノードのメッセージ計算の順番とを変える処理を実行させるプログラムよりなる。該プログラムはコンピュータで機械読み出し可能な媒体等に記憶される。
【発明の効果】
【００５３】
本発明によれば、メッセージ計算式を近似しメッセージ数を削減したＳＰＡを適用したＬＤＰＣ復号器において、時間的に前と後の少なくとも２つのイタレーションにおけるメッセージ計算の実行の順番を変えることで、チェックノードに入力されるメッセージ内における当該チェックノードからのメッセージの割合を少なくし復号特性を向上させることができる。
【００５４】
また、本発明によれば、メッセージ計算式を近似しメッセージ数を削減したＳＰＡを適用したＬＤＰＣ復号器において、メッセージ計算を行った時間が過去になるほど、該メッセージの影響が少なくなるように重み付けすることにより、復号特性を向上させることができる。
【発明を実施するための最良の形態】
【００５５】
上記した本発明についてさらに詳細に説述すべく、添付図面を参照して以下に説明する。本発明は、好ましい一の実施形態において、入力されたＬＤＰＣ符号から検査行列Hに対応した複数のチェックノード及び複数のビットノードの間でメッセージ(信頼性情報)のやり取りをイタレーション（iteration）毎に繰り返して復号する復号装置において、メッセージ計算を近似し、ビットノードｎから、該ビットノードｎに接続された全てのチェックノードへ同一メッセージQnを渡すように制御し、時間的に前と後の関係にある少なくとも２つのイタレーションのうち１つのイタレーションにおけるチェックノードのメッセージ計算の順番と、他のイタレーションにおけるチェックノードのメッセージ計算の順番を変える制御を行うスケジューリング手段を備えている。２つのイタレーションは時間的に隣合うイタレーションであってもよい。イタレーション毎にメッセージ計算の順番を切り替えるようにしてもよい。
【００５６】
本発明は、好ましい別の実施形態において、上記スケジューリング手段に加えて、ビットノードからチェックノードｍに入力されるメッセージ内において、当該チェックノードｍから出力されたメッセージRmnの割合が少なくなるように制御する手段を備えている。チェックノードでのメッセージ計算を行った時間が過去になるほど、ビットノードｎからチェックノードｍに入力されるメッセージQn内での、先に当該チェックノードｍから出力されたメッセージRmnの影響が少なくなるように、該メッセージRmnに対して重み付けが行われる。以下実施例に即して説明する。
【実施例】
【００５７】
本発明の第１の実施例について説明する。図１は、本実施例を説明するための図である。上式(１)の10ｘ3検査行列Hに対応して１０個ビットノード（第１乃至第１０ビットノードメッセージ計算部）と、３個のチェックノード（第１乃至第３チェックノードメッセージ計算部）から構成される。第１乃至第１０ビットノードメッセージ計算部に入力される入力LLR（対数尤度比）は、通信路LLRである。
【００５８】
チェックノードmからビットノードnへのメッセージRmnをクラスタ単位で計算し、計算結果をQ'nに積算していく。この近似により、１つのビットノードからは、全ての隣接チェックノードに同一のメッセージが出力されることになり、メッセージ保存レジスタ、インターコネクトパスが大幅に削減できる。
【００５９】
本実施例では、ビットノードからチェックノードへのメッセージの計算は、式（６）の近似を用いて行われ、１つのビットノードから、該１つのビットノードが接続する全てのチェックノードへ同一のメッセージQ'n(k)を出力する。また、チェックノードｍからビットノードｎへのメッセージRmnの計算には、上式（２）の計算式が用いられる。
【００６０】
図８は、クラスタサイズを１とし、３個のチェックノード１〜３をそれぞれクラスタC1〜C3に対応させた場合であるため、図８（Ｂ）に示したように、ビットノードのメッセージ計算において、式（６）の近似を用いた場合、メッセージ計算遅延が２クロックサイクルの場合、第２イタレーションにおいてビットノード１からクラスタC１としてグループ化されたチェックノード１へ入力されるメッセージはL＋RC11となり、第１イタレーションでクラスタC１としてグループ化されたチェックノード１で計算されたメッセージRC11の割合が大きくなり、復号特性の低下を伴う。
【００６１】
そこで、本実施例では、時間的に前と後の関係にある少なくとも２つのイタレーションのうち、１つのイタレーション（例えば第１イタレーション）におけるチェックノードのメッセージ計算の順番と、他の（例えば第２イタレーション）におけるチェックノードのメッセージ計算の順番を変えるスケジューリング手段（後述するスケジューラ等）を備えている。
【００６２】
図２は、本発明の第１の実施例の動作を説明するためのタイミング図であり、図８のメッセージ計算のタイミング図と同様、クラスタサイズを１とし、３つのチェックノードを３個のクラスタC1、C2、C3に分割しており、C1、C2、C3はチェックノード１、２、３に対応する。図８と同様、チェックノードにおけるメッセージ計算の処理遅延を２クロックサイクルとしている。
【００６３】
図２に示すように、第１イタレーションにおけるメッセージ計算順序は、C1、C2、C3、第２イタレーションにおけるメッセージ計算順序はC2、C3、C1、第３イタレーションにおけるメッセージ計算順序はC3、C1、C2とされる。
【００６４】
第１イタレーションにおけるクラスタC1のメッセージRC11は２クロックサイクル分おくれて、クラスタC3のメッセージ計算時にビットノード１に出力される。第１イタレーションにおけるクラスタC2のメッセージRC12は２クロックサイクルおくれて、第２イタレーションのクラスタC2のメッセージ計算時にビットノード１に出力される。第１イタレーションにおけるクラスタC3のメッセージRC13は２クロックサイクルおくれて、第２イタレーションのクラスタC3のメッセージ計算時にビットノード１に出力される。
【００６５】
第２イタレーションでは、まずビットノード１において、上式（６）に基づき計算されたメッセージL＋RC11がクラスタC2に入力される。入力メッセージL＋RC11には、クラスタC2（チェックノード２）で計算したメッセージRC12は含まれていず、短ループはない。
【００６６】
つづいて第２イタレーションにおいて、クラスタC2からのメッセージRC12を受け取ったビットノード１において、式（６）に基づきメッセージL＋RC11＋RC12を計算し、このメッセージL＋RC11＋RC12がクラスタC3に入力される。入力メッセージL＋RC11＋RC12には、クラスタC3(チェックノード３)で計算したメッセージRC13は含まれていず、短ループはない。
【００６７】
第２イタレーションにおいて、クラスタC3からのメッセージRC13を受け取ったビットノード１において、式（６）に基づきメッセージL＋RC11＋RC12＋RC13を計算し、このメッセージL＋RC11＋RC12＋RC13がクラスタC１に入力される。入力メッセージL＋RC11＋RC12＋RC13には、クラスタC１（チェックノード１）で計算したメッセージRC11は含まれているが、L＋RC11＋RC12＋RC13の中の一部であり、図８に示したように、L＋RC11ではないため、その影響は抑制され、図８の場合よりも、復号特性を向上させることができる。
【００６８】
本実施例では、イタレーション毎に、メッセージを計算するクラスタの順番を変えている。
【００６９】
一般には、N個のクラスタを処理遅延Dのチェックノードメッセージ計算部で処理する場合、第Xイタレーションの第Y番目に計算するクラスタは、一般式として、次式（７）で与えられる。
【００７０】
(((Y-1)+(X-1)*(N-D))%N)+1                            (7)
ただし、%は剰余を表す。
【００７１】
次に本発明の第２の実施例を説明する。本発明の第２の実施例は、前記第１の実施例と同様、メッセージ計算するクラスタの順番をイタレーション毎に変える制御を行うとともに、さらに、チェックノードへ送信するメッセージ内において、以前に計算されたメッセージほど（チェックノードでメッセージ計算を行った時間が過去になるほど）、その影響が少なくなるように重み付けをすることにより、復号特性を向上させるようにしたものである。
【００７２】
本発明の第２の実施例においては、ビットノードからチェックノードへのメッセージの計算は、基本的に、上式（６）の近似を用いて行われ、１つのビットノードから、該１つのビットノードが接続する全てのチェックノードに対して同一のメッセージQ'n(k)（ただし、ｋは離散時刻）を出力する。チェックノードｍからビットノードｎへのメッセージRmnの計算は、上式（３）が用いられる。
【００７３】
本実施例においては、ビットノードからチェックノードへのメッセージ計算の近似式（６）を、次式（８）及び（９）のように変形している。
【００７４】
0004526451.tif 000008
【００７５】
0004526451.tif 000009
【００７６】
ただし、wは重み係数(1より小の正数)である。
【００７７】
ビットノードnは、時刻kにおいてLLRと状態量QSn(k)を保持し、その加算結果Q'n(k)を隣接する全てのチェックノードに対して送信する（上式（８）参照）。QSn(k)の初期値QSn(0)は0である。状態量QSn(k)は、前回(時刻k-1)のQSn(k-1)に重みｗを乗算したもの（QSn(k-1)*w）と、今回受信したメッセージRm'nの総和（ΣRm'n）とを加算した結果で更新される（上式（９）参照）。
【００７８】
この重み付け処理により、メッセージ計算した時間が過去になるほど、そのメッセージの影響が少なくなる。このため、上式(６)の近似式を用いた場合と比べて、チェックノードに入力されるメッセージの内での、当該チェックノードから出力されたメッセージの割合が小さくなり、誤り訂正能力が向上する。
【００７９】
すなわち、本実施例では、イタレーション毎に、チェックノードメッセージ計算部でのメッセージ計算の順番を変え、さらに、チェックノードでメッセージ計算を行った時間が過去になるほど、チェックノードへ送信するメッセージの当該メッセージの影響が少なくなるように、重み付けをすることにより復号特性を向上させる。
【００８０】
式(１)の10ｘ3検査行列Hで定義されるＬＤＰＣ符号に即して、本発明の第２の実施例について説明する。図１に示すように、前記実施例と同様、上式(１)の10ｘ3検査行列Hに対応して１０個ビットノード（第１乃至第１０ビットノードメッセージ計算部）と、３個のチェックノード（第１乃至第３チェックノードメッセージ計算部）から構成される。第１乃至第１０ビットノードメッセージ計算部に入力される入力LLR（対数尤度比）は、通信路LLRである。
【００８１】
チェックノードmからビットノードnへのメッセージRmnをクラスタ単位で計算し、計算結果をQ'nに積算していく。この近似により、１つのビットノードからは、全ての隣接チェックノードに同一のメッセージが出力されることになり、メッセージ保存レジスタ、インターコネクトパスが大幅に削減できる。
【００８２】
第ｎビットノードメッセージ計算部（ｎは１〜３）では、ビットノードｎからチェックノードへのメッセージの計算に、上式（８）、（９）を用いる。
【００８３】
第ｍチェックノードメッセージ計算部（ｍは１〜１０）は、上式（３）にしたがって、チェックノードｍからビットノードｎへのメッセージRmnを計算する。
【００８４】
図３は、図１において、クラスタサイズを１とし（１クラスタあたり１チェックノード）、３つのチェックノードを３個のクラスタに分割している場合の動作タイミングを説明する図である。図２と同様、チェックノードにおけるメッセージ計算の処理遅延を２クロックサイクルとしている。
【００８５】
図３に示すように、第１イタレーションにおけるメッセージ計算順序はC1、C2、C3、第２イタレーションにおけるメッセージ計算順序はC2、C3、C1、第３イタレーションにおけるメッセージ計算順序はC3、C1、C2とされる。
【００８６】
第１イタレーションにおけるクラスタC1のメッセージRC11は２クロックおくれてクラスタC２のメッセージ計算時にビットノード１に出力される。第１イタレーションにおけるクラスタC２のメッセージRC12は２クロックおくれて、第２イタレーションのクラスタC２のメッセージ計算時にビットノード１に出力される。第１イタレーションにおけるクラスタC３のメッセージRC13は２クロックおくれて、第２イタレーションのクラスタC３のメッセージ計算時にビットノード１に出力される。
【００８７】
第２イタレーションでは、まずビットノード１においてメッセージL＋RC11がクラスタC2に入力される。入力メッセージL＋RC11には、クラスタC2(チェックノード２)で計算したメッセージRC12は含まれていず、短ループはない。
【００８８】
次に、第２イタレーションにおいて、クラスタC2からのメッセージRC12を受け取ったビットノード１において、式（８）、（９）に基づき、メッセージL＋RC11*w＋RC12を計算し、このメッセージL＋RC11*w＋RC12がクラスタC3に入力される。入力メッセージL＋RC11*w＋RC12には、クラスタC3（チェックノード３）で計算したメッセージRC13は含まれていず、短ループはない。
【００８９】
次に、第２イタレーションにおいて、クラスタC3からのメッセージRC13を受け取ったビットノード１において、式（８）、(９)に基づき、メッセージL＋RC11*w2＋RC12*w＋RC13を計算し、このメッセージL＋RC11*w2＋RC12*w＋RC13がクラスタC１に入力される。入力メッセージL＋RC11*w2＋RC12*w＋RC13には、クラスタC１（チェックノード１）で計算したメッセージRC11は含まれているが、L＋RC11*w2＋RC12*w＋RC13の中の一部であり、しかも、RC11*w2と重み係数ｗの２乗が乗算されているため、その割合がさらに小さく設定されている。このため、クラスタC1（チェックノード１）への入力メッセージL＋RC11*w2＋RC12*w＋RC13内でのメッセージRC11の影響は抑制され、クラスタC1にメッセージ（L＋RC11）が入力される構成の図８（Ｂ）の場合と比べて、特段に復号特性を向上させることができる。
【００９０】
図４は、本発明の復号回路の一実施例の構成を示す図である。図４には、ｎ個のビットノードメッセージ計算部１1〜１nと、スケジューラ８と、MCU(Message Computation Unit:「チェックノードメッセージ計算部」ともいう)９と、出力セレクタ１０を備えている。スケジューラ８は、ビットノードメッセージ計算部１１〜１ｎの出力先のチェックノードを選択する。MCU９は、チェックノードを構成するコントローラである。MCU９の出力は、出力セレクタ１０を介してビットノードメッセージ計算部１1〜１nのうち選択されたビットノードメッセージ計算部に転送される。図４には、クラスタサイズが１の場合の構成が示されている。
【００９１】
ビットノードメッセージ計算部１１は、セレクタ２と、加算器３と、乗算器４と、レジスタ５と、レジスタ７と、加算器６を備えている。レジスタ７は入力LLRを保持する。加算器６はレジスタ５（Reg1）の値と入力LLR（レジスタ７の出力）を加算する。なお、ｎ個のビットノードメッセージ計算部１１〜１ｎは、同一構成とされる。
【００９２】
乗算器４は、レジスタ５（Reg1）の出力に重み係数ｗを乗ずる。レジスタ５に時刻k-1の状態量QSn(k-1)が格納されているとき、乗算器４はQSn(k-1)*wを出力する（上式（９）参照）。
【００９３】
加算器３は、乗算器４の出力（QSn(k-1)*w）と、MCU９からのメッセージRm'nを加算し、今回（時刻ｋ）の状態量QSn(k)を求め（式（９）参照）、レジスタ５を更新する。なお、本実施例では、クラスタサイズが1の場合であるため、MCU９から着目するビットノードnに入力されるメッセージは一つしかない。このため、ΣRm'nの積算処理（上式（９）参照）は行われない。クラスタサイズが２以上の場合、加算器３は、複数のMCU９からのメッセージの積算結果(ΣRm'n)を乗算器４の出力（QSn(k-1)*w）と加算する。
【００９４】
加算器６は、LLR＋QSn(k)を計算し、Q'n(k)として出力する（上式（８）参照）。
【００９５】
スケジューラ８は、イタレーション毎のクラスタ（チェックノード）のメッセージ計算順番を切り替える。例えば図２、図３に示したように、第１イタレーションでは、C1、C2、C3、第２イタレーションでは、C2、C3、C1、第３イタレーションでは、C3、C1、C2等）を可変制御する。さらに、スケジューラ８は、ビットノードからのメッセージを、該ビットノードに接続する全てのチェックノードに供給するスイッチとして機能し、例えば図６のメッセージ伝達における、ビットノードからチェックノードへのメッセージのパスを切り替え制御する。
【００９６】
MCU９は、式（３）に基づき、メッセージRmnを計算して出力し、出力セレクタ１０は、MCU９からのメッセージを宛先ビットノードに分配する。
【００９７】
出力セレクタ１０は、例えば図５のメッセージ伝達における、チェックノードからビットノードへのメッセージのパスを切り替え制御する。
【００９８】
図３において、重み係数ｗの値を１とした場合の構成（あるいは、乗算器４を省略した構成）が、図２を参照して説明した本発明の第１の実施例の構成に対応する。重み係数ｗを、０＜ｗ＜１とした場合が、図３を参照して説明した第２の実施例に対応する。
【００９９】
図３を参照して、図４の構成において、ビットノードメッセージ計算部１1（ビットノード１）から出力されるメッセージについて説明する。セレクタ２の入力”０”は、式（９）の累算演算において、レジスタ５の初期化を行うための入力であり、セレクタ２で０が選択されレジスタ５に保持されると、加算器６の出力は、入力LLRの値Lであり、チェックノードにはメッセージLが入力される。
【０１００】
このとき、乗算器４の出力は０であり、チェックノードから送信されたメッセージRC11を受けると、加算器３の出力はRC11であり、セレクタ２は加算器３の出力を選択するため、レジスタ５にはRC11が格納され、加算器６で入力LLRの値Lと加算したメッセージL＋RC11が、チェックノードに出力される。
【０１０１】
そしてレジスタ５の出力RC11に乗算器４でｗを乗算したRC11*wが、クラスタC2（チェックノード２）からのメッセージRC12を加算した結果RC11*w+RC12がセレクタ２で選択され、レジスタ５に保持される。加算器６は、メッセージL＋RC11*w+RC12を出力する。以下同様にして、重みの累積処理が行われ、第２イタレーションにおいてビットノード１からチェックノード１には、L＋RC11*w2+RC12*w+RC13が入力される。
【０１０２】
なお、図４に示したビットノードメッセージ計算部のレジスタ、セレクタ、加算器、乗算器の処理は、コンピュータで実行させるプログラムで実現してもよい。スケジューラ、MCU、出力セレクタの処理もコンピュータプログラムで行ってもよい。このコンピュータプログラムは、コンピュータで機械読み出し可能な媒体等に記憶され、主記憶等にロードされ実行される。
【０１０３】
以上本発明を上記実施例に即して説明したが、本発明は、上記実施例の構成にのみ制限されるものでなく、本発明の範囲内で当業者がなし得るであろう各種変形、修正を含むことは勿論である。
【図面の簡単な説明】
【０１０４】
【図１】本発明の一実施例を説明する図である。
【図２】本発明の第１実施例の動作を説明する図である。
【図３】本発明の他の実施例の動作を説明する図である。
【図４】本発明の装置の一実施例を示す図である。
【図５】ターナーグラフの一例である。
【図６】クラスタサイズ１の場合のメッセージ伝達の様子を示す図である。
【図７】ループのあるターナーグラフである。
【図８】ビットノードとクラスタ間のメッセージを時系列で表したタイミング図である。
【符号の説明】
【０１０５】
１１〜１n  ビットノードメッセージ計算部
２  セレクタ
３  加算器
４  乗算器
５  レジスタ
６  加算器
７  レジスタ
８  スケジューラ
９  MCU
１０  出力セレクタ
【図１】
0004526451.tif 000010
【図２】
0004526451.tif 000011
【図３】
0004526451.tif 000012
【図４】
0004526451.tif 000013
【図５】
0004526451.tif 000014
【図６】
0004526451.tif 000015
【図７】
0004526451.tif 000016
【図８】
0004526451.tif 000017