JP4284600B2 - 復号装置 - Google Patents

復号装置 Download PDF

Info

Publication number
JP4284600B2
JP4284600B2 JP2003294894A JP2003294894A JP4284600B2 JP 4284600 B2 JP4284600 B2 JP 4284600B2 JP 2003294894 A JP2003294894 A JP 2003294894A JP 2003294894 A JP2003294894 A JP 2003294894A JP 4284600 B2 JP4284600 B2 JP 4284600B2
Authority
JP
Japan
Prior art keywords
message
supplied
calculation
node
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2003294894A
Other languages
English (en)
Other versions
JP2005065065A (ja
Inventor
峰志 横川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Corp
Original Assignee
Sony Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Corp filed Critical Sony Corp
Priority to JP2003294894A priority Critical patent/JP4284600B2/ja
Publication of JP2005065065A publication Critical patent/JP2005065065A/ja
Application granted granted Critical
Publication of JP4284600B2 publication Critical patent/JP4284600B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Error Detection And Correction (AREA)

Description

本発明は、復号装置に関し、特に、低密度パリティ検査符号による符号化が施された符号の復号を行う復号装置に関する。
近年、例えば、移動体通信や深宇宙通信といった通信分野、及び地上波又は衛星ディジタル放送といった放送分野の研究が著しく進められているが、それに伴い、誤り訂正符号化及び復号の効率化を目的として符号理論に関する研究も盛んに行われている。
符号性能の理論的限界としては、いわゆるシャノン(C. E. Shannon)の通信路符号化定理によって与えられるシャノン限界が知られている。符号理論に関する研究は、このシャノン限界に近い性能を示す符号を開発することを目的として行われている。近年では、シャノン限界に近い性能を示す符号化方法として、例えば、並列連接畳み込み符号(PCCC(Parallel Concatenated Convolutional Codes))や、縦列連接畳み込み符号(SCCC(Serially Concatenated Convolutional Codes))といった、いわゆるターボ符号化(Turbo coding)と呼ばれる手法が開発されている。また、これらのターボ符号が開発される一方で、古くから知られる符号化方法である低密度パリティ検査符号(Low Density Parity Check codes)(以下、LDPC符号という)が脚光を浴びつつある。
LDPC符号は、R. G. Gallagerによる「R. G. Gallager, "Low Density Parity Check Codes", Cambridge, Massachusetts: M. I. T. Press, 1963」において最初に提案されたものであり、その後、「D. J. C. MacKay, "Good error correcting codes based on very sparse matrices", Submitted to IEEE Trans. Inf. Theory, IT-45, pp. 399-431, 1999」や、「M. G. Luby, M. Mitzenmacher, M. A. Shokrollahi and D. A. Spielman, "Analysis of low density codes and improved designs using irregular graphs", in Proceedings of ACM Symposium on Theory of Computing, pp. 249-258, 1998」等において再注目されるに至ったものである。
LDPC符号は、近年の研究により、ターボ符号等と同様に、符号長を長くしていくにしたがって、シャノン限界に近い性能が得られることがわかりつつある。また、LDPC符号は、最小距離が符号長に比例するという性質があることから、その特徴として、ブロック誤り確率特性がよく、さらに、ターボ符号等の復号特性において観測される、いわゆるエラーフロア現象が殆ど生じないことも利点として挙げられる。
以下、このようなLDPC符号について具体的に説明する。なお、LDPC符号は、線形符号であり、必ずしも2元である必要はないが、ここでは、2元であるものとして説明する。
LDPC符号は、そのLDPC符号を定義する検査行列(parity check matrix)が疎なものであることを最大の特徴とするものである。ここで、疎な行列とは、行列のコンポーネントの"1"の個数が非常に少なく構成されるものであり、疎な検査行列をHで表すものとすると、そのような検査行列としては、例えば、図1に示すように、各列のハミング重み("1"の数)(weight)が"3"であり、且つ、各行のハミング重みが"6"であるもの等がある。
このように、各行及び各列のハミング重みが一定である検査行列Hによって定義されるLDPC符号は、レギュラーLDPC符号と称される。一方、各行及び各列のハミング重みが一定でない検査行列Hによって定義されるLDPC符号は、イレギュラーLDPC符号と称される。
このようなLDPC符号による符号化は、検査行列Hに基づいて生成行列Gを生成し、この生成行列Gを2元の情報メッセージに対して乗算することによって符号語を生成することで実現される。具体的には、LDPC符号による符号化を行う符号化装置は、まず、検査行列Hの転置行列HTとの間に、式GHT=0が成立する生成行列Gを算出する。ここで、生成行列Gが、k×n行列である場合には、符号化装置は、生成行列Gに対してkビットからなる情報メッセージ(ベクトルu)を乗算し、nビットからなる符号語c(=uG)を生成する。この符号化装置によって生成された符号語は、値が"0"の符号ビットが"+1"に、値が"1"の符号ビットが"−1"にといったようにマッピングされて送信され、所定の通信路を介して受信側において受信されることになる。
一方、LDPC符号の復号は、Gallagerが確率復号(Probabilistic Decoding)と称して提案したアルゴリズムであって、バリアブルノード(variable node(メッセージノード(message node)とも呼ばれる。))と、チェックノード(check node)とからなる、いわゆるタナーグラフ(Tanner graph)上での確率伝播(belief propagation)によるメッセージ・パッシング・アルゴリズムによって行うことが可能である。ここで、以下、適宜、バリアブルノードとチェックノードを、単に、ノードともいう。
しかしながら、確率復号においては、各ノード間で受け渡されるメッセージが実数値であることから、解析的に解くためには、連続した値をとるメッセージの確率分布そのものを追跡する必要があり、非常に困難を伴う解析を必要とすることになる。そこで、Gallagerは、LDPC符号の復号アルゴリズムとして、アルゴリズムA又はアルゴリズムBを提案している。
LDPC符号の復号は、一般的には、図2に示すような手順にしたがって行われる。なお、ここでは、受信値をU0(u0i)とし、チェックノードから出力されるメッセージをujとし、バリアブルノードから出力されるメッセージをviとする。また、ここでは、メッセージとは、値の"0"らしさを、いわゆる対数尤度比(log likelihood ratio)で表現した実数値である。
まず、LDPC符号の復号においては、図2に示すように、ステップS11において、受信値U0(u0i)が受信され、メッセージujが"0"に初期化されるとともに、繰り返し処理のカウンタとしての整数をとる変数kが"0"に初期化され、ステップS12に進む。ステップS12において、受信値U0(u0i)に基づいて、式(1)に示す演算を行うことによってメッセージviが求められ、さらに、このメッセージviに基づいて、式(2)に示す演算を行うことによってメッセージujが求められる。
Figure 0004284600
・・・(1)
Figure 0004284600
・・・(2)
ここで、式(1)と式(2)におけるdvとdcは、それぞれ、検査行列Hの縦方向(列)と横方向(行)の"1"の個数を示す任意に選択可能とされるパラメータであり、例えば、(3,6)符号の場合には、dv=3,dc=6となる。
なお、式(1)または(2)の演算においては、それぞれ、メッセージを出力しようとする枝(edge)から入力されたメッセージを、和または積演算のパラメータとしては用いないことから、和または積演算の範囲が、1乃至dv-1または1乃至dc-1となっている。また、式(2)に示す演算は、実際には、2入力v1,v2に対する1出力で定義される式(3)に示す関数R(v1,v2)のテーブルを予め作成しておき、これを式(4)に示すように連続的(再帰的)に用いることによって行われる。
Figure 0004284600
・・・(3)
Figure 0004284600
・・・(4)
ステップS12では、さらに、変数kが"1"だけインクリメントされ、ステップS13に進む。ステップS13では、変数kが所定の繰り返し復号回数N以上であるか否かが判定される。ステップS13において、変数kがN以上ではないと判定された場合、ステップS12に戻り、以下、同様の処理が繰り返される。
また、ステップS13において、変数kがN以上であると判定された場合、ステップS14に進み、式(5)に示す演算を行うことによって最終的に出力する復号結果としてのメッセージvが求められて出力され、LDPC符号の復号処理が終了する。
Figure 0004284600
・・・(5)
ここで、式(5)の演算は、式(1)の演算とは異なり、バリアブルノードに接続している全ての枝からの入力メッセージを用いて行われる。
このようなLDPC符号の復号は、例えば(3,6)符号の場合には、図3に示すように、各ノード間でメッセージの授受が行われる。なお、図3における"="で示すノード(バリアブルノード)では、式(1)に示した演算が行われ、"+"で示すノード(チェックノード)では、式(2)に示した演算が行われる。特に、アルゴリズムAにおいては、メッセージを2元化し、"+"で示すノードにて、dc-1個の入力メッセージの排他的論理和演算を行い、"="で示すノードにて、受信値Rに対して、dv-1個の入力メッセージが全て異なるビット値であった場合には、符号を反転して出力する。
また、一方で、近年、LDPC符号の復号の実装法に関する研究も行われている。実装方法について述べる前に、まず、LDPC符号の復号を摸式化して説明する。
図4は、(3,6)LDPC符号(符号化率1/2、符号長12)の検査行列(parity check matrix)の例である。LDPC符号の検査行列は、図5のように、タナーグラフを用いて書き表すことができる。ここで、図5において、"+"で表わされるのが、チェックノードであり、"="で表わされるのが、バリアブルノードである。チェックノードとバリアブルノードは、それぞれ、検査行列の行と列に対応する。チェックノードとバリアブルノードとの間の結線は、枝(edge)であり、検査行列の"1"に相当する。即ち、検査行列の第j行第i列のコンポーネントが1である場合には、図5において、上からi番目のバリアブルノード("="のノード)と、上からj番目のチェックノード("+"のノード)とが、枝により接続される。枝は、バリアブルノードに対応する符号ビットが、チェックノードに対応する拘束条件を持つことを表わす。なお、図5は、図4の検査行列のタナーグラフとなっている。
LDPC符号の復号方法であるサムプロダクトアルゴリズム(Sum Product Algorithm)は、バリアブルノードの演算とチェックノードの演算とを繰り返し行う。
バリアブルノードでは、図6のように、式(1)の演算を行う。すなわち、図6において、計算しようとしている枝に対応するメッセージviは、バリアブルノードに繋がっている残りの枝からのメッセージu1およびu2と、受信情報u0iを用いて計算される。他の枝に対応するメッセージも同様に計算される。
チェックノードの演算について説明する前に、式(2)を、式a×b=exp{ln(|a|)+ln(|b|)}×sign(a)×sign(b)の関係を用いて、式(6)のように書き直す。但し、sign(x)は、x≧0のとき1であり、x<0のとき-1である。
Figure 0004284600
・・・(6)
更に、x≧0において、φ(x)=ln(tanh(x/2))と定義すると、φ-1(x)=2tanh-1(e-x)であるから、式(6)は、式(7)のように書くことができる。
Figure 0004284600
・・・(7)
チェックノードでは、図7のように、式(7)の演算を行う。すなわち、図7において、計算しようとしている枝に対応するメッセージujは、チェックノードに繋がっている残りの枝からのメッセージv1,v2,v3,v4,v5を用いて計算される。他の枝に対応するメッセージも同様に計算される。
なお、関数φ(x)は、φ(x)=ln((ex+1)/(ex-1))とも表すことができ、x>0において、φ(x)=φ-1(x)である。関数φ(x)およびφ-1(x)をハードウェアに実装する際には、LUT(Look Up Table)を用いて実装される場合があるが、両者共に同一のLUTとなる。
サムプロダクトアルゴリズムをハードウェアに実装する場合、式(1)で表わされるバリアブルノード演算および式(7)で表わされるチェックノード演算とを、適度な回路規模と動作周波数で繰り返し行うことが必要である。
復号装置の実装の例として、まず、単純に各ノードの演算を一つずつ順次行うことによって復号を行う場合(full serial decoding)の実装法について説明する。
なお、ここでは、例えば、図8の、30(行)×90(列)の検査行列で表現される符号(符号化率2/3、符号長90)を復号することとする。図8の検査行列の1の数は269であり、従って、そのタナーグラフでは、枝の数は269個となる。ここで、図8の検査行列では、0を、"."で表現している。
図9は、LDPC符号の1回復号を行う復号装置の構成例を示している。
図9の復号装置では、その動作する1クロック(clock)ごとに、1つの枝に対応するメッセージが計算される。
即ち、図9の復号装置は、2つの枝用メモリ100および102、1つのチェックノード計算器101、1つのバリアブルノード計算器103、1つの受信用メモリ104、1つの制御部105からなる。
図9の復号装置では、枝用メモリ100または102からメッセージデータが1つずつ読み出され、そのメッセージデータを用いて、所望の枝に対応するメッセージデータが計算される。そして、その計算によって求められたメッセージデータが1つずつ後段の枝用メモリ102または100に格納されていく。繰り返し復号を行う際には、この1回復号を行う図9の復号装置を複数個縦列に連接するか、もしくは図9の復号装置を繰り返し用いることによって、繰り返し復号を実現する。なお、ここでは、例えば、図9の復号装置が複数個接続されているものとする。
枝用メモリ100は、前段の復号装置(図示せず)のバリアブルノード計算器103から供給されるメッセージD100を、後段のチェックノード計算器101が読み出す順番に格納していく。そして、枝用メモリ100は、チェックノード計算のフェーズでは、メッセージD100を、格納してある順番通りに、メッセージD101として、チェックノード計算器101に供給する。
チェックノード計算器101は、制御部105から供給される制御信号D106に基づき、枝用メモリ100から供給されるメッセージD101を用いて、式(7)に従って演算を行い、その演算によって求められたメッセージD102を、後段の枝用メモリ102に供給する。
枝用メモリ102は、前段のチェックノード計算器101から供給されるメッセージD102を、後段のバリアブルノード計算器103が読み出す順番に格納していく。そして、枝用メモリ102は、バリアブルノード計算のフェーズでは、メッセージD102を、格納してある順番通りに、メッセージD103として、バリアブルノード計算器103に供給する。
さらに、バリアブルノード計算器103には、制御部105から制御信号D107が供給されるとともに、受信用メモリ104から受信データD104が供給される。バリアブルノード計算器103は、制御信号D107に基づき、枝用メモリ100から供給されるメッセージD103と受信用メモリ100から供給される受信データD104を用い、式(1)に従って演算を行い、その演算の結果得られるメッセージD105を、図示せぬ後段の復号装置の枝用メモリ100に供給する。
受信用メモリ104には、LDPC符号化された受信データ(LDPC符号)が格納される。制御部105は、バリアブルノード演算を制御する制御信号D106と、チェックノード演算を制御する制御信号D107を、それぞれチェックノード計算器101とバリアブルノード計算器103に供給する。制御部105は、枝用メモリ100に全ての枝のメッセージが格納されたとき、チェックノード計算器101に制御信号D106を供給し、枝用メモリ102に全ての枝のメッセーが格納されたとき、バリアブルノード計算器103に制御信号D107を供給する。
図10は、チェックノード演算を1つずつ行う図9のチェックノード計算器101の構成例を示している。
なお、図10では、各メッセージが符号ビットを合わせて合計6ビット(bit)に量子化されているものとして、チェックノード計算器101を表している。また、図10では、図8の検査行列で表わされるLDPC符号のチェックノード演算が行われる。さらに、図10のチェックノード演算器101には、クロックckが供給され、このクロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図10のチェックノード計算器101は、制御部105から供給される、例えば、1ビットの制御信号D106に基づき、枝用メモリ100から1つずつ読み込まれるメッセージD101を用いて、式(7)にしたがって演算を行う。
即ち、チェックノード計算器101では、検査行列の各列に対応するバリアブルノードからの6ビットのメッセージD101(メッセージvi)が1つずつ読み込まれ、その下位ビットである絶対値D122(|vi|)がLUT121に、その最上位ビットである符号ビットD121がEXOR回路129とFIFO(First In First Out)メモリ133にそれぞれ供給される。また、チェックノード計算器101には、制御部105から制御信号D106が供給され、その制御信号D106は、セレクタ124とセレクタ131に供給される。
LUT121は、絶対値D122(|vi|)に対して、式(7)におけるφ(|vi|)の演算を行った5ビットの演算結果D123(φ(|vi|))を読み出し、加算器122とFIFOメモリ127に供給する。
加算器122は、演算結果D123(φ(|vi|))とレジスタ123に格納されている9ビットの値D124とを加算することにより、演算結果D123を積算し、その結果得られる9ビットの積算値をレジスタ123に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD101の絶対値D122(|vi|)に対する演算結果が積算された場合、レジスタ123はリセットされる。
検査行列の1行に亘るメッセージD101が1つずつ読み込まれ、レジスタ123に1行分の演算結果D123が積算された積算値が格納された場合、制御部105から供給される制御信号D106は、0から1に変化する。例えば、行の重み(row weight)が「9」である場合、制御信号D106は、1から8クロック目までは、「0」となり、9クロック目では「1」となる。
制御信号D106が「1」の場合、セレクタ124は、レジスタ123に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD101(メッセージvi)から求められたφ(|vi|)が積算された9ビットの値D124(i=1からi=dcまでのΣφ(|vi|))を選択し、値D125として、レジスタ125に出力して格納させる。レジスタ125は、格納している値D125を、9ビットの値D126として、セレクタ124と加算器126に供給する。制御信号D106が「0」の場合、セレクタ124は、レジスタ125から供給された値D126を選択し、レジスタ125に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD101(メッセージvi)から求められたφ(|vi|)が積算されるまで、レジスタ125は、前回積算されたφ(|vi|)を、セレクタ124と加算器126に供給する。
一方、FIFOメモリ127は、レジスタ125から新たな値D126(i=1からi=dcまでのΣφ(|vi|))が出力されるまでの間、LUT121が出力した演算結果D123(φ(|vi|))を遅延し、5ビットの値D127として減算器126に供給する。減算器126は、レジスタ125から供給された値D126から、FIFOメモリ127から供給された値D127を減算し、その減算結果を、5ビットの減算値D128としてLUT128に供給する。即ち、減算器126は、検査行列の1行に亘る全ての枝からのメッセージD101(メッセージvi)から求められたφ(|vi|)の積算値から、求めたい枝からのメッセージD101(メッセージvi)から求められたφ(|vi|)を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を減算値D128としてLUT128に供給する。
LUT128は、減算値D128(i=1からi=dc−1までのΣφ(|vi|))に対して、式(7)におけるφ-1(Σφ(|vi|))の演算を行った5ビットの演算結果D129(φ-1(Σφ(|vi|)))を出力する。
以上の処理と並行して、EXOR回路129は、レジスタ130に格納されている1ビットの値D131と符号ビットD121との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、1ビットの乗算結果D130をレジスタ130に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD101の符号ビットD121が乗算された場合、レジスタ130はリセットされる。
検査行列の1行に亘る全ての枝からのメッセージD101の符号ビットD121が乗算された乗算結果D130(i=1からdcまでのΠsign(vi))がレジスタ130に格納された場合、制御部105から供給される制御信号D106は、「0」から「1」に変化する。
制御信号D106が「1」の場合、セレクタ131は、レジスタ130に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD101の符号ビットD121が乗算された値D131(i=1からi=dcまでのΠsign(vi))を選択し、1ビットの値D132としてレジスタ132に出力して格納させる。レジスタ132は、格納している値D132を、1ビットの値D133としてセレクタ131とEXOR回路134に供給する。制御信号D106が「0」の場合、セレクタ131は、レジスタ132から供給された値D133を選択し、レジスタ132に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD101(メッセージvi)の符号ビットD121が乗算されるまで、レジスタ132は、前回格納した値を、セレクタ131とEXOR回路134に供給する。
一方、FIFOメモリ133は、レジスタ132から新たな値D133(i=1からi=dcまでのΠsign(vi))がEXOR回路134に供給されるまでの間、符号ビットD121を遅延し、1ビットの値D134としてEXOR回路134に供給する。EXOR回路134は、レジスタ132から供給された値D133と、FIFOメモリ133から供給された値D134との排他的論理和を演算することにより、値D133を、値D134で除算し、1ビットの除算結果を除算値D135として出力する。即ち、EXOR回路134は、検査行列の1行に亘る全ての枝からのメッセージD101の符号ビットD121(sign(|vi|))の乗算値を、求めたい枝からのメッセージD101の符号ビットD121(sign(|vi|))で除算して、その除算値(i=1からi=dc−1までのΠsign(|vi|))を除算値D135として出力する。
チェックノード計算器101では、LUT128から出力された5ビットの演算結果D129を下位5ビットとするとともに、EXOR回路134から出力された1ビットの除算値D135を最上位ビットとする合計6ビットがメッセージD102(メッセージuj)として出力される。
以上のように、チェックノード計算器101では、式(7)の演算が行われ、メッセージujが求められる。
なお、図8の検査行列の行の重みの最大は9であるため、即ち、チェックノードに供給されるメッセージの最大数は9であるため、チェックノード計算器101は、9個のメッセージ(φ(|vi|))を遅延させるFIFOメモリ127とFIFOメモリ133を有している。行の重みが9未満の行のメッセージを計算するときには、FIFOメモリ127とFIFOメモリ133における遅延量が、その行の重みの値に減らされる。
図11は、バリアブルノード演算を1つずつ行う図9のバリアブルノード計算器103の構成例を示している。
なお、図11では、各メッセージが符号ビットを合わせて合計6ビット(bit)に量子化されているものとして、バリアブルノード計算器103を表している。また、図11では、図8の検査行列で表わされるLDPC符号のバリアブルノード演算が行われる。さらに、図11のバリアブルノード計算機103には、クロックckが供給され、クロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図11のバリアブルノード計算器103は、制御部105から供給される、例えば、1ビットの制御信号D107に基づき、枝用メモリ102から1つずつ読み込まれるメッセージD103と、受信用メモリ104から読み込まれる受信データD104を用いて、式(1)にしたがって演算を行う。
即ち、バリアブルノード計算器103では、検査行列の各行に対応するチェックノードからの6ビットのメッセージD103(メッセージuj)が1つずつ読み込まれ、そのメッセージD103が、加算器151とFIFOメモリ155に供給される。また、バリアブルノード計算器103では、受信用メモリ104から6ビットの受信データD104が1つずつ読み込まれ、加算器156に供給される。さらに、バリアブルノード計算器103には、制御部105から制御信号D107が供給され、その制御信号D107は、セレクタ153に供給される。
加算器151は、メッセージD103(メッセージuj)とレジスタ152に格納されている9ビットの値D151とを加算することにより、メッセージD103を積算し、その結果得られる9ビットの積算値を、レジスタ152に再格納する。なお、検査行列の1列に亘る全ての枝からのメッセージD103が積算された場合、レジスタ152はリセットされる。
検査行列の1列に亘るメッセージD103が1つずつ読み込まれ、レジスタ152に1列分のメッセージD103が積算された値が格納された場合、制御部105から供給される制御信号D107は、「0」から「1」に変化する。例えば、列の重みが「5」である場合、制御信号D107は、1から4クロック目までは「0」となり、5クロック目では「1」となる。
制御信号D107が「1」の場合、セレクタ153は、レジスタ152に格納されている値、即ち、検査行列の1列に亘る全ての枝からのメッセージD103(メッセージuj)が積算された9ビットの値D151(j=1からdVまでのΣuj)を選択し、レジスタ154に出力して格納させる。レジスタ154は、格納している値D151を、9ビットの値D152として、セレクタ153と加減算器156に供給する。制御信号D107が「0」の場合、セレクタ153は、レジスタ154から供給された値D152を選択し、レジスタ154に出力し再格納させる。即ち、検査行列の1列に亘る全ての枝からのメッセージD103(メッセージuj)が積算されるまで、レジスタ154は、前回積算された値を、セレクタ153と加減算器156に供給する。
一方、FIFOメモリ155は、レジスタ154から新たな値D152(j=1からdVまでのΣuj)が出力されるまでの間、チェックノードからのメッセージD103を遅延し、6ビットの値D153として加減算器156に供給する。加減算器156は、レジスタ154から供給された値D152から、FIFOメモリ155から供給された値D153を減算する。即ち、加減算器156は、検査行列の1列に亘る全ての枝からのメッセージD103(メッセージuj)の積算値から、求めたい枝からのメッセージujを減算して、その減算値(j=1からdv−1までのΣuj)を求める。さらに、加減算器156には、その減算値(j=1からdv−1までのΣuj)に、受信用メモリ104から供給された受信データD104を加算して、その結果得られる6ビットの値をメッセージD105(メッセージvi)として出力する。
以上のように、バリアブルノード計算器103では、式(1)の演算が行われ、メッセージviが求められる。
なお、図8の検査行列の列の重みの最大は5であるため、即ち、バリアブルノードに供給されるメッセージの最大数は5であるため、バリアブルノード計算器103は、5個のメッセージ(uj)を遅延させるFIFOメモリ155を有している。列の重みが5未満の列のメッセージを計算するときには、FIFOメモリ155における遅延量が、その列の重みの値に減らされる。
図9の復号装置では、検査行列の重みにしたがって、制御部105から制御信号が与えられる。そして、図9の復号装置によれば、枝用メモリ100および102、並びにチェックノード計算器101およびバリアブルノード計算器103のFIFOメモリ127,133,155の容量さえ足りれば、制御信号のみを変えることで様々な検査行列のLDPC符号を復号することができる。
なお、図示しないが、図9の復号装置において、復号の最終段においては、式(1)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が、最終的な復号結果として出力される。
図9の復号装置を繰り返し用いて、LDPC符号を復号する場合には、チェックノード演算とバリアブルノード演算とが交互に行われる。即ち、図9の復号装置では、チェックノード計算器101によるチェックノード演算の結果を用いて、バリアブルノード計算器103によりバリアブルノード演算が行われ、バリアブルノード計算器103によるバリアブルノード演算の結果を用いて、チェックノード計算器101によりチェックノード演算が行われる。
従って、269の枝を有する図8の検査行列を用いた1回の復号に、269×2=538クロック(clock)を必要とする。例えば、50回の繰り返し復号を行うためには、符号長である90個の符号(受信データ)を1フレームとして、その1フレームを受信する間に、538×50=26900クロック動作することが必要であり、受信周波数の約300(≒26900/90)倍の高速動作が必要になる。受信周波数が数十MHzであるとすると、GHz以上の速度での動作を要求されることになる。
また、図9の復号装置を、例えば、50台連接して、LDPC符号を復号する場合には、1フレーム(frame)目のバリアブルノード演算を行っている間に、2フレーム目のチェックノード演算を行い、3フレーム目のバリアブルノード演算を行う、というように、複数のバリアブルノード演算とチェックノード演算とを同時に行うことができる。この場合、90個の符号を受信する間に、269個の枝を計算すればよいので、復号装置は、受信周波数の約3(≒269/90)倍の周波数で動作すればよいことになり、十分に実現可能である。しかしながら、この場合、回路規模が、単純には、図9の復号装置の50倍になる。
次に、全ノードの演算を同時に行うことによって復号を行う場合(full parallel decoding)の復号装置の実装法について説明する。
この実装法については、例えば、非特許文献1に記載されている。
図12は、図8の検査行列で表現される符号(符号化率2/3、符号長90)を復号する復号装置の一例の構成を示している。
図12の復号装置では、枝用メモリ202または206から、269個ある枝に対応するメッセージデータを全て同時に読み出し、そのメッセージデータを用いて、269個の枝に対応する新たなメッセージデータを演算する。さらに、その演算の結果求められた新たなメッセージデータが全て同時に後段の枝用メモリ206または202に格納されていく。そして、図12の復号装置を繰り返し用いることで繰り返し復号が実現される。
図12において、復号装置は、1つの受信用メモリ205、2つの枝入れ替え装置200および203、2つの枝用メモリ202および206、30個のチェックノード計算器2011乃至20130、90個のバリアブルノード計算器2041乃至20490からなる。以下、各部について詳細に説明する。
枝用メモリ206は、前段のバリアブルノード計算器2041乃至20490からのメッセージD2061乃至D20690を全て同時に格納し、次の時刻(次のクロックのタイミング)に、メッセージD2061乃至D20690を、メッセージD2071乃至D20790として読み出し、次段の枝入れ替え装置200に、メッセージD200(D2001乃至D20090)として供給する。枝入れ替え装置200は、枝用メモリ206から供給されたメッセージD2001乃至D20090の順番を、図8の検査行列にしたがって並び替え(入れ替え)、チェックノード計算器2011乃至20130に、メッセージD2011乃至D20130として供給する。
チェックノード計算器2011乃至20130は、枝入れ替え装置200から供給されるメッセージD2011乃至D20130を用いて式(7)にしたがって演算を行い、その演算の結果得られるメッセージD2021乃至D20230を、枝用メモリ202に供給する。
枝用メモリ202は、前段のチェックノード計算器2011乃至20130から供給されるメッセージD2021乃至D20230を全て同時に格納し、次の時刻に、そのすべてのメッセージD2021乃至D20230を、メッセージD2031乃至D20330として、次段の枝入れ替え装置203に供給する。
枝入れ替え装置203は、枝用メモリ202から供給されたメッセージD2031乃至D20330の順番を図8の検査行列にしたがって並び替え、バリアブルノード計算器2041乃至20490に、メッセージD2041乃至D20490として供給する。
バリアブルノード計算器2041乃至20490は、枝入れ替え装置203から供給されるメッセージD2041乃至D20490と、受信用メモリ205から供給される受信データD2051乃至D20590を用いて式(1)にしたがって演算を行い、その演算の結果得られるメッセージD2061乃至D20690を、次段の枝用メモリ206に供給する。
図13は、チェックノード演算を同時に行う図12のチェックノード計算器201m(m=1,2,・・・,30)の構成例を示している。
図13のチェックノード計算器201mでは、図10のチェックノード計算器101と同様にして、式(7)のチェックノード演算が行われるが、そのチェックノード演算が、すべての枝について同時に行われる。
即ち、図13のチェックノード計算器201mでは、枝入れ替え装置200から供給される図8の検査行列の各列に対応するバリアブルノードからのメッセージD2211乃至D2219(vi)が全て同時に読み込まれ、それぞれの下位5ビットである絶対値D2221乃至D2229(|vi|)がLUT2211乃至2219にそれぞれ供給される。また、メッセージD2211乃至D2219(vi)の最上位ビットである1ビットの符号ビットD2231乃至D2239が、EXOR回路2261乃至2269にそれぞれ供給されるとともに、EXOR回路225に供給される。
LUT2211乃至2219は、絶対値D2221乃至D2229(|vi|)に対して、式(7)におけるφ(|vi|)の演算を行った5ビットの演算結果D2241乃至D2249(φ(|vi|))をそれぞれ読み出し、それぞれを減算器2231乃至2239に供給する。また、LUT2211乃至2219は、演算結果D2241乃至D2249(φ(|vi|))を加算器222に供給する。
加算器222は、演算結果D2241乃至D2249(φ(|vi|))の値の総和(1行分の演算結果の総和)を演算し、9ビットの演算結果D225(i=1から9のΣφ(|vi|))を、減算器2231乃至2239に供給する。減算器2231乃至2239は、演算結果D225から、演算結果D2241乃至D2249(φ(|vi|))をそれぞれ減算し、5ビットの減算値D2271乃至D2279を、LUT2241乃至2249に供給する。即ち、減算器2231乃至2239は、全ての枝からのメッセージviから求められたφ(|vi|)の積算値から、求めたい枝からのメッセージviから求められたφ(|vi|)を減算して、その減算値D2271乃至D2279(i=1から8までのΣφ(|vi|))をLUT2241乃至2249にそれぞれ供給する。LUT2241乃至2249は、減算値D2271乃至D2279に対して、式(7)におけるφ-1(Σφ(|vi|))の演算を行った5ビットの演算結果D2281乃至D2289を読み出して出力する。
一方、EXOR回路225は、全ての符号ビットD2231乃至D2239の排他的論理和を演算することにより、符号ビットD2231乃至D2239の乗算を行い、1ビットの乗算値D226(1行分の符号ビットの乗算値(i=1から9までのΠsign(vi)))をEXOR回路2261乃至2269にそれぞれ供給する。EXOR回路2261乃至2269は、乗算値D226と符号ビットD2231乃至D2239それぞれとの排他的論理を演算することにより、乗算値D226を、符号ビットD2231乃至D2239それぞれで除算した1ビットの除算値D2291乃至D2299(i=1から8までのΠsign(vi))を求めて出力する。
チェックノード計算器201mでは、LUT2241乃至2249から出力された5ビットの演算結果D2281乃至D2289それぞれを下位5ビットとするとともに、EXOR回路2261乃至2269から出力された除算値D2291乃至D2299それぞれを最上位ビットとする合計6ビットが、チェックノード演算の結果得られるメッセージD2301乃至D2309として出力される。
以上のように、チェックノード計算器201mでは、式(7)の演算が行われ、メッセージujが求められる。
なお、図13では、各メッセージが符号ビットを合わせて合計6ビットに量子化されているものとして、チェックノード計算器201mを表している。また、図13の回路は1つのチェックノードに相当する。ここで処理の対象としている図8の検査行列については、その行数である30行のチェックノードが存在するため、図12の復号装置は、図13に示したようなチェックノード計算器201mを30個有している。
ここで、図13のチェックノード計算器201mでは、9個のメッセージを同時に計算することができる。そして、ここで処理の対象としている図8の検査行列の行の重みは、第1行が8で、第2乃至第30行が9であるため、即ち、チェックノードに供給されるメッセージの数が、8のケースが1つと、9のケースが29あるため、チェックノード計算器2011は、図13の回路と同様の8つのメッセージを同時に計算することができる回路構成となっており、残りのチェックノード計算器2012乃至20130は、図13の回路と同一構成となっている。
図14は、バリアブルノード演算を同時に行う図12のバリアブルノード計算器204p(p=1,2,・・・,90)の構成例を示している。
図14のバリアブルノード計算器204pでは、図11のバリアブルノード計算器103と同様にして、式(1)のバリアブルノード演算が行われるが、そのバリアブルノード演算が、すべての枝について同時に行われる。
即ち、図14のバリアブルノード計算器204pでは、枝入れ替え装置203から供給される、検査行列の各行に対応するチェックノードからの6ビットのメッセージD2511乃至D2515(メッセージuj)が全て同時に読み込まれ、それぞれ加算器2521乃至2525に供給されるとともに、加算器251に供給される。また、バリアブルノード計算器204pには、受信用メモリ205から受信データD271が供給され、その受信データD271は、加減算器2521乃至2525に供給される。
加算器251は、全てのメッセージD2511乃至D2515(メッセージuj)を積算し、9ビットの積算値D252(1列分のメッセージの総和値(j=1から5までのΣuj))を加減算器2521乃至2525に供給する。加減算器2521乃至2525は、加算値D252から、メッセージD2511乃至D2515(メッセージuj)をそれぞれ減算する。即ち、加減算器2521乃至2525は、全ての枝からのメッセージujの積算値D252から、求めたい枝からのメッセージD2511乃至D2515(メッセージuj)をそれぞれ減算して、その減算値(j=1から4までのΣuj)を求める。
さらに、加減算器2521乃至2525は、減算値(j=1から4までのΣuj)に、受信データD271(u0i)を加算して、6ビットの加算値D2531乃至D2535を、バリアブルノード演算の結果として出力する。
以上のように、バリアブルノード計算器204pでは、式(1)の演算が行われ、メッセージviが求められる。
なお、図14では、各メッセージが符号ビットを合わせて合計6ビットに量子化されているものとして、バリアブルノード計算器204pを表している。また、図14の回路は1つのバリアブルノードに相当する。ここで処理の対象としている図8の検査行列については、その列数である90列のバリアブルノードが存在するから、図12の復号装置は、図14に示したような回路を90個有している。
ここで、図14のバリアブルノード計算器204pでは、5個のメッセージを同時に計算することができる。そして、ここで処理の対象としている図8の検査行列は、重みが5,3,2,1の列が、それぞれ、15列、45列、29列、1列あるので、バリアブルノード計算器2041乃至20490のうちの15個は、図14の回路と同一構成となっており、残りの45個、29個、1個は、図14の回路と同様の3,2,1つのメッセージをそれぞれ同時に計算することができる回路構成となっている。
なお、図示しないが、図12の復号装置においても、図9における場合と同様に、復号の最終段においては、式(1)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が最終的な復号結果として出力される。
図12の復号装置によれば、269個ある枝に対応するメッセージすべてを1クロックで同時に計算することができる。
図12の復号装置を繰り返し用いて復号する場合には、チェックノード演算とバリアブルノード演算とを交互に行い、1回の復号を2クロックで行うことができる。従って、例えば、50回の復号を行うためには、符号長が90個の符号を1フレームとする受信データを受信する間に2×50=100クロック動作すれば良いことになり、ほぼ受信周波数と同一の動作周波数でよいことになる。一般的に、LDPC符号は、符号長が数千から数万と大きいことから、図12の復号装置を用いれば、復号回数を極めて多くすることができ、誤り訂正性能の向上を期待することができる。
しかしながら、図12の復号装置は、タナーグラフのすべての枝に対応するメッセージの演算を、並列で行うため、回路規模が、符号長に比例して大きくなる。また、図12の復号装置を、ある符号長の、ある符号化率の、ある検査行列を持つLDPC符号の復号を行う装置として構成した場合、その復号装置において、他の符号長や、他の符号化率、他の検査行列を持つLDPC符号の復号を行うことは困難となる。即ち、図12の復号装置は、図9の復号装置のように、制御信号を変えるだけでは、様々な符号を復号することに対処することが困難であり、符号依存性が高い。
また、サムプロダクトアルゴリズムを近似して実装する方法なども提案されているが、この方法では、性能の劣化を招いてしまう。
C. Howland and A. Blanksby, "Parallel Decoding Architectures for Low Density Parity Check Codes", Symposium on Circuits and Systems, 2001
図9の復号装置では、バリアブルノードの演算結果を格納する枝用メモリ100およびチェックノードの演算結果を格納する枝用メモリ102の2つのメモリが設けられ、枝用メモリ100および枝用メモリ102は、全枝数に対応するメッセージを格納しているため、大容量のメモリを必要とし、復号装置の回路規模が大きくなるという問題があった。
また、図9の復号装置では、チェックノード計算器101およびバリアブルノード計算器103の2つの計算器が設けられているため、復号装置の回路規模が大きくなってしまう。
このように、図9の復号装置では、回路規模が大きくなってしまうため、コストが高くなったり、装置の消費電力が大きくなるといった問題があった。
本発明は、このような状況に鑑みてなされたものであり、復号装置の回路規模を小さくすることができるようにするものである。
本発明の復号装置は、LDPC(Low Density Parity Check)符号の復号のためのチェックノードの演算を、必要な第1のメッセージを用いて行うチェックノード計算手段と、LDPC符号の復号のためのバリアブルノードの演算を、LDPC符号のデータであるLDPC符号データと必要な第2のメッセージを用いて行うバリアブルノード計算手段と、第1のメッセージを用いたチェックノード計算の結果得られる第3のメッセージを記憶する第1の記憶手段と、LDPC符号データと第2のメッセージとを用いたバリアブルノード計算の結果得られる第4のメッセージを記憶する第2の記憶手段とを備え、第1の記憶手段と第2の記憶手段が、1つの記憶手段に共有化され、チェックノード計算手段は、共有化されている記憶手段に記憶されている第4のメッセージを用いてチェックノードの演算を行い、第1の記憶手段は、第4のメッセージを用いたチェックノード計算の結果得られる第5のメッセージを記憶し、バリアブルノード計算手段は、共有化されている記憶手段に記憶されている第5のメッセージとLDPC符号データとを用いてバリアブルノードの演算を行い、第2の記憶手段は、LDPC符号データと第5のメッセージとを用いたバリアブルノード計算の結果得られる第6のメッセージを記憶することを特徴とする。
さらに、チェックノード計算手段とバリアブルノード計算手段が、1つのノード計算手段に共有化されているようにすることができる。
本発明においては、LDPC(Low Density Parity Check)符号の復号のためのチェックノードの演算が、必要な第1のメッセージを用いて行われ、LDPC符号の復号のためのバリアブルノードの演算が、LDPC符号のデータであるLDPC符号データと必要な第2のメッセージを用いて行われ、第1のメッセージを用いたチェックノード計算の結果得られる第3のメッセージが第1の記憶手段に記憶され、LDPC符号データと第2のメッセージとを用いたバリアブルノード計算の結果得られる第4のメッセージが第2の記憶手段に記憶される。第1の記憶手段と第2の記憶手段は、1つの記憶手段に共有化されている。そして、共有化されている記憶手段に記憶されている第4のメッセージを用いてチェックノードの演算が行われ、第1の記憶手段に、第4のメッセージを用いたチェックノード計算の結果得られる第5のメッセージが記憶され、共有化されている記憶手段に記憶されている第5のメッセージとLDPC符号データとを用いてバリアブルノードの演算が行われ、第2の記憶手段に、LDPC符号データと第5のメッセージとを用いたバリアブルノード計算の結果得られる第6のメッセージが記憶される。
本発明によれば、LDPC符号の復号装置の回路規模を小さくすることができるので、コストを削減し、装置の消費電力を削減することができる。
以下に本発明の実施の形態を説明するが、請求項に記載の構成要件と、発明の実施の形態における具体例との対応関係を例示すると、次のようになる。この記載は、請求項に記載されている発明をサポートする具体例が、発明の実施の形態に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、構成要件に対応するものとして、ここには記載されていない具体例があったとしても、そのことは、その具体例が、その構成要件に対応するものではないことを意味するものではない。逆に、具体例が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その具体例が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
さらに、この記載は、発明の実施の形態に記載されている具体例に対応する発明が、請求項に全て記載されていることを意味するものではない。換言すれば、この記載は、発明の実施の形態に記載されている具体例に対応する発明であって、この出願の請求項には記載されていない発明の存在、すなわち、将来、分割出願されたり、補正により追加される発明の存在を否定するものではない。
請求項1に記載の復号装置は、LDPC(Low Density Parity Check)符号の復号のためのチェックノードの演算を、必要な第1のメッセージを用いて行うチェックノード計算手段(例えば、図15のチェックノード計算器312)と、前記LDPC符号の復号のためのバリアブルノードの演算を、LDPC符号のデータであるLDPC符号データと必要な第2のメッセージを用いて行うバリアブルノード計算手段(例えば、図15のバリアブルノード計算器312)と、前記第1のメッセージを用いた前記チェックノード計算の結果得られる第3のメッセージを記憶する第1の記憶手段(例えば、図15の枝用メモリ310)と、前記LDPC符号データと前記第2のメッセージとを用いた前記バリアブルノード計算の結果得られる第4のメッセージを記憶する第2の記憶手段(例えば、図15の枝用メモリ310)とを備え、前記第1の記憶手段と前記第2の記憶手段が、1つの記憶手段に共有化され、前記チェックノード計算手段は、共有化されている記憶手段に記憶されている前記第4のメッセージを用いて前記チェックノードの演算を行い、前記第1の記憶手段は、前記第4のメッセージを用いた前記チェックノード計算の結果得られる第5のメッセージを記憶し、前記バリアブルノード計算手段は、共有化されている記憶手段に記憶されている前記第5のメッセージと前記LDPC符号データとを用いてバリアブルノードの演算を行い、前記第2の記憶手段は、前記LDPC符号データと前記第5のメッセージとを用いた前記バリアブルノード計算の結果得られる第6のメッセージを記憶することを特徴とする。
請求項10に記載の復号装置は、請求項9に記載の復号装置であって、さらに、前記チェックノード計算手段(例えば、図17のノード計算器)と前記バリアブルノード計算手段(例えば、図17のノード計算器)が、1つのノード計算手段に共有化されていることを特徴とする。
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
図15は、本発明を適用した復号装置の一実施の形態の構成例を示すブロック図である。
なお、図15では、LDPC符号の1回の復号を行う復号装置300の例を示している。繰り返し復号は、復号装置300を複数個縦列に接続して用いるか、あるいは、復号装置300を繰り返し用いることにより行うことができる。
復号装置300は、枝用メモリ310、スイッチ311、バリアブルノード計算器312、チェックノード計算器313、セレクタ314、受信用メモリ315、および制御部316から構成される。
復号装置300では、バリアブルノード計算器312によるバリアブルノードの演算の結果得られる枝に対応するメッセージ(メッセージvi)、またはチェックノード計算器313によるチェックノードの演算の結果得られる枝に対応するメッセージ(メッセージuj)が、1つの枝用メモリ310に格納される。
枝用メモリ310には、バリアブルノード計算器312によるバリアブルノード演算の結果得られる枝に対応するメッセージ(データ)D314、またはチェックノード計算器313によるチェックノード演算の結果得られる枝に対応するメッセージ(データ)D315のうちの一方が、メッセージD310として、セレクタ314から供給される。枝用メモリ310は、セレクタ314から供給されたメッセージD310を格納(記憶)し、既に格納してあるメッセージD311をスイッチ311に供給する。なお、枝用モリ310は、チェックノード計算器313による最後のチェックノード演算の結果得られる枝に対応するメッセージD315を格納する場合には、そのメッセージD315を、上述した式(5)の演算を行う不図示のブロックに供給する。
即ち、枝用メモリ310は、セレクタ314から供給され、バリアブルノード計算器312、またはチェックノード計算器313が演算する順番に格納してあるメッセージD310を1つずつ読み出し、メッセージD311として、スイッチ311に供給すると同時に、セレクタ314が出力するメッセージD310を受信し、枝用メモリ310の既に読み出されたメッセージ(メッセージD311)が記憶されていたアドレスに書き込む。即ち、枝用メモリ310は、スイッチ311に供給するメッセージ(データ)D311の読み出しと、セレクタ314から供給されるメッセージ(データ)D310の書き込みとを、同時に行う。
なお、枝用メモリ310には、バリアブルノード計算器312のバリアブルノード演算、またはチェックノード計算器313のチェックノード演算により演算された枝に対応するメッセージが格納されるので、枝用メモリ310に格納されるデータ量、即ち、枝用メモリ310に必要とされる記憶容量は、メッセージの量子化ビット数と、全枝数との乗算値となる。このことは、前述の図9の枝用メモリ100および枝用メモリ102についても同様である。
また、枝用メモリ310は、読み出しと書き込みが同時に可能な、例えば、デュアルポートRAMで構成することができる。
スイッチ311には、枝用メモリ310からメッセージD311が供給されるとともに、制御部316からバリアブルノード計算器312、またはチェックノード計算器313のうちの一方の選択を表す選択信号D323が供給される。スイッチ311は、選択信号D323に基づいて、メッセージD311を、バリアブルノード計算器312、またはチェックノード計算器313のうちの一方に供給する。即ち、スイッチ311は、メッセージD311を、メッセージD312としてバリアブルノード計算器312に供給するか、またはメッセージD313としてチェックノード計算器313に供給する。
バリアブルノード計算器312には、スイッチ311から、バリアブルノード演算に必要なメッセージD312が供給される。また、バリアブルノード計算器312には、制御部316から制御信号D321が供給されるとともに、受信用メモリ315からLDPC符号の受信データD316が供給される。バリアブルノード計算器312は、制御信号D321に基づき、前述の図9のバリアブルノード計算器103と同様に、スイッチ311から供給されるメッセージD312と受信用メモリ315から供給される受信データD316を用い、式(1)にしたがって、LDPC符号の復号のためのバリアブルノード演算を行い、その演算の結果得られる枝に対応するメッセージD314(メッセージvi)を、セレクタ314に供給する。バリアブルノード計算器312の詳細構成は、図11に示したバリアブルノード計算器103と同様である。
チェックノード計算器313には、スイッチ311から、チェックノード演算に必要なメッセージD313が供給されるとともに、制御部316から制御信号D322が供給される。チェックノード計算器313は、制御部316から供給される制御信号D322に基づき、前述の図9のチェックノード計算器101と同様に、スイッチ311から供給されるメッセージD313を用い、式(7)にしたがって、LDPC符号の復号のためのチェックノードの演算を行い、その演算によって求められたメッセージD315(メッセージuj)を、セレクタ314に供給する。チェックノード計算器313の詳細構成は、図10に示したチェックノード計算器101と同様である。
セレクタ314には、制御部316からバリアブルノード計算器312、またはチェックノード計算器313のうちの一方の選択を表す選択信号D323が供給される。また、セレクタ314には、バリアブルノード計算器312からメッセージD314が供給されるとともに、チェックノード計算器313からメッセージD315が供給される。セレクタ314は、選択信号D323に基づいて、メッセージD314、またはメッセージD315のうちの一方を選択し、メッセージD310として、枝用メモリ310に供給する。
受信用メモリ315は、LDPC符号化された受信データ(LDPC符号)D316を格納(記憶)する。受信用メモリ315は、格納されている受信データD316を読み出し、バリアブルノード計算器312と、式(5)の演算を行う不図示のブロックに供給する。
なお、受信データは、図示せぬ受信部から受信用メモリ315に供給されて記憶される。また、受信用メモリ315に格納されるデータ量、即ち、受信用メモリ315に必要とされる記憶容量は、LDPC符号の符号長と、受信データの量子化ビット数との乗算値である。
制御部316は、制御信号D321をバリアブルノード計算器312に供給することにより、バリアブルノード計算器312を制御し、制御信号D322をチェックノード計算器313に供給することにより、チェックノード計算器313を制御する。また、制御部316は、バリアブルノード計算器312とチェックノード計算器313のうちの一方の選択を表す選択信号D323を、スイッチ311とセレクタ314に供給することにより、スイッチ311とセレクタ314を制御する。
図16は、図15の復号装置300の復号処理を説明するフローチャートである。この処理は、例えば、受信用メモリ315に復号すべき受信データが格納されたとき、開始される。
ステップS21において、制御部316は、バリアブルノード計算器312とチェックノード計算器313のうち、バリアブルノード計算器312を選択し、その選択を表す選択信号D323を生成して、スイッチ311とセレクタ314に供給する。
ステップS21の処理後は、ステップS22に進み、スイッチ311は、ステップS21で供給された制御信号D323に基づいて、バリアブルノード計算器312とチェックノード計算器313のうち一方を選択し、その選択した一方の計算器に、枝用メモリ310から、メッセージD311として1つずつ読み出された、後述するステップS31で格納されたメッセージD310(メッセージuj)を供給する。即ち、ここでは、ステップS21で供給された制御信号D323は、バリアブルノード計算器312の選択を表しているので、スイッチ311は、バリアブルノード計算器312を選択し、その選択したバリアブルノード計算器312に、バリアブルノード演算に必要なメッセージD311を、メッセージD312として供給する。
なお、受信用メモリ315から供給された受信データD316に対して、まだチェックノード演算が行われておらず、枝用メモリ310にメッセージD311が格納されていない場合、バリアブルノード計算器312は、バリアブルノード演算に用いるメッセージを初期値に設定する。
ステップS22の処理後は、ステップS23に進み、バリアブルノード計算器312は、バリアブルノード演算を行う。即ち、バリアブルノード計算器312には、受信用メモリ315から受信データD316が供給されるとともに、制御部316から制御信号D321が供給される。バリアブルノード計算器312は、制御信号D321に基づいて、受信データD316とステップS22でスイッチ311から供給されたメッセージD312とを用いて、上述した式(1)にしたがってバリアブルノードの演算を行う。
即ち、制御部316がバリアブルノード計算器312に供給する制御信号D321は、前述の図11で説明した制御信号D107に対応するものであり、バリアブルノード計算器312は、制御信号D321にしたがい、スイッチ311を介して、枝用メモリ310から必要なメッセージD311(D312)を読み出すとともに、受信用メモリ315から供給された受信データD316を用いて、バリアブルノード演算を行う。
ステップS23の処理後は、ステップS24に進み、バリアブルノード計算器312は、バリアブルノード演算の結果得られるメッセージD314(メッセージvi)をセレクタ314に出力し、ステップS25に進む。
ステップS25において、セレクタ314は、ステップS21で供給された選択信号D323に基づいて、バリアブルノード計算器312とチェックノード計算器313のうちの一方を選択し、その選択した一方から出力されるメッセージを、メッセージD310として、枝用メモリ310に格納する。ここでは、選択信号D323は、バリアブルノード計算器312の選択を表しているので、セレクタ314は、ステップS24で出力されたバリアブルノード演算の結果得られるメッセージD314を、メッセージD310として枝用メモリ310に格納する。即ち、セレクタ314は、バリアブルノード計算器312とチェックノード計算器313のうち、いま、演算が行われている計算器から出力されるメッセージを枝用メモリ310に供給し、格納させる。
ステップS25の処理後は、ステップS26に進み、制御部316は、バリアブルノード計算器312により、全枝数のメッセージが演算されたかどうかを判定し、全枝数のメッセージが演算されていないと判定した場合、ステップS22に戻り、上述した処理を繰り返す。
一方、ステップS26において、制御部316は、バリアブルノード計算器312により、全枝数のメッセージが演算されたと判定した場合、ステップS27に進み、制御部316は、チェックノード計算器313を選択し、ステップS21で生成したバリアブルノード計算器312の選択を表す制御信号D323を、チェックノード計算器313の選択を表す制御信号D323に変更する。
ステップS27の処理後は、ステップS28に進み、スイッチ311は、ステップS27で変更された制御信号D323に基づいて、バリアブルノード計算器312とチェックノード計算器313のうち一方を選択し、その選択した一方に、枝用メモリ310から、メッセージD311として1つずつ読み出された、ステップS25で格納されたメッセージD310(メッセージvi)を供給する。ここでは、ステップS27で変更された制御信号D323は、チェックノード計算器312の選択を表しているので、スイッチ311は、チェックノード計算器313を選択し、その選択したチェックノード計算器313に、チェックノード演算に必要なメッセージD311を、メッセージD313として供給する。
ステップS28の処理後は、ステップS29に進み、チェックノード計算器313は、チェックノード演算を行う。即ち、チェックノード計算器313には、制御部316から制御信号D322が供給される。チェックノード計算器313は、制御信号D322に基づき、メッセージD313を用いて、上述した式(7)にしたがって、チェックノード演算を行う。
即ち、制御部316がチェックノード計算器313に供給する制御信号D322は、前述の図10で説明した制御信号D106に対応するものであり、チェックノード計算器313は、制御信号D322にしたがい、スイッチ311を介して、枝用メモリ310から必要なメッセージD313を読み出しながらチェックノードの演算を行う。
ステップS29の処理後は、ステップS30に進み、チェックノード計算器313は、チェックノードの演算の結果得られるメッセージD315(メッセージuj)をセレクタ314に出力して、ステップS31に進む。
ステップS31において、セレクタ314は、ステップS27で変更された選択信号D323に基づいて、バリアブルノード計算器312とチェックノード計算器313のうち一方を選択し、その選択した一方から出力されるメッセージを、メッセージD310として枝用メモリ310に供給し、格納させる。ここでは、選択信号D323は、チェックノード計算器313の選択を表しているので、セレクタ314は、ステップS30で出力されたチェックノード演算の結果得られるメッセージD315を、メッセージD310として枝用メモリ310に格納する。即ち、セレクタ314は、バリアブルノード計算器312とチェックノード計算器313のうち、いま、演算が行われている計算器から出力されるメッセージを枝用メモリ310に供給し、格納させる。
ステップS31の処理後は、ステップS32に進み、制御部316は、チェックノード計算器313により、全枝数のメッセージが演算されたかどうかを判定し、全枝数のメッセージが演算されていないと判定した場合、ステップS28に戻り、上述した処理を繰り返す。
一方、ステップS32において、制御部316は、チェックノード計算器312により、全枝数のメッセージが演算されたと判定した場合、処理を終了する。
なお、復号装置300は、復号回数だけ図16の復号処理を繰り返し行ない、枝用メモリ310に、最後のチェックノード演算の結果得られるメッセージD315(メッセージuj)が格納された場合、枝用メモリ310は、そのメッセージD315を上述した式(5)の演算を行う不図示のブロックに供給する。不図示のブロックには、さらに、受信用メモリ315から受信データD316が供給され、不図示のブロックは、メッセージD315と受信データD316を用いて、式(5)の演算を行い、その演算結果を最終的な復号結果として出力する。
上述したように、枝用メモリ310には、バリアブルノード計算器312とチェックノード計算器313のうち、いま、演算が行われている計算器から出力されるメッセージが格納される。即ち、バリアブルノード演算は、チェックノード演算の結果であるメッセージujを用いて行われ、チェックノード演算は、バリアブルノード演算の結果であるメッセージviを用いて行われるため、復号装置300では、バリアブルノード演算とチェックノード演算が交互に行われる。従って、バリアブルノード計算器312とチェックノード計算器313のうち、いま、演算が行われている計算器から出力されるメッセージを格納することにより、バリアブルノード演算の結果を格納する枝用メモリとチェックノード演算の結果を格納する枝用メモリを共有化して1つのメモリにすることができ、バリアブルノード演算の結果得られるメッセージを格納する枝用メモリ100とチェックノード演算の結果得られるメッセージを格納する枝用メモリ102とを別々に有する図9の復号装置に比べて、復号装置300の回路規模を小さくすることができる。
なお、枝用メモリ310は、デュアルポートRAMではなく、複数個のシングルポートRAMから構成されるようにしてもよい。この場合、1つのシングルポートRAMへの読み出しと書き込みが同時に重ならないように制御を行う必要がある。複数個のシングルポートRAMを用いた場合、デュアルポートRAMを用いる場合に比べて、復号装置300の回路規模を小さくすることができる。
図17は、本発明を適用した復号装置の他の一実施の形態の構成例を示すブロック図である。
なお、図17では、LDPC符号の1回の復号を行う復号装置340の例を示している。繰り返し復号は、復号装置340を複数個縦列に接続して用いるか、あるいは、復号装置340を繰り返し用いることにより行うことができる。
復号装置340は、スイッチ350、枝用メモリ351、枝用メモリ352、セレクタ353、ノード計算器354、受信用メモリ355、および制御部356から構成される。
復号装置340では、ノード計算器354がバリアブルノード演算とチェックノード演算を交互に行い、バリアブルノード演算の結果得られるメッセージ(メッセージvi)とチェックノード演算の結果得られるメッセージ(メッセージuj)が、枝用メモリ351または枝用メモリ352に格納される。即ち、バリアブルノード計算器とチェックノード計算器が共有化され、1つのノード計算器354で、バリアブルノード演算とチェックノード演算の両方が行われる。
スイッチ350には、ノード計算器354からメッセージD350が供給されるとともに、制御部356から、メッセージD350を格納する(書き込む)メモリとして、枝用メモリ351または枝用メモリ352のうち一方の選択を表す選択信号D363が供給される。スイッチ350は、選択信号D363に基づいて、ノード計算器354から供給されるメッセージD350を、枝用メモリ351にメッセージD351として供給するか、あるいは枝用メモリ352にメッセージD352として供給する。
枝用メモリ351には、例えば、ノード計算器312によるバリアブルノード演算の結果得られる枝に対応するメッセージD350が、メッセージD351として、スイッチ350から供給される。枝用メモリ351は、メッセージD351を、チェックノード演算を行う順番に格納していく。そして、枝用メモリ351は、格納してある順番どおりに、メッセージD351を、メッセージD353として、セレクタ353に供給する。
枝用メモリ352には、例えば、ノード計算器354によるチェックノード演算の結果得られる枝に対応するメッセージD350が、メッセージD352として、スイッチ350から供給される。枝用メモリ352は、メッセージD352を、バリアブルノード演算を行う順番に格納していく。そして、枝用メモリ352は、格納してある順番どおりに、メッセージD352を、メッセージD354としてセレクタ353に供給する。なお、枝用メモリ352は、ノード計算器354による最後のチェックノード演算の結果得られるメッセージD350を格納する場合には、そのメッセージD350を、上述した式(5)の演算を行う不図示のブロックに供給する。
なお、枝用メモリ351には、ノード計算器354のバリアブルノード演算の結果得られた枝に対応するメッセージが格納され、枝用メモリ352には、ノード計算器354のチェックノード演算の結果得られた枝に対応するメッセージが格納されるので、枝用メモリ351および枝用メモリ352に格納されるデータ量、即ち、枝用メモリ351および枝用メモリ352に必要とされる記憶容量は、メッセージの量子化ビット数と、全枝数との乗算値となる。
セレクタ353には、枝用メモリ351からメッセージD353が供給されるとともに、枝用メモリ352からメッセージD354が供給される。また、セレクタ353には、制御部356から、ノード計算器354に供給するメッセージを読み出すメモリとして、枝用メモリ351または枝用メモリ352のうち一方の選択を表す選択信号D364が供給される。セレクタ353は、選択信号D364に基づいて、枝用メモリ351と枝用メモリ352のうち一方を選択し、その選択した枝用メモリから格納されるメッセージ(メッセージD353またはメッセージD354)を、メッセージD355として、ノード計算器354に供給する。
ノード計算器354には、セレクタ353からメッセージD355が供給されるとともに、受信用メモリ355から受信データD356が供給される。また、ノード計算器354には、制御部356から、いま、ノード計算器354で行う演算として、バリアブルノード演算とチェックノード演算のうち一方の選択を表す選択信号D361と、ノード演算を制御する制御信号D362が供給される。ノード計算器354は、選択信号D361に基づき、バリアブルノード演算とチェックノード演算のうち、制御部356により選択された方の演算を行う。即ち、ノード計算器354は、制御信号D362に基づき、セレクタ353から供給されるメッセージD355と受信用メモリ355から供給される受信データD356を用い、式(1)にしたがって、LDPC符号の復号のためのバリアブルノード演算を行うか、あるいは、セレクタ353から供給されるメッセージD355を用い、式(7)にしたがって、LDPC符号の復号のためのチェックノードの演算を行う。
そして、ノード計算器354は、バリアブルノード演算またはチェックノード演算の結果得られる枝に対応するメッセージ(メッセージviまたはメッセージuj)を、メッセージD350として、スイッチ350に供給する。
受信用メモリ355は、LDPC符号化された受信データ(LDPC符号)D356を格納(記憶)する。受信用メモリ355は、格納されている受信データD356を読み出し、ノード計算器354と式(5)の演算を行う不図示のブロックに供給する。
なお、受信データは、図示せぬ受信部から受信用メモリ355に供給されて記憶される。また、受信用メモリ355に格納されるデータ量、即ち、受信用メモリ355に必要とされる記憶容量は、LDPC符号の符号長と、受信データの量子化ビット数との乗算値である。
制御部356は、いま、ノード計算器354で行う演算として、バリアブルノード演算とチェックノード演算のうち一方を選択し、その選択を表す選択信号D361と、制御信号D362をノード計算器354に供給することにより、ノード計算器354を制御する。また、制御部356は、枝用メモリ351と枝用メモリ352のうち一方を読み出すメモリとして選択し、他方を書き込むメモリとして選択する。そして、制御部356は、メッセージD350を格納する(書き込む)メモリとして、枝用メモリ351と枝用メモリ352のうちの一方の選択を表す選択信号D363をスイッチ350に供給することにより、スイッチ350を制御するとともに、ノード計算器354に供給するメッセージD355を読み出すメモリとして、他方の選択を表す選択信号D364をセレクタ353に供給することにより、セレクタ353を制御する。
図18は、図17のノード計算器354の構成例を示すブロック図である。
図18のノード計算器354は、チェックノード演算またはバリアブルノード演算を行う。
なお、図18では、各メッセージが符号ビットを合わせて合計6ビット(bit)に量子化されているものとして、ノード計算器354を表している。さらに、図18のノード演算器354には、クロックckが供給され、このクロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図18のノード計算器354は、制御部356から供給される、例えば、1ビットの制御信号D362と1ビットの選択信号D361に基づき、枝用メモリ351または枝用メモリ352から1つずつ読み出され、セレクタ353を介して供給されるチェックノード演算に必要なメッセージD355を用いて、式(7)にしたがってチェックノード演算を行うか、あるいはバリアブルノード演算に必要なメッセージD355と受信用メモリ355から供給される受信データD356を用いて、式(1)にしたがってバリアブルノード演算を行う。
即ち、ノード計算器354では、検査行列の各列に対応するバリアブルノードからの6ビットのメッセージ、または検査行列の各行に対応するチェックノードからの6ビットのメッセージがメッセージD355として1つずつ読み込まれると、その下位5ビットである絶対値D402がLUT401に、その最上位ビットである符号ビットD401がEXOR回路411とFIFOメモリ415にそれぞれ供給される。また、ノード計算器354では、1つずつ読み込まれた6ビットのメッセージD355がセレクタ402に供給される。
さらに、ノード計算器354には、制御部356から制御信号D362が供給され、その制御信号D362は、セレクタ405とセレクタ413に供給される。また、ノード計算器354には、制御部356から、チェックノード演算またはバリアブルノード演算のうち、いま、ノード計算器354で行う演算として一方の選択を表す選択信号D361が供給され、その選択信号D361がセレクタ402とセレクタ419に供給される。さらに、ノード計算器354には、受信用メモリ355から受信データD356が供給され、その受信データD356が加算器417に供給される。
まず最初に、検査行列の各行に対応するチェックノードからの6ビットのメッセージ(メッセージuj)が、メッセージD355として1つずつ読み込まれた場合のノード計算器354の処理について説明する。このとき、制御部356は、チェックノード演算またはバリアブルノード演算のうちの、バリアブルノード演算を、いま、ノード計算器354で行う演算として選択し、枝用メモリ351または枝用メモリ352のうち、チェックノードからの枝に対応するメッセージが格納された枝用メモリ352を、メッセージを読み出すメモリとして選択する制御信号D364をセレクタ353に供給する。また、制御部356は、いま、ノード計算器354で行う演算として、バリアブルノード演算を選択しているので、ノード演算を制御するための制御信号D362の値を、ノード計算器354が1列に亘るメッセージを読み込む毎に、“0”から“1”に変更する。さらに、制御部356は、バリアブルノード演算の選択を表す制御信号D361を、ノード計算器354に供給する。
このように、制御部356により、いま、ノード計算器354で行う演算として、バリアブルノード演算が選択された場合、ノード計算器354は、制御部356から供給される、例えば、1ビットの制御信号D362に基づき、枝用メモリ351または枝用メモリ352から1つずつ読み込まれるメッセージD355を用いて、式(1)にしたがって演算を行う。
なお、ノード計算器354がバリアブルノード演算を行う場合、制御部356から供給される制御信号D361に基づいて、セレクタ402が、メッセージD355と値D404のうち、値D355を選択し、セレクタ419が、値D421と値D419のうち、値D421を選択する。従って、以下の説明では、セレクタ402とセレクタ419により選択される値の演算についてのみ説明する。
ノード計算器354では、検査行列の各行に対応するチェックノードからの6ビットのメッセージD355(メッセージuj)が1つずつ読み込まれ、6ビットのメッセージD355は、セレクタ402を介して、値D405として加算器403とFIFOメモリ408に供給される。
加算器403は、値D405(uj)とレジスタ404に格納されている9ビットの値D406とを加算することにより、値D405を積算し、その結果得られる9ビットの積算値をレジスタ404に再格納する。なお、検査行列の1列に亘る全ての枝からのメッセージD355が積算された場合、レジスタ404はリセットされる。
検査行列の1列に亘るメッセージD355が1つずつ読み込まれ、レジスタ404に1列分の値D405が積算された積算値が格納された場合、制御部356から供給される制御信号D362は、0から1に変化する。例えば、列の重み(row weight)が「5」である場合、制御信号D362は、1から4クロック目までは、「0」となり、5クロック目では「1」となる。
制御信号D362が「1」の場合、セレクタ405は、レジスタ404に格納されている値、即ち、検査行列の1列に亘る全ての枝からのメッセージD355(メッセージuj)が積算された9ビットの値D406(j=1からj=dvまでのΣuj)を選択し、値D407として、レジスタ406に出力して格納させる。レジスタ406は、格納している値D407を、9ビットの値D408として、セレクタ405と加算器407に供給する。
制御信号D362が「0」の場合、セレクタ405は、レジスタ406から供給された値D408を選択し、レジスタ406に出力して再格納させる。即ち、検査行列の1列に亘る全ての枝からのメッセージD355(メッセージuj)が積算されるまで、レジスタ406は、前回積算されたujを、セレクタ405と加算器407に供給する。
一方、FIFOメモリ408は、レジスタ406から新たな値D408(j=1からj=dvまでのΣuj)が出力されるまでの間、セレクタ402が出力した6ビットの値D405(uj)を遅延し、6ビットの値D409として減算器407に供給する。減算器407は、レジスタ406から供給された値D408から、FIFOメモリ408から供給された値D409を減算し、その減算結果を、9ビットの減算値D410として、クリップ回路409と加算器417に供給する。即ち、減算器407は、検査行列の1列に亘る全ての枝からのメッセージD355(メッセージuj)の積算値から、求めたい枝からのメッセージD355(メッセージuj)を減算して、その減算値(j=1からj=dv−1までのΣuj)を減算値D410として、加算器417に供給する。
加算器417では、減算器407から9ビットの減算値D410が供給されるとともに、受信用メモリ355から60ビットの受信値D356が供給される。加算器417は、減算値D410(j=1からj=dv−1までのΣuj)に、受信用メモリ355から供給された受信データD356(受信値u0i)を加算して、その結果得られる90ビットの値D420をクリップ回路418に供給する。
クリップ回路418は、9ビットの値D420をクリップし、その下位6ビットの値D421(メッセージvi)をセレクタ419を介して、メッセージD350として出力する。
以上のように、制御部356により、ノード計算器354で行う演算として、バリアブルノード演算が選択された場合、ノード計算器354では、式(1)の演算が行われ、メッセージviが求められる。
次に、検査行列の各列に対応するバリアブルノードからの6ビットのメッセージ(メッセージvi)が、メッセージD355として1つずつ読み込まれた場合のノード計算器354の処理について説明する。このとき、制御部356は、チェックノード演算またはバリアブルノード演算のうちの、チェックノード演算を、いま、ノード計算器354で行う演算として選択し、枝用メモリ351または枝用メモリ352のうち、バリアブルノードからの枝に対応するメッセージが格納された枝用メモリ351を、メッセージを読み出すメモリとして選択する制御信号D364をセレクタ353に供給する。また、制御部356は、いま、ノード計算器354で行う演算として、チェックノード演算を選択しているので、ノード演算を制御するための制御信号D362の値を、ノード計算器354が1行に亘るメッセージを読み込む毎に、“0”から“1”に変更する。さらに、制御部356は、チェックノード演算の選択を表す制御信号D361を、ノード計算器354に供給する。
このように、制御部356により、いま、ノード計算器354で行う演算として、チェックノード演算が選択された場合、ノード計算器354は、制御部356から供給される、例えば、1ビットの制御信号D362に基づき、枝用メモリ351または枝用メモリ352から1つずつ読み込まれるメッセージD355を用いて、式(7)にしたがって演算を行う。
なお、ノード計算器354がチェックノード演算を行う場合、制御部356から供給される制御信号D361に基づいて、セレクタ402が、メッセージD355と値D404のうち、値D404を選択し、セレクタ419が、値D421と値D419のうち、値D419を選択する。従って、以下の説明では、セレクタ402とセレクタ419により選択される値の演算についてのみ説明する。
ノード計算器354では、検査行列の各列に対応するバリアブルノードからの6ビットのメッセージD355(メッセージvi)が1つずつ読み込まれ、その下位5ビットである絶対値D402(|vi|)がLUT401に、その最上位ビットである符号ビットD401(sign(vi))がEXOR回路411とFIFOメモリ415にそれぞれ供給される。
LUT401は、絶対値D402(|vi|)に対して、式(7)におけるφ(|vi|)の演算を行った5ビットの演算結果D403(φ(|vi|))を読み出し、出力する。そして、読み出された演算結果D403において、1ビットの値である“0”が最上位ビットに付加されることにより、ビット拡張が行われ、そのビット拡張の結果である6ビットの値D404(φ(|vi|))が、セレクタ402を介して、6ビットの値D405として加算器403とFIFOメモリ408に供給される。
加算器403は、値D405(φ(|vi|))とレジスタ404に格納されている9ビットの値D406とを加算することにより、値D405を積算し、その結果得られる9ビットの積算値をレジスタ404に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD355の絶対値D402(|vi|)に対する値D405が積算された場合、レジスタ404はリセットされる。
検査行列の1行に亘るメッセージD355が1つずつ読み込まれ、レジスタ404に1行分の値D405が積算された積算値が格納された場合、制御部356から供給される制御信号D362は、0から1に変化する。例えば、行の重み(row weight)が「9」である場合、制御信号D362は、1から8クロック目までは、「0」となり、9クロック目では「1」となる。
制御信号D362が「1」の場合、セレクタ405は、レジスタ404に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD355(メッセージvi)から求められたφ(|vi|)が積算された9ビットの値D406(i=1からi=dcまでのΣφ(|vi|))を選択し、値D407として、レジスタ406に出力して格納させる。レジスタ406は、格納している値D407を、9ビットの値D408として、セレクタ405と加算器407に供給する。
制御信号D362が「0」の場合、セレクタ405は、レジスタ406から供給された値D408を選択し、レジスタ406に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD355(メッセージvi)から求められたφ(|vi|)が積算されるまで、レジスタ406は、前回積算されたφ(|vi|)を、セレクタ405と加算器407に供給する。
一方、FIFOメモリ408は、レジスタ406から新たな値D408(i=1からi=dcまでのΣφ(|vi|))が出力されるまでの間、セレクタ402が出力した値D405(φ(|vi|))を遅延し、6ビットの値D409として減算器407に供給する。減算器407は、レジスタ406から供給された値D408から、FIFOメモリ408から供給された値D409を減算し、その減算結果を、9ビットの減算値D410として、クリップ回路409と加算器417に供給する。即ち、減算器407は、検査行列の1行に亘る全ての枝からのメッセージD355(メッセージvi)から求められたφ(|vi|)の積算値から、求めたい枝からのメッセージD355(メッセージvi)から求められたφ(|vi|)を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を減算値D410として、クリップ回路409に供給する。
クリップ回路409は、加算器407から供給される9ビットの減算値D410をクリップし、その下位5ビットの値D411(i=1からi=dc−1までのΣφ(|vi|))をLUT410に供給する。
LUT410は、値D411(i=1からi=dc−1までのΣφ(|vi|))に対して、式(7)におけるφ-1(Σφ(|vi|))の演算を行った5ビットの演算結果D412(φ-1(Σφ(|vi|)))を出力する。
以上の処理と並行して、EXOR回路411は、レジスタ412に格納されている1ビットの値D414と符号ビットD401との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、1ビットの乗算結果D413をレジスタ412に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD355の符号ビットD401が乗算された場合、レジスタ412はリセットされる。
検査行列の1行に亘る全ての枝からのメッセージD355の符号ビットD401(sign(vi))が乗算された乗算結果D413(i=1からdcまでのΠsign(vi))がレジスタ412に格納された場合、制御部356から供給される制御信号D362は、「0」から「1」に変化する。
制御信号D362が「1」の場合、セレクタ413は、レジスタ412に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD355の符号ビットD401が乗算された値D414(i=1からi=dcまでのΠsign(vi))を選択し、1ビットの値D415としてレジスタ414に出力して格納させる。レジスタ414は、格納している値D415を、1ビットの値D416として、セレクタ413とEXOR回路416に供給する。
制御信号D362が「0」の場合、セレクタ413は、レジスタ414から供給された値D416を選択し、レジスタ414に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD355(メッセージvi)の符号ビットD401が乗算されるまで、レジスタ414は、前回格納した値を、セレクタ413とEXOR回路416に供給する。
一方、FIFOメモリ415は、レジスタ414から新たな値D416(i=1からi=dcまでのΠsign(vi))がEXOR回路416に供給されるまでの間、符号ビットD401を遅延し、1ビットの値D417としてEXOR回路416に供給する。EXOR回路416は、レジスタ414から供給された値D416と、FIFOメモリ415から供給された値D417との排他的論理和を演算することにより、値D416を、値D417で除算し、1ビットの除算結果を除算値D418として出力する。即ち、EXOR回路416は、検査行列の1行に亘る全ての枝からのメッセージD355の符号ビットD401(sign(|vi|))の乗算値を、求めたい枝からのメッセージD355の符号ビットD401(sign(|vi|))で除算して、その除算値(i=1からi=dc−1までのΠsign(|vi|))を除算値D418として出力する。
LUT410から出力された5ビットの演算結果D412を下位5ビットとするとともに、EXOR回路416から出力された1ビットの除算値D418を最上位ビットとする合計6ビットの値D419(メッセージuj)がセレクタ419を介して、メッセージD350として出力される。
以上のように、制御部356により、ノード計算器354で行う演算として、チェックノード演算が選択された場合、ノード計算器354では、式(7)の演算が行われ、メッセージujが求められる。
上述したように、ノード計算器354では、バリアブルノード演算とチェックノード演算に必要な共通のブロックを、共有化することにより、バリアブルノード演算とチェックノード演算に必要なブロックを別々に有する場合に比べて、ノード計算器354の回路規模を小さくすることができる。
ここで、図18のノード計算器354では、図10のチェックノード計算器と図11のバリアブルノード計算器103において、加算器122と加算器151が、加算器403で、レジスタ123とレジスタ152が、レジスタ4040で、セレクタ124とセレクタ153が、セレクタ405で、レジスタ125とレジスタ154が、レジスタ406で、加算器126と加減算器156の加算部分が、加算器407で、FIFOメモリ127とFIFOメモリ155が、FIFOメモリ408で、それぞれ共有化されている。
なお、ノード計算器354では、チェックノード演算が行われるときには、検査行列の各行の行の重みに基づいて、FIFOメモリ408とFIFOメモリ415における遅延量が、その行の重みの値に減らされ、バリアブルノード演算が行われるときには、検査行列の各列の列の重みに基づいて、FIFOメモリ408における遅延量が、その列の重みの値に減らされる。
図19は、図17の復号装置340の復号処理を説明するフローチャートである。この処理は、例えば、受信用メモリ355に復号すべき受信データが格納されたとき、開始される。なお、図19において、例えば、バリアブルノード演算の結果得られるメッセージ(メッセージvi)が枝用メモリ351に、チェックノード演算の結果得られるメッセージ(メッセージuj)が枝用メモリ352に、それぞれ格納されるものとする。但し、メッセージviを枝用メモリ352に、メッセージujを枝用メモリ351に、それぞれ格納してもよい。
ステップS41において、制御部356は、いま、ノード計算器354で行う演算として、バリアブルノード演算とチェックノード演算のうち、バリアブルノード演算を選択し、その選択を表す選択信号D361をノード計算器354に供給する。また、制御部356は、後述するステップS51で、チェックノード演算の結果得られるメッセージD350(メッセージuj)が格納される枝用メモリ352を、ノード計算器354に供給するメッセージを読み出すメモリとして選択し、その選択を表す選択信号D364をセレクタ353に供給するとともに、枝用メモリ351を、後述するステップS45で、バリアブルノードの演算の結果得られるメッセージD350(メッセージvi)を格納する(書き込む)メモリとして選択し、その選択を表す選択信号D363をスイッチ350に供給する。
ステップS41の処理後は、ステップS42に進み、セレクタ353は、ステップS41で供給される選択信号D364に基づいて、ノード計算器354に、枝用メモリ351または枝用メモリ352から供給されるメッセージを、メッセージD355として供給する。即ち、ここでは、ステップS41で供給された選択信号D364は、チェックノードからの枝に対応するメッセージが格納された枝用メモリ352の選択を表しているので、セレクタ353は、枝用メモリ352から1つずつ読み出されたメッセージD354(メッセージuj)を、メッセージD355としてノード計算器354に供給する。
なお、受信用メモリ355から供給された受信データD356に対して、まだチェックノード演算が行われておらず、枝用メモリ352にメッセージD352が格納されていない場合、ノード計算器354は、メッセージujを初期値に設定する。
ステップS42の処理後は、ステップS43に進み、ノード計算器354は、バリアブルノード演算を行う。即ち、ノード計算器354には、受信用メモリ355から受信データD356が供給されるとともに、制御部356から制御信号D362が供給される。ノード計算器354は、制御信号D362に基づいて、受信データD356とステップS42でセレクタ353から供給されたメッセージD355とを用いて、上述した式(1)にしたがってバリアブルノードの演算を行う。
即ち、ノード計算器354は、制御信号D362にしたがい、セレクタ353を介して、枝用メモリ352から必要なメッセージD354(D355)を読み出すとともに、受信用メモリ355から供給された受信データD356を用いて、バリアブルノード演算を行う。
ステップS43の処理後は、ステップS44に進み、ノード計算器354は、バリアブルノード演算の結果得られるメッセージD350(メッセージvi)をスイッチ350に出力し、ステップS45に進む。
ステップS45において、スイッチ350は、ステップS41で供給された、メッセージD350を格納するメモリとして、枝用メモリ351と枝用メモリ352のうち一方の選択を表す選択信号D363に基づいて、ノード計算器354から出力されるメッセージD350を、枝用メモリ351または枝用メモリ352に格納する。ここでは、選択信号D363は、メッセージD350を格納するメモリとして、枝用メモリ351の選択を表しているので、スイッチ350は、ステップS44で出力されたバリアブルノード演算の結果得られるメッセージD350を、メッセージD351として枝用メモリ351に格納する。即ち、スイッチ350は、枝用メモリ351と枝用メモリ352のうち、ノード計算器354に供給するメッセージを読み出すメモリとして選択された枝用メモリではない方のメモリに、メッセージD350を書き込む。
ステップS45の処理後は、ステップS46に進み、制御部356は、ノード計算器354により、全枝数のメッセージが演算されたかどうかを判定し、全枝数のメッセージが演算されていないと判定した場合、ステップS42に戻り、上述した処理を繰り返す。
一方、ステップS46において、制御部356は、ノード計算器354により、全枝数のメッセージが演算されたと判定した場合、ステップS47に進み、制御部356は、いま、ノード計算器354で行う演算として、チェックノード演算を選択し、ステップS41で生成したバリアブルノード演算の選択を表す制御信号D361を、チェックノード演算の選択を表す制御信号D361に変更する。また、制御部356は、ステップS45で、バリアブルノード演算の結果得られるメッセージ(メッセージvi)が格納された枝用メモリ351を、ノード計算器354に供給するメッセージを読み出すメモリとして選択し、その選択を表す選択信号D364をセレクタ353に供給するとともに、枝用メモリ352を、後述するステップS51で、チェックノードの演算の結果得られるメッセージD350(メッセージuj)を格納する(書き込む)メモリとして選択し、その選択を表す選択信号D363をスイッチ350に供給する。
ステップS47の処理後は、ステップS48に進み、セレクタ353は、ステップS47で供給される選択信号D364に基づいて、ノード計算器354に、枝用メモリ351または枝用メモリ352から供給されるメッセージを、メッセージD355として供給する。即ち、ここでは、ステップS47で供給された選択信号D364は、バリアブルノードからの枝に対応するメッセージが格納された枝用メモリ351の選択を表しているので、セレクタ353は、枝用メモリ351から1つずつ読み出されたメッセージD353(メッセージvi)を、メッセージD355としてノード計算器354に供給する。
ステップS48の処理後は、ステップS49に進み、ノード計算器354は、チェックノード演算を行う。即ち、ノード計算器354には、制御信号D362が供給される。ノード計算器354は、制御信号D362に基づいて、ステップS48でセレクタ353から供給されたメッセージD355を用いて、上述した式(7)にしたがってチェックノードの演算を行う。
即ち、制御部356により、いま、ノード計算器354で行う演算として、チェックノード演算が選択された場合、制御部356がノード計算器354に供給する制御信号D362は、前述の図10で説明した制御信号D106に対応するものであり、ノード計算器354は、制御信号D362にしたがい、セレクタ353を介して、枝用メモリ351から必要なメッセージD353(D355)を読み出しながらチェックノードの演算を行う。
ステップS49の処理後は、ステップS50に進み、ノード計算器354は、チェックノード演算の結果得られるメッセージD350(メッセージuj)をスイッチ350に出力し、ステップS51に進む。
ステップS51において、スイッチ350は、ステップS47で供給された、メッセージD350を格納するメモリとして、枝用メモリ351と枝用メモリ352のうち一方の選択を表す選択信号D363に基づいて、ノード計算器354から出力されるメッセージD350を、枝用メモリ351または枝用メモリ352に格納する。ここでは、選択信号D363は、メッセージD350を格納するメモリとして、枝用メモリ352の選択を表しているので、スイッチ350は、ステップS50で出力されたチェックノード演算の結果得られるメッセージD350を、メッセージD352として枝用メモリ352に格納する。即ち、スイッチ350は、枝用メモリ351と枝用メモリ352のうち、ノード計算器354に供給するメッセージを読み出すメモリとして選択された枝用メモリではない方のメモリに、メッセージD350を書き込む。
ステップS51の処理後は、ステップS52に進み、制御部356は、ノード計算器354により、全枝数のメッセージが演算されたかどうかを判定し、全枝数のメッセージが演算されていないと判定した場合、ステップS48に戻り、上述した処理を繰り返す。
一方、ステップS52において、制御部356は、ノード計算器354により、全枝数のメッセージが演算されたと判定した場合、処理を終了する。
なお、復号装置340は、復号回数だけ図19の復号処理を繰り返し行ない、枝用メモリ352に、最後のチェックノード演算の結果得られるメッセージD350(メッセージuj)が格納された場合、枝用メモリ352は、そのメッセージD350を上述した式(5)の演算を行う不図示のブロックに供給する。不図示のブロックには、さらに、受信用メモリ355から受信データD356が供給され、不図示のブロックは、メッセージD350と受信データD356を用いて、式(5)の演算を行い、その演算結果を最終的な復号結果として出力する。
上述したように、ノード計算器354では、バリアブルノード演算とチェックノード演算の両方の演算が行われる。即ち、バリアブルノード演算は、チェックノード演算の結果であるメッセージujを用いて行われ、チェックノード演算は、バリアブルノード演算の結果であるメッセージviを用いて行われるため、復号装置340では、バリアブルノード演算とチェックノード演算が交互に行われる。ノード計算器354では、バリアブルノード演算とチェックノード演算に必要な共通のブロックを共有化し、バリアブルノード演算とチェックノード演算を交互に行うことにより、バリアブルノード計算器とチェックノード計算器を共有化して1つのノード計算器にすることができ、バリアブルノード演算を行うバリアブルノード計算器101とチェックノード計算器103とを別々に有する図9の復号装置に比べて、復号装置340の回路規模を小さくすることができる。
図20は、本発明を適用した復号装置の、さらに他の一実施の形態の構成例を示すブロック図である。
なお、図20では、LDPC符号の1回の復号を行う復号装置430の例を示している。繰り返し復号は、復号装置430を複数個縦列に接続して用いるか、あるいは、復号装置430を繰り返し用いることにより行うことができる。
復号装置430では、図17の枝用メモリ351と枝用メモリ352が1つの枝用メモリ440で共有化され、ノード計算器354のバリアブルノード演算またはチェックノード演算の結果得られるメッセージが、1つの枝用メモリ440に格納される。
復号装置430は、ノード計算器354、受信用メモリ355、枝用メモリ440、および制御部441から構成される。即ち、復号装置430は、図17の復号装置340の枝用メモリ351と枝用メモリ352を共有化して枝用メモリ440にし、スイッチ350とセレクタ353を削除したものである。
なお、図17と同一の符号を付したもの、即ち、図20の復号装置430のノード計算器354と受信用メモリ355は、図17のそれらと同一のものであり、説明は繰り返しになるので省略する。
枝用メモリ440には、ノード計算器354から、ノード計算器354によるチェックノード演算、またはバリアブルノード演算の結果得られる枝に対応するメッセージD440が供給され、枝用メモリ440は、ノード計算器354から供給されたメッセージD440を格納(記憶)し、既に格納してあるメッセージD441をノード計算器354に供給する。
即ち、枝用メモリ440は、ノード計算器354から供給され、ノード計算器354がバリアブルノード演算、またはチェックノード演算を行う順番に格納してあるメッセージD440を1つずつ読み出し、メッセージD441として、ノード計算器354に供給すると同時に、ノード計算器354が出力するメッセージD440を受信し、枝用メモリ440の既に読み出されたメッセージ(メッセージD441)が記憶されていたアドレスに書き込む。即ち、枝用メモリ440は、ノード計算器354に供給するメッセージD441の読み出しと、ノード計算器354から供給されるメッセージD440の書き込みとを、同時に行う。
なお、枝用メモリ440には、ノード計算器354のバリアブルノード演算、またはチェックノード演算により演算された枝に対応するメッセージが格納されるので、枝用メモリ440に格納されるデータ量、即ち、枝用メモリ440に必要とされる記憶容量は、メッセージの量子化ビット数と、全枝数との乗算値となる。
また、枝用メモリ440は、読み出しと書き込みが同時に可能な、例えば、デュアルポートRAMで構成することができる。
制御部441は、図17で説明したノード計算器356と同様に、いま、ノード計算器354で行う演算として、バリアブルノード演算とチェックノード演算のうち一方を選択する選択信号D361と、制御信号D362をノード計算器354に供給することにより、ノード計算器354を制御する。
図21は、図20の復号装置430の復号処理を説明するフローチャートである。この処理は、例えば、受信用メモリ355に復号すべき受信データが格納されたとき、開始される。
ステップS61において、制御部441は、いま、ノード計算器354で行う演算として、バリアブルノード演算とチェックノード演算のうち、バリアブルノード演算を選択し、その選択を表す選択信号D361をノード計算器354に供給する。
ステップS61の処理後は、ステップS62に進み、ノード計算器354は、バリアブルノード演算を行う。即ち、ノード計算器354には、受信用メモリ355から受信データD356が供給されるとともに、枝用メモリ440から、後述するステップS67で格納されたメッセージD440(メッセージuj)が、メッセージD441として供給される。また、ノード計算器354には、制御部441から制御信号D362が供給される。そして、ノード計算器354は、前述した図19のステップS43と同様に、制御信号D362に基づいて、受信データD356とメッセージD355とを用いて、上述した式(1)にしたがってバリアブルノードの演算を行う。
なお、受信用メモリ355から供給された受信データD356に対して、まだチェックノード演算が行われておらず、枝用メモリ440にメッセージD440が格納されていない場合、ノード計算器354は、バリアブルノード演算に用いるメッセージを初期値に設定する。
ステップS62の処理後は、ステップS63に進み、ノード計算器354は、バリアブルノード演算の結果得られるメッセージ(メッセージvi)D440を枝用メモリ440に格納し、ステップS64に進む。
ステップS64において、制御部441は、ノード計算器354により、全枝数のメッセージが演算されたかどうかを判定し、全枝数のメッセージが演算されていないと判定した場合、ステップS62に戻り、上述した処理を繰り返す。
一方、ステップS64において、制御部441は、ノード計算器442により、全枝数のメッセージが演算されたと判定した場合、ステップS65に進み、制御部441は、いま、ノード計算器354で行う演算として、チェックノード演算を選択し、ステップS61で生成したバリアブルノード演算の選択を表す制御信号D361を、チェックノードの選択を表す制御信号D361に変更する。
ステップS65の処理後は、ステップS66に進み、ノード計算器354は、チェックノード演算を行う。即ち、ノード計算器354には、枝用メモリ440からステップS63で格納されたメッセージD440(メッセージvi)がメッセージD441として供給されるとともに、制御部441から制御信号D362が供給される。ノード計算器354は、前述した図19のステップS49と同様に、制御信号D362に基づいて、枝用メモリ440から供給されたメッセージD441を用いて、上述した式(7)にしたがってチェックノードの演算を行う。
ステップS66の処理後は、ステップS67に進み、ノード計算器354は、チェックノード演算の結果得られるメッセージ(メッセージuj)D440を枝用メモリ440に格納し、ステップS68に進む。
ステップS68において、制御部441は、ノード計算器354により、全枝数のメッセージが演算されたかどうかを判定し、全枝数のメッセージが演算されていないと判定した場合、ステップS66に戻り、上述した処理を繰り返す。
一方、ステップS68において、制御部441は、ノード計算器354により、全枝数のメッセージが演算されたと判定した場合、処理を終了する。
なお、復号装置430は、復号回数だけ図21の復号処理を繰り返し行ない、枝用メモリ440に、最後のチェックノード演算の結果得られるメッセージD440(メッセージuj)が格納された場合、枝用メモリ440は、そのメッセージD440を上述した式(5)の演算を行う不図示のブロックに供給する。不図示のブロックには、さらに、受信用メモリ355から受信データD356が供給され、不図示のブロックは、メッセージD440と受信データD356を用いて、式(5)の演算を行い、その演算結果を最終的な復号結果として出力する。
このように、復号装置430では、計算器を共有化し、さらに枝用メモリを共有化するので、枝用メモリを共有化した図15に示す復号装置300や計算器を共有化した図17の復号装置340よりも、さらに回路規模を小さくすることができる。
なお、枝用メモリ440は、デュアルポートRAMではなく、複数個のシングルポートRAMから構成されるようにしてもよい。この場合、1つのシングルポートRAMへの読み出しと書き込みが同時に重ならないように制御を行う必要がある。複数個のシングルポートRAMを用いた場合、デュアルポートRAMを用いる場合に比べて、復号装置430の回路規模を小さくすることができる。
ところで、図15乃至図21では、メッセージを1つずつ復号する復号装置の例を示したが、計算器の共有化、メモリの共有化は、メッセージをP個(複数個)ずつ同時に復号する復号装置にも適用することができる。以下、メッセージをP個ずつ同時に復号する復号装置について説明する。
図22は、5×5の行列の単位に間隔を空けた30×90の検査行列の例を示している。なお、図22の検査行列自体は、図8に示した検査行列と同一である。
図22においては、検査行列は、5×5の単位行列、その単位行列のコンポーネントである1のうち1個以上が0になった行列(以下、適宜、準単位行列という)、単位行列または準単位行列をサイクリックシフト(cyclic shift)した行列(以下、適宜、シフト行列という)、単位行列、準単位行列、またはシフト行列のうちの2以上(複数)の和(以下、適宜、和行列という)、5×5の0行列の組み合わせで表わされている。なお、図22の検査行列で表現されるLDPC符号は、符号化率2/3、符号長90である。
図22の検査行列は、5×5の単位行列、準単位行列、シフト行列、和行列、0行列で構成されているということができる。そこで、検査行列を構成する、これらの5×5の行列を、以下、適宜、構成行列という。
図23は、図22の検査行列で表現されるLDPC符号を復号する復号装置の構成例を示している。
図23の復号装置500は、スイッチ510および515、6つのFIFO5111乃至5116からなる枝データ格納メモリ511、セレクタ512、5つのチェックノード計算器5131乃至5135からなるチェックノード計算部513、2つのサイクリックシフト回路514および520、18個のFIFO5161乃至51618からなる枝データ格納メモリ516、セレクタ517、受信情報を格納する受信データ用メモリ518、バリアブルノード計算部519、制御部521から構成される。
この復号装置500の各部について詳細に説明する前に、まず、枝データ格納メモリ511と516へのデータの格納方法について説明する。
枝データ格納メモリ511は、検査行列の行数30を構成行列の行数5で除算した数である6つのFIFO5111乃至5116から構成されている。FIFO511y(y=1,2,・・・,6)は、構成行列の行数および列数である5つの枝に対応するメッセージを同時に読み出しもしくは書き込むことができるようになっており、その長さ(段数)は、検査行列の行方向の1の数(ハミング重み)の最大数である9になっている。
FIFO5111には、図22の検査行列の第1行目から第5行目までの1の位置に対応するデータが、各行共に横方向に詰めた形に(0を無視した形で)格納される。すなわち、第j行第i列を、(j,i)と表すこととすると、FIFO5111の第1の要素(第1段)には、検査行列の(1,1)から(5,5)の5×5の単位行列の1の位置に対応するデータが格納される。第2の要素には、検査行列の(1,21)から(5,25)のシフト行列(5×5の単位行列を右方向に3つだけサイクリックシフトしたシフト行列)の1の位置に対応するデータが格納される。第3から第8の要素も同様に検査行列と対応づけてデータが格納される。そして、第9の要素には、検査行列の(1,86)から(5,90)のシフト行列(5×5の単位行列のうちの1行目の1を0に置き換えて1つだけ左にサイクリックシフトしたシフト行列)の1の位
置に対応するデータが格納される。ここで、検査行列の(1,86)から(5,90)のシフト行列においては、1行目に1がないため、FIFO5111の1行目のみ要素数は8、残りの行は要素数が9となる。
FIFO5112には、図22の検査行列の第6行目から第10行目までの1の位置に対応するデータが格納される。すなわち、FIFO5112の第1の要素には、検査行列の(6,1)から(10,5)の和行列(5×5の単位行列を右に1つだけサイクリックシフトした第1のシフト行列と、右に2つだけサイクリックシフトした第2のシフト行列の和である和行列)を構成する第1のシフト行列の1の位置に対応するデータが格納される。また、第2の要素には、検査行列の(6,1)から(10,5)の和行列を構成する第2のシフト行列の1の位置に対応するデータが格納される。
即ち、重みが2以上の構成行列については、その構成行列を、重みが1であるP×Pの単位行列、そのコンポーネントである1のうち1個以上が0になった準単位行列、または単位行列もしくは準単位行列をサイクリックシフトしたシフト行列のうちの複数の和の形で表現したときの、その重みが1の単位行列、準単位行列、またはシフト行列の1の位置に対応するデータ(単位行列、準単位行列、またはシフト行列に属する枝に対応するメッセージ)は、同一アドレス(FIFO5111乃至5116のうちの同一のFIFO)に格納される。
以下、第3から第9の要素についても、検査行列に対応づけてデータが格納される。FIFO5112は全行共に要素数は9となる。
FIFO5113乃至5116も同様に検査行列に対応づけてデータを格納し、各FIFO5113乃至5116それぞれの長さは9である。
枝データ格納メモリ516は、検査行列の列数90を、構成行列の列数である5で割った18個のFIFO5161乃至51618から構成されている。FIFO516x(x=1,2,・・・,18)は、構成行列の行数および列数である5つの枝に対応するメッセージを同時に読み出しもしくは書き込むことができるようになっている。
FIFO5161には、図22の検査行列の第1列目から第5列目までの1の位置に対応するデータが、各列共に縦方向に詰めた形に(0を無視した形で)格納される。すなわち、FIFO5161の第1の要素(第1段)には、検査行列の(1,1)から(5,5)の5×5の単位行列の1の位置に対応するデータが格納される。第2の要素には、検査行列の(6,1)から(10,5)の和行列(5×5の単位行列を右に1つだけサイクリックシフトした第1のシフト行列と、右に2つだけサイクリックシフトした第2のシフト行列との和である和行列)を構成する第1のシフト行列の1の位置に対応するデータが格納される。また、第3の要素には、検査行列の(6,1)から(10,5)の和行列を構成する第2のシフト行列の1の位置に対応するデータが格納される。
即ち、重みが2以上の構成行列については、その構成行列を、重みが1であるP×Pの単位行列、そのコンポーネントである1のうち1個以上が0になった準単位行列、または単位行列もしくは準単位行列をサイクリックシフトしたシフト行列のうちの複数の和の形で表現したときの、その重みが1の単位行列、準単位行列、またはシフト行列の1の位置に対応するデータ(単位行列、準単位行列、またはシフト行列に属する枝に対応するメッセージ)は、同一アドレス(FIFO5161乃至51618のうちの同一のFIFO)に格納される。
以下、第4および第5の要素についても、検査行列に対応づけて、データが格納される。このFIFO5161の要素数(段数)は、検査行列の第1列から第5列における行方向の1の数(ハミング重み)の最大数である5になっている。
FIFO5162と5163も同様に検査行列に対応づけてデータを格納し、それぞれの長さ(段数)は、5である。FIFO5164乃至51612も同様に検査行列に対応づけてデータを格納し、それぞれの長さは3である。FIFO51613乃至51618も同様に検査行列に対応づけてデータを格納し、それぞれの長さは2である。但し、FIFO51618の第1の要素は、検査行列の(1,86)から(5,90)に相当し、第5列目(検査行列の(1,90)から(5,90))に1がないため、データは格納されない。
以下、図23の復号装置500の各部の動作について詳細に説明する。
スイッチ510には、サイクリックシフト回路520から5つのメッセージ(データ)D519が供給されるとともに、制御部521から検査行列のどの行に属するかの情報(Matrixデータ)を表す制御信号D520が供給される。制御信号D520にしたがって、5つのメッセージ(データ)D519を格納するFIFOを、FIFO5111乃至5116の中から選択し、選択したFIFOに5つのメッセージデータD519をまとめて順番に供給していく。
枝データ格納メモリ511は、6つのFIFO5111乃至5116からなる。枝データ格納メモリ511のFIFO5111乃至5116には、スイッチ510から、5つのメッセージD519がまとめて順番に供給され、FIFO5111乃至5116は、5つのメッセージD519をまとめて順番に格納していく。また、枝データ格納メモリ511は、データを読み出す際には、FIFO5111から5つのメッセージ(データ)D5111を順番に読み出し、次段のセレクタ512に供給する。枝データ格納メモリ511は、FIFO5111からのメッセージD5111の読み出しの終了後、FIFO5112乃至5116からも、順番に、メッセージD5111乃至D5116をそれぞれ読み出し、セレクタ512に供給する。
セレクタ512には、制御部521から、FIFO5111乃至5116のうち、メッセージデータを読み出すFIFO(現在データが読み出されているFIFO)の選択を表す選択信号D521が供給されるとともに、枝データ格納メモリ511から5つのメッセージ(データ)D5111乃至D5116が供給される。セレクタ512は、選択信号D521にしたがって、FIFO5111乃至5116のうちの、現在データが読み出されているFIFOを選択し、その選択したFIFOから供給された5つのメッセージデータを、メッセージD512として、チェックノード計算部513に供給する。
チェックノード計算部513は、5つのチェックノード計算器5131乃至5135からなる。チェックノード計算部513には、セレクタ512を介して5つのメッセージD512が供給され、そのメッセージD512が、チェックノード計算器5131乃至5135のそれぞれに1つずつ供給される。また、チェックノード計算部513には、制御部521から制御信号D522が供給され、その制御信号D522が、チェックノード計算器5131乃至5135に供給される。チェックノード計算器5131乃至5135は、それぞれメッセージD512を用いて、式(7)にしたがって演算を行い、その演算の結果メッセージD513を得る。チェックノード計算部513は、チェックノード計算器5131乃至5135による演算の結果得られる5つのメッセージD513をサイクリックシフト回路514に供給する。
ここで、制御部521からチェックノード計算部513に供給される制御信号D522は、図10の制御信号D106に対応するものであり、チェックノード計算部5131乃至5135それぞれは、図10に示したチェックノード計算器101と同様に構成される。
サイクリックシフト回路514には、チェックノード計算部513で計算された5つのメッセージD513が供給されるとともに、制御部521から、そのメッセージD513に対応する枝が検査行列において元となる単位行列を幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D523が供給される。サイクリックシフト回路514は、制御信号D523を元に、5つのメッセージD513を並べ替えるサイクリックシフトを行い、その結果をメッセージD514として、スイッチ515に供給する。
スイッチ515には、サイクリックシフト回路514から供給される5つのメッセージ(データ)D514が検査行列のどの列に属するかの情報を表す制御信号D524が供給されるとともに、サイクリックシフト回路514から、メッセージD514が供給される。スイッチ515は、制御信号D524にしたがって、メッセージD514を格納するFIFOを、FIFO5161乃至51618の中から選択し、選択したFIFOに5つのメッセージD514をまとめて順番に供給していく。
枝データ格納メモリ516は、18個のFIFO5161乃至51618からなる。枝データ格納メモリ516のFIFO5161乃至51618には、スイッチ515から5つのメッセージD514がまとめて順番に供給され、FIFO5161乃至51618は、その5つのメッセージD514をまとめて順番に格納していく。また、枝データ格納メモリ516は、データを読み出す際には、FIFO5161から5つのメッセージD5151を順番に読み出し、次段のセレクタ517に供給する。枝データ格納メモリ516は、FIFO5161からのデータの読み出しの終了後、FIFO5162乃至51618からも、順番に、メッセージD5152乃至D51518を読み出し、セレクタ517に供給する。
セレクタ517には、制御部521からFIFO5161乃至51618のうち、メッセージデータを読み出すFIFO(現在データが読み出されているFIFO)の選択を表す選択信号D525が供給されるとともに、枝データ格納メモリ516からメッセージデータD5151乃至D51518が供給される。セレクタ517は、選択信号D525にしたがって、FIFO5161乃至51618のうちの、現在データが読み出されているFIFOを選択し、その選択したFIFOから供給される5つのメッセージデータを、メッセージD516として、バリアブルノード計算部519に供給する。
一方、受信データ用メモリ518は、通信路を通して受信した受信信号から、受信LLR(対数尤度比)を計算しており、その計算した受信LLRを5つまとめて受信データD517としてバリアブルノード計算部519に供給する。
バリアブルノード計算部519は、5つのバリアブルノード計算器5191乃至5195からなる。バリアブルノード計算部519には、セレクタ517を介して5つのメッセージD516が供給され、そのメッセージD516が、バリアブルノード計算器5191乃至5195のそれぞれに1つずつ供給される。また、バリアブルノード計算部519には、受信データ用メモリ518から5つの受信データD517が供給され、その受信データD517が、バリアブルノード計算器5191乃至5195のそれぞれに1つずつ供給される。さらに、バリアブルノード計算部519には、制御部521から制御信号D526が供給され、その制御信号D526がバリアブルノード計算器5191乃至5195に供給される。
バリアブルノード計算器5191乃至5195は、メッセージD516と受信データD517とを用いて、式(1)にしたがって、それぞれ演算を行い、その演算の結果メッセージD518を得る。バリアブルノード計算部519は、バリアブルノード計算器5191乃至5195の結果得られる5つのメッセージD518を、サイクリックシフト回路520に供給する。
ここで、制御部521からバリアブルノード計算部519に供給される制御信号D526は、図11の制御信号D107に対応するものであり、バリアブルノード計算器5191乃至5195それぞれは、図11のバリアブルノード計算器103と同様に構成される。
サイクリックシフト回路520には、バリアブルノード計算部519から5つのメッセージD518が供給されるとともに、制御部521から、そのメッセージD518に対応する枝が検査行列において元となる単位行列を幾つサイクリックシフトしたものであるかの情報を表す制御信号D527が供給される。サイクリックシフト回路520は、制御信号D527を元に、メッセージD527を並べ替えるサイクリックシフトを行い、その結果をメッセージD519として、スイッチ510に供給する。
なお、制御部521は、制御信号D520、選択信号D521、制御信号D522乃至D524、選択信号D525、制御信号D526とD527を、スイッチ510、セレクタ512、チェックノード計算部513、サイクリックシフト回路514、スイッチ515、セレクタ517、バリアブルノード計算部519、サイクリックシフト回路520にそれぞれ供給することにより、それぞれを制御する。
以上の動作を一巡することで、LDPC符号の1回の復号を行うことができる。図23の復号装置500は、所定の回数だけLDPC符号を復号した後、図示しないが、式(5)にしたがって最終的な復号結果を求めて出力する。
なお、枝データ(枝に対応するメッセージ)が欠けている箇所に関しては、メモリ格納時(枝データ格納メモリ511と516へのデータ格納時)には、何のメッセージも格納せず、また、ノード演算時(チェックノード計算部513でのチェックノード演算時とバリアブルノード計算部519でのバリアブルノード演算時)にも何の演算も行わない。
図24は、本発明を適用した図22の検査行列Hで表現されるLDPC符号を復号する復号装置の一実施の形態の構成例を示している。
図24の復号装置530では、図23のサイクリックシフト回路514および520が共有化され、1つのサイクリックシフト回路551となっている。
復号装置530は、3つのスイッチ540、541、および546、18個のFIFO5421乃至54218からなる枝データ格納メモリ542、セレクタ543、受信情報を格納する受信データ用メモリ544、5つのバリアブルノード計算器5451乃至5455からなるチェックノード計算部545、6つのFIFO5471乃至5476からなる枝データ格納メモリ547、セレクタ548、5つのチェックノード計算器5491乃至5496からなるチェックノード計算部549、セレクタ550、サイクリックシフト回路551、制御部552から構成される。
スイッチ540には、サイクリックシフト回路551から5つのメッセージデータD550が供給されるとともに、制御部552から、バリアブルノード計算部545またはチェックノード計算部549のうち、いま、演算が行われる計算部として一方の選択を表す選択信号D551が供給される。スイッチ540は、選択信号D551に基づいて、スイッチ541とスイッチ546のうち一方を、メッセージデータD550を供給するスイッチとして選択し、その選択したスイッチにメッセージデータD550を供給する。
スイッチ541には、スイッチ540からメッセージデータD550が供給されるとともに、制御部552から検査行列のどの列に属するかの情報(Matrixデータ)を表す制御信号D552が供給される。スイッチ541は、制御信号D552にしたがって、5つのメッセージD550を格納するFIFOを、枝データ格納メモリ542のFIFO5421乃至54218の中から選択し、選択したFIFOに5つのメッセージD550をまとめて順番に供給していく。
枝データ格納メモリ542は、図23の枝データ格納メモリ516と同様に、18個のFIFO5421乃至54218からなる。枝データ格納メモリ542のFIFO5421乃至54218には、スイッチ541から5つのメッセージD550がまとめて順番に供給され、FIFO5421乃至54218は、その5つのメッセージD550をまとめて順番に格納していく。また、枝データ格納メモリ542は、データを読み出す際には、FIFO5421から5つのメッセージD5421を順番に読み出し、セレクタ543に供給する。枝データ格納メモリ542は、FIFO5421からのデータの読み出しの終了後、FIFO5422乃至54218からも、順番に、メッセージD5422乃至D54218を読み出し、セレクタ543に供給する。
セレクタ543には、制御部552からFIFO5421乃至54218のうち、メッセージデータを読み出すFIFO(現在データが読み出されているFIFO)の選択を表す選択信号D553が供給されるとともに、枝データ格納メモリ542からメッセージ(データ)D5421乃至D54218が供給される。セレクタ543は、図23のセレクタ517と同様に、制御部521から供給される選択信号D553にしたがって、FIFO5421乃至54218のうちの、現在データが読み出されているFIFOを選択し、その選択したFIFOから供給される5つのメッセージデータを、メッセージ(データ)D543として、バリアブルノード計算部545に供給する。
一方、受信データ用メモリ544は、通信路を通して受信した受信信号から、受信LLR(対数尤度比)を計算しており、その計算した受信LLRを5つまとめて受信データD544としてバリアブルノード計算部545に供給する。
バリアブルノード計算部545は、図23のバリアブルノード計算部519と同様に、5つのバリアブルノード計算器5451乃至5455からなる。バリアブルノード計算部545には、セレクタ543を介して5つのメッセージD543が供給され、そのメッセージD543が、バリアブルノード計算器5451乃至5455のそれぞれに1つずつ供給される。また、バリアブルノード計算部545には、受信データ用メモリ544から5つの受信データD544が供給され、その受信データD544が、バリアブルノード計算器5451乃至5455のそれぞれに1つずつ供給される。さらに、バリアブルノード計算部545には、制御部552から制御信号D554が供給され、その制御信号D554がバリアブルノード計算器5451乃至5455に供給される。
バリアブルノード計算器5451乃至5455は、メッセージD543と受信データD544とを用いて、式(1)にしたがって、それぞれ演算を行い、その演算の結果、メッセージD545を得る。即ち、バリアブルノード計算部545は、LDPC符号の復号のための5個のバリアブルノードの演算を行い、その演算の結果、5つのメッセージD545を同時に求める。そして、バリアブルノード計算部545は、バリアブルノード計算器5451乃至5455の結果得られる5つのメッセージD545を、セレクタ550に供給する。
ここで、制御部552からバリアブルノード計算部545に供給される制御信号D554は、図11の制御信号D107に対応するものであり、バリアブルノード計算器5451乃至5455それぞれは、図11のバリアブルノード計算器103と同様に構成される。
スイッチ546には、スイッチ540から、5つのメッセージ(データ)D550が供給されるとともに、そのメッセージ(データ)D550が検査行列のどの行に属するかの情報を表す制御信号D555が制御部552から供給される。スイッチ546は、制御部552から供給される制御信号D555にしたがって、メッセージD550を格納するFIFOを、枝データ格納メモリ547のFIFO5471乃至54718の中から選択し、選択したFIFOに5つのメッセージD550をまとめて順番に供給していく。
枝データ格納メモリ547は、図23の枝データ格納メモリ511と同様に、6つのFIFO5471乃至54718からなる。枝データ格納メモリ547のFIFO5471乃至5476には、スイッチ546から、5つのメッセージD550がまとめて順番に供給され、FIFO5471乃至5476は、5つのメッセージD550をまとめて順番に格納していく。また、枝データ格納メモリ547は、データを読み出す際には、FIFO5471から5つのメッセージ(データ)D5461を順番に読み出し、次段のセレクタ548に供給する。枝データ格納メモリ547は、FIFO5471からのメッセージD5461の読み出しの終了後、FIFO5472乃至5476からも、順番に、メッセージD5462乃至D5466を読み出し、セレクタ548に供給する。
セレクタ548には、制御部552から、FIFO5471乃至5476のうち、メッセージデータを読み出すFIFO(現在データが読み出されているFIFO)の選択を表す選択信号D556が供給されるとともに、枝データ格納メモリ547から5つのメッセージ(データ)D5461乃至D5466が供給される。セレクタ548は、選択信号D546にしたがって、FIFO5471乃至5476のうちの、現在データが読み出されているFIFOを選択し、その選択したFIFOから供給された5つのメッセージデータを、メッセージD547として、チェックノード計算部549に供給する。
チェックノード計算部549は、図23のチェックノード計算部513と同様に、5つのチェックノード計算器5491乃至5495からなる。チェックノード計算部549には、セレクタ548を介して5つのメッセージD547が供給され、そのメッセージD547が、チェックノード計算器5491乃至5495のそれぞれに1つずつ供給される。また、チェックノード計算部549には、制御部552から制御信号D557が供給され、その制御信号D557が、チェックノード計算器5491乃至5495に供給される。チェックノード計算器5491乃至5495は、それぞれメッセージD547を用いて、式(7)にしたがって演算を行い、その演算の結果、5つのメッセージD548を同時に求める。即ち、チェックノード計算部513は、LDPC符号の復号のための5個のチェックノード演算を行い、その演算の結果、5つのメッセージD548を得る。そして、チェックノード計算部513は、その5つのメッセージD548をセレクタ550に供給する。
ここで、制御部552からチェックノード計算部549に供給される制御信号D557は、図10の制御信号D106に対応するものであり、チェックノード計算部5491乃至5495それぞれは、図10に示したチェックノード計算器101と同様に構成される。
セレクタ550には、バリアブルノード計算部545からメッセージD545が供給されるとともに、チェックノード計算部549からメッセージD548が供給される。また、セレクタ550には、制御部552から、バリアブルノード計算部545とチェックノード計算部549のうち、いま、演算が行われる計算部として一方の選択を表す選択信号D558が供給される。セレクタ550は、選択信号D558に基づいて、バリアブルノード計算部545によるバリアブルノード演算の結果得られる5個の枝に対応するメッセージD545と、チェックノード計算部549によるチェックノード演算の結果得られる5つの枝に対応するメッセージD548のうち一方を選択し、その選択したメッセージをメッセージD549として、サイクリックシフト回路551に供給する。
サイクリックシフト回路551には、セレクタ550からメッセージD549が供給されるとともに、制御部552から、そのメッセージD549に対応する枝が検査行列において元となる単位行列を幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D559が供給される。サイクリックシフト回路551は、制御信号D559を元に、5つのメッセージD549をサイクリックシフトし(並べ替え)、その結果をメッセージD550として、スイッチ540に供給する。
なお、制御部552は、選択信号D551をスイッチ540に、制御信号D552をスイッチ541に、選択信号D553をセレクタ543に供給することにより、それぞれを制御する。また、制御部552は、制御信号D554をバリアブルノード計算部545に、制御信号D555をスイッチ546に供給することにより、それぞれを制御する。さらに、制御部552は、選択信号D556をセレクタ548に、制御信号D557をチェックノード計算部549に、選択信号D558をセレクタ550に、制御信号D559をサイクリックシフト回路551に供給することにより、それぞれを制御する。
以上の動作を一巡することで、LDPC符号の1回の復号を行うことができる。図24の復号装置530は、所定の回数だけLDPC符号を復号した後、図示しないが、式(5)にしたがって最終的な復号結果を求めて出力する。
なお、枝データ(枝に対応するメッセージ)が欠けている箇所に関しては、メモリ格納時(枝データ格納メモリ542と547へのデータ格納時)には、何のメッセージも格納せず、また、ノード演算時(バリアブルノード計算部545でのバリアブルノード演算時とチェックノード計算部549でのチェックノード演算時と)にも何の演算も行わない。
図25は、図24の復号装置530の復号処理を説明するフローチャートである。この処理は、例えば、受信データ用メモリ544に復号すべき受信データが格納されたとき、開始される。
ステップS81において、制御部552は、バリアブルノード計算部545とチェックノード計算部549のうち、いま、演算が行われる計算部として、バリアブルノード計算部545を選択し、その選択を表す選択信号D551と選択信号D558を、スイッチ540とセレクタ550にそれぞれ供給する。
ステップS81の処理後は、ステップS82に進み、バリアブルノード計算部545は、バリアブルノード演算を行う。
具体的には、バリアブルノード計算部545には、セレクタ543を介して、5つのメッセージD543(メッセージuj)が供給される。即ち、枝データ格納メモリ542は、後述するステップS93で格納されたFIFO5421から5つのメッセージD5421を順番に読み出し、その後、FIFO5422乃至54218からも、順番に、メッセージD5422乃至D54218を読み出して、セレクタ543に供給する。
セレクタ543には、制御部552からFIFO5421乃至54218のうち、メッセージ(データ)を読み出すFIFO(現在データが読み出されているFIFO)の選択を表す選択信号D553が供給されるとともに、枝データ格納メモリ542からメッセージデータD5421乃至D54218が供給される。セレクタ543は、選択信号D553にしたがって、FIFO5421乃至54218のうちの、現在データが読み出されているFIFOを選択し、その選択したFIFOから供給される5つのメッセージデータを、メッセージD543として、バリアブルノード計算部545に供給する。
なお、受信用メモリ544から供給された受信データD544に対して、まだチェックノード演算が行われておらず、枝データ格納メモリ542にメッセージD550が格納されていない場合、バリアブルノード計算部545は、メッセージujを初期値に設定する。
また、バリアブルノード計算部545には、受信データ用メモリ544から5つの受信データD544(受信値u0i)が供給され、その受信データD544が、バリアブルノード計算器5451乃至5455のそれぞれに1つずつ供給される。さらに、バリアブルノード計算部545には、制御部552から制御信号D554が供給され、その制御信号D554がバリアブルノード計算器5451乃至5455に供給される。
バリアブルノード計算器5451乃至5455は、メッセージD543と受信データD544とを用いて、制御信号D554に基づいて、式(1)にしたがって、それぞれ演算を行い、その演算の結果5つのメッセージD545を同時に求める。
即ち、制御部552がバリアブルノード計算部545に供給する制御信号D554は、前述の図11で説明した制御信号D107に対応するものであり、バリアブルノード計算器5451乃至5455は、制御信号D544にしたがい、セレクタ543を介して、枝データ格納メモリ542から必要なメッセージD543(D542)を、それぞれ1つずつ読み出すとともに、受信データ用メモリ544から供給された受信データD544を用いて、バリアブルノード演算を行い、その演算の結果5つのメッセージD545を同時に求める。
ステップS82の処理後は、ステップS83に進み、バリアブルノード計算部545は、バリアブルノード計算器5451乃至5455のバリアブルノード演算の結果得られる5つのメッセージD545(メッセージvi)をセレクタ550に出力し、ステップS84に進む。
ステップS84において、セレクタ550は、ステップS81で供給された選択信号D558に基づいて、バリアブルノード計算部545とチェックノード計算部549のうちの一方を選択し、一方から出力されるメッセージを、メッセージD549として、サイクリックシフト回路551に供給(出力)する。ここでは、選択信号D558は、バリアブルノード計算部545の選択を表しているので、セレクタ550は、ステップS83で出力されたバリアブルノード演算の結果得られる5つのメッセージD545を、メッセージD549としてサイクリックシフト回路551に供給する。即ち、セレクタ550は、バリアブルノード計算部545とチェックノード計算部549のうち、いま、演算が行われている計算器から出力されるメッセージをサイクリックシフト回路551に供給する。
ステップS84の処理後は、ステップS85に進み、サイクリックシフト回路551は、セレクタ550から供給された5つのメッセージD549を、サイクリックシフトする(並べ替える)。
具体的には、サイクリックシフト回路551には、セレクタ550からメッセージD549が供給されるとともに、制御部552から、そのメッセージD549に対応する枝が検査行列において元となる単位行列を幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D559が供給される。サイクリックシフト回路551は、制御信号D559を元に、5つのメッセージD549をサイクリックシフトし、その結果をメッセージD550として、スイッチ540に供給する。
ステップS85の処理後は、ステップS86に進み、スイッチ540は、ステップS81で供給された制御信号D551に基づいて、枝データ格納メモリ542と枝データ格納メモリ547のうち一方を選択し、その選択した一方の枝データ格納メモリに、スイッチを介して、ステップS85で、サイクリックシフト回路550から供給される5つのメッセージD550を供給する。即ち、ここでは、ステップS81で供給された制御信号D551は、バリアブルノード計算部545の選択を表しているので、スイッチ540は、バリアブルノードからのメッセージを格納する枝データ格納メモリ547を選択し、その選択した枝データ格納メモリ547に、スイッチ546を介して、メッセージD550を供給する。
具体的には、スイッチ546には、スイッチ540から、5つのメッセージ(データ)D550が供給されるとともに、そのメッセージ(データ)D550が検査行列のどの行に属するかの情報を表す制御信号D555が供給される。スイッチ546は、制御信号D555にしたがって、メッセージD550を格納するFIFOを、枝データ格納メモリ547のFIFO5471乃至5476の中から選択し、選択したFIFOに5つのメッセージデータD550をまとめて順番に供給していく。
そして、枝データ格納メモリ547のFIFO5471乃至54718は、スイッチ546から供給された5つのメッセージデータD550をまとめて順番に格納していく。
ステップS86の処理後は、ステップS87に進み、制御部552は、バリアブルノード計算部545により、全枝数のメッセージが演算されたかどうかを判定し、全枝数のメッセージが演算されていないと判定した場合、ステップS82に戻り、上述した処理を繰り返す。
一方、ステップS87において、バリアブルノード計算部545は、全枝数のメッセージが演算されたと判定した場合、ステップS88に進み、制御部552は、いま、演算が行われる計算部として、チェックノード計算部549を選択し、ステップS81で生成したバリアブルノード計算部545の選択を表す選択信号D551とD558を、チェックノード計算部549の選択を表す選択信号D551とD558に変更する。
ステップS88の処理後は、ステップS89に進み、チェックノード計算部549は、チェックノード演算を行う。
具体的には、チェックノード計算部549には、セレクタ548を介して、5つのメッセージD547が供給される。即ち、枝データ格納メモリ547は、ステップS86で格納されたFIFO5471から5つのメッセージD5461(メッセージvi)を順番に読み出し、その後、FIFO5472乃至5476からも、順番に、メッセージデータD5462乃至D5466を読み出し、セレクタ548に供給する。
セレクタ548には、制御部552からFIFO5471乃至5476のうち、メッセージデータを読み出すFIFO(現在データが読み出されているFIFO)の選択を表す選択信号D556が供給されるとともに、枝データ格納メモリ547からメッセージデータD5461乃至D5466が供給される。セレクタ548は、選択信号D556にしたがって、FIFO5471乃至5476のうちの、現在データが読み出されているFIFOを選択し、その選択したFIFOから供給される5つのメッセージデータを、メッセージD547として、チェックノード計算部549に供給する。
また、チェックノード計算部549には、制御部552から制御信号D557が供給される。チェックノード計算部549のチェックノード計算器5491乃至5495は、制御信号D557に基づいて、メッセージD547を用いて、上述した式(7)にしたがって、チェックノード演算を行い、その演算結果である5つのメッセージD548(メッセージuj)を同時に求める。
即ち、制御部552がチェックノード計算部549に供給する制御信号D557は、前述の図10で説明した制御信号D106に対応するものであり、チェックノード計算器5491乃至5495は、制御信号D557にしたがい、セレクタ548を介して、枝データ格納メモリ547から必要なメッセージD547(D546)を、それぞれ1つずつ読み出しながら、チェックノード演算を行い、その演算の結果5つのメッセージD548を同時に求める。
ステップS89の処理後は、ステップS90に進み、チェックノード計算部549は、チェックノードの演算の結果得られる5つのメッセージD548をセレクタ550に出力して、ステップS91に進む。
ステップS91において、セレクタ555は、ステップS88で変更された選択信号D558に基づいて、バリアブルノード計算部545とチェックノード計算部549のうち一方を選択し、一方から出力されるメッセージを、メッセージD549として、サイクリックシフト回路551に供給する。ここでは、選択信号D558は、チェックノード計算部549の選択を表しているので、セレクタ550は、ステップS90で出力されたチェックノード演算の結果得られるメッセージD548を、メッセージD549としてサイクリックシフト回路551に格納する。即ち、セレクタ550は、バリアブルノード計算部545とチェックノード計算部549のうち、いま、演算が行われている計算部から出力されるメッセージをサイクリックシフト回路551に供給する。
ステップS91の処理後は、ステップS92に進み、サイクリックシフト回路551は、セレクタ550から供給された5つのメッセージD549を、サイクリックシフトする。
具体的には、サイクリックシフト回路551には、セレクタ550からメッセージD549が供給されるとともに、制御部552から、そのメッセージD549に対応する枝が検査行列において元となる単位行列を幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D559が供給される。サイクリックシフト回路551は、制御信号D559を元に、5つのメッセージD549をサイクリックシフトし、その結果をメッセージD550として、スイッチ540に供給する。
ステップS92の処理後は、ステップS93に進み、スイッチ540は、ステップS88で変更された制御信号D551に基づいて、枝データ格納メモリ542と枝データ格納メモリ547のうち一方を選択し、その選択した一方の枝データ格納メモリに、スイッチを介して、ステップS91でサイクリックシフト回路550から供給される5つのメッセージD550を供給する。即ち、ここでは、ステップS88で供給された制御信号D551は、チェックノード計算部549の選択を表しているので、スイッチ540は、チェックノードからのメッセージを格納する枝データ格納メモリ542を選択し、その選択した枝データ格納メモリ542に、スイッチ541を介して、メッセージD540を供給する。
具体的には、スイッチ542には、スイッチ540から、5つのメッセージ(データ)D550が供給されるとともに、そのメッセージ(データ)D550が検査行列のどの列に属するかの情報を表す制御信号D552が供給される。スイッチ541は、制御信号D552にしたがって、メッセージD550を格納するFIFOを、枝データ格納メモリ542のFIFO5421乃至54218の中から選び、選んだFIFOに5つのメッセージデータD550をまとめて順番に供給していく。
そして、枝データ格納メモリ542のFIFO5421乃至54218は、スイッチ541から供給された5つのメッセージデータD550をまとめて順番に格納していく。
ステップS93の処理後は、ステップS94に進み、制御部552は、チェックノード計算部549により、全枝数のメッセージが演算されたかどうかを判定し、全枝数のメッセージが演算されていないと判定した場合、ステップS89に戻り、上述した処理を繰り返す。
一方、ステップS94において、制御部552は、チェックノード計算部549により、全枝数のメッセージが演算されたと判定した場合、処理を終了する。
なお、復号装置530は、復号回数だけ図25の復号処理を繰り返し行ない、枝データ格納メモリ542に、最後のチェックノード演算の結果得られるメッセージD550(メッセージuj)が格納された場合、枝データ格納メモリ542は、そのメッセージD550を上述した式(5)の演算を行う不図示のブロックに供給する。不図示のブロックには、さらに受信用メモリ544から受信データD544が供給され、不図示のブロックは、メッセージD550と受信データD544を用いて、式(5)の演算を行い、その演算結果を最終的な復号結果として出力する。
上述したように、サイクリックシフト回路551には、バリアブルノード計算部545とチェックノード計算部549のうち、いま、演算が行われている計算部から出力されるメッセージが供給される。即ち、バリアブルノード演算は、チェックノード演算の結果であるメッセージujを用いて行われ、チェックノード演算は、バリアブルノード演算の結果であるメッセージviを用いて行われるため、復号装置530では、バリアブルノード演算とチェックノード演算が交互に行われる。従って、バリアブルノード計算部545とチェックノード計算部549のうち、いま、演算が行われている計算部から出力されるメッセージをサイクリックシフトすることにより、バリアブルノード演算の結果であるメッセージをサイクリックシフトするサイクリックシフト回路とチェックノード演算の結果であるメッセージをサイクリックシフトするサイクリックシフト回路を共有化して1つのサイクリックシフト回路にすることができ、バリアブルノード演算の結果であるメッセージをサイクリックシフトするサイクリックシフト回路520とチェックノード演算の結果であるメッセージをサイクリックシフトするサイクリックシフト回路513とを別々に有する図23の復号装置500に比べて、復号装置530の回路規模を小さくすることができる。
図26は、本発明を適用した図22の検査行列Hで表現されるLDPC符号を復号する復号装置の他の一実施の形態の構成例を示している。
図26の復号装置570では、図24のバリアブルノード計算部545およびチェックノード計算器549がさらに共有化され、1つのノード計算部581となっている。
復号装置570は、スイッチ540、スイッチ541、枝データ格納メモリ542、セレクタ543、受信データ用メモリ544、スイッチ546、枝データ格納メモリ547、セレクタ548、サイクリックシフト回路551、セレクタ580、ノード計算部581、および制御部582から構成される。即ち、図26の復号装置570は、図24の復号装置530のバリアブルノード計算部545およびチェックノード計算部549をさらに供有化してノード計算部581にし、セレクタ550をセレクタ580に、制御部552を制御部582に代えたものである。
なお、図24と同一の符号を付したもの、即ち、図26の復号装置570のスイッチ540、スイッチ541、枝データ格納メモリ542、セレクタ543、受信データ用メモリ544、スイッチ546、枝データ格納メモリ547、セレクタ548、およびサイクリックシフト回路551は、図24の復号装置530のそれらと同一のものであり、説明は繰り返しになるので省略する。
セレクタ580には、セレクタ543を介して、枝データ格納メモリ542に格納されているチェックノード演算の結果である5つのメッセージD543(メッセージuj)が供給されるとともに、セレクタ548を介して、枝データ格納メモリ547に格納されているバリアブルノード演算の結果である5つのメッセージD547(メッセージvi)が供給される。また、セレクタ580には、制御部582から、バリアブルノード演算とチェックノード演算のうち、いま、ノード計算部581で行う演算として一方の選択を表す選択信号D582が供給される。セレクタ580は、制御部582からの選択信号D582に基づいて、メッセージD543とメッセージD547のうち一方を選択し、その選択したメッセージをメッセージD580として、ノード計算部581に供給する。
ノード計算部581は、5つのノード計算器5811乃至5815からなる。ノード計算部581には、セレクタ580を介して5つのメッセージD580が供給され、そのメッセージD580が、ノード計算器5811乃至5815のそれぞれに1つずつ供給される。また、ノード計算部581には、受信データ用メモリ544から5つの受信データD544が供給され、その受信データD544が、ノード計算器5811乃至5815のそれぞれに1つずつ供給される。さらに、ノード計算部581には、制御部582から制御信号D583が供給されるとともに、バリアブルノード演算またはチェックノード演算のうち、いま、ノード計算部581で行う演算として一方の選択を表す選択信号D584が供給され、その制御信号D583と選択信号D584がノード計算器5811乃至5815に供給される。
ノード計算器5811乃至5815は、制御部582選択信号D584に基づき、バリアブルノード演算とチェックノード演算のうち一方を選択し、その選択した演算を行う。即ち、ノード計算器5811乃至5815は、制御信号D583に基づき、セレクタ580から供給されるメッセージD580と、受信用メモリ544から供給される受信データD544とを用い、式(1)にしたがって、それぞれ、LDPC符号の復号のためのバリアブルノード演算を行うか、あるいは、セレクタ580から供給されるメッセージD580を用い、式(7)にしたがって、それぞれ、LDPC符号の復号のためのチェックノードの演算を行う。つまり、ノード計算部581では、LDPC符号の復号のための5個のバリアブルノード演算、または5個のチェックノード演算が行われる。
そして、ノード計算器5811乃至5815は、バリアブルノード演算またはチェックノード演算の結果得られる枝に対応する5つのメッセージを、メッセージD581として、サイクリックシフト回路551に供給する。
ここで、制御部582からノード計算部581に供給される制御信号D583と選択信号D584は、図18の制御部356からノード計算器354に供給される制御信号D362と選択信号D361に対応するものであり、ノード計算器5811乃至5815それぞれは、図18のノード計算器354と同様に構成される。
制御部582は、選択信号D551スイッチ540に、制御信号D552をスイッチ541に、選択信号D553をセレクタ543に、制御信号D555をスイッチ546に、選択信号D556をセレクタ548に、制御信号D559をサイクリックシフト回路551に、選択信号D582をセレクタ580に、制御信号D583と選択信号D584をノード計算部581に、それぞれ供給することにより、それぞれを制御する。
図27は、図26の復号装置570の復号処理を説明するフローチャートである。この処理は、例えば、受信データ用メモリ544に復号すべき受信データが格納されたとき、開始される。
ステップS101において、制御部582は、バリアブルノード演算とチェックノード演算のうち、いま、ノード計算部581で行う演算として、バリアブルノード演算を選択し、その選択を表す選択信号D551、D582、D584を、スイッチ540、セレクタ580、ノード計算部581にそれぞれ供給する。
ステップS101の処理後は、ステップS102に進み、セレクタ580は、ステップS101で制御部582から供給された選択信号D582に基づいて、ノード計算部581に、メッセージD580を供給する。ここでは、制御部582から供給される選択信号D582は、バリアブルノード演算の選択を表しているので、セレクタ580は、後述するステップS113で、バリアブルノード演算に用いられるチェックノード演算の結果得られるメッセージ(メッセージuj)を格納する枝データ格納メモリ542から、セレクタ543を介して供給されるメッセージD543を、メッセージD580として、ノード計算部581に供給する。
即ち、枝データ格納メモリ542は、後述するステップS113で格納されたFIFO5421から5つのメッセージD5421を順番に読み出し、その後、FIFO5422乃至54218からも、順番に、メッセージD5422乃至D54218を読み出し、セレクタ543に供給する。
セレクタ543には、制御部552からFIFO5421乃至54218のうち、メッセージデータを読み出すFIFO(現在データが読み出されているFIFO)の選択を表す選択信号D553が供給されるとともに、枝データ格納メモリ542からメッセージデータD5421乃至D54218が供給される。セレクタ543は、選択信号D553にしたがって、FIFO5421乃至54218のうちの、現在データが読み出されているFIFOを選択し、その選択したFIFOから供給される5つのメッセージデータD542を、メッセージデータD543として、セレクタ580に供給する。そして、セレクタ580は、制御部582から供給される選択信号D582に基づいて、セレクタ543から供給されるメッセージD543(メッセージuj)を選択し、そのメッセージD543を、メッセージD580として、ノード計算部581に供給する。
なお、受信用メモリ544から供給された受信データD544に対して、まだチェックノード演算が行われておらず、枝データ格納メモリ542にメッセージD550が格納されていない場合、枝用データ格納メモリ542は、セレクタ543とセレクタ580を介して、メッセージD580をノード計算部582に供給せず、ノード計算部582は、メッセージujを初期値に設定する。
ステップS102の処理後は、ステップS103に進み、ノード計算部581は、バリアブルノード演算を行い、その演算結果をサイクリックシフト回路551に供給する。
具体的には、ノード計算部581には、ステップS102でセレクタ580から5つのメッセージD580が供給されるとともに、受信データ用メモリ544から5つの受信データD544が供給され、メッセージD580と受信データD544が、ノード計算部581のノード計算器5811乃至5815のそれぞれに1つずつ供給される。さらに、ノード計算部581には、制御部582から制御信号D583と選択信号D584が供給され、その制御信号D583と選択信号D584がノード計算器5811乃至5815に供給される。
ノード計算器5811乃至5815は、選択信号D584に基づいて、いま行う演算を選択する。即ち、ここでは、制御部582から供給される選択信号D584は、バリアブルノード演算の選択を表しているので、ノード計算器5811乃至5815は、制御部582により選択されたバリアブルノード演算を行う。つまり、ノード計算器5811乃至5815は、メッセージD580と受信データD544とを用いて、制御信号D583に基づいて、式(1)にしたがって、それぞれ演算を行い、その演算の結果得られるメッセージD581をサイクリックシフト回路551に供給する。
ここで、制御部582がノード計算部581に供給する制御信号D583と選択信号D584は、前述の図18で説明した制御信号D362と選択信号D361にそれぞれ対応するものであり、ノード計算器5811乃至5815は、選択信号D584に基づいて、いま行う演算を選択し、制御信号D582にしたがい、セレクタ543と580を介して、枝データ格納メモリ542から必要なメッセージD543(D542)を、それぞれ1つずつ読み出すとともに、受信データ用メモリ544から供給された受信データD544を用いて、バリアブルノード演算を行い、その演算の結果得られるメッセージD581をサイクリックシフト回路551に供給する。
ステップS104の処理後は、ステップS105に進み、サイクリックシフト回路551は、ノード計算部581から供給されたバリアブルノード演算の結果得られる5個の枝に対応する5つのメッセージD581を、サイクリックシフトする。
具体的には、サイクリックシフト回路551には、ノード計算部581からメッセージD581が供給されるとともに、制御部582から、そのメッセージD581に対応する枝が検査行列において元となる単位行列を幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D559が供給される。サイクリックシフト回路551は、制御信号D559を元に、5つのメッセージD581をサイクリックシフトし、その結果をメッセージD550として、スイッチ540に供給する。
ステップS105の処理後は、ステップS106に進み、スイッチ540は、ステップS101で供給された制御信号D551に基づいて、枝データ格納メモリ542と枝データ格納メモリ547のうち一方を選択し、その選択した一方の枝データ格納メモリに、スイッチを介して、ステップS105でサイクリックシフト回路550から供給される5つのメッセージD550を供給する。即ち、ここでは、ステップS101で供給された制御信号D551は、バリアブルノード演算の選択を表しているので、スイッチ540は、バリアブルノードからのメッセージを格納する枝データ格納メモリ547を選択し、その選択した枝データ格納メモリ547に、スイッチ546を介して、メッセージD550を供給する。
具体的には、スイッチ546には、スイッチ540から、5つのメッセージ(データ)D550が供給されるとともに、そのメッセージ(データ)D550が検査行列のどの行に属するかの情報を表す制御信号D555が供給される。スイッチ546は、制御信号D555にしたがって、メッセージD550を格納するFIFOを、枝データ格納メモリ547のFIFO5471乃至5476の中から選択し、選択したFIFOに5つのメッセージデータD550をまとめて順番に供給していく。
そして、枝データ格納メモリ547のFIFO5471乃至54718は、スイッチ546から供給された5つのメッセージデータD550(メッセージvi)をまとめて順番に格納していく。
ステップS106の処理後は、ステップS107に進み、制御部582は、ノード計算部581により、全枝数のメッセージが演算されたかどうかを判定し、全枝数のメッセージが演算されていないと判定した場合、ステップS102に戻り、上述した処理を繰り返す。
一方、ステップS107において、制御部582は、ノード計算部581により、全枝数のメッセージが演算されたと判定した場合、ステップS108に進み、制御部582は、いま、ノード計算部581で行う演算として、チェックノード演算を選択し、ステップS101で生成したバリアブルノード演算の選択を表す選択信号D551、D582、D584を、チェックノード演算の選択を表す選択信号D551、D582、D584に変更する。
ステップS108の処理後は、ステップS109に進み、セレクタ580は、ステップS101で制御部582から供給された選択信号D582に基づいて、ノード計算部581に、メッセージD580を供給する。ここでは、ステップS108で変更された選択信号D582は、チェックノード演算の選択を表しているので、セレクタ580は、ステップS106で、チェックノード演算に用いられるバリアブルノード演算の結果得られるメッセージ(メッセージvi)を格納する枝データ格納メモリ547から、セレクタ548を介して供給されるメッセージD547を、メッセージD580として、ノード計算部581に供給する。
即ち、枝データ格納メモリ547は、ステップS106で格納されたFIFO5471から5つのメッセージD5461を順番に読み出し、その後、FIFO5472乃至5476からも、順番に、メッセージデータD5462乃至D5466を読み出し、セレクタ548に供給する。
セレクタ548には、制御部582からFIFO5471乃至5476のうち、メッセージデータを読み出すFIFO(現在データが読み出されているFIFO)の選択を表す選択信号D556が供給されるとともに、枝データ格納メモリ547からメッセージデータD5461乃至D5466が供給される。セレクタ548は、選択信号D556にしたがって、FIFO5471乃至5476のうちの、現在データが読み出されているFIFOを選択し、その選択したFIFOから供給される5つのメッセージデータD546を、メッセージD547として、セレクタ580に供給する。そして、セレクタ580は、制御部582から供給される選択信号D582に基づいて、セレクタ548から供給されるメッセージD547(メッセージvi)を選択し、そのメッセージD547を、メッセージD580として、ノード計算部581に供給する。
ステップS109の処理後は、ステップS110に進み、ノード計算部581は、チェックノード演算を行い、その演算結果をサイクリックシフト回路551に供給する。
具体的には、ノード計算部581には、ステップS109でセレクタ580から5つのメッセージD580が供給され、メッセージD580が、ノード計算部581のノード計算器5811乃至5815のそれぞれに1つずつ供給される。さらに、ノード計算部581には、制御部582から制御信号D583と選択信号D584が供給され、その制御信号D583と選択信号D584がノード計算器5811乃至5815に供給される。
ノード計算器5811乃至5815は、選択信号D584に基づいて、いま行う演算を選択する。即ち、ここでは、制御部582から供給される選択信号D584は、チェックノード演算の選択を表しているので、ノード計算器5811乃至5815は、制御部582により選択されたチェックノード演算を行う。つまり、ノード計算器5811乃至5815は、メッセージD580を用いて、制御信号D583に基づいて、式(7)にしたがって、それぞれ演算を行い、その演算の結果得られるメッセージD581をサイクリックシフト回路551に供給する。
ここで、制御部582がノード計算部581に供給する制御信号D583と選択信号D584は、前述の図18で説明した制御信号D362と選択信号D361にそれぞれ対応するものであり、ノード計算器5811乃至5815は、選択信号D584に基づいて、いま行う演算を選択し、制御信号D582にしたがい、セレクタ543と580を介して、枝データ格納メモリ542から必要なメッセージD543(D542)を、それぞれ1つずつ読み出しながら、チェックノード演算を行い、その演算の結果得られるメッセージD581をサイクリックシフト回路551に供給する。
ステップS111の処理後は、ステップS112に進み、サイクリックシフト回路551は、ノード計算部581から供給されたチェックノード演算の結果得られる5個の枝に対応する5つのメッセージD581を、サイクリックシフトする。
具体的には、サイクリックシフト回路551には、ノード計算部581からメッセージD581が供給されるとともに、制御部582から、そのメッセージD581に対応する枝が検査行列において元となる単位行列を幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D559が供給される。サイクリックシフト回路551は、制御信号D559を元に、5つのメッセージD581をサイクリックシフトし、その結果をメッセージD550として、スイッチ540に供給する。
ステップS112の処理後は、ステップS113に進み、スイッチ540は、ステップS108で変更された制御信号D551に基づいて、枝データ格納メモリ542と枝データ格納メモリ547のうち一方を選択し、その選択した一方の枝データ格納メモリに、スイッチを介して、ステップS112で、サイクリックシフト回路551から供給される5つのメッセージD550を供給する。即ち、ここでは、ステップS108で変更された制御信号D551は、チェックノード演算の選択を表しているので、スイッチ540は、チェックノードからのメッセージを格納する枝データ格納メモリ542を選択し、その選択した枝データ格納メモリ542に、スイッチ541を介して、メッセージD550を供給する。
具体的には、スイッチ542には、スイッチ540から、5つのメッセージ(データ)D550が供給されるとともに、そのメッセージ(データ)D550が検査行列のどの列に属するかの情報を表す制御信号D552が供給される。スイッチ546は、制御信号D552にしたがって、メッセージD550を格納するFIFOを、枝データ格納メモリ542のFIFO5421乃至54218の中から選択し、選択したFIFOに5つのメッセージデータD550をまとめて順番に供給していく。
そして、枝データ格納メモリ542のFIFO5421乃至54218は、スイッチ541から供給された5つのメッセージデータD550をまとめて順番に格納していく。
ステップS113の処理後は、ステップS114に進み、制御部582は、ノード計算部581により、全枝数のメッセージが演算されたかどうかを判定し、全枝数のメッセージが演算されていないと判定した場合、ステップS109に戻り、上述した処理を繰り返す。
一方、ステップS114において、制御部582は、チェックノード計算器581により、全枝数のメッセージが演算されたと判定した場合、処理を終了する。
なお、復号装置570は、復号回数だけ図27の復号処理を繰り返し行ない、枝データ格納メモリ542に最後のチェックノード演算の結果得られるメッセージD550が格納された場合、枝データ格納メモリ542は、そのメッセージD550を上述した式(5)の演算を行う不図示のブロックに供給する。不図示のブロックには、さらに、受信データ用メモリ544から受信データD544が供給され、不図示のブロックは、メッセージD550と受信データD544を用いて、式(5)の演算を行い、その演算結果を最終的な復号結果として出力する。
上述したように、ノード計算部581では、バリアブルノード演算とチェックノード演算の両方の演算が行われる。即ち、バリアブルノード演算は、チェックノード演算の結果であるメッセージujを用いて行われ、チェックノード演算は、バリアブルノード演算の結果であるメッセージviを用いて行われるため、復号装置570では、バリアブルノード演算とチェックノード演算が交互に行われる。従って、ノード計算部581のノード計算器5811乃至5815は、バリアブルノード演算とチェックノード演算に必要な共通のブロックをそれぞれ共有化し、バリアブルノード演算とチェックノード演算を交互に行うことにより、バリアブルノード計算器とチェックノード計算器を共有化して、それぞれ1つのノード計算器にすることができ、バリアブルノード演算を行うバリアブルノード計算部545とチェックノード計算部549とを別々に有する図24の復号装置530に比べて、さらに復号装置570の回路規模を小さくすることができる。
上術した説明では、枝データ格納にFIFOを用いたが(枝データ格納メモリ542と547をFIFOで構成するようにしたが)、FIFOの代わりにRAMを用いても構わない。その場合、RAMには、P個の枝情報(枝に対応するメッセージ)を同時に読み出すことの出来るビット幅と、枝総数/Pのワード(word)数が必要となる。さらに、RAMへの書き込みは、検査行列の情報から、書き込もうとしているデータが次に読み出される際に何番目に読み出されるかを求め、その位置に書き込む。また、RAMからの読み出しの際には、アドレスの先頭から順次データを読み出す。FIFOの代わりにRAMを用いると、セレクタ541および546は不要になる。
このように、枝データ格納にFIFOの代わりにRAMを用い、枝データ格納メモリ542および枝データ格納メモリ547をさらに共有化した復号装置を図28に示す。
図28は、本発明を適用した図22の検査行列Hで表現されるLDPC符号を復号する復号装置のさらに他の一実施の形態の構成例を示している。
図28の復号装置600では、図26の枝データ格納メモリ542および枝データ格納メモリ547がさらに共有化され、1つの枝用格納メモリ610となっている。
復号装置600は、受信データ用メモリ544、サイクリックシフト回路551、ノード計算部581、枝用メモリ610、および制御部611から構成される。即ち、図28の復号装置600は、図26の復号装置570の枝データ格納メモリ542および枝データ格納メモリ547を共有化して枝用メモリ610にし、スイッチ540、セレクタ580を削除して、制御部582を制御部611に代えたものである。
なお、図26と同一の符号を付したもの、即ち、図28の復号装置600の受信データ用メモリ544、サイクリックシフト回路551、およびノード計算部581は、図26の復号装置570のそれらと同一のものであり、説明は繰り返しになるので省略する。
枝用メモリ610には、サイクリックシフト回路551から、ノード計算部581によるチェックノードの演算、またはバリアブルノードの演算の結果得られる5個の枝に対応する5つのメッセージD611がサイクリックシフトされた5つのメッセージD550が供給され、枝用メモリ610は、サイクリックシフト回路551から供給された5つのメッセージD550を同一アドレスに格納(記憶)し、既に格納してある5つのメッセージD550を、5つのメッセージD610として、5つ同時に読み出し、ノード計算部581に供給する。
即ち、枝用メモリ610は、サイクリックシフト回路551から供給され、ノード計算部581がバリアブルノード演算またはチェックノード演算に用いる順番に、同一アドレスに格納してある5つのメッセージD550を読み出し、メッセージD610として、5つ同時にノード計算部581に供給すると同時に、サイクリックシフト回路551が出力する5つのメッセージD550を受信し、枝用メモリ610の既に読み出されたメッセージ(メッセージD610)が記憶されていたアドレスに、5つ同時に書き込む。即ち、枝用メモリ610は、ノード計算部581に供給するメッセージD610の5つ同時の読み出しと、ノード計算部581から供給されるメッセージD550の5つ同時の書き込みとを、同時に行う。
なお、枝用メモリ610には、ノード計算部581のバリアブルノード演算、またはチェックノード演算により演算された枝に対応するメッセージがサイクリックシフトされた結果が格納されるので、枝用メモリ610に格納されるデータ量、即ち、枝用メモリ610に必要とされる記憶容量は、メッセージの量子化ビット数と、全枝数との乗算値となる。
また、枝用メモリ610は、読み出しと書き込みが同時に可能な、例えば、デュアルポートRAMで構成することができる。
制御部611は、制御信号D559、または制御信号D583と選択信号D584を、サイクリックシフト回路551、またはノード計算部581にそれぞれ供給することにより、それぞれを制御する。
図29は、図28の復号装置600の復号処理を説明するフローチャートである。この処理は、例えば、受信データ用メモリ544に復号すべき受信データが格納されたとき、開始される。
ステップS121において、制御部611は、バリアブルノード演算とチェックノード演算のうち、いま、ノード計算部581で行う演算として、バリアブルノード演算を選択し、その選択を表す選択信号D584を、ノード計算部581に供給する。
ステップS121の処理後は、ステップS122に進み、ノード計算部581は、ステップS121で制御部611から供給された選択信号D584に基づいて、バリアブルノード演算とチェックノード演算のうち、いま行う演算として、バリアブルノード演算を選択し、バリアブルノード演算を行う。
具体的には、ノード計算部581には、枝用メモリ610から、後述するステップS129で格納(記憶)されたチェックノードからの5つのメッセージD610(メッセージuj)が供給されるとともに、受信データ用メモリ544から5つの受信データD544が供給され、メッセージD610と受信データD544が、ノード計算部581のノード計算器5811乃至5815のそれぞれに1つずつ供給される。また、ノード計算部581には、制御部611から制御信号D583と選択信号D584が供給される。
なお、受信用メモリ544から供給された受信データD544に対して、まだチェックノード演算が行われておらず、枝用メモリ610にメッセージD550(D610)が格納されていない場合、枝用メモリ610は、メッセージD610をノード計算部581に供給せず、ノード計算部581は、メッセージujを初期値に設定する。
ノード計算器5811乃至5815は、選択信号D584に基づいて、いま行う演算を選択する。即ち、ここでは、制御部611から供給される選択信号D584は、バリアブルノード演算の選択を表しているので、ノード計算器5811乃至5815は、バリアブルノード演算を行う。つまり、ノード計算器5811乃至5815は、メッセージD610と受信データD544とを用いて、制御信号D583に基づいて、式(1)にしたがって、それぞれ演算を行い、その演算の結果であるメッセージD611を得る。
ここで、制御部582がノード計算部581に供給する制御信号D583と選択信号D584は、前述の図18で説明した制御信号D362と選択信号D361にそれぞれ対応するものであり、ノード計算器5811乃至5815は、選択信号D584に基づいて、いま行う演算を選択し、制御信号D583にしたがい、枝用格納メモリ610から必要なメッセージD610を、それぞれ1つずつ読み出すとともに、受信データ用メモリ544から必要な受信データD544を、それぞれ1つずつ読み出して、バリアブルノード演算を行い、その演算の結果であるメッセージD611を得る。
ステップS122の処理後は、ステップS123に進み、ノード計算部581は、バリアブルノードの演算の結果得られる5個の枝に対応する5つのメッセージD611を、サイクリックシフト回路551に供給し、ステップS124に進む。
ステップS124において、サイクリックシフト回路551は、ノード計算部581から供給された5つのメッセージD611を、サイクリックシフトし、その結果を5つのメッセージD550として、枝用メモリ610の既に読みだされたメッセージ(D610)のアドレスに格納(記憶)する。なお、5つのメッセージD550は、同一のアドレスに格納される。
ステップS124の処理後は、ステップS125に進み、ノード計算部581は、全枝数のメッセージが演算されたかどうかを判定し、全枝数のメッセージが演算されていないと判定した場合、ステップS122に戻り、上述した処理を繰り返す。
一方、ステップS125において、制御部611は、ノード計算部581により、全枝数のメッセージが演算されたと判定した場合、ステップS126に進み、制御部611は、いま、演算を行う演算として、チェックノード演算を選択し、ステップS121で生成したバリアブルノード演算の選択を表す選択信号D584を、チェックノード演算の選択を表す選択信号D584に変更する。
ステップS126の処理後は、ステップS127に進み、ノード計算部581は、ステップS126で変更された選択信号D584に基づいて、バリアブルノード演算とチェックノード演算のうち、いま行う演算として、チェックノード演算を選択し、チェックノード演算を行う。
具体的には、ノード計算部581には、枝用メモリ610から、ステップS124で格納(記憶)されたバリアブルノードからの5つのメッセージD610が供給され、メッセージD610が、ノード計算部581のノード計算器5811乃至5815のそれぞれに1つずつ供給される。
ノード計算器5811乃至5815は、ステップS126で変更された選択信号D584に基づいて、いま行う演算を選択する。即ち、ここでは、選択信号D584は、チェックノード演算の選択を表しているので、ノード計算器5811乃至5815は、チェックノード演算を行う。つまり、ノード計算器5811乃至5815は、メッセージD610を用いて、制御信号D583に基づいて、式(7)にしたがって、それぞれ演算を行い、その演算の結果であるメッセージD611を得る。
ここで、制御部582がノード計算部581に供給する制御信号D583と選択信号D584は、前述の図18で説明した制御信号D362と選択信号D361にそれぞれ対応するものであり、ノード計算器5811乃至5815は、選択信号D584に基づいて、いま行う演算を選択し、制御信号D583にしたがい、枝用格納メモリ610から必要なメッセージD610を、それぞれ1つずつ読み出しながら、チェックノード演算を行い、その演算の結果であるメッセージD611を得る。
ステップS127の処理後は、ステップS128に進み、ノード計算部581は、チェックノードの演算の結果得られる枝に対応するメッセージD611を、サイクリックシフト回路551に供給し、ステップS129に進む。
ステップS129において、サイクリックシフト回路551は、ノード計算部581から供給された5つのメッセージD611を、サイクリックシフトし、その結果をメッセージD550として、枝用メモリ610の既に読みだされたメッセージのアドレスに格納する。なお、5つのメッセージD550は、同一のアドレスに格納(記憶)される。
ステップS129の処理後は、ステップS130に進み、制御部611は、ノード計算部581により、全枝数のメッセージが演算されたかどうかを判定し、全枝数のメッセージが演算されていないと判定した場合、ステップS127に戻り、上述した処理を繰り返す。
一方、ステップS130において、制御部611は、ノード計算器581により、全枝数のメッセージが演算されたと判定した場合、処理を終了する。
なお、復号装置600は、復号回数だけ図29の復号処理を繰り返し行ない、枝用メモリ610に最後のチェックノード演算の結果得られるメッセージD550(メッセージuj)が供給された場合、枝用メモリ610は、そのメッセージD550を上述した式(5)の演算を行う不図示のブロックに供給する。不図示のブロックには、さらに、受信データ用メモリ544から受信データD544が供給され、不図示のブロックは、メッセージD550と受信データD544を用いて、式(5)の演算を行い、その演算結果を最終的な復号結果として出力する。
上述したように、枝用メモリ610では、バリアブルノード演算またはチェックノード演算の結果得られるメッセージのうち、いま行われている演算の結果得られるメッセージが格納される。即ち、バリアブルノード演算は、チェックノード演算の結果であるメッセージujを用いて行われ、チェックノード演算は、バリアブルノード演算の結果であるメッセージviを用いて行われるため、復号装置660では、バリアブルノード演算とチェックノード演算が交互に行われる。従って、復号装置600では、いま行われている演算の結果得られるメッセージを格納することにより、バリアブルノード演算の結果得られるメッセージを格納する枝データ格納メモリ542とチェックノード演算の結果得られるメッセージを格納する枝データ格納メモリ547を共有化して、1つの枝用メモリ610にすることができ、バリアブルノードのメッセージを格納するメモリ542と、チェックノードのメッセージを格納するメモリ547を別々に有する図26の復号装置570に比べて、さらに、復号装置600の回路規模を小さくすることができる。
図30は、本発明を適用した図22の検査行列Hで表現されるLDPC符号を復号する復号装置の他の一実施の形態の構成例を示している。
図30の復号装置600では、図28のノード計算部581のノード計算器5811乃至ノード計算器5815のそれぞれを構成する各ブロック(演算素子)がさらに共有化され、計算部641の計算器6411乃至計算器6415となっている。
ここで、計算部641の計算器6411乃至計算器6415で行われる計算について説明する。
計算部641では、バリアブルノード演算またはチェックノード演算を行い、その演算の結果得られるメッセージを出力して枝用メモリに格納するのではなく、バリアブルノード演算またはチェックノード演算の途中結果を出力して、メモリ640に格納する。
具体的には、計算部641は、上述した式(1)および以下に表す式(8)にしたがう第1の演算と、以下の式(9)にしたがう第2の演算を行い、その第1の演算結果である復号途中結果vi'と第2の演算結果である復号途中結果ujをメモリ640に格納させる。
Figure 0004284600
・・・(8)
Figure 0004284600
・・・(9)
即ち、式(8)で表される復号途中結果vi'の絶対値|vi'|は、その右辺の絶対値|φ(|vi|)|に等しい。また、φ(x)は、x≧0で、φ(x)=ln((ex+1)/(ex−1))=ln(1+2/(ex−1))で定義されるので、φ(x)≧0となり、|φ(|vi|)|は、φ(|vi|)に等しい。従って、復号途中結果vi'の絶対値|vi'|は、φ(|vi|)に等しい。さらに、φ(x)≧0であるので、式(8)で表される復号途中結果vi'の符号ビットsign(vi')は、その右辺の符号ビットsign(vi)に等しい。これにより、上述した式(7)のφ(|vi|)は、|vi'|に置換でき、式(7)のsign(vi)は、sign(vi')に置換できるので、上述した式(7)で表されるメッセージujは、復号途中結果vi'を用いて、上述した式(9)で表すことができる。
従って、計算部641が、式(1)および式(8)にしたがう第1の演算と、式(9)にしたがう第2の演算を交互に行い、最後の第2の演算の後、不図示のブロックが上述した式(5)の演算を行うことにより、LDPC符号の繰り返し復号を行うことができる。
なお、ここでは、式(9)にしたがう第2の演算結果を、復号途中結果ujと記載するが、この復号途中結果ujは、式(7)のチェックノード演算結果ujに等しい。
図30の復号装置630は、この計算部641を、図28のノード計算部581の代わりに備え、枝用メモリ610をメモリ640に、制御部611を制御部642に代えたものである。
即ち、復号装置630は、受信データ用メモリ544、サイクリックシフト回路551、メモリ640、計算部641、および制御部642から構成される。
なお、図28と同一の符号を付したもの、即ち、図30の復号装置630の受信データ用メモリ544とサイクリックシフト回路551は、図28の復号装置600のそれらと同一のものであり、説明は繰り返しになるので省略する。
メモリ640には、サイクリックシフト回路551から、計算部641による演算結果である5つの復号途中結果D642がサイクリックシフトされた5つの復号途中結果D640が供給され、メモリ640は、サイクリックシフト回路551から供給された5つの復号途中結果D640を同一アドレスに、5つ同時に格納(記憶)し、既に格納してある5つの復号途中結果D640を、5つ同時に、5つのメッセージD641として、計算部641に供給する。なお、メモリ650は、計算部641による最後の第2の演算の結果得られる復号途中結果D630を格納する場合には、その復号途中結果D630を、上述した式(5)の演算を行う不図示のブロックに供給する。
即ち、メモリ640は、サイクリックシフト回路551から供給され、同一アドレスに格納してある5つの復号途中結果D640を5つ同時に読み出し、復号途中結果D641として、計算部641に供給すると同時に、サイクリックシフト回路551が出力する5つの復号途中結果D640を受信し、メモリ640の既に読み出された復号途中結果(復号途中結果D640)が記憶されていたアドレスに、5つ同時に書き込む。即ち、メモリ640は、計算部641に供給する復号途中結果D640の5つ同時の読み出しと、計算部641から供給される復号途中結果D640の5つ同時の書き込みとを、同時に行う。
なお、メモリ640には、計算部641の第1の演算、または第2の演算により演算された復号途中結果がサイクリックシフトされた結果が格納されるので、メモリ640に格納されるデータ量、即ち、枝用メモリ640に必要とされる記憶容量は、メッセージの量子化ビット数と、図22の検査行列Hの“1”の数との乗算値となる。
また、メモリ640は、読み出しと書き込みが同時に可能な、例えば、デュアルポートRAMで構成することができる。
計算部641は、5つの計算器6411乃至6415からなる。計算部641には、メモリ640から5つの復号途中結果D641が供給され、そのメッセージD641が、計算器6411乃至6415のそれぞれに1つずつ供給される。また、計算部641には、受信データ用メモリ544から5つの受信データD544が供給され、その受信データD544が、計算器6411乃至6415のそれぞれに1つずつ供給される。さらに、計算部641には、制御部642から制御信号D583が供給されるとともに、第1の演算または第2の演算のうち、いま計算部641で行う演算として一方の選択を表す選択信号D643が供給され、その制御信号D583と選択信号D643が計算器6411乃至6415に供給される。
計算器6411乃至6415は、選択信号D643に基づき、第1の演算と第2の演算のうち一方を選択し、その選択した演算を行う。即ち、計算器6411乃至6415は、制御信号D643に基づき、メモリ640から供給される復号途中結果D641と受信用メモリ544から供給され受信データD544とを用い、式(1)と式(8)にしたがって、それぞれ、LDPC符号の復号のための第1の演算を行うか、あるいは、メモリ640から供給されるメッセージD641を用い、式(9)にしたがって、それぞれ、LDPC符号の復号のための第2の演算を行う。
そして、計算器6411乃至6415は、第1の演算または第2の演算の結果得られる5つの復号途中結果を、復号途中結果D642として、サイクリックシフト回路551に供給する。
制御部642は、制御信号D559、または制御信号D583と選択信号D643を、サイクリックシフト回路551、または計算部641にそれぞれ供給することにより、それぞれを制御する。
図31は、図30の計算器6411の構成例を示すブロック図である。
図31の計算器6411は、第1の演算または第2の演算を行う。
なお、図31では、計算器6411の構成について説明するが、図30の計算器6412乃至6414も、図31の計算器6411と同様に構成される。
また、図31では、復号途中結果が符号ビットを合わせて合計6ビット(bit)に量子化されているものとして、計算器6411を表している。さらに、図31の計算器6411には、クロックckが供給され、このクロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図31の計算器6411は、セレクタ661、積算部701、加算器666、セレクタ667、FIFOメモリ669、セレクタ670、減算器671、LUT672、乗算部702、FIFOメモリ678、EXOR回路679、セレクタ680から構成される。また、積算部701は、加算器662、レジスタ663、セレクタ664、およびレジスタ665から構成され、乗算部702は、EXOR回路673、レジスタ674、セレクタ675、およびレジスタ676から構成される。
図31の計算器6411は、制御部642から供給される、例えば、1ビットの制御信号D583と1ビットの選択信号D643に基づき、メモリ640から1つずつ読み出される復号途中結果D641を用いて、式(9)にしたがって第2の演算を行うか、あるいは復号途中結果D641と受信データ用メモリ544から供給される受信データD544を用いて、式(1)と式(8)にしたがって第1の演算を行う。
即ち、計算器6411では、検査行列の各列の1に対応する6ビットの復号途中結果(Vi)、または検査行列の各行の1に対応する6ビットの復号途中結果(uj)が復号途中結果D641として1つずつ読み込まれると、その下位5ビットである絶対値D662がFIFOメモリ669に供給されるとともに、その絶対値D662において、1ビットの値である“0”が最上位ビットに付加されることにより、ビット拡張が行われ、そのビット拡張の結果である6ビットの値D663が、セレクタ661に供給される。また、復号途中結果D641の最上位ビットである符号ビットD661がEXOR回路673とFIFOメモリ678にそれぞれ供給される。さらに、計算器6411では、1つずつ読み込まれた6ビットの復号途中結果D641がセレクタ661に供給される。
また、計算器6411には、制御部642から制御信号D583が供給され、その制御信号D583は、セレクタ664とセレクタ675に供給される。また、計算器6411には、制御部642から、第1の演算または第2の演算のうち一方の選択を表す選択信号D643が供給され、その選択信号D643がセレクタ661、セレクタ667、およびセレクタ670に供給される。さらに、計算器6411には、受信データ用メモリ544から受信データD544が供給され、その受信データD544が加算器666に供給される。
まず最初に、検査行列の各行の1に対応する6ビットの復号途中結果ujが、復号途中結果D641として1つずつ読み込まれた場合の計算器6411の処理について説明する。このとき、制御部642は、第1の演算または第2の演算のうちの、第1の演算を、いま、計算器6411で行う演算として選択し、その選択を表す選択信号D583を計算器6411に供給するとともに、演算を制御するための制御信号D583の値を、計算器6411が1列に亘る復号途中結果(検査行列Hの各列の1に対応する第2の演算結果)を読み込む毎に、“0”から“1”に変更する。
このように、制御部642により、いま、計算器6411で行う演算として、第1の演算が選択された場合、計算器6411では、制御部642から供給される、例えば、1ビットの制御信号D583に基づき、メモリ640から1つずつ読み込まれる復号途中結果D641を用いて、式(1)と式(8)にしたがって演算を行う。
計算器6411では、検査行列の各行の1に対応する6ビットの復号途中結果D641(復号途中結果uj)が1つずつ読み込まれ、その下位5ビットである絶対値D662(|uj|)がFIFOメモリ669に供給されるとともに、その絶対値D662において、1ビットの値である“0”が最上位ビットに付加されることにより、ビット拡張が行われ、そのビット拡張の結果である6ビットの値D663が、セレクタ661に供給される。また、復号途中結果D641の最上位ビットである符号ビットD661(sign(uj))がEXOR回路673とFIFOメモリ678にそれぞれ供給される。さらに、計算器6411では、1つずつ読み込まれた6ビットの復号途中結果D641がセレクタ661に供給される。
セレクタ661には、6ビットの復号途中結果D641(復号途中結果uj)と6ビットの値D663が供給される。また、セレクタ661には、第1の演算と第2の演算のうち一方の選択を表す選択信号D643が供給される。セレクタ661は、選択信号D643に基づいて、復号途中結果D641と値D663のうち一方を選択し、その選択した一方を値D664として、加算器662に供給する。ここでは、選択信号D643は、第1の演算の選択を表しているので、セレクタ661は、値D641(uj)を、値D664として加算器662に供給する。
積算部701の加算器662は、値D641(uj)とレジスタ663に格納されている9ビットの値D665とを加算することにより、値D641を積算し、その結果得られる9ビットの積算値をレジスタ663に再格納する。なお、検査行列の1列に亘る1に対応する復号途中結果D641が積算された場合、レジスタ663はリセットされる。
検査行列の1列に亘る復号途中結果D641(検査行列の各行の1に対応するすべての復号途中結果D641)が1つずつ読み込まれ、レジスタ663に1列分の値D641が積算された積算値(j=1からj=dvまでのΣuj)が格納された場合、制御部642から供給される制御信号D583は、0から1に変化する。例えば、列の重みが「5」である場合、制御信号D583は、1から4クロック目までは、「0」となり、5クロック目では「1」となる。
制御信号D583が「1」の場合、セレクタ664は、レジスタ663に格納されている値、即ち、検査行列の1列に亘る1に対応する復号途中結果D641(復号途中結果uj)が積算された9ビットの値D665(j=1からj=dvまでのΣuj)を選択し、値D666として、レジスタ665に出力して格納させる。レジスタ665は、格納している値D666を、9ビットの値D667として、セレクタ664、加算器666、およびセレクタ667に供給する。
制御信号D583が「0」の場合、セレクタ661は、レジスタ665から供給された値D667を選択し、レジスタ665に出力して再格納させる。即ち、検査行列の1列に亘る1に対応する復号途中結果D641(復号途中結果uj)が積算されるまで、レジスタ665は、前回積算されたujを、セレクタ664、加算器666、およびセレクタ667に供給する。
加算器666では、レジスタ665から値D667が供給されるとともに、受信データ用メモリ544から受信データD544(LDPC符号)が供給される。加算器666は、値D667に、受信データ用メモリ544から供給された受信データD544(受信値u0i)を加算して、その結果得られる値D668をセレクタ667に供給する。
セレクタ667には、加算器666から値D668が供給されるとともに、レジスタ665から値D667が供給される。また、セレクタ667には、制御部642から、第1の演算と第2の演算のうち一方の選択を表す選択信号D643が供給される。セレクタ667は、選択信号D643に基づいて、値D668と値D667のうち一方を選択し、その選択した値を、値D669として、減算器671に供給する。ここでは、選択信号D643は、第1の演算の選択を表しているので、セレクタ667は、値D668を選択し、値D669として減算器671に供給する。
一方、FIFOメモリ669は、レジスタ665から新たな値D667(j=1からj=dvまでのΣuj)が出力されるまでの間、メモリ640から供給された5ビットの復号途中結果D641の絶対値(|uj|)を遅延し、5ビットの値D670として出力する。その値D670において、1ビットの値である“0”が最上位ビットに付加されることにより、ビット拡張が行われ、そのビット拡張の結果である6ビットの値D671が、セレクタ670に供給される。
以上の処理と並行して、乗算部702のEXOR回路673は、レジスタ674に格納されている1ビットの値D673と符号ビットD661との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、1ビットの乗算結果D672をレジスタ674に再格納する。なお、検査行列の1列に亘る1に対応する復号途中結果D641の符号ビットD661が乗算された場合、レジスタ674はリセットされる。
検査行列の1列に亘る1に対応する復号途中結果D641の符号ビットD661が乗算された乗算結果D672がレジスタ674に格納された場合、制御部642から供給される制御信号D583は、「0」から「1」に変化する。
制御信号D583が「1」の場合、セレクタ675は、レジスタ674に格納されている値、即ち、検査行列の1列に亘る1に対応する復号途中結果D641の符号ビットD661が乗算された値D673を選択し、1ビットの値D674としてレジスタ676に出力して格納させる。レジスタ676は、格納している値D674を、1ビットの値D675として、セレクタ675とEXOR回路679に供給する。
制御信号D583が「0」の場合、セレクタ675は、レジスタ674から供給された値D675を選択し、レジスタ676に出力して再格納させる。即ち、検査行列の1列に亘る1に対応する復号途中結果D641の符号ビットD661が乗算されるまで、レジスタ676は、前回格納した値を、セレクタ675とEXOR回路679に供給する。
一方、FIFOメモリ678は、レジスタ676から新たな値D675がEXOR回路679に供給されるまでの間、符号ビットD661(sign(uj))を遅延し、1ビットの値D676として、出力する。FIFOメモリ678から出力された1ビットの値D676(sign(uj))を最上位ビットとするとともに、FIFOメモリ669から出力された5ビットの値D670(|uj|)を下位5ビットとした合計6ビットの値D678(uj)は、セレクタ670に供給される。また、1ビットの値D676は、EXOR回路679に供給される。
セレクタ670には、FIFOメモリ669から6ビットの値D671が供給されるとともに、6ビットの値D678(uj)が供給される。また、セレクタ670には、制御部642から選択信号D643が供給される。セレクタ670は、第1の演算または第2の演算のうち一方の選択を表す選択信号D643に基づいて、値D671と値D678のうち一方を選択し、その選択した値を値D679として減算器671に供給する。ここでは、選択信号D643は、第1の演算の選択を表しているので、値D678(uj)を値D679として、減算器671に出力する。
減算器671は、セレクタ667から供給された9ビットの値D669から、セレクタ670から供給された6ビットの値D679を減算し、その減算結果を、6ビットの減算値D680として出力する。即ち、減算器671は、検査行列の1列に亘る1に対応する復号途中結果D641(復号途中結果uj)の積算値と受信データD643(受信値u0i)との加算値から、検査行列の所定の1に対応する復号途中結果D641(uj)を減算して、その減算値(j=1からj=dv−1までのΣujと受信値u0iの加算値、即ち、vi)を6ビットの減算値D680として出力する。即ち、減算器671では、検査行列の各列の1に対応する復号結果のうち、検査行列の所定の1に対応する復号結果以外のすべてを積算した値と、受信データD544を加算した値が減算値D680として出力される。出力された減算値D680は、その下位5ビットを値D681(|vi|)として、LUT672に供給され、上位1ビットを符号ビットD683(sign(vi))として、セレクタ680に供給される。ここでいう「所定の1」に対応する復号結果とは、式(1)と(8)の演算により復号途中結果vi’を求めたい枝からのメッセージに対応するujである。
LUT672は、値D681(|vi|)に対してφの演算を行った5ビットの演算結果D682(φ(|vi|))を出力する。即ち、値D681に対してφの関数を用いて変換された値が、演算結果D682として読み出され、出力される。
一方、EXOR回路679は、レジスタ676から供給された1ビットの値D675と、FIFOメモリ678から供給された1ビットの値D676との排他的論理和を演算することにより、値D675を、値D676で除算し、1ビットの除算結果を除算値D684として、セレクタ680に供給する。
セレクタ680には、減算器671から供給された1ビットの符号ビットD683(sign(vi))が供給されるとともに、EXOR回路679から1ビットの除算値D684が供給される。また、セレクタ680には、制御部642から選択信号D643が供給される。セレクタ680は、第1の演算または第2の演算のうち一方の選択を表す選択信号D643に基づいて、符号ビットD683と除算値D684のうち一方を選択し、その選択した1ビットの値をD685として、出力する。ここでは、選択信号は、第1の演算の選択を表しているので、値D683(sign(vi))を、値D685として出力する。
LUT672から出力された5ビットの演算結果D682(φ(|vi|)を下位5ビットとするとともに、セレクタ680から出力された1ビットの値D685(sign(vi))を最上位ビットとする合計6ビットの復号途中結果D642(復号途中結果vi’)が出力される。即ち、演算結果D682と値D685が乗算され、検査行列の所定の1に対応する第1の演算結果である復号途中結果D642が出力される。
以上のように、制御部642により、計算器6411で行う演算として、第1の演算が選択された場合、計算器6411では、式(1)と式(8)の演算が行われ、復号途中結果vi’が求められる。
次に、検査行列の各列の1に対応する6ビットの復号途中結果vi'が、復号途中結果D641として1つずつ読み込まれた場合の計算器6411の処理について説明する。このとき、制御部642は、第1の演算または第2の演算のうちの、第2の演算を、いま、計算器6411で行う演算として選択し、その選択を表す選択信号D583を計算器6411に供給するとともに、演算を制御するための制御信号D583の値を、計算器6411が1行に亘る復号途中結果(検査行列Hの各行の1に対応する第1の演算の結果)を読み込む毎に、“0”から“1”に変更する。
計算器6411では、制御部642が第2の演算を、いま、計算器6411で行う演算として選択した場合も、第1の演算を選択した場合と同様に演算が行われるが、選択信号D643が第2の演算の選択を表しているため、セレクタ661、セレクタ667、セレクタ670、およびセレクタ680では、上述した選択信号D643が第1の演算の選択を表している場合と異なる他方の値が選択される。
即ち、制御部642により、いま、計算器6411で行う演算として、第2の演算が選択された場合、計算器6411では、制御部642から供給される、例えば、1ビットの制御信号D583に基づき、メモリ640から1つずつ読み込まれる復号途中結果D641を用いて、式(9)にしたがって演算を行う。
計算器6411では、検査行列の各列の1に対応する6ビットの復号途中結果D641(復号途中結果vi')が1つずつ読み込まれ、その下位ビットである絶対値D662(|vi'|)がFIFOメモリ669に供給されるとともに、その絶対値D662において、1ビットの値である“0”が最上位ビットに付加されることにより、ビット拡張が行われ、そのビット拡張の結果である6ビットの値D663が、セレクタ661に供給される。また、復号途中結果D641の最上位ビットである符号ビットD661(sign(vi'))がEXOR回路673とFIFOメモリ678にそれぞれ供給される。さらに、計算器6411では、1つずつ読み込まれた6ビットの復号途中結果D641がセレクタ661に供給される。
セレクタ661には、6ビットの復号途中結果D641と6ビットの値D663(|vi'|)が供給される。また、セレクタ661には、第1の演算と第2の演算のうち一方の選択を表す選択信号D643が供給される。セレクタ661は、選択信号D643に基づいて、復号途中結果D641と値D663のうち一方を選択し、その一方を値D664として、加算器662に供給する。ここでは、選択信号D643は、第2の演算の選択を表しているので、セレクタ661は、値D663(|vi'|)を、値D664として加算器662に供給する。
積算部701の加算器662は、値D664(|vi'|)とレジスタ663に格納されている9ビットの値D665とを加算することにより、値D664を積算し、その結果得られる9ビットの積算値をレジスタ663に再格納する。なお、検査行列の1行に亘る1に対応する復号途中結果D641の絶対値D662(|vi|)に対する値D664が積算された場合レジスタ663はリセットされる。
検査行列の1行に亘る復号途中結果D641(検査行列の各列のすべての復号途中結果D641)が1つずつ読み込まれ、レジスタ663に1行分の値D664が積算された積算値が格納された場合、制御部642から供給される制御信号D583は、0から1に変化する。例えば、行の重みが「9」である場合、制御信号D583は、1から8クロック目までは、「0」となり、9クロック目では「1」となる。
制御信号D583が「1」の場合、セレクタ664は、レジスタ663に格納されている値、即ち、検査行列の1行に亘る1に対応する復号途中結果D641の絶対値(|vi’|)が積算された9ビットの値D665(i=1からi=dcまでのΣ|vi’|)を選択し、値D666として、レジスタ665に出力して格納させる。レジスタ665は、格納している値D666を、9ビットの値D667として、セレクタ664、加算器666、およびセレクタ667に供給する。
制御信号D583が「0」の場合、セレクタ664は、レジスタ665から供給された値D667を選択し、レジスタ665に出力して再格納させる。即ち、検査行列の1行に亘る1に対応する復号途中結果D641の絶対値D664(|vi’|)が積算されるまで、レジスタ665は、前回積算された|vi’|を、セレクタ664、加算器666、およびセレクタ667に供給する。
加算器666では、レジスタ665から値D667が供給されるとともに、受信データ用メモリ544から受信データD544が供給される。加算器666は、値D667に、受信データ用メモリ544から供給された受信データD544を加算して、その結果得られる値D668をセレクタ667に供給する。
セレクタ667には、加算器666から値D668が供給されるとともに、レジスタ665から値D667が供給される。また、セレクタ667には、制御部642から、第1の演算と第2の演算のうち一方の選択を表す選択信号D643が供給される。セレクタ667は、選択信号D643に基づいて、値D668と値D667のうち一方を選択し、その選択した値を、値D669として、減算器671に供給する。ここでは、選択信号D643は、第1の演算の選択を表しているので、セレクタ667は、値D667を選択し、値D669として減算器671に供給する。
一方、FIFOメモリ669は、レジスタ665から新たな値D667(i=1からi=dCまでのΣ|vi’|)が出力されるまでの間、メモリ640から供給された5ビットの復号途中結果D641の絶対値D662(|vi’|)を遅延し、5ビットの値D670として出力する。その値D670において、1ビットの値である“0”が最上位ビットに付加されることにより、ビット拡張が行われ、そのビット拡張の結果である6ビットの値D671(|vi’|)が、セレクタ670に供給される。
以上の処理と並行して、乗算部702のEXOR回路673は、レジスタ674に格納されている1ビットの値D673と符号ビットD661(sign(vi’))との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、1ビットの乗算結果D672をレジスタ674に再格納する。なお、検査行列の1行に亘る1に対応する復号途中結果D641の符号ビットD661が乗算された場合、レジスタ674はリセットされる。
検査行列の1行に亘る1に対応する復号途中結果D641の符号ビットD661が乗算された乗算結果D672がレジスタ674に格納された場合、制御部642から供給される制御信号D583は、「0」から「1」に変化する。
制御信号D583が「1」の場合、セレクタ675は、レジスタ674に格納されている値、即ち、検査行列の1行に亘る1に対応する復号途中結果D641の符号ビットD661が乗算された値D673(i=1からi=dcまでのΠsign(vi’))を選択し、1ビットの値D674としてレジスタ676に出力して格納させる。レジスタ676は、格納している値D674を、1ビットの値D675として、セレクタ675とEXOR回路679に供給する。
制御信号D583が「0」の場合、セレクタ675は、レジスタ676から供給された値D675を選択し、レジスタ676に出力して再格納させる。即ち、検査行列の1行に亘る1に対応する復号途中結果D641の符号ビットD661が乗算されるまで、レジスタ676は、前回格納した値を、セレクタ675とEXOR回路679に供給する。
一方、FIFOメモリ678は、レジスタ676から新たな値D675がEXOR回路679に供給されるまでの間、符号ビットD661を遅延し、1ビットの値D676として、出力する。FIFOメモリ678から出力された1ビットの値D676を最上位ビットとするとともに、FIFOメモリ669から出力された5ビットの値D670を下位5ビットとした合計6ビットの値D678は、セレクタ670に供給される。また、1ビットの値D676は、EXOR回路679に供給される。
セレクタ670には、FIFOメモリ669から6ビットの値D671(|vi’|)が供給されるとともに、6ビットの値D678が供給される。また、セレクタ670には、制御部642から選択信号D643が供給される。セレクタ670は、第1の演算または第2の演算のうち一方の選択を表す選択信号D643に基づいて、値D671と値D678のうち一方を選択し、その選択した値を値D679として減算器671に供給する。ここでは、選択信号D643は、第2の演算の選択を表しているので、値D671(|vi’|)を値D679として、減算器671に出力する。
減算器671は、セレクタ667から供給された9ビットの値D669から、セレクタ670から供給された6ビットの値D679を減算し、その減算結果を、6ビットの減算値D680として出力する。即ち、減算器671は、検査行列の1行に亘る1に対応する復号途中結果D641の絶対値D662 (|vi’|)の積算値から、検査行列の所定の1に対応する復号途中結果D641の絶対値(|vi’|)を減算して、その減算値(i=1からi=dc−1までのΣ|vi’|)を6ビットの減算値D680として出力する。即ち、減算器671では、検査行列の1行に亘る1に対応する復号途中結果D641の絶対値D662のうち、検査行列の所定の1に対応する復号途中結果D641以外の全てが積算された値が減算値D681として出力される。出力された減算値D680は、その下位5ビットが値D681として、LUT672に供給され、最上位ビットが符号ビットD683として、セレクタ680に供給される。ここでいう「所定の1」に対応する復号結果とは、式(9)の演算によりメッセージujを求めたい枝からのメッセージに対応するvi’である。
LUT672は、値D681(i=1からi=dc−1までのΣ(vi’))に対してφ-1の演算を行った5ビットの演算結果D682(φ-1(Σ(vi’)))を出力する。即ち、LUT672では、値D681に対してφの逆関数であるφ-1の関数を用いて変換された値が読み出され、演算結果D682として出力される。
即ち、φは、φ=φ-1となる関数だから、φのLUTを、φ-1のLUTとしても使える。即ち、φ=φ-1のLUTは共有化できる。
一方、EXOR回路679は、レジスタ676から供給された1ビットの値D675と、FIFOメモリ678から供給された1ビットの値D676との排他的論理和を演算することにより、値D675を、値D676で除算し、1ビットの除算結果を除算値D684として、セレクタ680に供給する。即ち、EXOR回路679は、検査行列の1行に亘る1に対応する復号途中結果D641の符号ビットD661の乗算値(i=1からi=dcまでのΠsign(vi’))を、検査行列の所定の1に対応する復号途中結果D641の符号ビットD661で除算して、その除算値を除算値D684(i=1からi=dc−1までのΠsign(vi’))として、セレクタ680に供給する。即ち、EXOR回路679では、検査行列の1行に亘る1に対応する復号途中結果D641の符号ビットD661のうち、検査行列の所定の1に対応する符号ビットD661以外のすべてが乗算された値が、除算値D684として出力される。ここでいう「所定の1」に対応する復号途中結果D641とは、式(9)の演算(第2の演算)によりメッセージujを求めたい枝からのメッセージに対応するvi’である。
セレクタ680には、減算器671から供給された1ビットの符号ビットD683が供給されるとともに、EXOR回路679から1ビットの除算値D684が供給される。また、セレクタ680には、制御部642から選択信号D643が供給される。セレクタ680は、第1の演算または第2の演算のうち一方の選択を表す選択信号D643に基づいて、符号ビットD683と除算値D684のうち一方を選択し、その選択した1ビットの値をD685として、出力する。ここでは、選択信号は、第2の演算の選択を表しているので、除算値D684(i=1からi=dc−1までのΠsign(vi’))を、値D685として出力する。
LUT672から出力された5ビットの演算結果D682を下位5ビットとするとともに、セレクタ680から出力された1ビットの値D685を最上位ビットとする合計6ビットの復号途中結果D642(uj)が出力される。即ち、演算結果D682と値D685が乗算され、検査行列の検査行列の所定の1に対応する第2の演算結果である6ビットの復号結果D642(uj)が出力される。
以上のように、制御部642により、計算器6411で行う演算として、第2の演算が選択された場合、計算器6411では、式(9)の演算が行われ、復号途中結果ujが求められる。
上述したように、計算器6411では、第1の演算の結果である復号途中結果vi’と第2の演算の結果である復号途中結果ujを出力して、メモリ640に格納させることにより、LUTを共有化することができ、ノード計算器581k(K=1,2・・・5)に比べて、計算器6411の回路規模を小さくすることができる。また、計算器6411では、φとφ-1のLUTを1つのLUT672に共有化することができるので、図28のノード計算器581kに比べて、効率よく演算を行うことができる。
なお、計算器6411では、第2の演算が行われるときには、検査行列の各行の行の重みに基づいて、FIFOメモリ669とFIFOメモリ678における遅延量が、その行の重みの値に減らされ、第1の演算が行われるときには、検査行列の各列の列の重みに基づいて、FIFOメモリ669とFIFOメモリ678における遅延量が、その列の重みの値に減らされる。
また、図31の計算器6411では、LUT672は、出力側に設けたが、入力側、即ち、セレクタ661の前段に設けてもよい。
図32は、図31の復号装置630の復号処理を説明するフローチャートである。この処理は、例えば、受信データ用メモリ544に復号すべき受信データが格納されたとき、開始される。
ステップS141において、制御部642は、第1の演算と第2の演算のうち、いま、演算を行う演算として、第1の演算を選択し、その選択を表す選択信号D643を、計算部641に供給する。
ステップS141の処理後は、ステップS142に進み、計算部641は、ステップS141で制御部642から供給された選択信号D643に基づいて、第1の演算と第2の演算のうち、いま計算部641で行う演算として、第1の演算を選択し、第1の演算を行う。
具体的には、計算部641には、メモリ640から、後述するステップS149で格納された5つの復号途中結果D640(復号途中結果uj)が供給されるとともに、受信データ用メモリ544から5つの受信データD544(受信値u0i)が供給され、復号途中結果D640と受信データD544が、計算部641の計算器6411乃至6415のそれぞれに1つずつ供給される。また、計算部641には、制御部642から制御信号D583と選択信号D643が供給される。
なお、受信用メモリ544から供給された受信データD544に対して、まだ第2の演算が行われておらず、メモリ640に復号途中結果D640(D641)が格納されていない場合、メモリ640は、復号途中結果D640を計算部641に供給せず、計算部641は、復号途中結果ujを初期値に設定する。
計算器6411乃至6415は、選択信号D643に基づいて、いま行う演算を選択する。即ち、ここでは、制御部642から供給される選択信号D643は、第1の演算の選択を表しているので、計算器6411乃至6415は、第1の演算を行う。つまり、計算器6411乃至6415は、復号途中結果D640と受信データD544とを用いて、制御信号D583に基づいて、式(9)にしたがって、それぞれ演算を行い、その演算の結果である復号途中結果D642(vi)を得る。
前述の図31で説明したように、計算器6411乃至6415は、選択信号D643に基づいて、いま行う演算を選択し、メモリ640から必要な復号途中結果D640を、それぞれ1つずつ読み出すとともに、受信データ用メモリ544から必要な受信データD544を1つずつ読み出して、第1の演算を行い、その演算の結果である復号途中結果D642を得る。
ステップS142の処理後は、ステップS143に進み、計算部641は、第1の演算の結果得られる5つの復号途中結果D642を、サイクリックシフト回路551に供給し、ステップS144に進む。
ステップS144において、サイクリックシフト回路551は、計算部641から供給された5つの復号途中結果D642を、サイクリックシフトし、その結果である5つの復号途中結果D640をメモリ640の既に読みだされた復号途中結果(D641)のアドレスに格納する。なお、5つの復号途中結果D640は、同一のアドレスに格納される。
ステップS144の処理後は、ステップS145に進み、制御部642は、計算部641により、全ての復号途中結果が演算されたかどうか、即ち、図22の検査行列Hの“1”の数分の復号途中結果が演算されたかどうかを判定し、全ての復号途中結果が演算されていないと判定した場合、ステップS142に戻り、上述した処理を繰り返す。
一方、ステップS145において、制御部642は、計算部641により、全ての復号途中結果が演算されたと判定した場合、ステップS146に進み、制御部642は、いま、演算を行う演算として、第2の演算を選択し、ステップS141で生成した第1の演算の選択を表す選択信号D643を、第2の演算の選択を表す選択信号D643に変更する。
ステップS146の処理後は、ステップS147に進み、計算部641は、ステップS146で変更された選択信号D643に基づいて、第1の演算と第2の演算のうち、いま行う演算として、第2の演算を選択し、第2の演算を行う。
具体的には、計算部641には、メモリ640から、ステップS144で格納された5つの復号途中結果D640が、復号途中結果D641として供給され、復号途中結果D641が、計算部641の計算器6411乃至6415のそれぞれに1つずつ供給される。
計算器6411乃至6415は、ステップS146で変更された選択信号D643に基づいて、いま行う演算を選択する。即ち、ここでは、選択信号D643は、第2の演算の選択を表しているので、計算器6411乃至6415は、第2の演算を行う。つまり、計算器6411乃至6415は、復号途中結果D641を用いて、制御信号D583に基づいて、式(1)と式(8)にしたがって、それぞれ演算を行い、その演算の結果である復号途中結果D642(uj)を得る。
前述の図31で説明したように、計算器6411乃至6415は、選択信号D643に基づいて、いま行う演算を選択し、メモリ640ら必要な復号途中結果D641を、それぞれ1つずつ読み出しながら、第2の演算を行い、その演算の結果である復号途中結果D642を得る。
ステップS147の処理後は、ステップS148に進み、計算部641は、第2の演算の結果得られる5つの復号途中結果D642を、サイクリックシフト回路551に供給し、ステップS149に進む。
ステップS149において、サイクリックシフト回路551は、計算部641から供給された5つの復号途中結果D642を、サイクリックシフトし、その結果を5つの復号途中結果D640として、メモリ640の既に読みだされた復号途中結果(D641)のアドレスに格納する。なお、5つの復号途中結果D640は、同一のアドレスに格納される。
ステップS149の処理後は、ステップS150に進み、制御部642は、計算部641により、全ての復号途中結果が演算されたかどうかを判定し、全ての復号途中結果が演算されていないと判定した場合、ステップS147に戻り、上述した処理を繰り返す。
一方、ステップS150において、制御部642は、計算部641により、全ての復号途中結果が演算されたと判定した場合、処理を終了する。
なお、復号装置630は、復号回数だけ図32の復号処理を繰り返し行ない、メモリ640に、最後の第1の演算の結果得られる復号途中結果D642(uj)が格納された場合、その復号途中結果D642(uj)を上述した式(5)の演算を行う不図示のブロックに供給する。不図示のブロックには、さらに受信データ用メモリ544から受信データD544が供給され、不図示のブロックは、復号途中結果D642と受信データD544を用いて、式(5)の演算を行い、その演算結果を最終的な復号結果として出力する。
図33は、図31の計算器6411の第1の演算処理を説明するフローチャートである。なお、図33のフローチャートは、図32のステップS142の第1の演算の処理を詳細に説明するフローチャートである。
図33では、図31の計算器6411の処理について説明するが、タの計算器6412乃至計算器6415でも同様の処理が行なわれる。
ステップS161において、積算部701は、復号途中結果D641(uj)を積算する。
具体的には、積算部701の加算器662は、メモリ640から供給される6ビットの値D641(uj)と、レジスタ663に格納されている9ビットの値D665とを加算することにより、値D641を積算し、その結果得られる9ビットの積算値(第1の積算値)をレジスタ663に再格納する。
検査行列の1列に亘る復号途中結果D641(検査行列の各行の1に対応するすべての復号途中結果D641)が1つずつ読み込まれ、レジスタ663に1列分の値D641が積算された積算値(j=1からj=dvまでのΣuj)が格納された場合、制御部642から供給される制御信号D583は、0から1に変化する。
制御信号D583が「1」の場合、セレクタ664は、レジスタ663に格納されている値、即ち、検査行列の1列に亘る1に対応する復号途中結果D641(復号途中結果uj)が積算された9ビットの値D665(j=1からj=dvまでのΣuj)を選択し、値D666として、レジスタ665に出力して格納させる。レジスタ665は、格納している値D666を、9ビットの値D667として、セレクタ664と加算器666に供給する。
制御信号D583が「0」の場合、セレクタ661は、レジスタ665から供給された値D667を選択し、レジスタ665に出力して再格納させる。即ち、検査行列の1列に亘る1に対応する復号途中結果D641(復号途中結果uj)が積算されるまで、レジスタ665は、前回積算されたujを、セレクタ664と加算器666に供給する。
ステップS161の処理後は、ステップS162に進み、加算器666は、ステップS161で求められた積算値である値D667と、受信データ用メモリ544から供給される受信データD544(LDPC符号)とを加算して、値D666(加算値)を求め、セレクタ667を介して、減算器671に供給する。
ステップS162の処理後は、ステップS163に進み、減算器671は、加算器666から供給された値D669(値D667)から、検査行列の所定の1に対応する復号途中結果D641(uj)を減算して、その減算値(j=1からj=dv−1までのΣujと受信値u0iの加算値、即ち、vi)を6ビットの減算値D680(第1の減算値)として出力する。
具体的には、FIFOメモリ669は、レジスタ665から新たな値D667(j=1からj=dvまでのΣuj)が出力されるまでの間、メモリ640から供給された5ビットの復号途中結果D641の絶対値(|uj|)を遅延し、5ビットの値D670として出力する。
一方、FIFOメモリ678は、レジスタ676から新たな値D675がEXOR回路679に供給されるまでの間、メモリ640から供給される復号途中結果D641の符号ビットD661(sign(uj))を遅延し、1ビットの値D676として、出力する。
FIFOメモリ678から出力された1ビットの値D676(sign(uj))を最上位ビットとするとともに、FIFOメモリ669から出力された5ビットの値D670(|uj|)を下位5ビットとした合計6ビットの値D678(uj)は、セレクタ670を介して、減算器671に供給される。
減算器671は、セレクタ667を介して、レジスタ665から供給された9ビットの値D669から、セレクタ670を介して供給された6ビットの値D679を減算し、その減算結果を、6ビットの減算値D680として出力する。即ち、減算器671は、検査行列の1列に亘る1に対応する復号途中結果D641(復号途中結果uj)の積算値と受信データD643(受信値u0i)との加算値から、検査行列の所定の1に対応する復号途中結果D641(uj)を減算して、その減算値(j=1からj=dv−1までのΣujと受信値u0iの加算値、即ち、vi)を6ビットの減算値D680として出力する。即ち、減算器671では、検査行列の各列の1に対応する復号結果のうち、検査行列の所定の1に対応する復号結果以外のすべてを積算した値と、受信データD544を加算した値が減算値D680として出力される。ここでいう「所定の1」に対応する復号結果とは、式(1)と式(8)の演算によりメッセージvi’を求めたい枝からのメッセージに対応するujである。
そして、出力された減算値D680は、その下位5ビットを値D681(|vi|)として、LUT672に供給され、上位1ビットを符号ビットD683(sign(vi))として、セレクタ680を介して出力される。
ステップS163の処理後は、ステップS164に進み、LUT672は、減算器671から供給される減算値D680の下位5ビット(絶対値)である値D681(|vi|)に対して、φの関数を用いて変換した変換値(第1の変換値)を読み出し、出力する。即ち、LUT672は、値D681に対してφの演算を行った5ビットの演算結果D682(φ(|vi|))を出力する。
ステップS164の処理後は、ステップS165に進み、計算器6411では、LUT672から出力された5ビットの演算結果D682(φ(|vi|)と、セレクタ680から出力された1ビットの値D685(sign(vi))が乗算され、検査行列の所定の1に対応する第1の演算結果である復号途中結果D642として出力される。即ち、計算器6411では、5ビットの演算結果D682(φ(|vi|)を下位5ビットとするとともに、1ビットの値D685(sign(vi))を最上位ビットとする合計6ビットの復号途中結果D642(復号途中結果vi’)(第2の乗算値)が出力される。そして、計算器6411は処理を終了する。
以上のように、計算器6411では、式(1)と式(8)の演算が行われ、復号途中結果vi’が求められる。
図34は、図30の計算器6411の第2の演算処理を説明するフローチャートである。なお、図33のフローチャートは、図32のステップS147の第2の演算の処理を詳細に説明するフローチャートである。
図33では、図31の計算器6411の処理について説明するが、他の計算器6412乃至計算器6415でも同様の処理が行なわれる。
ステップS181において、積算部701は、メモリ640から供給される復号途中結果viの絶対値|vi|を積算する。
具体的には、計算器6411では、検査行列の各列の1に対応する6ビットの復号途中結果D641(復号途中結果vi’)が1つずつ読み込まれ、その下位ビットである絶対値D662(|vi’|)がFIFOメモリ669に供給されるとともに、その絶対値D662において、1ビットの値である“0”が最上位ビットに付加されることにより、ビット拡張が行われ、そのビット拡張の結果である6ビットの値D663が、セレクタ661を介して、積算部701の加算器662に供給される。
積算部701の加算器662は、値D664(D663(|vi’|))とレジスタ663に格納されている9ビットの値D665とを加算することにより、値D664を積算し、その結果得られる9ビットの積算値(第2の積算値)をレジスタ663に再格納する。
検査行列の1行に亘る復号途中結果D641(検査行列の各列のすべての復号途中結果D641)が1つずつ読み込まれ、レジスタ663に1行分の値D664が積算された積算値が格納された場合、制御部642から供給される制御信号D583は、0から1に変化する。
制御信号D583が「1」の場合、セレクタ664は、レジスタ663に格納されている値、即ち、検査行列の1行に亘る1に対応する復号途中結果D641の絶対値(|vi’|)が積算された9ビットの値D665(i=1からi=dcまでのΣ|vi’|)を選択し、値D666として、レジスタ665に出力して格納させる。レジスタ665は、格納している値D666を、9ビットの値D667として、セレクタ664に供給するとともに、セレクタ667を介して減算器671に供給する。
制御信号D583が「0」の場合、セレクタ664は、レジスタ665から供給された値D667を選択し、レジスタ665に出力して再格納させる。即ち、検査行列の1行に亘る1に対応する復号途中結果D641の絶対値D664(|vi’|)が積算されるまで、レジスタ665は、前回積算された|vi’|を、セレクタ664に供給するとともに、セレクタ667を介して減算器671に供給する。
ステップS181の処理後は、ステップS182に進み、減算器671は、セレクタ667を介して、レジスタ665から供給された9ビットの値D669から、所定の復号途中結果vi’の絶対値|vi’|を減算し、その減算結果を、6ビットの減算値D680(第2の減算値)として出力する。
具体的には、FIFOメモリ669は、レジスタ665から新たな値D667(i=1からi=dCまでのΣ|vi’|)が出力されるまでの間、メモリ640から供給された5ビットの復号途中結果D641の絶対値D662(|vi’|)を遅延し、5ビットの値D670として出力する。その値D670において、1ビットの値である“0”が最上位ビットに付加されることにより、ビット拡張が行われ、そのビット拡張の結果である6ビットの値D671(|vi’|)が、セレクタ670を介して、減算器671に供給される。
減算器671は、レジスタ665から供給された検査行列の1行に亘る1に対応する復号途中結果D641の絶対値D662(|vi’|)の積算値から、FIFOメモリ669から供給された検査行列の所定の1に対応する復号途中結果D641の絶対値(|vi’|)を減算して、その減算値(i=1からi=dc−1までのΣ|vi’|)を6ビットの減算値D680として出力する。即ち、減算器671では、検査行列の1行に亘る1に対応する復号途中結果D641の絶対値D662のうち、検査行列の所定の1に対応する復号途中結果D641以外の全てが積算された値が減算値D681として出力される。ここでいう「所定の1」に対応する復号結果とは、式(9)の演算によりメッセージujを求めたい枝からのメッセージに対応するvi’である。
そして、出力された減算値D680は、その下位5ビットである絶対値が値D681として、LUT672に供給される。
ステップS182の処理後は、ステップS183に進み、LUT672は、減算器671から供給される減算値D680の絶対値である値D681(i=1からi=dc−1までのΣ(vi’))に対して、φの逆関数であるφ-1の関数を用いて変換された値(第2の変換値)が読み出され、φ-1の演算を行った5ビットの演算結果D682(φ-1(Σ(vi’)))を出力する。即ち、LUT672は、値D681(i=1からi=dc−1までのΣ(vi’))に対してφ-1の演算を行った5ビットの演算結果D682(φ-1(Σ(vi’)))を出力する。
ステップS183の処理後は、ステップS184に進み、乗算部702は、復号途中結果vi’の符号ビットを乗算する。
具体的には、計算器6411では、復号途中結果D641の最上位ビットである符号ビットD661(sign(vi’))がEXOR回路673とFIFOメモリ678にそれぞれ供給される。そして、乗算部702のEXOR回路673は、レジスタ674に格納されている1ビットの値D673と符号ビットD661(sign(vi’))との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、1ビットの乗算結果D672をレジスタ674に再格納する。
検査行列の1行に亘る1に対応する復号途中結果D641の符号ビットD661が乗算された乗算結果D672がレジスタ674に格納された場合、制御部642から供給される制御信号D583は、「0」から「1」に変化する。
制御信号D583が「1」の場合、セレクタ675は、レジスタ674に格納されている値、即ち、検査行列の1行に亘る1に対応する復号途中結果D641の符号ビットD661が乗算された値D673(i=1からi=dcまでのΠsign(vi’))を選択し、1ビットの値D674としてレジスタ676に出力して格納させる。レジスタ676は、格納している値D674を、1ビットの値D675として、セレクタ675とEXOR回路679に供給する。
制御信号D583が「0」の場合、セレクタ675は、レジスタ676から供給された値D675を選択し、レジスタ676に出力して再格納させる。即ち、検査行列の1行に亘る1に対応する復号途中結果D641の符号ビットD661が乗算されるまで、レジスタ676は、前回格納した値を、セレクタ675とEXOR回路679に供給する。
ステップS184の処理後は、ステップS185に進み、EXOR回路679は、レジスタ676から供給された1ビットの値D675、所定の復号途中結果vi’の符号ビットsign(vi’)を除算し、その除算結果を、1ビットの除算値D684(符号乗算値)として、セレクタ680を介して出力する。
即ち、FIFOメモリ678は、レジスタ676から新たな値D675がEXOR回路679に供給されるまでの間、符号ビットD661を遅延し、1ビットの値D676として、EXOR回路679に供給する。
EXOR回路679は、レジスタ676から供給された1ビットの値D675と、FIFOメモリ678から供給された1ビットの値D676との排他的論理和を演算することにより、値D675を、値D676で除算し、1ビットの除算結果を除算値D684として、セレクタ680に供給する。即ち、EXOR回路679は、検査行列の1行に亘る1に対応する復号途中結果D641の符号ビットD661の乗算値(i=1からi=dcまでのΠsign(vi’))を、検査行列の所定の1に対応する復号途中結果D641の符号ビットD661で除算して、その除算値を除算値D684(i=1からi=dc−1までのΠsign(vi’))として、セレクタ680に供給する。即ち、EXOR回路679では、検査行列の1行に亘る1に対応する復号途中結果D641の符号ビットD661のうち、検査行列の所定の1に対応する符号ビットD661以外のすべてが乗算された値が、除算値D684として、セレクタ680を介して出力される。ここでいう「所定の1」に対応する復号結果とは、式(9)の演算によりメッセージujを求めたい枝からのメッセージに対応するvi’である。
ステップS185の処理後は、ステップS186に進み、計算器6411では、即ち、LUT672から出力された5ビットの演算結果D682と、EXOR回路679からセレクタ680を介して出力された1ビットの値D685とが乗算され、検査行列の所定の1に対応する第2の演算結果である6ビットの復号結果D642(uj)として出力される。即ち、5ビットの演算結果D682を下位5ビットとするとともに、1ビットの値D685を最上位ビットとする合計6ビットの復号途中結果D642(uj)(第1の乗算値)が出力される。そして、計算器6411は処理を終了する。
以上のように、計算器6411では、式(9)の演算が行われ、復号途中結果ujが求められる。
なお、上述したサイクリックシフト回路には、バレルシフタを用いると回路規模を小さくしながら所望の操作を実現できる。
また、FIFOやRAMの物理的なビット幅が足りない場合には、複数のRAMを用いて同じ制御信号を与えることで、論理的に1つのRAMとみなすことができる。
さらに、上述の場合には、説明を簡単にするために、Pが5の場合、即ち、検査行列を構成する構成行列の行数および列数が5の場合を例に挙げたが、構成行列の行数および列数Pは必ずしも5である必要はなく、検査行列によって異なる値を取ることもあり得る。例えば、Pは360や392であってもよい。
また、本実施の形態では、符号長90、符号化率2/3のLDPC符号を用いたが、LDPC符号の符号長や符号化率は、幾つであっても構わない。例えば、構成行列の行数および列数Pが5の場合、枝総数が5以下であれば、どのような符号長、符号化率のLDPC符号でも、制御信号を代えるだけで、図24の復号装置530、図26の復号装置570、図28の復号装置600、図30の復号装置630を用いて復号可能である。
さらに、構成行列の行数および列数Pが所定の値で、枝の総数がある値以下、という条件を満たすあるLDPC符号の復号装置は、その条件を満たす、任意の符号長で、任意の符号化率のLDPC符号を復号することができる。
検査行列が、構成行列の行数および列数Pの倍数でない場合は、検査行列の端数の外側にすべて0(all 0)の成分を付けてPの倍数とみなして適用できることがある。
また、本実施の形態では、検査行列は構成行列から構成したが、検査行列は、構成行列から構成されなくてもよい。
次に、上述した一連の処理は、ハードウェアにより行うこともできるし、ソフトウェアにより行うこともできる。一連の処理をソフトウェアによって行う場合には、そのソフトウェアを構成するプログラムが、汎用のコンピュータ等にインストールされる。
そこで、図34は、上述した一連の処理を実行するプログラムがインストールされるコンピュータの一実施の形態の構成例を示している。
プログラムは、コンピュータに内蔵されている記録媒体としてのハードディスク905やROM903に予め記録しておくことができる。
あるいはまた、プログラムは、フレキシブルディスク、CD-ROM(Compact Disc Read Only Memory),MO(Magneto Optical)ディスク,DVD(Digital Versatile Disc)、磁気ディスク、半導体メモリなどのリムーバブル記録媒体911に、一時的あるいは永続的に格納(記録)しておくことができる。このようなリムーバブル記録媒体911は、いわゆるパッケージソフトウエアとして提供することができる。
なお、プログラムは、上述したようなリムーバブル記録媒体911からコンピュータにインストールする他、ダウンロードサイトから、ディジタル衛星放送用の人工衛星を介して、コンピュータに無線で転送したり、LAN(Local Area Network)、インターネットといったネットワークを介して、コンピュータに有線で転送し、コンピュータでは、そのようにして転送されてくるプログラムを、通信部908で受信し、内蔵するハードディスク905にインストールすることができる。
コンピュータは、CPU(Central Processing Unit)902を内蔵している。CPU902には、バス901を介して、入出力インタフェース910が接続されており、CPU902は、入出力インタフェース910を介して、ユーザによって、キーボードや、マウス、マイク等で構成される入力部907が操作等されることにより指令が入力されると、それにしたがって、ROM(Read Only Memory)903に格納されているプログラムを実行する。あるいは、また、CPU902は、ハードディスク905に格納されているプログラム、衛星若しくはネットワークから転送され、通信部908で受信されてハードディスク905にインストールされたプログラム、またはドライブ909に装着されたリムーバブル記録媒体911から読み出されてハードディスク905にインストールされたプログラムを、RAM(Random Access Memory)904にロードして実行する。これにより、CPU902は、上述したフローチャートにしたがった処理、あるいは上述したブロック図の構成により行われる処理を行う。そして、CPU902は、その処理結果を、必要に応じて、例えば、入出力インタフェース910を介して、LCD(Liquid Crystal Display)やスピーカ等で構成される出力部906から出力、あるいは、通信部908から送信、さらには、ハードディスク905に記録等させる。
ここで、本明細書において、コンピュータに各種の処理を行わせるためのプログラムを記述する処理ステップは、必ずしもフローチャートとして記載された順序に沿って時系列に処理する必要はなく、並列的あるいは個別に実行される処理(例えば、並列処理あるいはオブジェクトによる処理)も含むものである。
また、プログラムは、1のコンピュータにより処理されるものであっても良いし、複数のコンピュータによって分散処理されるものであっても良い。さらに、プログラムは、遠方のコンピュータに転送されて実行されるものであっても良い。
LDPC符号の検査行列Hを説明する図である。 LDPC符号の復号手順を説明するフローチャートである。 メッセージの流れを説明する図である。 LDPC符号の検査行列の例を示す図である。 検査行列のタナーグラフを示す図である。 バリアブルノードを示す図である。 チェックノードを示す図である。 LDPC符号の検査行列の例を示す図である。 ノード演算を1つずつ行うLDPC符号の復号装置の構成例を示すブロック図である。 メッセージを1つずつ計算するチェックノード計算器の構成例を示すブロック図である。 メッセージを1つずつ計算するバリアブルノード計算器の構成例を示すブロック図である。 ノード演算を全て同時に行うLDPC符号の復号装置の構成例を示すブロック図である。 メッセージを同時に計算するチェックノード計算器の構成例を示すブロック図である。 メッセージを同時に計算するバリアブルノード計算器の構成例を示すブロック図である。 本発明を適用した復号装置の一実施の形態の構成例を示すブロック図である。 図15の復号装置の復号処理を説明するフローチャートである。 本発明を適用した復号装置の他の一実施の形態の構成例を示すブロック図である。 図17の復号装置のノード計算器の詳細構成例を示すブロック図である。 図17の復号装置の復号処理を説明するフローチャートである。 本発明を適用した復号装置の他の一実施の形態の構成例を示すブロック図である。 図20の復号装置の復号処理を説明するフローチャートである。 LDPC符号の検査行列の例を示す図である。 復号装置の構成例を示すブロック図である。 本発明を適用した復号装置の他の一実施の形態の構成例を示すブロック図である。 図24の復号装置の復号処理を説明するフローチャートである。 本発明を適用した復号装置の他の一実施の形態の構成例を示すブロック図である。 図26の復号装置の復号処理を説明するフローチャートである。 本発明を適用した復号装置の他の一実施の形態の構成例を示すブロック図である。 図28の復号装置の復号処理を説明するフローチャートである。 本発明を適用した復号装置の他の一実施の形態の構成例を示すブロック図である。 図30の計算器の詳細構成例を示すブロック図である。 図30の復号装置の復号処理を説明するフローチャートである。 図31の計算器の第1の演算処理を説明するフローチャートである。 図31の計算器の第2の演算処理を説明するフローチャートである。 本発明を適用したコンピュータの一実施の形態の構成例を示すブロック図である。
符号の説明
300 復号装置, 310 枝用メモリ, 311 スイッチ, 312 バリアブルノード計算器, 313 チェックノード計算器, 314 セレクタ, 315 受信用メモリ, 316制御部, 340 復号装置, 350 スイッチ, 351 枝用メモリ, 352 枝用メモリ, 353 セレクタ, 354 ノード計算器, 355 受信用メモリ, 356 制御部, 430 復号装置, 440 枝用メモリ, 441 ノード計算器, 442 受信用メモリ, 443 制御部, 530 復号装置, 540 スイッチ, 541 スイッチ, 542 枝データ格納メモリ, 543 セレクタ, 544 受信データ用メモリ, 545 バリアブルノード計算部, 546 スイッチ, 547 枝データ格納メモリ, 548 セレクタ, 549 チェックノード計算部, 550 セレクタ, 551 サイクリックシフト回路, 552 制御部, 570 復号装置, 580 セレクタ, 581 ノード計算部, 582 制御部, 600 復号装置, 610 枝用メモリ, 611 制御部, 630 復号装置, 640 メモリ, 641 計算部, 642 制御部, 901 バス, 902 CPU, 903 ROM, 904 RAM, 905 ハードディスク, 906 出力部, 907 入力部, 908 通信部, 909 ドライブ, 910 入出力インタフェース, 911 リムーバブル記録媒体

Claims (2)

  1. LDPC(Low Density Parity Check)符号の復号のためのチェックノードの演算を、必要な第1のメッセージを用いて行うチェックノード計算手段と、
    前記LDPC符号の復号のためのバリアブルノードの演算を、LDPC符号のデータであるLDPC符号データと必要な第2のメッセージを用いて行うバリアブルノード計算手段と、
    前記第1のメッセージを用いた前記チェックノード計算の結果得られる第3のメッセージを記憶する第1の記憶手段と、
    前記LDPC符号データと前記第2のメッセージとを用いた前記バリアブルノード計算の結果得られる第4のメッセージを記憶する第2の記憶手段と
    を備え、
    前記第1の記憶手段と前記第2の記憶手段が、1つの記憶手段に共有化され
    前記チェックノード計算手段は、共有化されている記憶手段に記憶されている前記第4のメッセージを用いて前記チェックノードの演算を行い、
    前記第1の記憶手段は、前記第4のメッセージを用いた前記チェックノード計算の結果得られる第5のメッセージを記憶し、
    前記バリアブルノード計算手段は、共有化されている記憶手段に記憶されている前記第5のメッセージと前記LDPC符号データとを用いてバリアブルノードの演算を行い、
    前記第2の記憶手段は、前記LDPC符号データと前記第5のメッセージとを用いた前記バリアブルノード計算の結果得られる第6のメッセージを記憶する
    ことを特徴とする復号装置。
  2. 請求項1に記載の復号装置であって、
    さらに、前記チェックノード計算手段と前記バリアブルノード計算手段が、1つのノード計算手段に共有化されている
    ことを特徴とする復号装置。
JP2003294894A 2003-08-19 2003-08-19 復号装置 Expired - Fee Related JP4284600B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003294894A JP4284600B2 (ja) 2003-08-19 2003-08-19 復号装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003294894A JP4284600B2 (ja) 2003-08-19 2003-08-19 復号装置

Publications (2)

Publication Number Publication Date
JP2005065065A JP2005065065A (ja) 2005-03-10
JP4284600B2 true JP4284600B2 (ja) 2009-06-24

Family

ID=34371293

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003294894A Expired - Fee Related JP4284600B2 (ja) 2003-08-19 2003-08-19 復号装置

Country Status (1)

Country Link
JP (1) JP4284600B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4729964B2 (ja) * 2005-04-25 2011-07-20 ソニー株式会社 復号装置および復号方法
JP4730592B2 (ja) * 2005-07-11 2011-07-20 ソニー株式会社 復号装置および復号方法
JP4807063B2 (ja) 2005-12-20 2011-11-02 ソニー株式会社 復号装置、制御方法、およびプログラム

Also Published As

Publication number Publication date
JP2005065065A (ja) 2005-03-10

Similar Documents

Publication Publication Date Title
JP4225163B2 (ja) 復号装置および復号方法、並びにプログラム
JP4487213B2 (ja) 復号装置および方法、並びにプログラム
JP4487212B2 (ja) 復号装置および方法、送受信システム、受信装置および方法、並びにプログラム
JP4622654B2 (ja) 復号装置および復号方法
JP4807063B2 (ja) 復号装置、制御方法、およびプログラム
JP4224777B2 (ja) 復号方法および復号装置、並びにプログラム
JP4595650B2 (ja) 復号装置および復号方法
JP4293172B2 (ja) 復号装置および復号方法
JP2007036776A (ja) 復号装置および復号方法
JP4285148B2 (ja) 復号装置および復号方法、並びにプログラム
JP4284600B2 (ja) 復号装置
JP4729964B2 (ja) 復号装置および復号方法
JP2008301152A (ja) 復号装置および方法、並びにプログラム
JP4730592B2 (ja) 復号装置および復号方法
JP4288582B2 (ja) 復号装置および復号方法、並びにプログラム
JP4821724B2 (ja) 復号装置および復号方法
JP4822071B2 (ja) 復号装置および復号方法
JP2007081602A (ja) 復号装置および復号方法
JP2008278187A (ja) 復号装置、制御方法、及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060629

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081202

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090116

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20090226

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090311

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120403

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120403

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees