JP4288582B2 - 復号装置および復号方法、並びにプログラム - Google Patents

復号装置および復号方法、並びにプログラム Download PDF

Info

Publication number
JP4288582B2
JP4288582B2 JP2003290605A JP2003290605A JP4288582B2 JP 4288582 B2 JP4288582 B2 JP 4288582B2 JP 2003290605 A JP2003290605 A JP 2003290605A JP 2003290605 A JP2003290605 A JP 2003290605A JP 4288582 B2 JP4288582 B2 JP 4288582B2
Authority
JP
Japan
Prior art keywords
frame
decoding
message
variable node
calculation
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
JP2003290605A
Other languages
English (en)
Other versions
JP2005064735A (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 JP2003290605A priority Critical patent/JP4288582B2/ja
Publication of JP2005064735A publication Critical patent/JP2005064735A/ja
Application granted granted Critical
Publication of JP4288582B2 publication Critical patent/JP4288582B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Detection And Correction Of Errors (AREA)
  • 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 0004288582
・・・(1)
Figure 0004288582
・・・(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 0004288582
・・・(3)
Figure 0004288582
・・・(4)
ステップS12では、さらに、変数kが"1"だけインクリメントされ、ステップS13に進む。ステップS13では、変数kが所定の繰り返し復号回数N以上であるか否かが判定される。ステップS13において、変数kがN以上ではないと判定された場合、ステップS12に戻り、以下、同様の処理が繰り返される。
また、ステップS13において、変数kがN以上であると判定された場合、ステップS14に進み、式(5)に示す演算を行うことによって最終的に出力する復号結果としてのメッセージviが求められて出力され、LDPC符号の復号処理が終了する。
Figure 0004288582
・・・(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 0004288582
・・・(6)
更に、x≧0において、φ(x)=ln(tanh(x/2))と定義すると、φ-1(x)=2tanh-1(e-x)であるから、式(6)は、式(7)のように書くことができる。
Figure 0004288582
・・・(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の復号装置を繰り返し用いて、LDPC符号の復号を行う場合、1フレームに対するチェックノード演算とバリアブルノード演算とは交互に行われる。即ち、図9の復号装置では、チェックノード計算器101とバリアブルノード計算器103のうちの一方の演算が終了し、その演算結果が枝用メモリ102または100に格納されるまで、チェックノード計算器101とバリアブルノード計算器103のうちの他方は、待機する必要があった。
従って、図9の復号装置では、チェックノード計算器101とバリアブルノード計算器103のうちのどちらか一方が演算を行っている時間には、他方は演算を行わないことになり、必要なスループットを満たした上で、復号回数を増やすためには、復号装置を高速に動作させる必要があった。
しかしながら、復号装置を高速に動作させる場合、復号装置の動作周波数が高くなるため、消費電力が大となり、さらに、装置を構成する部分としても、高速動作に対応することができるものを用いる必要がある。一方、復号装置の動作周波数を抑えるために復号回数を抑えると、復号装置の復号性能を向上させることが困難であった。
本発明は、このような状況に鑑みてなされたものであり、動作周波数および回路規模を抑えつつ、復号性能を向上させることができるようにするものである。
本発明の復号装置は、LDPC符号を符号長であるフレーム単位で復号する復号装置であって、LDPC符号の第1のフレームと第2のフレームを交互に選択する選択手段と、第1のフレームと第2のフレームのうちの、選択手段により選択されていないフレームのLDPC符号の復号のためのチェックノードの演算を行うチェックノード計算手段と、第1のフレームと第2のフレームのうちの、選択手段により選択されたフレームのLDPC符号の復号のためのバリアブルノードの演算を行うバリアブルノード計算手段とを備えることを特徴とする。
第1のフレームと第2のフレームのLDPC符号を記憶するフレーム記憶手段と、フレーム記億手段に記憶された第1のフレームまたは第2のフレームのうちの、選択手段により選択されたフレームのLDPC符号をバリアブルノード計算手段に供給する供給手段とをさらに備えるようにすることができる。
チェックノード計算手段により第1のフレームと第2のフレームのうちの一方のフレームのチェックノードの演算が行われるとき、バリアブルノード計算手段は、他方のフレームのバリアブルノードの演算を行うようにすることができる。
チェックノードの演算、またはバリアブルノードの演算のうちの一方の演算に用いられる枝に対応するメッセージデータの読み出しと、他方の演算の結果得られる枝に対応するメッセージデータの書き込みとが同時に行われるメッセージ記憶手段をさらに備えるようにすることができる。
メッセージ記憶手段は、デュアルポートRAM(Random Access Memory)であるようにすることができる。
第1のフレームと第2のフレームは、連続する2つのフレームであるようにすることができる。
本発明の復号方法は、LDPC符号を符号長であるフレーム単位で復号する復号装置の復号方法であって、LDPC符号の第1のフレームと第2のフレームを交互に選択する選択ステップと、第1のフレームと第2のフレームのうちの、選択ステップの処理により選択されていないフレームのLDPC符号の復号のためのチェックノードの演算を行うチェックノード計算ステップと、第1のフレームと第2のフレームのうちの、選択ステップの処理により選択されたフレームのLDPC符号の復号のためのバリアブルノードの演算を行うバリアブルノード計算ステップとを含むことを特徴とする。
本発明のプログラムは、LDPC符号の符号長であるフレーム単位の復号をコンピュータに行わせるプログラムであって、LDPC符号の第1のフレームと第2のフレームを交互に選択する選択ステップと、第1のフレームと第2のフレームのうちの、選択ステップの処理により選択されていないフレームのLDPC符号の復号のためのチェックノードの演算を行うチェックノード計算ステップと、第1のフレームと第2のフレームのうちの、選択ステップの処理により選択されたフレームのLDPC符号の復号のためのバリアブルノードの演算を行うバリアブルノード計算ステップとを備えることを特徴とする。
本発明においては、それぞれ符号長である、LDPC符号の第1のフレームと第2のフレーム交互に選択される。そして、第1のフレームと第2のフレームのうちの、選択されていないフレームのLDPC符号の復号のためのチェックノードの演算が行われ、第1のフレームと第2のフレームのうちの、選択されたフレームのLDPC符号の復号のためのバリアブルノードの演算が行われる。
本発明によれば、2つのフレームのLDPC符号の復号処理を行なうことができるので、LDPC符号の復号を効率よく行うようにすることができ、また、復号性能を向上させることが可能となる。
以下に本発明の実施の形態を説明するが、請求項に記載の構成要件と、発明の実施の形態における具体例との対応関係を例示すると、次のようになる。この記載は、請求項に記載されている発明をサポートする具体例が、発明の実施の形態に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、構成要件に対応するものとして、ここには記載されていない具体例があったとしても、そのことは、その具体例が、その構成要件に対応するものではないことを意味するものではない。逆に、具体例が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その具体例が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
さらに、この記載は、発明の実施の形態に記載されている具体例に対応する発明が、請求項に全て記載されていることを意味するものではない。換言すれば、この記載は、発明の実施の形態に記載されている具体例に対応する発明であって、この出願の請求項には記載されていない発明の存在、すなわち、将来、分割出願されたり、補正により追加される発明の存在を否定するものではない。
請求項1に記載の復号装置(例えば、図15の復号装置400)は、LDPC(Low Density Parity Check)符号を符号長であるフレーム単位で復号する復号装置であって、前記LDPC符号の第1のフレーム(例えば、奇数フレーム)と第2のフレーム(例えば、偶数フレーム)を交互に選択する選択手段(例えば、図15の制御部401)と、前記第1のフレームと前記第2のフレームのうちの、前記選択手段により選択されていないフレームの前記LDPC符号の復号のためのチェックノードの演算を行うチェックノード計算手段(例えば、図15のチェックノード計算器301)と、前記第1のフレームと前記第2のフレームのうちの、前記選択手段により選択されたフレームの前記LDPC符号の復号のためのバリアブルノードの演算を行うバリアブルノード計算手段(例えば、図15のバリアブルノード計算器303)とを備えることを特徴とする。
請求項2に記載の復号装置は、請求項1に記載の復号装置であって、前記第1のフレームと前記第2のフレームの前記LDPC符号を記憶するフレーム記憶手段(例えば、奇数フレーム受信用メモリ402と偶数フレーム受信用メモリ403)と、前記フレーム記億手段に記憶された前記第1のフレームまたは前記第2のフレームのうちの、前記選択手段により選択されたフレームの前記LDPC符号を前記バリアブルノード計算手段に供給する供給手段(例えば、セレクタ404)とをさらに備えることを特徴とする。
請求項4に記載の復号装置は、請求項1に記載の復号装置であって、前記チェックノードの演算、または前記バリアブルノードの演算のうちの一方の演算に用いられる枝に対応するメッセージデータの読み出しと、他方の演算の結果得られる枝に対応するメッセージデータの書き込みとが同時に行われるメッセージ記憶手段(例えば、図15の枝用メモリ300と枝用メモリ302)をさらに備えることを特徴とする。
請求項7に記載の復号方法は、LDPC(Low Density Parity Check)符号を符号長であるフレーム単位で復号する復号装置の復号方法であって、前記LDPC符号の第1のフレームと第2のフレームを交互に選択する選択ステップ(例えば、図16のステップS22、ステップS28)と、前記第1のフレームと前記第2のフレームのうちの、前記選択ステップの処理により選択されていないフレームの前記LDPC符号の復号のためのチェックノードの演算を行うチェックノード計算ステップ(例えば、図17のステップS42)と、前記第1のフレームと前記第2のフレームのうちの、前記選択ステップの処理により選択されたフレームの前記LDPC符号の復号のためのバリアブルノードの演算を行うバリアブルノード計算ステップ(例えば、図18のステップS62)とを含むことを特徴とする。
請求項8に記載のプログラムの各ステップの具体例も、請求項7に記載の復号方法の各ステップの発明の実施の形態における具体例と同様である。
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
図15は、本発明を適用した復号装置400の構成例を示すブロック図である。
復号装置400は、枝用メモリ300、チェックノード計算器301、枝用メモリ302、バリアブルノード計算器303、制御部401、奇数フレーム受信用メモリ402、偶数フレーム受信用メモリ403、およびセレクタ404から構成される。
復号装置400では、1つの枝に対応するメッセージを1つずつ計算し、2フレームの受信データの復号を同時に行う。
即ち、復号装置400では、チェックノード計算器301が、枝用メモリ300からメッセージデータを1つずつ読み出し、そのメッセージデータを用いて、チェックノード演算を行うと同時に、バリアブルノード計算器303が、枝用メモリ302からメッセージデータを1つずつ読み出し、そのメッセージデータを用いて、バリアブルノード演算を行う。そして、チェックノード計算器301が、チェックノード演算の結果得られるメッセージデータを1つずつ枝用メモリ302に格納すると同時に、バリアブルノード計算器303が、バリアブルノード演算の結果得られるメッセージデータを1つずつ枝用メモリ300に格納する。なお、チェックノード計算器301とバリアブルノード計算器303は、図10に示したチェックノード計算器101とバリアブルノード計算器103とそれぞれ同様に構成される。但し、チェックノード計算器301とバリアブルノード計算器303は、制御部401の制御にしたがい、あるフレームのチェックノード演算と、他のフレームのバリアブルノード演算を同時に(同一のタイミングで)行うようになっている。
枝用メモリ300は、バリアブルノード計算器303によるバリアブルノード演算の結果得られる枝に対応するメッセージ(データ)を格納し、既に格納してあるメッセージをチェックノード計算器301に供給する。即ち、枝用メモリ300は、バリアブルノード計算器303から供給され、チェックノード計算器301が演算する順番に格納してあるメッセージD401を1つずつ読み出し、チェックノード計算器301に供給すると同時に、バリアブルノード計算器303が出力するメッセージD405をメッセージD400として受信し、枝用メモリ300の既に読み出されたメッセージ(メッセージD401)が記憶されていたアドレスに書き込む。即ち、枝用メモリ300は、チェックノード演算に用いられるメッセージ(データ)D401の読み出しと、バリアブルノード演算の結果得られるメッセージ(データ)D400の書き込みとを、同時に行う。
なお、枝用メモリ300には、バリアブルノード計算器303のバリアブルノード演算により演算された枝に対応するメッセージが格納されるので、枝用メモリ300に格納されるデータ量、即ち、枝用メモリ300に必要とされる記憶容量は、メッセージの量子化ビット数と、全枝数との乗算値となる。このことは、前述の図9の枝用メモリ100についても同様である。
チェックノード計算器301には、枝用メモリ300からメッセージD401が供給されるとともに、制御部401から制御信号D408が供給される。チェックノード計算器301は、制御部401から供給される制御信号D408に基づき、前述の図9のチェックノード計算器101と同様に、枝用メモリ300から供給されるメッセージD401を用い、式(7)にしたがって、LDPC符号の復号のためのチェックノードの演算を行い、その演算によって求められたメッセージD402を、枝用メモリ302に供給する。チェックノード計算器301の詳細構成は、図10に示したチェックノード計算器101と同様である。
枝用メモリ302は、チェックノード計算器301によるチェックノード演算の結果得られる枝に対応するメッセージ(データ)を格納し、既に格納してあるメッセージをバリアブルノード計算器303に供給する。即ち、枝用メモリ302は、チェックノード計算器301から供給され、バリアブルノード計算器303が演算する順番に格納してあるメッセージD403を1つずつ読み出し、バリアブルノード計算器303に供給すると同時に、チェックノード計算器301が出力するメッセージD402を受信し、枝用メモリ302の既に読み出されたメッセージ(メッセージD403)が記憶されていたアドレスに書き込む。即ち、枝用メモリ302は、バリアブルノード演算に用いられるメッセージ(データ)D403の読み出しと、チェックノード演算の結果得られるメッセージ(データ)D402の書き込みとを、同時に行う。
なお、枝用メモリ302には、チェックノード計算器301のチェックノード演算により演算された枝に対応するメッセージが格納されるので、枝用メモリ301に格納されるデータ量、即ち、枝用メモリ302に必要とされる記憶容量は、メッセージの量子化ビット数と、全枝数との乗算値となる。このことは、前述の図9の枝用メモリ102についても同様である。
なお、枝用メモリ300と302は、同時に読み書き可能な、例えば、デュアルポートRAMで構成することができる。
バリアブルノード計算器303には、枝用メモリ302からメッセージD403が供給される。また、バリアブルノード計算器303には、制御部401から制御信号D409が供給されるとともに、セレクタ404からLDPC符号の受信データD404が供給される。バリアブルノード計算器303は、制御信号D409に基づき、前述の図9のバリアブルノード計算器103と同様に、枝用メモリ302から供給されるメッセージD403とセレクタ404から供給される受信データD404を用い、式(1)にしたがって、LDPC符号の復号のためのバリアブルノード演算を行い、その演算の結果得られる枝に対応するメッセージD405を、メッセージD400として枝用メモリ300に供給する。バリアブルノード計算器303の詳細構成は、図11に示したバリアブルノード計算器103と同様である。
制御部401は、制御信号D408をチェックノード計算器301に、制御信号D409をバリアブルノード計算器303に、制御信号D410をセレクタ404にそれぞれ供給することにより制御する。
奇数フレーム受信用メモリ402は、例えば、最初のフレームから奇数番目のフレーム(以下、適宜、奇数フレームと称する)のLDPC符号化された受信データ(LDPC符号)D406を格納(記億)する。また、奇数フレーム受信用メモリ402は、既に格納されている受信データD406を読み出し、セレクタ404に供給する。
偶数フレーム受信用メモリ403は、例えば、最初のフレームから偶数番目のフレーム(以下、適宜、偶数フレームと称する)のLDPC符号化された受信データ(LDPC符号)D407を格納(記億)する。また、偶数フレーム受信用メモリ403は、既に格納されている受信データD407を読み出し、セレクタ404に供給する。
なお、フレーム単位の受信データは、図示せぬ受信部から奇数フレーム受信用メモリ402と偶数フレーム受信用メモリ403に供給されて記憶される。また、奇数フレーム受信用メモリ402と偶数フレーム受信用メモリ403に格納されるデータ量、即ち、奇数フレーム受信用メモリ402と偶数フレーム受信用メモリ403に必要とされる記憶容量は、LDPC符号の符号長と、受信データの量子化ビット数との乗算値である。
セレクタ404は、制御部401から供給される制御信号D410に基づいて、奇数フレーム受信用メモリ402から供給される受信データD406、または偶数フレーム受信用メモリ403から供給される受信データD407のうちのどちらか一方を、受信データD404として、バリアブルノード計算器303と、上述した式(5)の演算を行う不図示のブロックに供給する。
図16は、図15の復号装置400の復号処理を説明するフローチャートである。この処理は、例えば、奇数フレーム受信用メモリ402と偶数フレーム受信用メモリ403に、奇数フレームである1番目のフレームと偶数フレームである2番目のフレームの受信データが格納されたとき、開始される。このとき、奇数フレーム受信用メモリ402が、格納している奇数フレームである1番目のフレームの受信データD406を読み出して、セレクタ404に供給するとともに、偶数フレーム受信用メモリ403が、格納している偶数フレームである2番目のフレームの受信データD407を読み出して、セレクタ404に供給する。
なお、復号装置400の復号回数Nは、例えば、あるフレームの受信データすべてが受信されてから、次のフレームの受信データすべてが受信されるまでの時間と、復号装置400の動作周波数とに基づいて、あらかじめ設定されている。また、ここでは、2フレームの受信後、その2フレームの復号を、次の2フレームを受信するまでの間、繰り返し行うものとする。
ステップS21において、制御部401は、不図示のカウンタの値Kを0に初期化し、ステップS22に進む。ステップS22において、制御部401は、バリアブルノード計算器303の対象フレームとして、奇数フレーム(第1のフレーム)または偶数フレーム(第2のフレーム)のうちの奇数フレームを選択し、制御信号D410が奇数フレームを選択するように設定する。即ち、制御部401は、奇数フレームの選択を表す制御信号D410をセレクタ404に供給する。このとき、セレクタ404は、制御部401から供給された制御信号D410にしたがい、奇数フレーム受信用メモリ402から供給された奇数フレームの受信データD406、または偶数フレーム受信用メモリ403から供給された偶数フレームの受信データD407のうちの対象フレーム(いまの場合、奇数フレーム)となっている受信データを選択し、受信データD404としてバリアブルノード計算器303に供給する。そして、制御部401は、ステップS22から、ステップS23−1とステップS23−2に進む。
なお、ステップS23−1乃至ステップS27−1と、ステップS23−2乃至ステップS27−2は、同時に行われる。
ステップS23−1において、制御部401は、制御信号D408を0に設定し、チェックノード計算器301に供給し、ステップS24−1に進む。
ステップS24−1において、チェックノード計算器301は、枝用メモリ300から後述するステップS30−2で格納された、対象フレームとして選択されていない方のフレーム(以下、適宜、非対象フレームという)である偶数フレームに対するバリアブルノード演算の結果得られるメッセージviを読み出し、式(7)にしたがって、非対象フレームに対するチェックノード演算を行う。
ステップS24−1の処理後は、ステップS25−1に進み、制御部401は、チェックノード計算器301が、検査行列の1行分のメッセージviを読み出したかどうかを判定し、検査行列の1行分のメッセージviを読み出していないと判定した場合、ステップS24−1に戻り、上述した処理を繰り返す。
ステップS25−1において、制御部401は、検査行列の1行に亘るメッセージviを読み出したと判定した場合、ステップS26−1に進み、制御信号D408を1に設定する。
例えば、検査行列の行の重みが「9」である場合、制御部401は、ステップS24−1とステップS25−1の処理を9回繰り返し行い、ステップS25−1からステップS26−1に進む。
ステップS26−1の処理後は、ステップS27−1に進み、制御部401は、1フレーム分の受信データに対するチェックノード演算が終了したかどうかを判定する。ステップS26−1において、制御部401は、1フレーム分の受信データに対するチェックノード演算が終了していないと判定した場合、ステップS23−1に戻り、上述した処理を繰り返す。
ステップS27−1において、制御部401は、1フレーム分の受信データに対するチェックノード演算が終了したと判定した場合、ステップS28に進む。
なお、カウンタの値Kが0である場合、非対象フレームに対して、後述するステップS30−2の処理が行われていないので、上述したステップS23−1乃至S27−1の処理は行なわれない。
一方、ステップS23−2において、制御部401は、制御信号D409を0に設定し、バリアブルノード計算器303に供給して、ステップS24−2に進む。
ステップS24−2において、バリアブルノード計算器303は、枝用メモリ302から、後述するステップS30−1で格納された、対象フレームである奇数フレームに対するチェックノード演算の結果得られるメッセージujを読み出し、式(1)にしたがって、対象フレームに対するバリアブルノード演算を行う。なお、バリアブルノード計算器303は、最初のバリアブルノード演算を行う場合、即ち、カウンタの値Kが0である場合、まだステップS30−1の処理が行なわれていないので、メッセージujを初期値に設定し、バリアブルノード演算を行う。そして、バリアブルノード計算器303は、バリアブルノード演算の結果得られるメッセージviを枝用メモリ300に格納する。
ステップS24−2の処理後は、ステップS25−2に進み、制御部401は、バリアブルノード計算器303が、検査行列の1列分のメッセージujを読み出したかどうかを判定し、検査行列の1列分のメッセージujを読み出していないと判定した場合、ステップS24−2に戻り、上述した処理を繰り返す。
ステップS25−2において、制御部401は、検査行列の1列分のメッセージujを読み出したと判定した場合、ステップS26−2に進み、制御信号D409を1に設定する。
例えば、検査行列の列の重みが「5」である場合、制御部401は、ステップS24−2とステップS25−2の処理を5回繰り返し行い、ステップS25−2からステップS26−2に進む。
ステップS26−2の処理後は、ステップS27−2に進み、制御部401は、1フレーム分の受信データに対するバリアブルノード演算が終了したかどうかを判定する。ステップS26−2において、制御部401は、1フレーム分の受信データに対するバリアブルノード演算が終了していないと判定した場合、ステップS23−2に戻り、上述した処理を繰り返す。
ステップS27−2において、制御部401は、1フレーム分の受信データに対するバリアブルノード演算が終了したと判定した場合、ステップS28に進む。
ステップS23−1乃至ステップS27−1およびステップS23−2乃至ステップS27−2のように、復号装置400では、チェックノード計算器301による非対象フレームである偶数フレームに対するチェックノード演算と、バリアブルノード計算器303による対象フレームである奇数フレームに対するバリアブルノード演算とが、同時に行われる。
ステップS28において、制御部401は、バリアブルノード計算器303の対象フレームとして、奇数フレーム(第1のフレーム)または偶数フレーム(第2のフレーム)のうちの偶数フレームを選択し、制御信号D410が偶数フレームを選択するように設定する。即ち、制御部401は、偶数フレームの選択を表す制御信号D410をセレクタ404に供給する。このとき、セレクタ404は、制御部401から供給された制御信号D410にしたがい、奇数フレーム受信用メモリ402から供給された奇数フレームの受信データD406、または偶数フレーム受信用メモリ403から供給された偶数フレームの受信データD407のうちの対象フレーム(いまの場合、偶数フレーム)となっている受信データを選択し、受信データD404としてバリアブルノード計算器303に供給する。そして、制御部401は、ステップS28から、ステップS29−1とステップS29−2に進む。
なお、ステップS29−1乃至ステップS33−1と、ステップS29−2乃至ステップS33−2とは、同時に行われる。
ステップS29−1において、制御部401は、制御信号D408を0に設定し、チェックノード計算器301に供給し、ステップS30−1に進む。
ステップS30−1において、チェックノード計算器301は、枝用メモリ300から、ステップS24−2で格納された、非対象フレームである奇数フレームに対するバリアブルノード演算の結果得られるメッセージviを読み出し、式(7)にしたがって、非対象フレームに対するチェックノード演算を行う。そして、チェックノード計算器301は、チェックノード演算の結果得られるメッセージujを枝用メモリ302に格納する。
ステップS30−1の処理後は、ステップS31−1に進み、制御部401は、チェックノード計算器301が、検査行列の1行分のメッセージviを読み出したかどうかを判定し、検査行列の1行分のメッセージviを読み出していないと判定した場合、ステップS30−1に戻り、上述した処理を繰り返す。
ステップS31−1において、制御部401は、検査行列の1行分のメッセージviを読み出したと判定した場合、ステップS32−1に進み、制御信号D408を1に設定する。
例えば、検査行列の行の重みが「9」である場合、制御部401は、ステップS30−1とステップS31−1の処理を9回繰り返し行い、ステップS31−1からステップS32−1に進む。
ステップS32−1の処理後は、ステップS33−1に進み、制御部401は、1フレーム分の受信データに対するチェックノード演算が終了したかどうかを判定する。ステップS32−1において、制御部401は、1フレーム分の受信データに対するチェックノード演算が終了していないと判定した場合、ステップS29−1に戻り、上述した処理を繰り返す。
ステップS33−1において、制御部401は、1フレーム分の受信データに対するチェックノード演算が終了したと判定した場合、ステップS34に進む。
一方、ステップS29−2において、制御部401は、制御信号D409を0に設定し、バリアブルノード計算器303に供給し、ステップS30−2に進む。
ステップS30−2において、バリアブルノード計算器303は、枝用メモリ302から、ステップS24−1で格納された、対象フレームである偶数フレームに対するチェックノード演算の結果得られるメッセージujを読み出し、式(1)にしたがって、対象フレームに対するバリアブルノード演算を行う。そして、バリアブルノード計算器303は、バリアブルノード演算の結果得られるメッセージviを枝用メモリ300に格納する。
ステップS30−2の処理後は、ステップS31−2に進み、制御部401は、バリアブルノード計算器303が、検査行列の1列分のメッセージujを読み出したかどうかを判定し、検査行列の1列分のメッセージujを読み出していないと判定した場合、ステップS30−2に戻り、上述した処理を繰り返す。
ステップS31−2において、制御部401は、検査行列の1列分のメッセージujを読み出したと判定した場合、ステップS32−2に進み、制御信号D409を1に設定する。
例えば、検査行列の列の重みが「5」である場合、制御部401は、ステップS30−2とステップS31−2の処理を5回繰り返し行い、ステップS31−2からステップS32−2に進む。
ステップS32−2の処理後は、ステップS33−2に進み、制御部401は、1フレーム分の受信データに対するバリアブルノード演算が終了したかどうかを判定する。ステップS33−2において、制御部401は、1フレーム分の受信データに対するバリアブルノード演算が終了していないと判定した場合、ステップS29−2に戻り、上述した処理を繰り返す。
ステップS33−2において、制御部401は、1フレーム分の受信データに対するバリアブルノード演算が終了したと判定した場合、ステップS34に進む。
ステップS29−1乃至ステップS33−1およびステップS29−2乃至ステップS33−2のように、復号装置400では、チェックノード計算器301による非対象フレームである奇数フレームに対するチェックノード演算とバリアブルノード計算器303による対象フレームである偶数フレームに対するバリアブルノード演算とが、同時に行われる。
ステップS34において、制御部401は、復号回数を表わすカウンタの値Kを1だけインクリメントし、ステップS35に進む。ステップS35において、制御部401は、カウンタの値Kが、予め設定された復号回数N以上であるかどうかを判定する。
ステップS35において、カウンタの値Kが、復号回数N以上ではない(Nより小さい)と判定した場合、ステップS22に戻り、制御部401は、対象フレームを奇数フレームに変更し、制御信号D410が奇数フレームを選択するように設定される。従って、制御部401は、奇数フレームと偶数フレームを交互に、対象フレームとして選択する。そして、制御部401は、ステップS22からステップS23−1とステップS23−2に進み、上述した処理を繰り返す。
以上のように、制御部401が、奇数フレームと偶数フレームを交互に、対象フレームとして選択し、バリアブルノード計算器303が、その選択された対象フレームのバリアブルノード演算を行うとともに、チェックノード計算器301が、奇数フレームと偶数フレームのうちの、非対象フレームのチェックノード演算を行うので、バリアブルノード計算器303では、奇数フレームと偶数フレームのバリアブルノードの演算が交互に行われ、チェックノード計算器301では、偶数フレームと奇数フレームのチェックノード演算が交互に行われる。
従って、奇数フレームと偶数フレームのうちの一方のバリアブルノード演算と他方のチェックノード演算とが同時に行われ、その後、他方のバリアブルノード演算と一方のチェックノード演算とが同時に行われることが繰り返される。
一方、ステップS35において、制御部401は、カウンタの値KがN以上であると判定した場合、即ち、奇数フレームのN回の復号が終了した場合、ステップS35からステップS36に進む。このとき、不図示のブロックは、N回の復号が終了した奇数フレームについて、上述した式(5)にしたがって演算を行い、その演算結果をその奇数フレームの最終的な復号結果として出力するとともに、チェックノード計算器301は、偶数フレームに対して最後のチェックノード演算を行う。そして、偶数フレームのN回の復号が終了され、不図示のブロックは、そのN回の復号が終了した偶数フレームについて、上述した式(5)にしたがって演算を行い、その演算結果を、その偶数フレームの最終的な復号結果として出力する。
ステップS36において、制御部401は、復号すべき受信データが、まだ存在するかどうかを判定し、存在すると判定した場合、即ち、次の奇数フレームと偶数フレームの受信データが受信され、奇数フレーム受信用メモリ402と偶数フレーム受信用メモリ403にそれぞれ供給された場合、奇数フレーム受信用メモリ402と偶数フレーム受信用メモリ403は、その奇数フレームと偶数フレームの受信データをそれぞれ記憶し、記憶した奇数フレームの受信データD406と偶数フレームの受信データD407をセレクタ404に供給して、ステップS21に戻り、以下、同様の処理が繰り返される。
一方、ステップS36において、制御部401は、復号すべきフレームの受信データが存在しないと判定した場合、処理を終了する。
次に、図17と図18のフローチャートを用いて、図15のチェックノード計算器301とバリアブルノード計算器303の演算処理について説明する。なお、図17のチェックノード計算器301のチェックノード演算処理と、図18のバリアブルノード計算器303のバリアブルノード演算処理は、同時に行なわれる。
図17は、図15のチェックノード計算器301のチェックノード演算処理を説明するフローチャートである。
ステップS41において、チェックノード計算器301は、枝用メモリ300から、バリアブルノード計算器303によるバリアブルノード演算の結果得られる枝に対応するメッセージD405(メッセージv)を取得し(読み出し)、ステップS42に進む。
ステップS42において、チェックノード計算器301は、制御部401から供給される制御信号D408に基づき、メッセージD405を用いて、上述した式(7)にしたがって、チェックノード演算を行う。
即ち、チェックノード計算器301は、既に枝用メモリ300に格納されているメッセージ、つまり、バリアブルノード計算器303の前回の処理対象である対象フレーム(奇数フレームと偶数フレームのうち、今回、対象フレームとして、制御部401により選択されていない非対象フレーム)に対するバリアブルノード演算の結果得られる枝に対応するメッセージD405を用いてチェックノード演算を行う。
ステップS42の処理後は、ステップS43に進み、チェックノード計算器301は、チェックノード演算の結果得られる枝に対応するメッセージD402(メッセージu)を、枝用メモリ302に供給して格納し(書き込み)、いま非対象フレームとなっているフレームに対する処理を終了する。
図18は、図15のバリアブルノード計算器303のバリアブルノード演算処理を説明するフローチャートである。
ステップS61において、バリアブルノード計算器303は、枝用メモリ302から、チェックノード計算器301によるチェックノード演算の結果得られる枝に対応するメッセージD403(メッセージu)を取得するとともに、セレクタ404を介して、奇数フレーム受信用メモリ402または偶数フレーム受信用メモリ403から対象フレームの受信データD404を取得する。なお、セレクタ404を介して供給された受信データD404のフレーム(対象フレーム)に対して、まだチェックノード演算が行われておらず、枝用メモリ302にメッセージD403が格納されていない場合、バリアブルノード計算器303は、メッセージD403を取得する代わりに、メッセージuを初期値に設定する。
ステップS61の処理後は、ステップS62に進み、バリアブルノード計算器303は、制御部401から供給される制御信号D409に基づいて、メッセージD403と対象フレームの受信データD404を用いて、上述した式(1)にしたがってバリアブルノード演算を行う。そして、バリアブルノード計算器303は、ステップS62からステップS63に進み、バリアブルノード演算の結果得られる枝に対応するメッセージD405(メッセージv)を枝用メモリ300に供給して格納し、いま対象フレームとなっているフレームに対する処理を終了する。
以上のように、チェックノード計算器301において、2つのフレームのチェックノード演算を交互に行うとともに、バリアブルノード計算器303において、その2つのフレームのバリアブルノード演算を交互に行うことにより、チェックノード計算器301とバリアブルノード計算器303では、2つのフレームのうちの一方のチェックノード演算またはバリアブルノード演算と、他方のバリアブルノード演算またはチェックノード演算とが、同時に演算が行われるので、理論的には、前述の図9の場合の2倍の回数の復号を行うことができる。
なお、図16では、奇数フレームと偶数フレームの2つのフレームの受信データの復号を、次の2つのフレームの受信データすべてを受信するまでの間行うようにしたが、1つのフレームの受信データの受信後、その受信データの復号を、その後の2つのフレームの受信データすべてを受信するまでの間行うこともできる。
図19は、1フレームの受信データすべてを受信し終わるごとに、その1フレームの受信データの復号を開始し、各フレームにつき、次の2フレームの受信データすべてを受信するまで、復号を行う場合の、図15の復号装置400の処理の概要を説明するタイミングチャートである。
なお、図19において(後述する図20においても同様)、横軸は、時間を表している。また、図19では、復号回数は8回に設定されている。
図19上から1番目は、復号装置400が受信する受信データのフレームを表している。なお、n番目のフレームを、フレーム#nと表わすこととする。
いま、フレーム#nに注目すると、復号装置400は、フレーム#nの受信データのすべての受信が完了し、その次の(連続する)フレーム#n+1の受信データの受信が開始されると、フレーム#nの復号を開始する。
即ち、復号装置400では、バリアブルノード計算器303が、まず、フレーム#nの受信データを用いて、フレーム#nの1回目のバリアブルノード演算を行い、その演算結果としてのメッセージを得る(図19上から3番目)。さらに、チェックノード計算器301が、1回目のバリアブルノード演算結果としてのメッセージを用いて、フレーム#nの1回目のチェックノード演算を行い、その演算結果としてのメッセージを得る(図19上から2番目)。そして、バリアブルノード計算器303が、1回目のチェックノード演算結果としてのメッセージと、フレーム#nの受信データを用いて、フレーム#nの2回目のバリアブルノード演算を行い、その演算結果としてのメッセージを得る。さらに、チェックノード計算器301が、2回目のバリアブルノード演算結果としてのメッセージを用いて、フレーム#nの2回目のチェックノード演算を行い、その演算結果としてのメッセージを得る。以下、同様にして、復号装置400では、フレーム#nに対して、4回ずつのバリアブルノード演算とチェックノード演算が行われる。
その後、フレーム#n+1の受信データのすべての受信が完了する直前において、バリアブルノード計算器303が、4回目のチェックノード演算結果としてのメッセージと、フレーム#nの受信データを用いて、フレーム#nの5回目のバリアブルノード演算を行い、その演算結果としてのメッセージを得る(図19上から3番目)。
そして、フレーム#n+1の受信データのすべての受信が完了し、その次のフレーム#n+2の受信データの受信が開始されると(図19上から1番目)、チェックノード計算器301が、5回目のバリアブルノード演算結果としてのメッセージを用いて、フレーム#nの5回目のチェックノード演算を行い、その演算結果としてのメッセージを得る(図19上から2番目)。さらに、バリアブルノード計算器303が、5回目のチェックノード演算結果としてのメッセージと、フレーム#nの受信データを用いて、フレーム#nの6回目のバリアブルノード演算を行い、その演算結果としてのメッセージを得る。さらに、チェックノード計算器301が、6回目のバリアブルノード演算結果としてのメッセージを用いて、フレーム#nの6回目のチェックノード演算を行い、その演算結果としてのメッセージを得る。以下、同様にして、復号装置400では、フレーム#nに対して、延べ8回ずつのバリアブルノード演算とチェックノード演算が行われる。
その後、復号装置400では、8回目のチェックノード演算結果としてのメッセージと、フレーム#nの受信データを用いて、式(5)の演算が行われ、これにより、フレーム#nの最終的な復号結果が求められる(図19下から1番目)。
一方、復号装置400では、フレーム#n+1の受信データのすべての受信が完了し、その次のフレーム#n+2の受信データの受信が開始されると(図19上から1番目)、フレーム#nの復号と並列して、フレーム#n+1の復号が開始される。
即ち、フレーム#n+2の受信データの受信が開始されると、上述したように、チェックノード計算器301が、フレーム#nの5回目のバリアブルノード演算結果としてのメッセージを用いて、フレーム#nの5回目のチェックノード演算を行い、その演算結果としてのメッセージを得るが(図19上から2番目)、そのタイミングでは、バリアブルノード計算器303が、直前に受信が完了したフレーム#n+1の受信データを用いて、フレーム#n+1の1回目のバリアブルノード演算を行い、その演算結果としてのメッセージを得る(図19上から3番目)。つまり、フレーム#nの5回目のチェックノード演算と、フレーム#n+1の1回目のバリアブルノード演算とが、同時に行われる。
その後、上述したように、バリアブルノード計算器303が、フレーム#nの5回目のチェックノード演算結果としてのメッセージと、フレーム#nの受信データを用いて、フレーム#nの6回目のバリアブルノード演算を行い、その演算結果としてのメッセージを得るが(図19上から3番目)、そのタイミングでは、チェックノード計算器301が、フレーム#n+1の1回目のバリアブルノード演算結果としてのメッセージを用いて、フレーム#n+1の1回目のチェックノード演算を行い、その演算結果としてのメッセージを得る(図19上から2番目)。つまり、フレーム#nの6回目のバリアブルノード演算と、フレーム#n+1の1回目のチェックノード演算とが、同時に行われる。
以下、同様にして、フレーム#nのチェックノード演算と、フレーム#n+1のバリアブルノード演算とが同時に行われることと、フレーム#nのバリアブルノード演算と、フレーム#n+1のチェックノード演算とが同時に行われることが、交互に繰り返される。
そして、フレーム#nに対して、延べ8回ずつのバリアブルノード演算とチェックノード演算が行われると、上述したように、8回目のチェックノード演算結果としてのメッセージと、フレーム#nの受信データを用いて、式(5)の演算が行われ、これにより、フレーム#nの最終的な復号結果が求められる(図19下から1番目)。
フレーム#nに対して、延べ8回ずつのバリアブルノード演算とチェックノード演算が行われた時点では、フレーム#n+1に対しては、4回ずつバリアブルノード演算とチェックノード演算が行われている。そして、フレーム#nの最終的な復号結果が得られると、バリアブルノード計算器303が、フレーム#n+1の4回目のチェックノード演算結果としてのメッセージと、フレーム#n+1の受信データを用いて、フレーム#n+1の5回目のバリアブルノード演算を行い、その演算結果としてのメッセージを得る(図19上から3番目)。
この時点で、フレーム#n+2の受信データのすべての受信が完了し(図19上から1番目)、その次のフレーム#n+3の受信データの受信が開始され、チェックノード計算器301が、フレーム#n+1の5回目のバリアブルノード演算結果としてのメッセージを用いて、フレーム#n+1の5回目のチェックノード演算を行い、その演算結果としてのメッセージを得る(図19上から2番目)。そのタイミングでは、バリアブルノード計算器303が、直前に受信が完了したフレーム#n+2の受信データを用いて、フレーム#n+2の1回目のバリアブルノード演算を行い、その演算結果としてのメッセージを得る(図19上から3番目)。つまり、フレーム#n+1の5回目のチェックノード演算と、フレーム#n+2の1回目のバリアブルノード演算とが、同時に行われる。
以下、同様にして、フレーム#n+1のチェックノード演算と、フレーム#n+2のバリアブルノード演算とが同時に行われることと、フレーム#n+1のバリアブルノード演算と、フレーム#n+2のチェックノード演算とが同時に行われることが、交互に繰り返される。
そして、フレーム#n+1に対して、延べ8回ずつのバリアブルノード演算とチェックノード演算が行われると、8回目のチェックノード演算結果としてのメッセージと、フレーム#n+1の受信データを用いて、式(5)の演算が行われ、これにより、フレーム#n+1の最終的な復号結果が求められる(図19下から1番目)。
フレーム#n+2以降のフレームも、同様にして復号されていく。
以上のように、2つのフレームのうちの一方のチェックノード演算と、他方のバリアブルノード演算とを同時に行い、その後、他方のバリアブルノード演算と、一方のチェックノード演算とを同時に行うことを繰り返すことにより、1つのフレームのバリアブルノード演算だけを行い、その後、その1つのフレームのチェックノード演算だけを行うことを繰り返す場合に比較して、単純には、復号回数を2倍にすることができる。
即ち、図20は、1つのフレームのバリアブルノード演算だけを行い、その後、その1つのフレームのチェックノード演算だけを行うことを繰り返す復号を行う従来の復号装置(例えば、図9の復号装置)の復号処理を説明するタイミングチャートである。
なお、図20では、1フレームの受信データを受信するのに要する時間と、復号の動作周波数のいずれも、図19における場合と同一であるとする。
図20上から1番目は、従来の復号装置が受信する受信データのフレームを表しており、いまの場合、図19上から1番目と同一である。
いま、フレーム#nに注目すると、従来の復号装置は、フレーム#nの受信データのすべての受信が完了し、その次のフレーム#n+1の受信データの受信が開始されると、フレーム#nの復号を開始する。
即ち、従来の復号装置では、まず、フレーム#nの受信データを用いて、フレーム#nの1回目のバリアブルノード演算が行われ、その演算結果としてのメッセージが得られる(図20上から3番目)。さらに、フレーム#nの1回目のバリアブルノード演算結果としてのメッセージを用いて、フレーム#nの1回目のチェックノード演算が行われ、その演算結果としてのメッセージが得られる(図20上から2番目)。そして、フレーム#nの1回目のチェックノード演算結果としてのメッセージと、フレーム#nの受信データを用いて、フレーム#nの2回目のバリアブルノード演算が行われ、その演算結果としてのメッセージが得られる。さらに、フレーム#nの2回目のバリアブルノード演算結果としてのメッセージを用いて、フレーム#nの2回目のチェックノード演算が行われ、その演算結果としてのメッセージが得られる。以下、同様にして、従来の復号装置では、フレーム#nに対して、4回ずつのバリアブルノード演算とチェックノード演算が行われる。
その後、フレーム#n+1の受信データのすべての受信が完了する直前において、フレーム#nの4回目のチェックノード演算結果としてのメッセージと、フレーム#nの受信データを用いて、式(5)の演算が行われ、これにより、フレーム#nの最終的な復号結果が求められる(図20下から1番目)。
即ち、従来の復号装置では、フレーム#nのバリアブルノード演算またはチェックノード演算のいずれか一方が行われている間、他方の演算は行われない。このため、フレーム#nの受信データの復号は、例えば、その次のフレーム#n+1の受信データすべての受信が完了するまでの1フレームの期間に完了しなければならず、このため、フレーム#nについては、4回、即ち、図19における場合の1/2の回数の復号しか行うことができない。
フレーム#nの最終的な復号結果が求められた後、フレーム#n+1の受信データのすべての受信が完了し、その次のフレーム#n+2の受信データの受信が開始されると、従来の復号装置は、上述したフレーム#nの復号を行う場合と同様に、フレーム#n+1の復号を開始する。従って、フレーム#n+1についても、図19における場合の1/2の回数である4回の復号しか行うことができない。
フレーム#n+2以降のフレームも、同様にして復号されていくため、やはり、図19における場合の1/2の回数である4回の復号しか行うことができない。
逆に言えば、図15の復号装置400は、従来の復号装置の2倍の回数の復号を行うことができる。
なお、図16のフローチャートで説明したように、2フレームの受信データすべてが受信されるのを待って、その2フレームの受信データの復号を、その次の2フレームの受信データすべてが受信されるまでの間行う場合であっても、また、図19で説明したように、1フレームの受信データすべてを受信するたびに、その1フレームの受信データの復号を、その次の2フレームの受信データすべてが受信されるまでの間行う場合であっても、復号回数は、従来の復号装置の2倍の回数とすることができる。但し、1フレームの受信データすべてを受信するたびに、その1フレームの受信データの復号を、その次の2フレームの受信データすべてが受信されるまでの間行う場合は、2フレームの受信データすべてが受信されるのを待って、その2フレームの受信データの復号を、その次の2フレームの受信データすべてが受信されるまでの間行う場合よりも、最初の1フレーム目の復号結果を、早期に得ることができる。
以上のように、復号装置400では、図9の復号装置の受信用メモリ104を、2つの奇数フレーム受信用メモリ402と偶数フレーム受信用メモリ403に変更するとともに、図9の制御部105を、制御部401に変更し、セレクタ404を新たに設けるという、僅かな変更を加えるだけで、従来に比べて効率の良い復号を行うことができる。
また、復号装置400では、同一の動作周波数で、従来の2倍の復号回数の復号を行うことができ、これにより、復号性能を改善することができる。また、従来と同一の復号回数にした場合、復号装置400では、動作周波数を半分にすることができ、消費電力を抑えることがきる。従って、復号装置400では、消費電力を抑えて、従来と同一の性能の復号を行うことができる。
なお、復号装置400は、全ての枝のメッセージを同時に行う復号装置やP個の枝のメッセージを同時に行う復号装置にも適用することができる。
さらに、枝用メモリ300と枝用メモリ302は、デュアルポートRAMではなく、複数個のシングルポートRAMから構成されるようにしてもよい。この場合、1つのシングルポートRAMへの読み出しと書き込みが同時に重ならないように制御を行う必要がある。複数個のシングルポートRAMを用いた場合、デュアルポートRAMを用いる場合に比べて、復号装置400の回路規模を小さくすることができる。
また、上述した説明では、奇数フレームと偶数フレームの2つのフレームの復号処理(バリアブルノードとチェックノードの演算)を同時に行うようにしたが、復号装置400を複数個接続することにより、3つ以上のフレームの復号処理を同時に行うようにすることもできる。
次に、上述した一連の処理は、ハードウェアにより行うこともできるし、ソフトウェアにより行うこともできる。一連の処理をソフトウェアによって行う場合には、そのソフトウェアを構成するプログラムが、汎用のコンピュータ等にインストールされる。
そこで、図21は、上述した一連の処理を実行するプログラムがインストールされるコンピュータの一実施の形態の構成例を示している。
プログラムは、コンピュータに内蔵されている記録媒体としてのハードディスク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の復号装置の復号処理を説明するフローチャートである。 図15のチェックノード計算器のチェックノード演算処理を説明するフローチャートである。 図15のバリアブルノード計算器のバリアブルノード演算処理を説明するフローチャートである。 図15の復号装置の復号処理を説明するタイミングチャートである。 1つのフレームのチェックノード演算とバリアブルノード演算を交互に行う復号装置の処理を説明するタイミングチャートである。 本発明を適用したコンピュータの一実施の形態の構成例を示すブロック図である。
符号の説明
300 枝用メモリ, 301 チェックノード計算器, 302 枝用メモリ, 303 バリアブルノード計算器, 400 復号装置, 401 制御部, 402 奇数フレーム受信用メモリ, 403 偶数フレーム受信用メモリ, 404 セレクタ, 901 バス, 902 CPU, 903 ROM, 904 RAM, 905 ハードディスク, 906 出力部, 907 入力部, 908 通信部, 909 ドライブ, 910 入出力インタフェース, 911 リムーバブル記録媒体

Claims (8)

  1. LDPC(Low Density Parity Check)符号を符号長であるフレーム単位で復号する復号装置であって、
    前記LDPC符号の第1のフレームと第2のフレームを交互に選択する選択手段と、
    前記第1のフレームと前記第2のフレームのうちの、前記選択手段により選択されていないフレームの前記LDPC符号の復号のためのチェックノードの演算を行うチェックノード計算手段と、
    前記第1のフレームと前記第2のフレームのうちの、前記選択手段により選択されたフレームの前記LDPC符号の復号のためのバリアブルノードの演算を行うバリアブルノード計算手段と
    を備えることを特徴とする復号装置。
  2. 請求項1に記載の復号装置であって、
    前記第1のフレームと前記第2のフレームの前記LDPC符号を記憶するフレーム記憶手段と、
    前記フレーム記億手段に記憶された前記第1のフレームまたは前記第2のフレームのうちの、前記選択手段により選択されたフレームの前記LDPC符号を前記バリアブルノード計算手段に供給する供給手段と
    をさらに備える
    ことを特徴とする復号装置。
  3. 請求項1に記載の復号装置であって、
    前記チェックノード計算手段により前記第1のフレームと前記第2のフレームのうちの一方のフレームのチェックノードの演算が行われるとき、前記バリアブルノード計算手段は、他方のフレームのバリアブルノードの演算を行う
    ことを特徴とする復号装置。
  4. 請求項1に記載の復号装置であって、
    前記チェックノードの演算、または前記バリアブルノードの演算のうちの一方の演算に用いられる枝に対応するメッセージデータの読み出しと、他方の演算の結果得られる枝に対応するメッセージデータの書き込みとが同時に行われるメッセージ記憶手段をさらに備える
    ことを特徴とする復号装置。
  5. 請求項4に記載の復号装置であって、
    前記メッセージ記憶手段は、デュアルポートRAM(Random Access Memory)である
    ことを特徴とする復号装置。
  6. 請求項1に記載の復号装置であって、
    前記第1のフレームと前記第2のフレームは、連続する2つのフレームである
    ことを特徴とする復号装置。
  7. LDPC(Low Density Parity Check)符号を符号長であるフレーム単位で復号する復号装置の復号方法であって、
    前記LDPC符号の第1のフレームと第2のフレームを交互に選択する選択ステップと、
    前記第1のフレームと前記第2のフレームのうちの、前記選択ステップの処理により選択されていないフレームの前記LDPC符号の復号のためのチェックノードの演算を行うチェックノード計算ステップと、
    前記第1のフレームと前記第2のフレームのうちの、前記選択ステップの処理により選択されたフレームの前記LDPC符号の復号のためのバリアブルノードの演算を行うバリアブルノード計算ステップと
    を含むことを特徴とする復号方法。
  8. LDPC(Low Density Parity Check)符号の符号長であるフレーム単位の復号をコンピュータに行わせるプログラムであって、
    前記LDPC符号の第1のフレームと第2のフレームを交互に選択する選択ステップと、
    前記第1のフレームと前記第2のフレームのうちの、前記選択ステップの処理により選択されていないフレームの前記LDPC符号の復号のためのチェックノードの演算を行うチェックノード計算ステップと、
    前記第1のフレームと前記第2のフレームのうちの、前記選択ステップの処理により選択されたフレームの前記LDPC符号の復号のためのバリアブルノードの演算を行うバリアブルノード計算ステップと
    を備えることを特徴とするプログラム。
JP2003290605A 2003-08-08 2003-08-08 復号装置および復号方法、並びにプログラム Expired - Fee Related JP4288582B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003290605A JP4288582B2 (ja) 2003-08-08 2003-08-08 復号装置および復号方法、並びにプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003290605A JP4288582B2 (ja) 2003-08-08 2003-08-08 復号装置および復号方法、並びにプログラム

Publications (2)

Publication Number Publication Date
JP2005064735A JP2005064735A (ja) 2005-03-10
JP4288582B2 true JP4288582B2 (ja) 2009-07-01

Family

ID=34368592

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003290605A Expired - Fee Related JP4288582B2 (ja) 2003-08-08 2003-08-08 復号装置および復号方法、並びにプログラム

Country Status (1)

Country Link
JP (1) JP4288582B2 (ja)

Families Citing this family (1)

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

Also Published As

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

Similar Documents

Publication Publication Date Title
JP4807063B2 (ja) 復号装置、制御方法、およびプログラム
JP4224777B2 (ja) 復号方法および復号装置、並びにプログラム
JP4622654B2 (ja) 復号装置および復号方法
JP4595650B2 (ja) 復号装置および復号方法
KR101090001B1 (ko) 복호 장치 및 복호 방법, 및 기록 매체
JP4487213B2 (ja) 復号装置および方法、並びにプログラム
JP4293172B2 (ja) 復号装置および復号方法
JP4487212B2 (ja) 復号装置および方法、送受信システム、受信装置および方法、並びにプログラム
JP2007036776A (ja) 復号装置および復号方法
JP2005051469A (ja) 符号化装置および符号化方法、並びにプログラム
JP4285148B2 (ja) 復号装置および復号方法、並びにプログラム
JP4288582B2 (ja) 復号装置および復号方法、並びにプログラム
JP4729964B2 (ja) 復号装置および復号方法
JP4284600B2 (ja) 復号装置
JP2008301152A (ja) 復号装置および方法、並びにプログラム
JP4822071B2 (ja) 復号装置および復号方法
JP2010028408A (ja) 情報処理装置、情報処理方法、およびプログラム
JP4821724B2 (ja) 復号装置および復号方法
JP4780027B2 (ja) 復号装置、制御方法、及びプログラム
JP2007081602A (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: 20081127

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090114

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: 20090305

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: 20090318

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

Free format text: PAYMENT UNTIL: 20120410

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees