LDPC(Low Density Parity Check:低密度パリティ検査)とは、送信信号がチャネル雑音により誤って受信された場合に、その誤りを訂正する手法の一つである。LDPC符号を用いた送受信方式では、誤り訂正を行うためにLDPC検査行列Hが用いられる。送信信号Txは、送信側においてH×Tx=0となるようにして送信している。従って送信した信号が受信側で正しく受信された場合には、受信信号RxはH×Rx=0という条件を満たすことになる。このH×Rxという計算をパリティ検査と呼ぶ。
図1は、LDPC符号を用いた送受信モデルを示す図である。送信側10からH×Tx=0となるように送信した送信信号Tx=[001001]が、伝送路においてチャネル雑音を受け、受信信号Rx=[011001]として受信側12に受信される。この受信信号Rxに対するパリティ検査H×Rxの結果はゼロにならず、受信信号Rxには誤りがあることが分かる。受信側12では、LDPC復号化を行なうLDPC復号器を用いて、H×Rx=0となるように誤り訂正を行う。これにより誤り訂正後の受信信号Rx’=[001001]が得られる。
図2は、パリティ検査で用いる行列計算の定義を示す図である。図2に示すように、パリティ検査の行列計算では、通常の行列演算の積和計算において「積」が論理積(&)演算となり、「和」が排他的論理和(XOR)となった演算を行なう。
図3は、LDPC検査行列及び確率メッセージについて説明するための図である。LDPC検査行列は図3に示すようにM×Nの行列であり、各列をb1乃至bNで示し、各行をc1乃至cMで示す。b1乃至bNはビットノード、c1乃至cMはチェックノードと呼ばれる。検査行列Hのm行n列の要素が“1”であれば、チェックノードcmからビットノードbnへの確率メッセージαmnと、ビットノードbnからチェックノードcmへの確率メッセージβmnとが定義される。即ち、検査行列Hにおいて値が“1”である要素に対応するビットノードbnとチェックノードcmとの組に対して、確率メッセージαmnとβmnとが定義される。これらの確率メッセージは、受信信号の確率を高めるためにチェックノードとビットノードの間で交換される。各ビットノードbnに対して受信信号の事後確率sumnが定義される。
LDPC復号処理では、受信信号の確率的な信頼度情報から算出した確率情報を更新していくことにより、パリティ検査結果がゼロになるような受信信号を求める。LDPC復号アルゴリズムとして、良好な訂正能力を持つLayered復号アルゴリズムが一般的に用いられる。
図4はLayeredアルゴリズムを用いたLDPC復号器の構成の一例を示す図である。LDPC復号器20は、確率演算処理部21とパリティ検査部22とを含む。LDPC復号器20への入力λは受信信号から導出した値で、送信信号が0なのか1なのかを確率的に表した事前確率であり、LLR(Log-Likelihood Ratio)と呼ばれる。LDPC復号器20の出力Rx’は誤り訂正後の受信信号である。確率演算処理部21は、事前確率λnに基づいて事後確率sumnを求め、反復処理により事後確率sumを更新していくことにより、確率を高める処理を行なう。この確率演算処理は、受信信号の確率的な信頼度を表わす事前確率から、パリティチェックに基づく受信信号の拘束条件を考慮して事後確率を求めることに相当する。パリティ検査部22は、事後確率sumを用いてRx’を算出してパリティ検査H×Rx’の演算を行なう。このパリティ検査の結果がゼロであるか否かに基づいて、復号処理を終了するか或いは事後確率sumをフィードバックして反復処理をもう一回繰返すかが制御される。
確率演算処理部21は、ビットノード処理部25、チェックノード処理部26、及び事後確率更新処理部27を含む。ビットノード処理部25は、事前確率λn又は事後確率sumnと確率メッセージαmnとを用いて確率メッセージβmnを算出する。具体的には、初期状態においては事後確率sumnとして事前確率λnを用いて確率メッセージβmnを算出し、その後の反復処理では事後確率更新処理部27が求めたsumnを用いて確率メッセージβmnを算出する。チェックノード処理部26は、確率βmnを用いて確率αmnを更新する。事後確率更新処理部27は、ビットノード処理部25で算出したβmnとチェックノード処理部26で算出したαmnとを用いて事後確率sumnを更新する。
ビットノード処理部25が実行するビットノード処理fb(sumn,αmn)は、具体的には以下のように計算される。
βmn=fb(sumn,αmn)=sumn−αmn (1)
また、事後確率更新処理部27が計算する事後確率更新処理fs(αmn,βmn)は、具体的には以下のように計算される。
sumn=fs(αmn,βmn)=βmn+αmn (2)
上記のビットノード処理と事後確率更新処理との間においてチェックノード処理により更新後のαmnを計算し、更新後のαmnを用いて事後確率更新処理を実行することで、事後確率sumnの確率を繰り返し処理により順次高めていくことができる。なおLayeredアルゴリズムでは、チェックノード処理におけるαmnの計算式の違いにより、Layered BPアルゴリズム、Layered Min-sumアルゴリズム、及びLayered Normalized Min-sumアルゴリズム等がある。
Layered復号アルゴリズムは、検査行列を階層と呼ばれる複数の行ブロックに分割し確率演算処理を行うアルゴリズムである。例えば、M×NのLDPC検査行列を、各階層がP行からなるL個の階層に分割して確率演算処理を行う。
図5は、各階層がP行からなるL個の階層に分割したLDPC検査行列を示す図である。図6は、1階層内でのLayeredアルゴリズムの実行順序を示す図である。図7は、複数の階層でのLayeredアルゴリズムの実行順序を示す図である。前述の説明のように、検査行列の要素が“1”である位置(αmn及びβmnが定義されている位置)に対して確率演算処理が実行される。この際、1階層の中では、図6に示されるように、Layered復号アルゴリズムの確率演算処理(ビットノード処理部、チェックノード処理部、及び事後確率更新処理部)が順番に実行される。またビットノード処理部、チェックノード処理部、及び事後確率更新処理部の各々は、1階層内のP行に対して並列に実行される。ここで階層lに対する確率演算処理により求められたn列目の事後確率をsumn lと表わす。図6に示されるように、階層l−1の事後確率に基づいて階層lの事後確率を求める処理、即ちsumn l−1→βmn→αmn→sumn lを順次計算する処理が1階層内で実行される。
上記のsumn l−1→βmn→αmn→sumn lを順次計算する処理を纏めてsumn l=fl(sumn l−1)と表わすと、複数の階層における確率演算処理は図7のように示すことができる。図7に示すように、第1階層の事後確率sumn 1は初期値sumn 0に基づいて計算し、第2階層の事後確率sumn 2は第1階層の事後確率sumn 1に基づいて計算し、第3階層の事後確率sumn 3は第1階層の事後確率sumn 2に基づいて計算する。以降、各階層について同様にして事後確率を求めていく。
上記の処理において、第l階層の事後確率sumn lは第l−1階層の事後確率sumn l−1に基づいて計算しており、この第l階層内での事後確率sumn lは各P行の値“1”の位置に対して同時に実行される。このような処理では、検査行列によるデータ衝突という問題が起こる場合がある。
図8は、データ衝突の発生を示す図である。図8に示すように1つの階層l中の同一の列に2つ“1”が存在する場合を考える。Layeredアルゴリズムでは、上段側の“1”の位置に対する事後確率sumn l(sumn l(1)として示す)の計算が、1つ前の階層の事後確率sumn l−1に基づいて計算される。またそれと並行して、下段側の“1”の位置に対する事後確率sumn l(sumn l(2)として示す)の計算も、1つ前の階層の事後確率sumn l−1に基づいて計算される。本来であれば、上段の事後確率sumn l(1)の計算により事後確率sumn lが更新されているので、下段側の“1”の位置に対する事後確率sumn l(2)の計算は、更新後の事後確率sumn l(1)の値に基づいて行なうことが好ましい。しかしながらLayeredアルゴリズムでは計算処理の効率化のためにP行に対して並列処理を行なっているので、同一列に複数の“1”が存在する場合には、間違った値を用いて確率演算するというデータ衝突問題が起こる。このデータ衝突が発生すると、間違った値を用いるため、誤差を生じ、その結果、誤り訂正能力に影響を与えてしまう。このようなデータ衝突問題は、同一階層内の同一列に複数個の“1”がある検査行列に対して発生する。
非特許文献1は、近似によりデータ衝突を解決する手法を開示する。この手法は、ある階層においてデータ衝突が起こっている列に対して、当該階層の処理が終わってから、更新後の2個の事後確率を加算して求めた和から前階層の事後確率を減算する処理を実行する。この後処理により、事後確率の近似計算を行う。この処理では、あくまで近似処理が行なわれるだけであり、正しい事後確率値を用いて計算しているのではない。このような事後確率の近似処理では、受信BER(Bit Error Rate)特性が劣化し、劣悪な受信環境において安定した受信ができない。
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
図9は、データ衝突解決方法を示す図である。図9に示すように検査行列Hの階層lにおいて同一列に2つの“1”がある場合、前段処理150を行ってから後段処理151を実行する。この際、前段処理150において、上段側の“1”の事後確率sumn l(1)を計算し、下段側の“1”の位置に対する事後確率sumn l(2)は計算しなくてよい。或いは、前段処理150において、上段側の“1”の事後確率sumn l(1)を計算するのと同時に下段側の“1”の位置に対する事後確率sumn l(2)を計算してもよい。後段処理151においては、上段側の“1”の事後確率sumn l(1)を用いて、下段側の“1”の位置に対する事後確率sumn l(2)の計算を行なう。下段側の“1”が階層l内の同一列の最後の“1”であれば、この事後確率sumn l(2)が階層lの確率演算処理後の事後確率sumn lとなる。下段側の“1”が階層l内の同一列の最後の“1”でなく、更に下段に3つめの“1”があれば、同様にして更なる後段処理151を実行し、3つめの“1”に対する事後確率sumn l(3)を求める。
前段処理150及び後段処理151は、並列性を可能な限り維持しつつデータ衝突を考慮して実行される。即ち、他の列及び他の行に対する確率演算処理が前段処理150や後段処理151と同時に並行して実行可能であれば、それらの処理を並列に実行する。以下に詳細に説明する第1の実施例では、第1段の処理において、データ衝突の影響を受けずに正しく計算できる全確率演算を並列に実行する。更に、その後段の処理において、第1段の処理では未計算であり、データ衝突の影響を受けるために第1段の処理の実行結果を利用して初めて正しく計算できる確率演算を並列に実行する。より一般的には、複数段の処理において、第1段の処理においてはデータ衝突の影響を受けずに正しく計算できる全確率演算処理を並列に実行し、その後の第n段(n:2以上の整数)の処理においては第n−1段までの処理の確率演算結果を用いる処理を並列に実行する。また第2の実施例では、第1段の処理において、全確率演算を並列に実行する。更に、その後段の処理において、データ衝突の影響を受けるために再計算が必要な確率演算処理を並列に実行する。より一般的には、複数段の処理において、第1段の処理においては全確率演算処理を並列に実行し、その後の第n段の処理においては第n−1段までの処理の確率演算結果を用いて再計算が必要な処理を並列に実行する。
このように、Layeredアルゴリズムにおいて、1つの階層内での確率演算処理を、並列性を維持しつつデータ衝突を考慮して複数回の確率演算処理に分けて実行する。第1段では、データ衝突の影響を受けずに正しく計算できる確率演算を含む複数の確率演算処理を並列に実行し、第n段の処理においては第n−1段までの処理の確率演算結果を用いて正しく計算できる確率演算処理を並列に実行する。ここで、並列性を維持するというのは、可能な限り維持すると言うことであり、並列性が維持できないときには並列処理にはならないことを許容する。例えば、第n段の処理において実行すべき確率演算処理が1つしかなければ、当然ながらその1つの処理のみが実行される。また正しく計算できる確率演算というのは、着目階層内で上から順に1行ずつ確率演算処理を行なった場合と同一の結果をもたらす確率演算のことである。
図10は、並列性を可能な限り維持しつつデータ衝突を考慮し複数回の処理により実行する確率演算処理の第1の実施例を示す図である。階層lの一例として行列30が示される。第2行第1列の位置、第3行第1列の位置、第4行第4列の位置、第4行第6列の位置の合計4つの位置において、同一列に複数の“1”が発生するデータ衝突が起きている。即ち、これら4つの位置においては、前階層l−1の確率演算処理の結果のみを用いたのでは、正しい事後確率値を計算することはできない。またこれら4つの位置の確率βに影響を受ける位置においても、正しい事後確率値を求めることができない。
図10において、集合S(βi)はi段の処理により演算すべき確率メッセージβの集合である。また集合S(αi)はi段の処理により演算すべき確率メッセージαの集合である。更に集合S(sumi)はi段の処理により演算すべき事後確率sumの集合である。行列30の例の場合、まず集合群31に示す各集合に対して、第1段の確率演算処理が並列に実行される。即ち、データ衝突の影響を受けずに事後確率を正しく計算できる全確率演算処理を実行する。この場合、各列で最初に出現する“1”の位置に対応する確率βを求める確率演算処理(即ちビットノード処理)は、正しく計算することができる。即ち、集合S(β1)={β11,β16,β24,β25,β33}については、前階層l−1の確率演算処理の結果のみを用いて正しく計算することができる。また全ての“1”の位置においてビットノード処理が正しく計算された行における確率αを求める確率演算処理(即ちチェックノード処理)は、正しく計算することができる。即ち、集合S(α1)={α11,α16}については、既に実行済みのビットノード処理の結果を用いて正しく計算することができる。またビットノード処理及びチェックノード処理が正しく行なわれた列に対する事後確率sumを求める確率演算処理(即ち事後確率更新処理)は、取り敢えず正しく計算することができる。即ち、集合S(sum1)={sum1,sum6}については、既に実行済みのビットノード処理及びチェックノード処理の結果を用いて取り敢えず正しく計算することができる。なおここで言う「取り敢えず正しい計算」とは、この段の処理については正しい更新演算であるが、後段において更に更新され得る計算と言うことである。
次に集合群32に示す各集合に対して、第2段の確率演算処理が並列に実行される。即ち、第1段までの処理の確率演算結果を用いて事後確率を正しく計算できる確率演算処理を並列に実行する。この場合、第1段までの確率演算処理で事後確率sum及び確率αが正しく更新されている列に対する確率βを更新する確率演算処理(即ちビットノード処理)は、第1段までの処理の確率演算結果を用いて正しく計算することができる。即ち、集合S(β2)={β21,β46}については、第1段までの確率演算処理の結果を用いて正しく計算することができる。また全ての“1”の位置においてビットノード処理が正しく計算された行における確率αを求める確率演算処理(即ちチェックノード処理)は、正しく計算することができる。即ち、集合S(α2)={α21,α24,α25}については、既に実行済みのビットノード処理の結果を用いて正しく計算することができる。またビットノード処理及びチェックノード処理が正しく行なわれた列に対する事後確率sumを求める確率演算処理(即ち事後確率更新処理)は、取り敢えず正しく計算することができる。即ち、集合S(sum2)={sum1,sum4,sum5}については、既に実行済みのビットノード処理及びチェックノード処理の結果を用いて取り敢えず正しく計算することができる。
次に集合群33に示す各集合に対して、第3段の確率演算処理が並列に実行される。即ち、第2段までの処理の確率演算結果を用いて事後確率を正しく計算できる確率演算処理を並列に実行する。この場合、第2段までの確率演算処理で事後確率sum及び確率αが正しく更新されている列に対する確率βを更新する確率演算処理(即ちビットノード処理)は、第2段までの処理の確率演算結果を用いて正しく計算することができる。即ち、集合S(β3)={β31,β44}については、第2段までの確率演算処理の結果を用いて正しく計算することができる。また全ての“1”の位置においてビットノード処理が正しく計算された行における確率αを求める確率演算処理(即ちチェックノード処理)は、正しく計算することができる。即ち、集合S(α3)={α31,α33,α44,α46}については、既に実行済みのビットノード処理の結果を用いて正しく計算することができる。またビットノード処理及びチェックノード処理が正しく行なわれた列に対する事後確率sumを求める確率演算処理(即ち事後確率更新処理)は、正しく計算することができる。即ち、集合S(sum3)={sum1,sum3,sum4,sum6}については、既に実行済みのビットノード処理及びチェックノード処理の結果を用いて正しく計算することができる。
図11は、並列性を可能な限り維持しつつデータ衝突を考慮し複数回の処理により実行する確率演算処理の第1の実施例を示すフローチャートである。ステップS1で初期化処理を行なう。即ち、事後確率sumnに、初期値として事前確率λnを代入する。その後、検査行列の各階層についてステップS2以降の処理を繰り返す。ステップS2で、着目階層においてデータ衝突があるか否かを判断する。即ち、着目階層の同一列に複数の“1”が存在するか否かを判断する。データ衝突がない場合にはステップS3に進む。データ衝突がある場合にはステップS6に進む。
ステップS3で、集合Sに対してビットノード処理を実行する。ここで集合Sとは、着目階層において、検査行列の値が“1”である全ての要素の集合である。ステップS4で、集合Sに対してチェックノード処理を実行する。ステップS5で、集合Sに対して事後確率更新処理を実行する。これらステップS3乃至S5の処理は、従来のLayeredアルゴリズムと同様に、着目階層内の全ての行に対して各確率演算処理を並列に実行する処理である。これらの各確率演算処理が終了するとステップS12に進む。
データ衝突がある場合に実行されるステップS6では、何段目の処理であるかを示す変数iを1に初期化する。ステップS7で、集合S(βi)に対してビットノード処理を実行する。前述のように、集合S(βi)はi段の処理により演算すべき確率メッセージβの集合である。ステップS8で、集合S(αi)に対してチェックノード処理を実行する。集合S(αi)はi段の処理により演算すべき確率メッセージαの集合である。ステップS9で、集合S(sumi)に対して事後確率更新処理を実行する。集合S(sumi)はi段の処理により演算すべき事後確率sumの集合である。ステップS10で、着目階層の確率演算処理が完了したか否かを判断する。着目階層の確率演算処理が完了していない場合には、ステップS11で変数iの値を1増加させ、ステップS7に戻り以降の処理を繰り返す。着目階層の確率演算処理が完了すると、ステップS12に進む。
ステップS12では、検査行列の最後の階層の確率演算処理が完了したか否かを判断する。最後の階層の確率演算処理が完了していない場合には、ステップS2に戻り、次の階層を対象としてステップS2以降の処理を繰り返す。最後の階層の確率演算処理が完了すると、ステップS13で、パリティ検査を実行する。即ち、求められた事後確率sumnから算出したRx’に対して検査行列を掛けて、演算結果がゼロになるか否かを判断する。パリティ検査結果がゼロでなければ、ステップS2に戻り以降の処理を繰り返すことにより、事後確率sumnを再度更新する。パリティ検査結果がゼロになるまで、上記の処理を反復的に実行し、パリティ検査結果がゼロになると処理を終了する。
図12は、並列性を可能な限り維持しつつデータ衝突を考慮し複数回の処理により確率演算処理を実行するLDPC復号器の構成の第1の実施例を示す図である。図12のLDPC復号器40は、基本構成として、ビットノード処理部41、チェックノード処理部42、事後確率更新処理部43、及びパリティ検査部44を含む。ビットノード処理部41は、事前確率λn又は事後確率sumnと確率メッセージαmnとを用いて確率メッセージβmnを算出する。具体的には、初期状態においては事後確率sumnとして事前確率λnを用いて確率メッセージβmnを算出し、その後の反復処理では事後確率更新処理部43が求めたsumnを用いて確率メッセージβmnを算出する。チェックノード処理部42は、確率βmnを用いて確率αmnを更新する。事後確率更新処理部43は、ビットノード処理部41で算出したβmnとチェックノード処理部42で算出したαmnとを用いて事後確率sumnを更新する。パリティ検査部44は、事後確率sumを用いてRx’を算出してパリティ検査H×Rx’の演算を行なう。このパリティ検査の結果がゼロであるか否かに基づいて、復号処理を終了するか或いは事後確率sumをフィードバックして反復処理をもう一回繰返すかが制御される。
LDPC復号器40は更に、ビットノード処理開始制御部45、チェックノード処理開始制御部46、事後確率更新処理開始制御部47、データ衝突検出部48、βメモリ49、αメモリ50、及びLLRメモリ51を含む。LDPC復号器40は更に、β集合演算開始テーブル52、α集合演算開始テーブル53、及びsum集合演算開始テーブル54を含む。各処理開始制御部45乃至47が確率演算処理制御部として機能し、上述の各処理部41乃至43を含む確率演算処理部を制御する。
データ衝突検出部48は、階層カウンタが示す検査行列の着目階層について、データ衝突があるか否かを判断する。データ衝突検出部48は、データ衝突の有無に応じてビットノード処理開始制御部45、チェックノード処理開始制御部46、及び事後確率更新処理開始制御部47を制御する。データ衝突がない場合、これら処理開始制御部45乃至47は、それぞれビットノード処理部41、チェックノード処理部42、及び事後確率更新処理部43を制御し、階層内の全てのビットノード処理、チェックノード処理、及び事後確率更新処理を実行する。
データ衝突がある場合、ビットノード処理開始制御部45は、β集合演算開始テーブル52が示すLLRメモリ51とαメモリ50の必要なアドレスから読み出したデータに基づいて、ビットノード処理部41にビットノード処理を実行させる。即ち、i段目の処理において、ビットノード処理部41が、集合S(βi)に対してビットノード処理を実行する。i段目の処理の集合S(βi)を示すデータがβ集合演算開始テーブル52に格納されている。またチェックノード処理開始制御部46は、α集合演算開始テーブル53が示すβメモリ49の必要なアドレスから読み出したデータに基づいて、チェックノード処理部42にチェックノード処理を実行させる。即ち、i段目の処理において、チェックノード処理部42が、集合S(αi)に対してビットノード処理を実行する。i段目の処理の集合S(αi)を示すデータがα集合演算開始テーブル53に格納されている。また事後確率更新処理開始制御部47は、sum集合演算開始テーブル54が示すαメモリ50とβメモリ49の必要なアドレスから読み出したデータに基づいて、事後確率更新処理部43に事後確率更新処理を実行させる。即ち、i段目の処理において、事後確率更新処理部43が、集合S(sumi)に対して事後確率更新処理を実行する。i段目の処理の集合S(sumi)を示すデータがsum集合演算開始テーブル54に格納されている。
図13は、並列性を可能な限り維持しつつデータ衝突を考慮し複数回の処理により実行する確率演算処理の第2の実施例を示す図である。階層lの一例として行列60が示される。第2行第1列の位置、第3行第1列の位置、第4行第4列の位置、第4行第6列の位置の合計4つの位置において、同一列に複数の“1”が発生するデータ衝突が起きている。即ち、これら4つの位置においては、前階層l−1の確率演算処理の結果のみを用いたのでは、正しい事後確率値を計算することはできない。またこれら4つの位置の確率βに影響を受ける位置においても、正しい事後確率値を求めることができない。
確率演算処理の第2の実施例では、第1段の処理において、全確率演算を並列に実行する。更に、その後段の処理において、データ衝突の影響を受けるために再計算が必要となる確率演算処理を並列に実行する。図13において、C(βi)は、後段処理である再計算処理においてi回目の再計算の対象となる確率メッセージβの集合である。C(αi)及びC(sumi)は、C(βi)の再計算の結果に応じて再計算の要否の判定が必要となる確率メッセージαの集合及び事後確率sumの集合である。E(βi)、E(αi)、及びE(sumi)は、C(αi)及びC(sumi)の再計算が必要である場合に、C(βi)、C(αi)、及びC(sumi)を再計算したことの影響を受けるβ、α、及びsumの集合である。C’(sumi)は、C(αi)及びC(sumi)の再計算が必要ない場合に、C(βi)を再計算したことにより値が変化する事後確率sumの集合である。E’(βi)、E’(αi)、及びE’(sumi)は、C(αi)及びC(sumi)の再計算が必要ない場合に、C(βi)を再計算したことによる値が変化するC’(sumi)により影響を受けるβ、α、及びsumの集合である。
第1回目の再計算処理では、集合群61に対する再計算が実行される。C(β1)として、データ衝突のある“1”のうち最上行にあるβ21が再計算の対象となる。またβ21の再計算の結果、C(α1)及びC(sum1)の再計算が必要な場合には、C(α1)、C(sum1)、E(β1)、E(α1)、及びE(sum1)が再計算される。逆にC(α1)及びC(sum1)の再計算が必要ない場合には、C’(sum1)、E’(β1)、E’(α1)、及びE’(sum1)が再計算される。同様にして、第2回目の再計算処理では集合群61に対する再計算が実行され、データ衝突のある“1”のうち第2番目の行にあるβ31が再計算の対象となる。また、第3回目の再計算処理では集合群63に対する再計算が実行され、データ衝突のある“1”のうち第3番目の行の一番左にあるβ44が再計算の対象となる。また、第4回目の再計算処理では集合群64に対する再計算が実行され、データ衝突のある“1”のうち第3番目の行の左から2番目にあるβ46が再計算の対象となる。
以下に、C(αi)、C(sumi)の再計算処理の必要性の有無の判断について説明する。Layeredアルゴリズムで一般的に使われているチェックノード計算は、Min-sum系のチェックノード計算である。このMin-sum系のチェックノード計算式の代表として、Min-sumアルゴリズムのチェックノード計算式は以下の式(3)のようになる。
ここでA(m)は、タナーグラフにおいてチェックノードcmに接続する全てのビットノ
ードの集合を表わす。即ち、A(m)は、チェックノードcmに対応する検査行列の行に
おいて“1”である列の位置に対応するビットノードの集合である。A(m)\nは、A(m)からbnを除いたビットノードの集合を表わす。即ち、図14に示すように、α
mnを計算するときにはβ
mnを使わず、残りの集合A(m)\nのβを用いる。
Min-sum系のチェックノード計算式を絶対値計算部分と符号計算部分との2つの部分に分けて考える。αmnの絶対値は、集合A(m)\nのβの絶対値の最小値に等しい。従ってβmnが最小値ではない場合には、αmnの絶対値は全体集合A(m)のβの絶対値の最小値と同値である、βmnが最小値の場合には、αmnの絶対値は全体集合A(m)のβの絶対値の第2最小値と同値である。αmnの符号は、A(m)\nのβの符号の掛け算で算出する。符号位乗算の特性により、αmnの符号は、全体集合A(m)のβ符号を乗算してから更にβmnの符号を乗算することにより求めてもよい。
図15は、符号再計算及び絶対値再計算の必要性を判断する具体的な処理のフローチャートである。図15に示すフローチャートは、図13に示す第1回目の再計算処理における集合群61を説明するものである。ステップS1において、前述の式(1)を用いてβ’21=fb(sum1 l(1),α21)を再計算する。再計算前のβに対して、β’は再計算後の値を示す。ここでsum1 l(1)は、階層lの第1行(チェックノードc1に対応する行)に対して実行した確率演算処理により求められた第1列(ビットノードbnに対応する列)の事後確率である。なおチェックノードc2のチェックノード処理においては、前記式(3)から分かるように、α21はβ24及びβ25から求め、α24はβ21及びβ25から求め、α25はβ21及びβ24から求めることになる。従って、β’21の再計算により、少なくともα24及びα25の計算が影響を受けることになる。
まず前提として、確率演算処理の第2の実施例では、第1段の処理において全確率演算を並列に実行するが、例えば上記チェックノードc2については、再計算の対象であることが分かっているβ21を用いずにチェックノード処理を計算しておく。即ち、β21を除いた|β24|及び|β25|のうちで最小値と第2最小値を計算し、これら最小値と第2最小値とに基づいて、α21、α24、及びα25の絶対値計算を行なっておく。但し、α21、α24、及びα25の符号の計算については、β21、β24、及びβ25の符号を用いて計算しておく。なおα21の絶対値は上記最小値に同値であるとする。この第1段の処理における全確率演算の並列処理が終了してから、後段処理としての再計算が実行される。
まずステップS2で、前階層のsum1 l−1から計算したβ21の符号とsum1 l(1)から再計算したβ’21の符号とが異なるか否かを判断する。符号が異なる場合には、前記式(3)から分かるように、β’21の再計算によりα24及びα25の符号が変化することになるので、α24及びα25の符号を再計算する(ステップS3)。ステップS2の判断において符号が異ならない場合には、符号を再計算する必要はない(ステップS4)。
次にステップS5で、再計算したβ’21の絶対値|β’21|が、|β24|及び|β25|の最小値より小さいか否かを判断する。最小値より小さい場合には、|β’21|を新たな最小値、|β24|及び|β25|の最小値を新たな第2最小値として、α24及びα25の絶対値を再計算する(ステップS6)。ステップS5の判断の結果がNOの場合(最小値より小さくない場合)、ステップS7に進む。
ステップS7で、再計算したβ’21の絶対値|β’21|が、|β24|及び|β25|の最小値より大きく且つ|β24|及び|β25|の第2最小値より小さいか否かを判断する。判断結果がYESの場合、|β’21|を新たな第2最小値として、α24及びα25の絶対値を再計算する(ステップS8)。またステップS7の判断結果がNOの場合、α24及びα25の絶対値の再計算は必要ない。
なお図15のフローチャートでは、説明を簡単にするために、チェックノードc2について、再計算の対象であることが分かっているβ21を用いずにチェックノード処理を計算しておくことを前提としたが、β21を含めた通常のチェックノード処理を行なってもよい。この場合には、β’21の再計算の影響を調べる際に、β’21が最小値又は第2最小値であるか否かの判断と共に、β21が最小値又は第2最小値であったか否かの判断も行なえばよい。即ち、図15のステップS9において絶対値再計算必要なしと判断したが、β21が最小値又は第2最小値であった場合には、このβ21を用いて計算したα24及びα25については再計算が必要になるので、適宜再計算を行なえばよい。
図15のフローチャートの処理を実行することにより、図13に示す第1回目の再計算処理において、集合群61に対する再計算が実行される。図15のステップS3、S6、S8の場合、図13においてC(α1)及びC(sum1)の再計算が必要となり、C(α1)={α24,α25}が上記のように再計算されるとともに、C(sum1)={sum1,sum2,sum3}が再計算される。またこれらの再計算の結果影響を受けるE(β1)、E(α1)、及びE(sum1)が再計算される。また図15のステップS4及びS9の場合、図13においてC(α1)のチェックノード処理の再計算の必要はないが、β’21が再計算されているので、C’(sum1)={sum1}の事後確率更新処理が再計算される。またこの再計算の結果影響を受けるE’(β1)、E’(α1)、及びE’(sum1)が再計算される。
図16は、符号再計算及び絶対値再計算の必要性を判断する一般的な処理のフローチャートである。ステップS1において、前述の式(1)を用いてβ’mn=fb(sumn l(i),αmn)を再計算する。ステップS2で、前階層のsumn l−1あるいはsumn l(i−2)から計算したβmnの符号と着目階層のsumn l(i)から再計算したβ’mnの符号とが異なるか否かを判断する。符号が異なる場合には、前記式(3)から分かるように、β’mnの再計算によりαの符号が変化することになるので、αの符号を再計算する(ステップS3)。ステップS2の判断において符号が異ならない場合には、符号を再計算する必要はない(ステップS4)。
次にステップS5で、再計算したβ’mnの絶対値|β’mn|が、集合A(m)\nのβの最小値min1より小さいか否かを判断する。最小値より小さい場合には、|β’mn|を新たな最小値、元の最小値min1を新たな第2最小値として、αの絶対値を再計算する(ステップS6)。ステップS5の判断の結果がNOの場合(最小値より小さくない場合)、ステップS7に進む。
ステップS7で、再計算したβ’mnの絶対値|β’mn|が、集合A(m)\nのβの最小値min1より大きく且つ集合A(m)\nのβの第2最小値min2より小さいか否かを判断する。判断結果がYESの場合、|β’mn|を新たな第2最小値として、αの絶対値を再計算する(ステップS8)。またステップS7の判断結果がNOの場合、αの絶対値の再計算は必要ない。
図17は、並列性を可能な限り維持しつつデータ衝突を考慮し複数回の処理により実行する確率演算処理の第2の実施例を示すフローチャートである。ステップS1で初期化処理を行なう。即ち、事後確率sumnに、初期値として事前確率λnを代入する。その後、検査行列の各階層についてステップS2以降の処理を繰り返す。ステップS2で、集合Sに対してビットノード処理を実行する。ここで集合Sとは、着目階層において、検査行列の値が“1”である全ての要素の集合である。ステップS3で、集合Sに対してチェックノード処理を実行する。ステップS4で、集合Sに対して事後確率更新処理を実行する。これらステップS2乃至S4の処理は、従来のLayeredアルゴリズムと同様に、着目階層内の全ての行に対して各確率演算処理を並列に実行してよい。なお後々再計算が必要になることが確実である確率演算については、実行せずに未計算の状態としておいてもよい。
次にステップS5で、着目階層においてデータ衝突があるか否かを判断する。即ち、着目階層の同一列に複数の“1”が存在するか否かを判断する。データ衝突がない場合にはステップS19に進む。データ衝突がある場合にはステップS6に進む。
ステップS6では、何段目の処理であるかを示す変数iを1に初期化する。ステップS7で、集合C(βi)に対してビットノード処理を実行する。前述のように、集合C(βi)は、i回目の再計算の対象となる確率メッセージβの集合である。ステップS8で、C(αi)及びC(sumi)に対して再計算の必要があるか否かを判断する。前述のように、C(αi)及びC(sumi)は、C(βi)の再計算の結果に応じて再計算の要否の判定が必要となる確率メッセージαの集合及び事後確率sumの集合である。
ステップS8の判断結果がYESの場合、ステップS9で、C(αi)及びC(sumi)に対して再計算を実行する。ステップS10で、集合E(βi)に対してビットノード処理を再計算する。ステップS11で、集合E(αi)に対してチェックノード処理を再計算する。ステップS12で、集合E(sumi)に対して事後確率更新処理を再計算する。なお前述のように、E(βi)、E(αi)、及びE(sumi)は、C(αi)及びC(sumi)の再計算が必要である場合に、C(βi)、C(αi)、及びC(sumi)を再計算したことの影響を受けるβ、α、及びsumの集合である。以上の処理が完了すると、ステップS17に進む。
ステップS8の判断結果がNOの場合、ステップS13で、C’(sumi)に対して再計算を実行する。前述のように、C’(sumi)は、C(αi)及びC(sumi)の再計算が必要ない場合に、C(βi)を再計算したことにより値が変化する事後確率sumの集合である。ステップS14で、集合E’(βi)に対してビットノード処理を再計算する。ステップS15で、集合E’(αi)に対してチェックノード処理を再計算する。ステップS16で、集合E’(sumi)に対して事後確率更新処理を再計算する。なお前述のように、E’(βi)、E’(αi)、及びE’(sumi)は、C(αi)及びC(sumi)の再計算が必要ない場合に、C(βi)を再計算したことによる値が変化するC’(sumi)により影響を受けるβ、α、及びsumの集合である。以上の処理が完了すると、ステップS17に進む。
ステップS17では、再計算判定すべき集合に対する判定及び再計算が完了したか否かを判断する。完了していない場合には、ステップS18で変数iの値を1増加させ、ステップS7に戻り以降の処理を繰り返す。ステップS17の判定の結果、再計算判定すべき集合に対する判定及び再計算が完了している場合には、ステップS19に進む。
ステップS19で、検査行列の最後の階層の確率演算処理が完了したか否かを判断する。最後の階層の確率演算処理が完了していない場合には、ステップS2に戻り、次の階層を対象としてステップS2以降の処理を繰り返す。最後の階層の確率演算処理が完了すると、ステップS20で、パリティ検査を実行する。即ち、求められた事後確率sumnから算出したRx’に対して検査行列を掛けて、演算結果がゼロになるか否かを判断する。パリティ検査結果がゼロでなければ、ステップS2に戻り以降の処理を繰り返すことにより、事後確率sumnを再度更新する。パリティ検査結果がゼロになるまで、上記の処理を反復的に実行し、パリティ検査結果がゼロになると処理を終了する。
図18は、並列性を可能な限り維持しつつデータ衝突を考慮し複数回の処理により確率演算処理を実行するLDPC復号器の構成の第2の実施例を示す図である。図18のLDPC復号器70は、基本構成として、ビットノード処理部71、チェックノード処理部72、事後確率更新処理部73、及びパリティ検査部78を含む。データ衝突の無い場合には、通常のLayeredアルゴリズムと同様に動作する。即ち、ビットノード処理部71は、事前確率λn又は事後確率sumnと確率メッセージαmnとを用いて確率メッセージβmnを算出する。具体的には、初期状態においては事後確率sumnとして事前確率λnを用いて確率メッセージβmnを算出し、その後の反復処理では事後確率更新処理部73が求めたsumnを用いて確率メッセージβmnを算出する。チェックノード処理部72は、確率βmnを用いて確率αmnを更新する。事後確率更新処理部73は、ビットノード処理部71で算出したβmnとチェックノード処理部72で算出したαmnとを用いて事後確率sumnを更新する。パリティ検査部78は、事後確率sumを用いてRx’を算出してパリティ検査H×Rx’の演算を行なう。このパリティ検査の結果がゼロであるか否かに基づいて、復号処理を終了するか或いは事後確率sumをフィードバックして反復処理をもう一回繰返すかが制御される。
LDPC復号器70は更に、データ衝突検出部74、ビットノード再計算部75、チェックノード再計算部76、事後確率更新再計算部77、ビットノード再計算制御部79、チェックノード再計算制御部80、及び事後確率更新再計算制御部81を含む。LDPC復号器70は更に、再計算判定部82、β集合再計算用テーブル83、α集合再計算用テーブル84、sum集合再計算用テーブル85、βメモリ86、αメモリ87、LLRメモリ88、最小値&第2最小値&符号メモリ89を含む。βメモリ86は、計算されたβ及び再計算されたβを格納する。αメモリ87は、計算されたα及び再計算されたαを格納する。LLRメモリ88は、初期値λ、計算されたsum及び再計算されたsumを格納する。各再計算制御部79乃至81及び再計算判定部82が確率演算処理制御部として機能し、各再計算部75乃至77を含む確率演算処理部の動作を制御する。
ビットノード処理部71、チェックノード処理部72、及び事後確率更新処理部73による通常のLayeredアルゴリズムと同様の動作は、データ衝突の有無に関わらず、まず着目階層内の全ての確率演算処理に対して実行される。その動作においてチェックノード処理部72が算出した最小値、第2最小値、及び符号を、最小値&第2最小値&符号メモリ89に保存しておく。データ衝突検出部74は、階層カウンタが示す検査行列の着目階層について、データ衝突があるか否かを判断する。データ衝突がない場合、データ衝突検出部74は、着目階層の全ての事後確率sumをLLRメモリ88に上書きする。データ衝突がある場合、データ衝突検出部74は、ビットノード再計算制御部79に再計算指示を出す。ビットノード再計算制御部79は、データ衝突検出部74からの指示に基づいて、β集合再計算用テーブル83の示す再計算対象のβについて、ビットノード処理をビットノード再計算部75に再計算させる。再計算判定部82は、最小値&第2最小値&符号メモリ89から読み込んだデータとβの再計算の結果とに基づいて、再計算判定を行う。再計算判定部82は、再計算判定の結果に基づいて、ビットノード再計算制御部79、チェックノード再計算制御部80、及び事後確率更新再計算制御部81に指示を出す。ビットノード再計算制御部79は、再計算判定部82からの指示に応じ、β集合再計算用テーブル83の示す再計算対象のβについて、ビットノード処理をビットノード再計算部75に再計算させる。チェックノード再計算制御部80は、再計算判定部82からの指示に応じ、α集合再計算用テーブル84の示す再計算対象のαについて、チェックノード処理をチェックノード再計算部76に再計算させる。事後確率更新再計算制御部81は、再計算判定部82からの指示に応じ、sum集合再計算用テーブル85の示す再計算対象のsumについて、事後確率更新処理を事後確率更新再計算部77に再計算させる。着目階層内で再計算すべき集合に対する再計算が終了すると、次の階層に対する確率演算処理が実行される。
図19は、シミュレーションにより得たBER特性結果を示す図である。並列性を可能な限り維持しつつデータ衝突を考慮し複数回の処理により実行する確率演算処理を、ISDB−S2(Integrated Services Digital Broadcasting via Satellite - Second
Generation)に適用した。この際、ISDB−S2の11個の符号化率の中で、最もデータ衝突が大きい符号化率7/8の検査行列を用いて、シミュレーションを行った。シミュレーションは、変調方式QPSK、通信モデルAWGN、入力ビット数10,771,200ビット、LDPC復号処理最大繰返し回数50回を設定して実行した。LDPC復号処理の繰り返し回数が50回に到達してもパリティ検査値が満足できない場合には、復号処理を終了するよう設定した。図19のBER特性結果に示されるように、提案手法は、従来の手法に比較して良好なBER特性が得られる。10−4のBER特性で比較した場合、提案手法は従来手法より約0.2dBの利得を得ることができた。なお前述の確率演算処理の第1の実施例及び第2の実施例の何れも、正しい更新値を用いた確率演算処理を行なうので、第1の実施例及び第2の実施例の間で結果は同じとなる。
図20は、LDPC復号器を備えたシステム構成の一例を示す図である。図20に示すシステムは、復調部100、LDPC復号器101、及び復号データ処理部102を副汲む。復調部100により、アナログ受信信号を復調及びAD変換してデジタル受信データをLDPC復号器101に供給する。LDPC復号器101は、前述の第1の実施例又は第2の実施例の確率演算処理によりLDPC復号処理を実行し、デジタル受信データの誤り訂正を行なう。LDPC復号器101による誤り訂正後のデータは、復号データ処理部102に供給され、復号データ処理部102により所望の処理が実行される。
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
上記第1の実施例又は第2の実施例の確率演算処理において、チェックノード処理として具体的に如何なる計算をするかは問題ではない。Min-sumアルゴリズムによるチェックノード処理であってよいし、Normalized Min-sumアルゴリズムやOffset Min-sumアルゴリズムのチェックノード処理であってもよい。
なお本願発明は以下の内容を含むものである。
(付記1)
低密度パリティチェック符号化された受信信号に対して、Layered復号化アルゴリズムにより検査行列の複数の階層の階層毎に確率演算処理を並列に実行して復号処理を行なう復号化装置であって、
前記確率演算処理を並列に実行する確率演算処理部と、
前記確率演算処理部を制御することにより、前記複数の階層のうちの1つの階層内での確率演算処理を、並列性を維持しつつデータ衝突を考慮して複数段の確率演算処理に分け、第1段の処理ではデータ衝突の影響を受けずに正しく計算できる確率演算を含む複数の確率演算処理を並列に実行させ、第n段の処理においては第n−1段までの処理の確率演算結果を用いて正しく計算できる確率演算処理を並列に実行させる確率演算処理制御部と
を含む復号化装置。
(付記2)
前記確率演算処理制御部により制御される前記確率演算処理部は、前記第1段の処理においてデータ衝突の影響を受けずに正しく計算できる確率演算を並列に実行し、第2段以降の処理において、前記第1段の処理では未計算であり、データ衝突の影響を受けるために前段までの処理の実行結果を利用して初めて正しく計算できる確率演算を並列に実行することを特徴とする付記1記載の復号化装置。
(付記3)
前記確率演算処理制御部により制御される前記確率演算処理部は、前記第1段の処理において全確率演算を並列に実行し、第2段以降の処理において、データ衝突の影響を受けるために再計算が必要な確率演算処理を並列に実行することを特徴とする付記1記載の復号化装置。
(付記4)
前記確率演算処理制御部により制御される前記確率演算処理部は、第2段以降の処理において、データ衝突の影響を受けるために再計算が必要となる確率演算処理を特定し、該特定された確率演算処理を並列に実行することを特徴とする付記3記載の復号化装置。
(付記5)
前記確率演算処理制御部により制御される前記確率演算処理部は、前記再計算が必要となる確率演算処理を特定する際に、既に再計算した結果の値に応じて再計算が必要となる確率演算処理を特定することを特徴とする付記4記載の復号化装置。
(付記6)
前記確率演算処理は、前記受信信号の確率的な信頼度を表わす事前確率からパリティチェックに基づく受信信号の拘束条件を考慮して事後確率を求める処理であり、
前記事前確率を初期値とする前記事後確率と第1の確率メッセージとから第2の確率メッセージを求めるビットノード処理と、
前記ビットノード処理が求めた前記第2の確率メッセージに基づいて前記第1の確率メッセージの更新値を求めるチェックノード処理と、
前記ビットノード処理が求めた前記第2の確率メッセージと、前記チェックノード処理が求めた前記第1の確率メッセージの更新値とに基づいて、前記事後確率の更新値を求める事後確率更新処理と
を含むことを特徴とする付記1乃至5いずれか一項記載の復号化装置。
(付記7)
低密度パリティチェック符号化された受信信号に対して、Layered復号化アルゴリズムにより検査行列の複数の階層の階層毎に確率演算処理を並列に実行して復号処理を行なう復号化方法であって、
複数の階層のうちの1つの階層内での確率演算処理を、並列性を維持しつつデータ衝突を考慮して複数段の確率演算処理に分け、
第1段の処理ではデータ衝突の影響を受けずに正しく計算できる確率演算を含む複数の確率演算処理を並列に実行し、
第n段の処理においては第n−1段までの処理の確率演算結果を用いて正しく計算できる確率演算処理を並列に実行する
各段階を含む復号化方法。
(付記8)
前記第1段の処理においてデータ衝突の影響を受けずに正しく計算できる確率演算を並列に実行し、第2段以降の処理において、前記第1段の処理では未計算であり、データ衝突の影響を受けるために前段までの処理の実行結果を利用して初めて正しく計算できる確率演算を並列に実行することを特徴とする付記7記載の復号化方法。
(付記9)
前記第1段の処理において全確率演算を並列に実行し、第2段以降の処理において、データ衝突の影響を受けるために再計算が必要な確率演算処理を並列に実行することを特徴とする付記7記載の復号化方法。