近年、例えば、移動体通信や深宇宙通信といった通信分野、及び地上波又は衛星ディジタル放送といった放送分野の研究が著しく進められているが、それに伴い、誤り訂正符号化及び復号の効率化を目的として符号理論に関する研究も盛んに行われている。
符号性能の理論的限界としては、いわゆるシャノン(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による非特許文献1において最初に提案されたものであり、その後、非特許文献2等において再注目されるに至ったものである。
LDPC符号は、近年の研究により、ターボ符号等と同様に、符号長を長くしていくにしたがって、シャノン限界に近い性能が得られることがわかりつつある。また、LDPC符号は、最小距離が符号長に比例するという性質があることから、その特徴として、ブロック誤り確率特性がよく、さらに、ターボ符号等の復号特性において観測される、いわゆるエラーフロア現象が殆ど生じないことも利点として挙げられる。
以上のような利点により、LDPC符号にBCH符号が連接された誤り訂正方式が、ETSI(European Telecommunication Standard Institute)により規格化されたDVB-S2(Digital Video Broadcasting S2)規格等にも採用され、DVB-S2規格は、この誤り訂正方式と、8PSK(8-Phase Shift Keying)以上の多値変調とが組み合わされた規格となっている。また、受信機の性能が同一である場合、DVB-S2規格では、畳み込み符号とリードソロモン符号を連接した方式を採用するDVB-S規格に対して、帯域あたりの伝送容量が25%から30%程度に向上されることが見込まれている。
ところで、LDPC符号の復号は、Gallagerが確率復号(Probabilistic Decoding)と称して提案したアルゴリズムであって、バリアブルノード(variable node(メッセージノード(message node)とも呼ばれる。))と、チェックノード(check node)とからなる、いわゆるタナーグラフ(Tanner graph)上での確率伝播(belief propagation)によるメッセージ・パッシング・アルゴリズムによって行うことが可能である。なお、以下、適宜、バリアブルノードとチェックノードを、単に、ノードともいう。
しかしながら、確率復号においては、各ノード間で受け渡されるメッセージが実数値であることから、解析的に解くためには、連続した値をとるメッセージの確率分布そのものを追跡する必要があり、非常に困難を伴う解析を必要とすることになる。そこで、Gallagerは、LDPC符号の復号アルゴリズムとして、アルゴリズムA又はアルゴリズムBを提案している。
LDPC符号の復号は、一般的には、図1に示すような手順にしたがって行われる。なお、ここでは、フレーム単位でLDPC符号化されたLDPC符号を受信値U0とし、チェックノードから出力されるメッセージをujとし、バリアブルノードから出力されるメッセージをviとする。メッセージとは、値の"0"らしさを、いわゆる対数尤度比(log likelihood ratio)で表現した実数値である。また、ここでは、受信値U0の"0"らしさの対数尤度比を、受信値u0iと表すこととする。
まず、LDPC符号の復号においては、図1に示すように、ステップS11において、受信値U0(受信値u0i)が受信され、メッセージujが"0"に初期化されるとともに、繰り返し処理のカウンタとしての整数をとる変数kが"0"に初期化される。ステップS12において、受信値u0iに基づいて、式(1)に示す演算を行うことによってメッセージviが求められ、さらに、このメッセージviに基づいて、式(2)に示す演算を行うことによってメッセージujが求められる。
なお、式(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)に示すように連続的(再帰的)に用いることによって行われる。
ステップS12では、さらに、変数kが"1"だけインクリメントされる。ステップS13では、変数kが所定の繰り返し復号回数N以上であるか否かが判定される。ステップS13において、変数kがN以上ではないと判定された場合、処理はステップS12に戻り、以下、同様の処理が繰り返される。
一方、ステップS13において、変数kがN以上であると判定された場合、ステップS14において、式(5)に示す演算を行うことによって、最終的に出力する復号結果としてのメッセージvが求められて出力され、LDPC符号の復号処理が終了する。
なお、式(5)の演算は、式(1)の演算とは異なり、バリアブルノードに接続している全ての枝からの入力メッセージを用いて行われる。
このようなLDPC符号の復号は、例えば(3,6)符号の場合には、図2に示すように、各ノード間でメッセージの授受が行われる。なお、図2における"="で示すノード(バリアブルノード)では、式(1)に示した演算が行われ、"+"で示すノード(チェックノード)では、式(2)に示した演算が行われる。特に、アルゴリズムAにおいては、メッセージを2元化し、"+"で示すノードにて、dc-1個の入力メッセージの排他的論理和演算を行い、"="で示すノードにて、受信値Rに対して、dv-1個の入力メッセージが全て異なるビット値であった場合には、符号を反転して出力する。
また、一方で、近年、LDPC符号の復号の実装方法に関する研究も行われている。実装方法について述べる前に、まず、LDPC符号の復号を模式化して説明する。
図3は、(3,6)LDPC符号(符号化率1/2、符号長12)の検査行列H(parity check matrix)の例である。LDPC符号の検査行列Hは、図4のように、タナーグラフを用いて書き表すことができる。なお、図4において、"+"で表わされるのが、チェックノードであり、"="で表わされるのが、バリアブルノードである。チェックノードとバリアブルノードは、それぞれ、検査行列Hの行と列に対応する。チェックノードとバリアブルノードとの間の結線は、枝(edge)であり、検査行列Hの"1"に相当する。即ち、検査行列Hの第j行第i列のコンポーネントが1である場合には、図4において、上からi番目のバリアブルノード("="のノード)と、上からj番目のチェックノード("+"のノード)とが、枝により接続される。枝は、バリアブルノードに対応する符号ビットが、チェックノードに対応する拘束条件を持つことを表わす。なお、図4は、図3の検査行列Hのタナーグラフとなっている。
確率伝播(Belief Propagation)、サムプロダクトアルゴリズム(Sum Product Algorithm)等と呼ばれるLDPC符号の復号方法は、バリアブルノードの演算とチェックノードの演算とを繰り返し行う。
バリアブルノードでは、図5のように、式(1)の演算を行う。すなわち、図5において、計算しようとしている枝に対応するメッセージ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である。
更に、x≧0において、φ(x)=−ln(tanh(x/2))と定義すると、φ-1(x)=2tanh-1(e-x)であるから、式(6)は、式(7)のように書くことができる。
チェックノードでは、図6のように、式(7)の演算を行う。すなわち、図6において、計算しようとしている枝に対応するメッセージ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)で表わされるチェックノード演算を、適度な回路規模と動作周波数で繰り返し行うことが必要である。
次に、図7乃至図10を参照して、復号装置の実装方法の例として、各ノードの演算を1つずつ順次行うことによって復号を行う場合(full serial decoding)の実装方法について説明する。
なお、ここでは、例えば、図7の、36(行)×108(列)の検査行列Hで表現される符号(符号化率2/3、符号長108)を復号するものとする。図7の検査行列Hの1の数は323であり、従って、そのタナーグラフでは、枝の数は323個となる。ここで、図7の検査行列Hでは、0を、"."で表現している。
図8は、各ノードの演算を1つずつ順次行う復号装置の構成例を示している。
図8の復号装置では、動作クロックの1クロック(clock)ごとに、1つの枝に対応するメッセージが計算される。
即ち、図8の復号装置は、2つの枝用メモリ100および102、1つのチェックノード計算器101、1つのバリアブルノード計算器103、1つの受信用メモリ104、1つの制御部105からなる。
図8の復号装置では、枝用メモリ100または102からメッセージデータが1つずつ読み出され、そのメッセージデータを用いて、所望の枝に対応するメッセージデータが計算される。そして、その計算によって求められたメッセージデータが1つずつ後段の枝用メモリ102または100に格納されていく。繰り返し復号を行うことにより、高い誤り訂正能力を実現する際には、この1回復号を行う図8の復号装置を複数個縦列に連接するか、もしくは図8の復号装置を繰り返し用いることによって、繰り返し復号を実現する。なお、ここでは、例えば、図8の復号装置が複数個接続されているものとする。
枝用メモリ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と受信用メモリ104から供給される受信値D104を用い、式(1)に従って演算を行い、その演算の結果得られるメッセージD105を、図示せぬ後段の復号装置の枝用メモリ100に供給する。
受信用メモリ104には、通信路を通して受信されたLDPC符号から計算された、符号ビットの0らしさを表す受信LLR(対数尤度比)である受信値D108を受信し、格納する。なお、LDPC符号は、フレーム単位でLDPC符号化されている。受信用メモリ104は、格納している受信値D108を読み出し、受信値D104としてバリアブルノード計算器103に供給する。
制御部105は、バリアブルノード演算を制御する制御信号D106と、チェックノード演算を制御する制御信号D107を、それぞれチェックノード計算器101とバリアブルノード計算器103に供給する。制御部105は、枝用メモリ100に全ての枝のメッセージが格納されたとき、チェックノード計算器101に制御信号D106を供給し、枝用メモリ102に全ての枝のメッセーが格納されたとき、バリアブルノード計算器103に制御信号D107を供給する。
図9は、図8のチェックノード計算器101の詳細構成例を示している。
なお、図9では、各メッセージが符号ビットを合わせて合計6ビット(bit)に量子化されているものとして、チェックノード計算器101を表している。また、図9では、図7の検査行列Hで表わされるLDPC符号のチェックノード演算が行われる。さらに、図9のチェックノード演算器101には、クロックckが供給され、このクロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図9のチェックノード計算器101は、制御部105から供給される、例えば、1ビットの制御信号D106に基づき、枝用メモリ100から1つずつ読み込まれるメッセージD101を用いて、式(7)にしたがって演算を行う。
即ち、チェックノード計算器101では、検査行列Hの各列に対応するバリアブルノードからの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に再格納する。なお、検査行列Hの1行に亘る全ての枝からのメッセージD101の絶対値D122(|vi|)に対する演算結果が積算された場合、レジスタ123はリセットされる。
検査行列Hの1行に亘るメッセージD101が1つずつ読み込まれ、レジスタ123に1行分の演算結果D123が積算された積算値が格納された場合、制御部105から供給される制御信号D106は、0から1に変化する。例えば、行の重み(row weight)が「9」である場合、制御信号D106は、1から8クロック目までは、「0」となり、9クロック目では「1」となる。
制御信号D106が「1」の場合、セレクタ124は、レジスタ123に格納されている値、即ち、検査行列Hの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に出力して再格納させる。即ち、検査行列Hの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は、検査行列Hの1行に亘る全ての枝からのメッセージD101(メッセージvi)から求められたφ(|vi|)の積算値から、求めたい枝からのメッセージD101(メッセージvi)から求められたφ(|vi|)を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を減算値D128としてLUT128に供給する。
なお、減算器126は、レジスタ125から供給される9ビットの値D126から、FIFOメモリ127から供給される5ビットの値D127を減算するから、その減算結果は、最大で9ビットとなり得るのに対して、5ビットの減算値D128を出力する。このため、レジスタ125から供給される9ビットの値D126から、FIFOメモリ127から供給される5ビットの値D127を減算した減算結果が、5ビットで表せない場合、つまり、減算結果が、5ビットで表すことができる最大値(31(2進数では11111))を越える場合には、減算器126は、減算結果を、5ビットで表すことができる最大値にクリッピングし、5ビットの減算値D128を出力する。
LUT128は、減算値D128(i=1からi=dc−1までのΣφ(|vi|))に対して、式(7)におけるφ-1(Σφ(|vi|))の演算を行った5ビットの演算結果D129(φ-1(Σφ(|vi|)))を出力する。
以上の処理と並行して、EXOR回路129は、レジスタ130に格納されている1ビットの値D131と符号ビットD121との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、1ビットの乗算結果D130をレジスタ130に再格納する。なお、検査行列Hの1行に亘る全ての枝からのメッセージD101の符号ビットD121が乗算された場合、レジスタ130はリセットされる。
検査行列Hの1行に亘る全ての枝からのメッセージD101の符号ビットD121が乗算された乗算結果D130(i=1からdcまでのΠsign(vi))がレジスタ130に格納された場合、制御部105から供給される制御信号D106は、「0」から「1」に変化する。
制御信号D106が「1」の場合、セレクタ131は、レジスタ130に格納されている値、即ち、検査行列Hの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に出力して再格納させる。即ち、検査行列Hの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は、検査行列Hの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が求められる。
なお、図7の検査行列Hの行の重みの最大は9であるため、即ち、チェックノードに供給されるメッセージの最大数は9であるため、チェックノード計算器101は、9個のメッセージ(φ(|vi|))を遅延させるFIFOメモリ127とFIFOメモリ133を有している。行の重みが9未満の行のメッセージを計算するときには、FIFOメモリ127とFIFOメモリ133における遅延量が、その行の重みの値に減らされる。
図10は、図8のバリアブルノード計算器103の詳細構成例を示している。
なお、図10では、各メッセージが符号ビットを合わせて合計6ビット(bit)に量子化されているものとして、バリアブルノード計算器103を表している。また、図10では、図7の検査行列Hで表わされるLDPC符号のバリアブルノード演算が行われる。さらに、図10のバリアブルノード計算機103には、クロックckが供給され、クロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図10のバリアブルノード計算器103は、制御部105から供給される、例えば、1ビットの制御信号D107に基づき、枝用メモリ102から1つずつ読み込まれるメッセージD103と、受信用メモリ104から読み込まれる受信値D104を用いて、式(1)にしたがって演算を行う。
即ち、バリアブルノード計算器103では、検査行列Hの各行に対応するチェックノードからの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に再格納する。なお、検査行列Hの1列に亘る全ての枝からのメッセージD103が積算された場合、レジスタ152はリセットされる。
検査行列Hの1列に亘るメッセージD103が1つずつ読み込まれ、レジスタ152に1列分のメッセージD103が積算された値が格納された場合、制御部105から供給される制御信号D107は、「0」から「1」に変化する。例えば、列の重みが「5」である場合、制御信号D107は、1から4クロック目までは「0」となり、5クロック目では「1」となる。
制御信号D107が「1」の場合、セレクタ153は、レジスタ152に格納されている値、即ち、検査行列Hの1列に亘る全ての枝からのメッセージD103(メッセージuj)が積算された9ビットの値D151(j=1からdVまでのΣuj)を選択し、レジスタ154に出力して格納させる。レジスタ154は、格納している値D151を、9ビットの値D152として、セレクタ153と加減算器156に供給する。制御信号D107が「0」の場合、セレクタ153は、レジスタ154から供給された値D152を選択し、レジスタ154に出力し再格納させる。即ち、検査行列Hの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は、検査行列Hの1列に亘る全ての枝からのメッセージD103(メッセージuj)の積算値から、求めたい枝からのメッセージujを減算して、その減算値(j=1からdv−1までのΣuj)を求める。さらに、加減算器156には、その減算値(j=1からdv−1までのΣuj)に、受信用メモリ104から供給された受信値D104を加算して、その結果得られる6ビットの値をメッセージD105(メッセージvi)として出力する。
以上のように、バリアブルノード計算器103では、式(1)の演算が行われ、メッセージviが求められる。
なお、図7の検査行列Hの列の重みの最大は5であるため、即ち、バリアブルノードに供給されるメッセージの最大数は5であるため、バリアブルノード計算器103は、5個のメッセージ(uj)を遅延させるFIFOメモリ155を有している。列の重みが5未満の列のメッセージを計算するときには、FIFOメモリ155における遅延量が、その列の重みの値に減らされる。
また、加減算器156は、レジスタ154から供給される9ビットの値D152から、FIFOメモリ155から供給される6ビットの値D153を減算するとともに、受信用メモリ104から供給される6ビットの受信値D104を加算する演算を行うから、その演算結果は、6ビットのメッセージD105で表すことができる最小値未満となるか、または最大値を越えることがある。加減算器156は、演算結果が、6ビットのメッセージD105で表すことができる最小値未満である場合には、その最小値にクリッピングし、演算結果が、6ビットのメッセージD105で表すことができる最大値を越える場合には、その最大値にクリッピングする。
図8の復号装置では、検査行列Hの重みにしたがって、制御部105から制御信号が与えられる。そして、図8の復号装置によれば、枝用メモリ100および102、並びにチェックノード計算器101およびバリアブルノード計算器103のFIFOメモリ127,133,155の容量さえ足りれば、制御信号のみを変えることで様々な検査行列HのLDPC符号を復号することができる。
なお、図示しないが、図8の復号装置では、復号の最終段において、式(1)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が、最終的な復号結果として出力される。
図8の復号装置を繰り返し用いて、LDPC符号を復号する場合には、チェックノード演算とバリアブルノード演算とが交互に行われる。即ち、図8の復号装置では、チェックノード計算器101によるチェックノード演算の結果を用いて、バリアブルノード計算器103によりバリアブルノード演算が行われ、バリアブルノード計算器103によるバリアブルノード演算の結果を用いて、チェックノード計算器101によりチェックノード演算が行われる。
従って、323の枝を有する図7の検査行列Hを用いた1回の復号に、323×2=646クロック(clock)を必要とする。例えば、50回の繰り返し復号を行うためには、符号長である108個の符号からなる1フレーム分の符号語を、受信値として受信する間に、646×50=32300クロック動作することが必要であり、受信周波数の約300(≒32300/108)倍の高速動作が必要になる。受信周波数が数十MHzであるとすると、GHz以上の速度での動作を要求されることになる。
また、図8の復号装置を、例えば、50台連接して、LDPC符号を復号する場合には、1フレーム目のバリアブルノード演算を行っている間に、2フレーム目のチェックノード演算を行い、3フレーム目のバリアブルノード演算を行う、というように、複数のバリアブルノード演算とチェックノード演算とを同時に行うことができる。この場合、108個の符号を受信する間に、323個の枝を計算すればよいので、復号装置は、受信周波数の約3(≒323/108)倍の周波数で動作すればよいことになり、十分に実現可能である。しかしながら、この場合、回路規模が、単純には、図8の復号装置の50倍になる。
そこで、図8の復号装置の他に、4つずつのメッセージの計算を同時に行う実装方法について、例えば、非特許文献3に述べられているが、この場合、メモリの異なるアドレスからの同時読み出し、もしくは同時書き込みを避けることが一般的には容易でなく、メモリアクセス制御が困難であるという問題がある。
この問題を解決するため、例えば、非特許文献4、“非特許文献5などに、ランダムな符号ではなく、部分的にパラレルな復号器の実装に親和性の高い符号および復号装置について報告されている。しかしながら、非特許文献4や5などに記載されている復号装置の実現方法は特定の符号のみに対応するものであり、1つの復号器で様々な符号長、符号化率の符号を復号することは困難である。
また、P×Pの単位行列、その単位行列の1のうち1個以上が0になった行列(以下、適宜、準単位行列という)、単位行列または準単位行列をサイクリックシフト(cyclic shift)した行列(以下、適宜、シフト行列という)、単位行列、準単位行列、またはシフト行列のうちの2以上(複数)の和(以下、適宜、和行列という)、P×Pの0行列の組み合わせで表すことが可能な検査行列Hを有するLDPC符号、もしくは行や列の置換により、これらの行列の組み合わせで表すことが可能な検査行列Hを有するLDPC符号であれば、符号長、符号化率が異なる符号であっても復号可能な復号装置が考案されている。
この復号装置では、チェックノード演算を行うチェックノード計算器とバリアブルノード演算を行うバリアブルノード計算器がP個ずつ設けられ、チェックノード演算とバリアブルノード演算がP個ずつ並列に行われることにより、復号が行われる。
さらに、サムプロダクトアルゴリズムを近似して実装する方法なども提案されているが、この方法では、性能の劣化を招いてしまう。
ところで、復号装置を構成する受信用メモリが、受信値u0iを格納する1つのメモリから構成される場合、受信用メモリは、読み出しと書き込みを同時に行うことができないため、受信値u0iの記憶と、その受信値u0iを用いた復号のいずれか一方を行っている間、他方を行うことはできない。従って、受信用メモリの使用効率が悪く、スループットが低下してしまう。
そこで、受信用メモリに、受信値u0iを格納する複数のメモリを設け、読み出しと書き込みを同時に行うようにすることが考えられている。
図11は、2個のメモリが設けられた受信用メモリ200の構成の一例を示している。
図11の受信用メモリ200は、スイッチ211および214、並びに受信値格納用メモリ212および213から構成される。
スイッチ211には、通信路を通して受信されたLDPC符号から計算された、符号ビットの0らしさを表す受信LLRである受信値D211が供給されるとともに、復号装置を構成する制御部から、受信値格納用メモリ212および213のいずれか一方の選択を表す制御信号D2101が供給される。スイッチ211は、制御信号D2101に基づいて、受信値D211を、受信値D212として受信値格納用メモリ212に、または受信値D213として受信値格納用メモリ213に供給する。
受信値格納用メモリ212は、スイッチ211からの受信値D212を格納したり、既に格納している受信値D212を、受信値D214としてスイッチ214に供給する。受信値格納用メモリ213は、受信値格納用メモリ212と同様に、スイッチ211からの受信値D213を格納したり、既に格納している受信値D215をスイッチ214に供給する。
なお、受信値格納用メモリ212および213は、例えば、シングルポートRAM(Random Access Memory)で構成される。また、受信値格納用メモリ212および213のそれぞれに格納されるデータ量、即ち、受信値格納用メモリ212および213のそれぞれに必要とされる記憶容量は、LDPC符号の符号長と、受信値の量子化ビット数との乗算値である。
スイッチ214には、復号装置を構成する制御部から、受信値格納用メモリ212と213の一方の選択を表す制御信号D2102が供給され、スイッチ214は、その制御信号D2102に基づいて、受信値格納用メモリ212から読み出された受信値D214または受信値格納用メモリ213から読み出された受信値D215を、受信値D216としてバリアブルノード計算器に出力する。
なお、制御信号D2101は、受信値格納用メモリ212および213の一方の選択を表し、制御信号D2102は、他方の選択を表す。従って、受信値格納用メモリ212および213の一方で書き込みが行われている間、他方で読出しが行われる。
以上のように、受信用メモリ200では、2つの受信値格納用メモリ212および213が設けられているので、一方で入力される受信値D211を格納している間に、他方で既に格納されている受信値D216を出力することができる。その結果、受信用メモリ200では、連続して入力される受信値D211を、受信値D216として連続出力することができる。
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
E. Yeo, P. Pakzad, B. Nikolic and V. Anantharam, "VLSI Architectures for iterative Decoders in Magnetic Recording Channels", IEEE Transactions on Magnetics, Vol. 37, No. 2, March 2001
T.Zhang,K.K.Parhi,"Joint(3,k)-regular LDPC Code and decoder/encoder design,"IEEE Transactions on Signal Processing,Vol.52,No.4,pp.1065-1079,April 2004
M.M.Mansour,N.R.Shanbhag,"A novel design methodology for high-performance programmable decoder cores for AA-LDPC codes,"Proceedings of IEEE Workshop on Signal Processing Systems 2003(SIPS 2003),pp.29-34,Aug.2003
以下に本発明の実施の形態を説明するが、請求項に記載の構成要件と、発明の実施の形態における具体例との対応関係を例示すると、次のようになる。この記載は、請求項に記載されている発明をサポートする具体例が、発明の実施の形態に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、構成要件に対応するものとして、ここには記載されていない具体例があったとしても、そのことは、その具体例が、その構成要件に対応するものではないことを意味するものではない。逆に、具体例が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その具体例が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
さらに、この記載は、発明の実施の形態に記載されている具体例に対応する発明が、請求項に全て記載されていることを意味するものではない。換言すれば、この記載は、発明の実施の形態に記載されている具体例に対応する発明であって、この出願の請求項には記載されていない発明の存在、すなわち、将来、分割出願されたり、補正により追加される発明の存在を否定するものではない。
本発明の第1の側面の復号装置は、
LDPC(Low Density Parity Check)符号を復号する復号装置(例えば、図12の復号装置400)であって、
間欠的に入力される前記LDPC符号の受信値を一時的に記憶し、記憶している前記受信値を連続的に読み出す第1の記憶手段(例えば、図18の入力バッファ513)と、
前記第1の記憶手段により連続的に読み出される受信値を記憶し、記憶している前記受信値を所定の単位ごとに読み出す第2の記憶手段(例えば、図18の受信値格納用メモリ514)と、
前記第2の記憶手段により所定の単位ごとに読み出された受信値を、前記所定の単位ごとに復号する復号手段(例えば、図12の計算部412,415)と
を備え、
前記第1の記憶手段のビット幅は、前記第2の記憶手段のビット幅より小さい。
本発明の第1の側面の復号装置は、
前記間欠的に入力されるLDPC符号の受信値を前記転送時間に一時的に記憶する第3の記憶手段(例えば、図18のプリバッファ511)
をさらに備え、
前記第1の記憶手段は、前記第3の記憶手段から連続的に読み出された受信値または前記間欠的に入力されるLDPC符号の受信値を一時的に記憶する。
本発明の第1の側面の復号装置は、
前記間欠的に入力されるLDPC符号の受信値を、前記転送時間と前記所定の時間に一時的に記憶する第3の記憶手段(例えば、図23のプリバッファ511)
をさらに備え、
前記第1の記憶手段は、前記第3の記憶手段から連続的に読み出された受信値または前記間欠的に入力されるLDPC符号の受信値を一時的に記憶する。
本発明の第1の側面の復号方法は、
間欠的に入力されるLDPC符号の受信値を一時的に記憶する第1の記憶手段(例えば、図18の入力バッファ513)と、前記第1の記憶手段により連続的に読み出される受信値を記憶する第2の記憶手段(例えば、図18の受信値格納用メモリ514)と、前記第2の記憶手段により所定の単位ごとに読み出された受信値を、前記所定の単位ごとに復号する復号手段(例えば、図12の計算部412,415)とを備え、前記LDPC符号を復号する復号装置(例えば、図12の復号装置400)の復号方法であって、
前記第2の記憶手段よりビット幅が小さい前記第1の記憶手段が、前記間欠的に入力されるLDPC符号の受信値を一時的に記憶し(例えば、図20のステップS25)、
前記第1の記憶手段が、記憶している前記受信値を連続的に読み出し(例えば、図20のステップS31)、
前記第2の記憶手段が、前記第1の記憶手段により連続的に読み出される受信値を記憶し(例えば、図20のステップS32)、
前記第2の記憶手段が、記憶している前記受信値を前記所定の単位ごとに読み出し(例えば、図20のステップS37)、
前記復号手段が、前記第2の記憶手段により所定の単位ごとに読み出された受信値を、前記所定の単位ごとに復号する(例えば、図21のステップS51)
ステップを含む。
本発明の第2の側面の復号装置は、
LDPC(Low Density Parity Check)符号を復号する復号装置(例えば、図12の復号装置400)であって、
間欠的に入力される前記LDPC符号の受信値を一時的に記憶し、記憶している前記受信値を連続的に読み出す第1の記憶手段(例えば、図18の入力バッファ513)と、
前記第1の記憶手段により連続的に読み出される受信値を記憶し、記憶している前記受信値を所定の単位ごとに読み出す第2の記憶手段(例えば、図18の受信値格納用メモリ514)と、
前記第2の記憶手段により所定の単位ごとに読み出された受信値を、前記所定の単位ごとに復号する復号手段(例えば、図12の計算部412,415)と
を備え、
前記第1の記憶手段と前記第2の記憶手段は、直列に接続される。
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
図12は、本発明を適用した復号装置の第1の実施の形態の構成例を示している。
なお、ここでは、図13に示す、6×6の単位行列、準単位行列、シフト行列、和行列、6×6の0行列の組み合わせで表すことが可能な検査行列Hを有するLDPC符号、もしくは行や列の置換により、これらの行列の組み合わせで表すことが可能な検査行列Hを有するLDPC符号を復号することとする。
図13の検査行列Hは、図7に示した検査行列Hを、6×6の行列の単位に間隔を空けて表したものである。また、図13の検査行列Hを構成する6×6の単位行列、準単位行列、シフト行列、和行列、0行列を、以下、適宜、構成行列という。
図12の復号装置400は、復号途中結果格納用メモリ410、サイクリックシフト回路411、6つの計算器4121乃至計算器4126からなる計算部412、復号途中結果格納用メモリ413、サイクリックシフト回路414、6つの計算器4151乃至計算器4156からなる計算部415、スイッチ416、受信用メモリ417、および制御部418から構成され、LDPC符号を6つずつ復号する。
ここで、計算器412k(k=1,2,・・・,6)で行われる演算と、計算器415kで行われる演算について、式を用いて説明する。
具体的には、計算部412は、上述した式(7)と、以下に表す式(8)にしたがう第1の演算を行い、その第1の演算の結果である復号途中結果ujを復号途中結果格納用メモリ410に供給して格納させる。計算部415は、上述した式(5)にしたがう第2の演算を行い、その第2の演算の結果である復号途中結果vを復号途中結果格納用メモリ410に供給して格納させる。
なお、式(8)のudvは、検査行列Hのi列のメッセージを求めようとする枝からのチェックノード演算の途中結果(ここでは、チェックノード演算結果そのもの)を表している。即ち、udvは、求めたい枝に対応する復号途中結果である。
即ち、上述した式(5)にしたがう第2の演算の結果得られる復号途中結果vは、受信値u0iと検査行列Hのi列の各行の1に対応するすべての枝からのチェックノード演算の復号途中結果ujとを加算したものであるので、上述した式(7)に用いられる値viは、式(5)にしたがう第2の演算の結果得られる復号途中結果vから、検査行列Hのi列の、各行の1に対応する枝からのチェックノード演算の復号途中結果ujのうち、メッセージを求めようとする枝からのチェックノード演算の復号途中結果udvを引いた値となる。つまり、式(7)の演算に用いられる値viを求める式(1)の演算は、上述した式(5)と式(8)を組み合わせた演算である。
従って、復号装置400では、計算部412による式(7)および式(8)にしたがう第1の演算と、計算部415による式(5)にしたがう第2の演算とが交互に行われ、計算部415が、最後の第2の演算の結果を復号結果として出力することにより、LDPC符号の繰り返し復号を行うことができる。
なお、ここでは、式(7)と式(8)にしたがう第1の演算結果を、復号途中結果ujと記載するが、この復号途中結果ujは、式(7)のチェックノード演算結果ujに等しい。
また、第2の演算により求められる式(5)のvは、式(1)のバリアブルノード演算結果viに対して、メッセージを求めようとする枝からのチェックノード演算結果ujを加算したものであるから、検査行列Hの1列(1つのバリアブルノード)に対して、1つだけ求められる。
復号装置400では、計算部412が、計算部415による第2の演算の結果である検査行列Hの列に対応する復号途中結果vを用いて、第1の演算を行い、その演算の結果得られる検査行列Hのi列の、各行の1に対応する枝のメッセージ(各チェックノードが各枝に出力するメッセージ)の枝からのチェックノード演算の復号途中結果ujを復号途中結果格納用メモリ413に格納する。従って、復号途中結果格納用メモリ413の容量は、チェックノード演算の結果を格納する場合と同様に、検査行列Hの1の数(全枝数)と量子化ビット数とを乗算した値となる。
一方、計算部415は、計算部412による第1の演算の結果である検査行列Hのi列の、各行の“1”に対応する復号途中結果ujと受信値u0iを用いて、第2の演算を行い、その演算の結果得られるi列に対応する復号途中結果vを復号途中結果格納用メモリ410に格納する。従って、復号途中結果格納用メモリ410に必要な容量は、検査行列Hの“1”の数より少ない検査行列Hの列数、即ち、LDPC符号の符号長と復号途中結果vの量子化ビット数とを乗算した値となる。
その結果、バリアブルノード演算の結果を格納する場合に比べて、復号途中結果格納用メモリ410のメモリ容量を削減することができ、これにより、復号装置400の回路規模を小さくすることができる。
以下、図12の復号装置400の各部の動作について詳細に説明する。
復号途中結果格納用メモリ410には、スイッチ416から、計算部415による第2の演算の結果である検査行列Hの6つの列に対応する6つの復号途中結果D415が復号途中結果D416として供給され、復号途中結果格納用メモリ410は、計算部415から供給された6つの復号途中結果D416(vi)を、第1アドレスから順に格納する。
即ち、復号途中結果格納用メモリ410の第1アドレスには、検査行列Hの列に対応する復号途中結果D416のうち、第1列目から第6列目の復号途中結果D416が格納される。そして、同様に、第2アドレスには、第7列目から第12列目の復号途中結果D416が格納され、第3アドレスには、第13列目から第18列目の復号途中結果D416が格納される。以後、同様に、第103列目から第108列目までの復号途中結果D416が、6個ずつ、第4アドレスから第18アドレスまで格納され、計108個の復号途中結果D416が復号途中結果格納用メモリ410に格納される。従って、復号途中結果格納用メモリ410のワード(word)数は、図13の検査行列Hの列数(LDPC符号の符号長)である108を、同時に読み書きする復号途中結果の数である6で割り算した18となる。
また、復号途中結果格納用メモリ410は、既に格納してある復号途中結果D416から、後段の計算部412が求めようとする復号途中結果ujの対応する検査行列Hの行において“1”になっている復号途中結果D146を6つ同時に読み出し、復号途中結果D410として、サイクリックシフト回路411に供給する。
なお、復号途中結果格納用メモリ410は、例えば、6つの復号途中結果を同時に読み書き可能なシングルポートRAMで構成される。また、復号途中結果格納用メモリ410には、計算部415の第2の演算により演算された列に対応する復号途中結果D416が格納されるので、復号途中結果格納用メモリ410に格納されるデータ量、即ち、復号途中結果格納用メモリ410に必要とされる記憶容量は、復号途中結果D414の量子化ビット数と、検査行列Hの列数(LDPC符号の符号長)との乗算値である。
サイクリックシフト回路411には、復号途中結果格納用メモリ410から6つの復号途中結果D410が供給されるとともに、制御部418から、その復号途中結果D410に対応する検査行列Hの1が、検査行列Hにおいて元となる単位行列などを幾つサイクリックシフトであるかの情報(Matrixデータ)を表す制御信号D420が供給される。サイクリックシフト回路411は、制御信号D420を基に、6つの復号途中結果D410を並べ替えるサイクリックシフトを行い、その結果を復号途中結果D411として、計算部412に供給する。
計算部412は、6つの計算器4121乃至4126からなる。計算部412には、サイクリックシフト回路411から、計算部415による第2の演算の結果得られた6つの復号途中結果D411(vi)が供給されるとともに、復号途中結果格納用メモリ413から、前回、計算器4121乃至4126による第1の演算の結果得られた6つの復号途中結果D413(uj)が供給され、その6つの復号途中結果D411と6つの復号途中結果D413が、計算器4121乃至4126にそれぞれ供給される。また、計算部412には、制御部418から制御信号D421が供給され、その制御信号D421が、計算器4121乃至4126に供給される。なお、制御信号D421は、6つの計算器4121乃至4126に共通の信号である。
計算器4121乃至4126は、それぞれ復号途中結果D411と復号途中結果D413を用いて、式(7)と式(8)にしたがって第1の演算を行い、復号途中結果D412(uj)を求める。計算部412は、計算器4121乃至4126による演算の結果得られる検査行列Hの6つの1に対応する6つの復号途中結果D412を復号途中結果格納用メモリ413に供給する。なお、計算器4121乃至4126の詳細については、後述する図14を参照して説明する。
復号途中結果格納用メモリ413は、例えば、6つの復号途中結果を同時に読み書き可能な、2つのシングルポートRAMから構成される。復号途中結果格納用メモリ413には、計算部412から6つの復号途中結果D412が供給されるとともに、制御部418から復号途中結果格納用メモリ413の読み書きを制御する制御信号D422が供給される。
復号途中結果格納用メモリ413は、制御信号D422に基づいて、計算部412から供給される6つの復号途中結果D412をまとめて格納すると同時に、既に格納してある6つの復号途中結果D412を読み出し、復号途中結果D413として、計算部412とサイクリックシフト回路414に供給する。即ち、復号途中結果格納用メモリ413は、計算部412とサイクリックシフト回路414に供給する復号途中結果D413の読み出しと、計算部412から供給される復号途中結果D412の書き込みとを、同時に行う。
なお、復号途中結果格納用メモリ413には、計算部412の第1の演算により演算された検査行列Hのi列の、各行の1に対応する枝からの第1の演算の復号途中結果D412が格納されるので、復号途中結果格納用メモリ413に格納されるデータ量、即ち、復号途中結果格納用メモリ413に必要とされる記憶容量は、復号途中結果D412の量子化ビット数と、検査行列Hの1の数との乗算値となる。この復号途中結果格納用メモリ413の詳細については、後述する図16を参照して説明する。
サイクリックシフト回路414には、復号途中結果格納用メモリ413から6つの復号途中結果D413(uj)が供給されるとともに、制御部418から、その復号途中結果D413に対応する検査行列Hの1が検査行列Hにおいて元となる単位行列などを幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D423が供給される。サイクリックシフト回路414は、制御信号D423を基に、6つの復号途中結果D413を並べ替えるサイクリックシフトを行い、その結果を復号途中結果D414として、計算部415に供給する。
計算部415は、6つの計算器4151乃至4156からなる。計算部415には、サイクリックシフト回路414から6つの復号途中結果D414が供給され、その復号途中結果D414が、計算器4151乃至4156のそれぞれに供給される。また、計算部415には、受信用メモリ417から6つの受信値D419が同時に供給され、その受信値D419が、計算器4151乃至4156のそれぞれに供給される。さらに、計算部415には、制御部418から制御信号D424が供給され、その制御信号D424が計算器4151乃至4156に供給される。なお、制御信号D424は、6つの計算器4151乃至4156に共通の信号である。
計算器4151乃至4156は、それぞれ復号途中結果D414と受信値D419とを用いて、式(5)にしたがって、それぞれ第2の演算を同時に行い、復号途中結果D415を求める。計算部415は、計算器4151乃至4156の第2の演算の結果得られる6つの復号途中結果D415(v)を、スイッチ416に供給する。なお、計算器4151乃至4156の詳細については、後述する図15を参照して説明する。
以上のように、復号途中結果格納用メモリ410、サイクリックシフト回路411、計算部412、復号途中結果格納用メモリ413、サイクリックシフト回路414、計算部415の順で、データが一巡することで、復号装置400は、1回の復号を行うことができる。
スイッチ416は、制御部418から供給される、復号結果の出力を表す制御信号D425に応じて、計算部415から供給される6つの復号途中結果D415の出力先を変更する。具体的には、スイッチ416は、制御信号D425が供給されない場合、6つの復号途中結果D415を、復号途中結果D416として、復号途中結果格納用メモリ410に供給する。一方、スイッチ416は、制御信号D425が供給される場合、6つの復号途中結果D415を、最終的な復号結果D417として出力する。
受信用メモリ417には、通信路を通して受信されたLDPC符号から計算された、符号ビットの0らしさを表す受信LLRである受信値D418が入力される。
なお、ここでは、通信路を通して、例えば、DVB-S2規格に準拠したLDPC符号が受信されるものとする。この場合、各フレームの実際の値の先頭に、ヘッダが設けられ、また復号装置400の前段の復調処理の同期性能改善のために各フレームの実際の値の途中にパイロットが挿入されるため、このヘッダとパイロットの区間が、実際の値のない無効時間となり、受信されたLDPC符号から計算された受信値D418は、間欠的になる。さらに、復号装置400の動作クロックは、一般的に、前段の復調処理の動作クロックより高速であるため、動作クロックの乗り換えによっても無効時間が発生し、受信値D418は間欠的になる。
受信用メモリ417は、間欠的に入力された受信値D418を格納する。そして、受信用メモリ417は、既に格納している受信値D418を、バリアブルノード演算に必要となる順番に6つずつ読み出し、受信値D419として計算部415に供給する。なお、受信用メモリ417の詳細については、後述する図18を参照して説明する。
制御部418は、予め設定された所定の回数だけ繰り返して復号が行われるように、各部を制御する。具体的には、制御部418は、制御信号D420をサイクリックシフト回路411に、制御信号D421を計算部412に供給することにより、それぞれを制御する。また、制御部418は、制御信号D422を復号途中結果格納用メモリ413に、制御信号D423をサイクリックシフト回路414に、制御信号D424を計算部415にそれぞれ供給することにより、それぞれを制御する。さらに、制御部418は、所定のタイミングで、制御信号D425をスイッチ416に供給することにより、所定の回数だけ繰り返し行われた第2の演算の最後の結果として得られる復号途中結果D415を、復号結果D417として出力させるように、スイッチ416を制御する。
図14は、図12の計算部412の計算器4121の詳細構成例を示すブロック図である。
なお、図14では、計算器4121について説明するが、計算器4122乃至計算器4126も同様に構成される。
また、図14では、前回の計算部412による第1の演算の結果得られる各復号途中結果(udv)が符号ビットを合わせて合計6ビット(bit)に量子化され、計算部415による第2の演算の結果得られる各復号途中結果(v)が9ビットに量子化されているものとして、計算器4121を表している。さらに、図14の計算器4121には、クロックckが供給され、このクロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図14の計算器4121は、制御部418から供給される制御信号D421に基づいて、復号途中結果格納用メモリ413から1つずつ読み込まれる、前回の計算部412による第1の演算の結果得られた復号途中結果D413(udv)と、サイクリックシフト回路411から1つずつ読み込まれる復号途中結果D411(v)とを用いて、式(7)と式(8)にしたがう第1の演算を行う。
即ち、計算器4121には、サイクリックシフト回路411から供給される6つの9ビットの復号途中結果D411(v)のうちの、1つの復号途中結果D411が供給されるとともに、復号途中結果格納用メモリ413から供給される、前回の計算部412による演算の結果である6つの6ビットの復号途中結果D413(uj)のうちの、1つの復号途中結果D413が供給され、その9ビットの復号途中結果D411(v)と6ビットの復号途中結果D413(udv)が、減算器431に供給される。また、計算器4121には、制御部418から制御信号D421が供給され、その制御信号D421がセレクタ435とセレクタ442に供給される。
減算器431は、9ビットの復号途中結果D411(v)から6ビットの復号途中結果D413(uj)を減算し、その6ビットの減算値D431を出力する。即ち、減算器431は、式(8)にしたがって演算を行い、その演算の結果である減算値D431(vi)を出力する。
減算器431により出力された6ビットの減算値D431のうち、最上位ビットの正負を示す符号ビットD432(sign(vi))がEXOR回路440に供給され、下位5ビットの絶対値D433(|vi|)がLUT432に供給される。
LUT432は、絶対値D433(|vi|)に対して、式(7)におけるφ(|vi|)の演算を行った5ビットの演算結果D434(φ(|vi|))を読み出し、加算器433とFIFOメモリ438に供給する。
加算器433は、演算結果D434(φ(|vi|))とレジスタ434に格納されている9ビットの値D435とを加算することにより、演算結果D434を積算し、その結果得られる9ビットの積算値をレジスタ434に再格納する。なお、検査行列Hの1行に亘る全ての1に対応する復号途中結果D411から求められた絶対値D433(|vi|)に対する演算結果が積算された場合、レジスタ434はリセットされる。
検査行列Hの1行に亘る復号途中結果D411が1つずつ読み込まれ、レジスタ434に1行分の演算結果D434が積算された積算値が格納された場合、制御部418から供給される制御信号D421は、0から1に変化する。例えば、行の重み(row weight)が「9」である場合、制御信号D421は、1から8クロック目までは、「0」となり、9クロック目では「1」となる。
制御信号D421が「1」の場合、セレクタ435は、レジスタ434に格納されている値、即ち、検査行列Hの1行に亘る全ての1に対応する復号途中結果D411(復号途中結果v)から求められたφ(|vi|)が積算された9ビットの値D435(i=1からi=dcまでのΣφ(|vi|))を選択し、値D436として、レジスタ436に出力して格納させる。レジスタ436は、格納している値D436を、9ビットの値D437として、セレクタ435と加減算器437に供給する。制御信号D421が「0」の場合、セレクタ435は、レジスタ436から供給された値D437を選択し、レジスタ436に出力して再格納させる。即ち、検査行列Hの1行に亘る全ての1に対応する復号途中結果D411(復号途中結果v)から求められたφ(|vi|)が積算されるまで、レジスタ436は、前回積算されたφ(|vi|)を、セレクタ435と加減算器437に供給する。
一方、FIFOメモリ438は、レジスタ436から新たな値D437(i=1からi=dcまでのΣφ(|vi|))が出力されるまでの間、LUT432が出力した演算結果D434(φ(|vi|))を遅延し、5ビットの値D438として加減算器437に供給する。加減算器437は、レジスタ436から供給された値D437から、FIFOメモリ438から供給された値D438を減算し、その減算結果を、5ビットの減算値D439としてLUT439に供給する。即ち、加減算器437は、検査行列Hの1行に亘る全ての1に対応する復号途中結果D411(復号途中結果v)から求められたφ(|vi|)の積算値から、求めたい枝に対応する復号途中結果、即ち、検査行列Hの所定の1に対応する復号途中結果D411(復号途中結果v)から求められたφ(|vi|)を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を減算値D439としてLUT439に供給する。
LUT439は、減算値D439(i=1からi=dc−1までのΣφ(|vi|))に対して、式(7)におけるφ-1(Σφ(|vi|))の演算を行った5ビットの演算結果D440(φ-1(Σφ(|vi|)))を出力する。
以上の処理と並行して、EXOR回路440は、レジスタ441に格納されている1ビットの値D442と符号ビットD432との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、1ビットの乗算結果D441をレジスタ441に再格納する。なお、検査行列Hの1行に亘る全ての1に対応する復号途中結果D411から求められた符号ビットD432が乗算された場合、レジスタ441はリセットされる。
検査行列Hの1行に亘る全ての1に対応する復号途中結果D411から求められた符号ビットD432が乗算された乗算結果D441(i=1からdcまでのΠsign(vi))がレジスタ441に格納された場合、制御部418から供給される制御信号D421は、「0」から「1」に変化する。
制御信号D421が「1」の場合、セレクタ442は、レジスタ441に格納されている値、即ち、検査行列Hの1行に亘る全ての1に対応する復号途中結果D411から求められた符号ビットD432が乗算された値D442(i=1からi=dcまでのΠsign(vi))を選択し、1ビットの値D443としてレジスタ443に出力して格納させる。レジスタ443は、格納している値D443を、1ビットの値D444としてセレクタ442とEXOR回路445に供給する。制御信号D421が「0」の場合、セレクタ442は、レジスタ443から供給された値D444を選択し、レジスタ443に出力して再格納させる。即ち、検査行列Hの1行に亘る全ての1に対応する復号途中結果D411(復号途中結果v)から求められた符号ビットD432が乗算されるまで、レジスタ443は、前回格納した値を、セレクタ442とEXOR回路445に供給する。
一方、FIFOメモリ444は、レジスタ443から新たな値D444(i=1からi=dcまでのΠsign(vi))がEXOR回路445に供給されるまでの間、符号ビットD432を遅延し、1ビットの値D445としてEXOR回路445に供給する。EXOR回路445は、レジスタ443から供給された値D444と、FIFOメモリ444から供給された値D445との排他的論理和を演算することにより、値D444を、値D445で除算し、1ビットの除算結果を除算値D446として出力する。即ち、EXOR回路445は、検査行列Hの1行に亘る全ての1に対応する復号途中結果D411から求められた符号ビットD432(sign(vi))の乗算値を、検査行列Hの所定の1に対応する復号途中結果D411から求められた符号ビットD432(sign(vi))で除算して、その除算値(i=1からi=dc−1までのΠsign(vi))を除算値D446として出力する。
計算器4121では、LUT439から出力された5ビットの演算結果D440を下位5ビットとするとともに、EXOR回路445から出力された1ビットの除算値D446を最上位ビットとする合計6ビットが復号途中結果D412(復号途中結果uj)として出力される。
以上のように、計算器4121では、式(7)と式(8)の演算が行われ、復号途中結果ujが求められる。
なお、図13の検査行列Hの行の重みの最大は9であるため、即ち、計算器4121に供給される復号途中結果D411(v)と復号途中結果D413(udv)の最大数は9であるため、計算器4121は、9個の復号途中結果D411から求められる9個の演算結果D434(φ(|vi|))を遅延させるFIFOメモリ438と、9個の符号ビットD432を遅延させるFIFOメモリ444を有している。行の重みが9未満の行のメッセージを計算するときには、FIFOメモリ438とFIFOメモリ444における遅延量が、その行の重みの値に減らされる。
図15は、図12の計算部415の計算器4151の構成例を示すブロック図である。
なお、図15では、計算器4151について説明するが、計算器4152乃至計算器4156も同様に構成される。
また、図15では、計算部412による第1の演算の結果得られる各復号途中結果(uj)が符号ビットを合わせて合計6ビットに量子化されているものとして、計算器4151を表している。さらに、図15の計算器4151には、クロックckが供給され、このクロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図15の計算器4151は、制御部418から供給される制御信号D424に基づいて、受信用メモリ417から1つずつ読み込まれる受信値D419(u0i)と、サイクリックシフト回路414から1つずつ読み込まれる復号途中結果D414(uj)とを用いて、式(5)にしたがう第2の演算を行う。
即ち、計算器4151では、サイクリックシフト回路414から、検査行列Hの各行の1に対応する6ビットの復号途中結果D414(uj)が1つずつ読み込まれ、その復号途中結果D414が、加算器471に供給される。また、計算器4151では、受信用メモリ417から6ビットの受信値D419が1つずつ読み込まれ、加算器475に供給される。さらに、計算器4151には、制御部418から制御信号D424が供給され、その制御信号D424は、セレクタ473に供給される。
加算器471は、復号途中結果D414(uj)とレジスタ472に格納されている9ビットの値D471とを加算することにより、復号途中結果D414を積算し、その結果得られる9ビットの積算値を、レジスタ472に再格納する。なお、検査行列Hの1列に亘る全ての1に対応する復号途中結果D414が積算された場合、レジスタ472はリセットされる。
検査行列Hの1列に亘る復号途中結果D414が1つずつ読み込まれ、レジスタ472に1列分の復号途中結果D414が積算された値が格納された場合、制御部418から供給される制御信号D424は、「0」から「1」に変化する。例えば、列の重みが「5」である場合、制御信号D424は、1から4クロック目までは「0」となり、5クロック目では「1」となる。
制御信号D424が「1」の場合、セレクタ473は、レジスタ472に格納されている値、即ち、検査行列Hの1列に亘る全ての枝からの復号途中結果D414(uj)が積算された9ビットの値D471(j=1からdVまでのΣuj)を選択し、レジスタ474に出力して格納させる。レジスタ474は、格納している値D471を、9ビットの値D472として、セレクタ473と加算器475に供給する。制御信号D424が「0」の場合、セレクタ473は、レジスタ474から供給された値D472を選択し、レジスタ474に出力し再格納させる。即ち、検査行列Hの1列に亘る全ての枝からの復号途中結果D414(uj)が積算されるまで、レジスタ474は、前回積算された値を、セレクタ473と加算器475に供給する。
加算器475は、9ビットの値D472と、受信用メモリ417から供給された6ビットの受信値D419とを加算して、その結果得られる6ビットの値を復号途中結果D415(v)として出力する。
以上のように、計算器4151では、式(5)の演算が行われ、復号途中結果vが求められる。
なお、図7の検査行列Hの列の重みの最大は5であるため、即ち、計算器4151に供給される復号途中結果ujの最大数は5であるため、計算器4151は、6ビットの復号途中結果ujを最大5個加算する。従って、計算器4151の出力は、9ビットの値となっている。
図16は、図12の復号途中結果格納用メモリ413の構成例を示すブロック図である。
復号途中結果格納用メモリ413は、スイッチ501と504、および2つのシングルポートRAMである復号途中結果格納用RAM502と503から構成される。
この復号途中結果格納用メモリ413の各部について詳細に説明する前に、まず、復号途中結果格納用RAM502と503へのデータの格納方法について説明する。
復号途中結果格納用RAM502と503は、計算部412による第1の演算の結果得られ、スイッチ501を介して供給された復号途中結果D412を格納する。
具体的には、復号途中結果格納用RAM502の第1アドレスから第9アドレスには、図13の検査行列Hの第1行目から第6行目までの1に対応する復号途中結果D412(D501)が、各行ともに横方向(列方向)に詰めた形に(0を無視した形で)格納される。
即ち、第j行第i列を、(j,i)と表すこととすると、復号途中結果格納用RAM502の第1アドレスには、図13の検査行列Hの構成行列である(1,1)から(6,6)の6×6の単位行列の1に対応するデータが、第2アドレスには、図13の検査行列Hの構成行列である(1,25)から(6,30)のシフト行列(6×6)の単位行列を右方向に5つだけサイクリックシフトしたシフト行列)の1に対応するデータが格納される。第3アドレスから第8アドレスも同様に図13の検査行列Hの構成行列と対応づけてデータが格納される。そして、第9アドレスには、検査行列Hの(1,102)から(6,108)のシフト行列(6×6の単位行列のうちの1行目の1を0に置き換えて1つだけ左方向にサイクリックシフトしたシフト行列)の1に対応するデータが格納される。ここで、図13の検査行列Hの(1,102)から(6,108)のシフト行列においては、1行目に1がないため、第9アドレスにはデータが格納されない。
また、復号途中結果格納用RAM502の第10アドレスから第18アドレスには、図13の検査行列Hの第13行目から第18行目までの1に対応するデータが格納される。即ち、第10アドレスには、検査行列Hの(13,7)から(18,12)の6×6の単位行列を右方向に5つだけサイクリックシフトした行列の1に対応するデータが格納され、第11アドレスには、検査行列Hの(13,13)から(18,18)の和行列(6×6の単位行列と、6×6の単位行列を右方向に1つだけサイクリックシフトしたシフト行列との和である和行列)を構成するシフト行列の1に対応するデータが格納される。また、第12アドレスには、検査行列Hの(13,13)から(18,18)の和行列を構成する単位行列の1に対応するデータが格納される。以下、第13アドレスから第18アドレスについても、検査行列Hに対応づけてデータが格納される。
即ち、重みが2以上の構成行列については、その構成行列を、重みが1であるP×Pの単位行列、そのコンポーネントである1のうち1個以上が0になった準単位行列、または単位行列もしくは準単位行列をサイクリックシフトしたシフト行列のうちの複数の和の形で表現したときの、その重みが1の単位行列、準単位行列、またはシフト行列の1の位置に対応するデータ(単位行列、準単位行列、またはシフト行列に属する枝に対応するメッセージの復号途中結果)は、同一アドレスに格納される。
同様に、復号途中結果格納用RAM502の第19アドレスから第27アドレスには、図13の検査行列Hに対応づけて、第25行目から第30行目までの1に対応するデータが格納される。即ち、復号途中結果格納用RAM502のワード数は、27である。
復号途中結果格納用RAM503の第1アドレスから第9アドレスには、図13の検査行列Hの第7行目から第12行目までの1に対応する復号途中結果D412(D502)が、各行ともに横方向(列方向)に詰めた形に(0を無視した形で)格納される。
即ち、復号途中結果格納用RAM503の第1アドレスには、検査行列Hの構成行列である(7,1)から(12,6)の和行列(6×6の単位行列を右方向に2つだけサイクリックシフトした第1のシフト行列と、右方向に4つだけサイクリックシフトした第2のシフト行列の和である和行列)を構成する第1のシフト行列の1に対応するデータが、第2アドレスには、検査行列Hの構成行列である(7,1)から(12,6)の和行列を構成する第2のシフト行列の1に対応するデータが格納される。以下、第3アドレスから第9アドレスも同様に検査行列Hの構成行列と対応づけてデータが格納される。
同様に、復号途中結果格納用RAM503の第10アドレスから第18アドレスには、図13の検査行列Hの第19行目から第24行目までの1に対応するデータが、第19アドレスから第27アドレスには、検査行列Hの第31行目から第36行目までの1に対応するデータが、図13の検査行列Hに対応づけて格納される。即ち、復号途中結果格納用RAM503のワード数は、27である。
上述したように、復号途中結果格納用RAM502と503のワード(word)数は、27である。即ち、ワード数は、検査行列Hの行の重み(row weight)の9と行数の36とを乗算し、その乗算結果(検査行列Hの1の数)を、同時に読み出す復号途中結果D501の数の6で除算し、さらに、復号途中結果格納用メモリ413が有する復号途中結果格納用RAMの個数の2で除算した値となる。
以下、図16の復号途中結果格納用メモリ413の各部の動作について詳細に説明する。
復号途中結果格納用メモリ413には、計算部412により第1の演算が行われる場合、計算部412から第1の演算の結果得られる復号途中結果D412(uj)が供給され、その復号途中結果D412が復号途中結果格納用RAM502または復号途中結果格納用RAM503のうちの一方の所定のアドレスに書き込まれると同時に、他方から、前回の計算部412による第1の演算の結果得られた復号途中結果D412(uj)が読み出され、計算部412に出力される。一方、計算部415により第2の演算が行われる場合、復号途中結果格納用メモリ413は、復号途中結果格納用RAM502または復号途中結果格納用RAM503に書き込みを行わず、どちらか一方のRAMの所定のアドレスから復号途中結果を読み出して、サイクリックシフト回路414に供給する。
具体的には、スイッチ501には、計算部412から6つの復号途中結果D412が供給されるとともに、その復号途中結果D412を書き込むメモリとして、復号途中結果格納用RAM502または復号途中結果格納用RAM503の一方の選択を表す制御信号D4221が制御部418から供給される。スイッチ501は、制御信号D4221に基づいて、復号途中結果格納用RAM502または復号途中結果格納用RAM503の一方を選択し、その選択した一方に、6つの復号途中結果D412を供給する。
復号途中結果格納用RAM502には、スイッチ501から6つの復号途中結果D412が、復号途中結果D501として供給されるとともに、制御部418からアドレスを表す制御信号D4222が供給される。復号途中結果格納用RAM502は、制御信号D4222が表すアドレスに既に格納されている前回の計算部412による第1の演算の結果得られた6つの復号途中結果D501を読み出し、復号途中結果D503としてスイッチ504に供給する。また、復号途中結果格納用RAM502は、制御信号D4222が表すアドレスに、スイッチ501から供給された6つの復号途中結果D501を格納する。
復号途中結果格納用RAM503には、スイッチ501から6つの復号途中結果D412が、復号途中結果D502として供給されるとともに、制御部418からアドレスを表す制御信号D4223が供給される。復号途中結果格納用RAM503は、制御信号D4223が表すアドレスに既に格納されている前回の計算部412による第1の演算の結果得られた6つの復号途中結果D502を読み出し、復号途中結果D504としてスイッチ504に供給する。また、復号途中結果格納用RAM503は、制御信号D4223が表すアドレスに、スイッチ501から供給された6つの復号途中結果D502を格納する。
スイッチ504には、復号途中結果格納用RAM502から復号途中結果D503が供給されるか、あるいは復号途中結果格納用RAM503から復号途中結果D504が供給される。また、制御部418から、復号途中結果格納用RAM502または復号途中結果格納用RAM503の一方の選択を表す制御信号D4224が供給される。スイッチ504は、制御信号D4224に基づいて、復号途中結果格納用RAM502または復号途中結果格納用RAM503の一方を選択し、その選択した一方から供給された6つの復号途中結果を、6つの復号途中結果D413として計算部412とサイクリックシフト回路414に供給する。
図17は、復号途中結果格納用メモリ413の復号途中結果格納用RAM502と復号途中結果格納用RAM503の読み出しと書き込みの動作を説明するタイミングチャートである。
なお、図17において、横軸は、時間(t)を表している。また、図17では、左上から順に右下方向になるに連れて大きくなるように構成行列に付された数字iの構成行列の1に対応するデータの読み出しをRiと表し、そのデータの書き込みをWiと表す。
復号途中結果格納用メモリ413では、計算部412により第1の演算が行われる場合、復号途中結果格納用RAM502が、制御信号D4222に基づいて、既に格納している、前回の計算部412の第1の演算の結果得られた復号途中結果D501のうち、同一アドレスに格納している検査行列Hの第1行目から第6行目までの1に対応する復号途中結果D501を、1クロックに6つずつ、9回(9クロック分)連続して読み出し(R0乃至R8)、スイッチ504を介して、計算部412に供給する。即ち、図13の検査行列Hの行重みは、9であるため、検査行列Hの各行の1に対応する復号途中結果は9つあり、復号途中結果格納用RAM502は、第1行目から第6行目までの1に対応する6つの復号途中結果D501を、6つ単位で9回連続して読み出し、計算部412に供給する。
次に、復号途中結果格納用RAM503は、制御信号D4223に基づいて、既に格納している、前回の計算部412による第1の演算の結果得られた復号途中結果D502のうち、同一アドレスに格納している検査行列Hの第7行目から第12行目までの1に対応する復号途中結果D502を、6つ単位で9回連続して読み出し(R9乃至R17)、スイッチ504を介して、計算部412に供給する。そして、以降も同様に、復号途中結果格納用RAM502および503は、交互に、復号途中結果D501またはD502を、6つ単位で9回連続して読み出し、計算部412に供給する。
ところで、ノードを1つずつ計算する計算器4121乃至4126または4151乃至4156では、ノード次数(node degree)分の遅延が生じる。例えば、計算器4121乃至4126では9クロック分の遅延が生じる。また、復号装置400が100MHzを超える高速動作を行う場合、計算器4121乃至4126では、さらに3クロック分程度の遅延が生じ、3クロック分程度のパイプライン化が必要となる。
即ち、計算部412が第1の演算を行うために必要な時間、即ち復号途中結果格納用メモリ413から復号途中結果D413が読み出されてから、その復号途中結果D413を用いた第1の演算の結果得られる復号途中結果D412が復号途中結果格納用メモリ413に供給されるまでの時間は、12クロック分の時間T1となる。
この場合、復号途中結果格納用RAM502から復号途中結果D503の1回目の読み出し(R0)が開始されてから時間T1後に、計算部412から復号途中結果格納用メモリ413への、第1の演算の結果得られる検査行列Hの第1行目から第6行目までの1に対応する6つの復号途中結果D412の供給が開始される。その復号途中結果D413は、スイッチ501を介して復号途中結果D501として復号途中結果格納用RAM502に供給され、復号途中結果格納用RAM502は、その復号途中結果D501を、制御信号D4222に基づいて、既に読み出された復号途中結果D503が格納されていたアドレスに9回続けて格納する(W0乃至W8)。
即ち、復号途中結果格納用RAM502により復号途中結果D503の9回の読み出し(R0乃至R8)が終了してから、復号途中結果格納用RAM502により復号途中結果D501の9回の格納(W0乃至W8)が開始されるまでに、3クロック分の時間Tw(=T1−9)の待ち時間が生じる。
その結果、復号途中結果格納用RAM503からの9回の読み出し(R9乃至R17)が終了してから、時間Twが経過後に復号途中結果格納用RAM502への9回の格納(W0乃至W8)が終了する。従って、復号途中結果格納用RAM503からの9回の読み出し(R9乃至R17)が終了してから、復号途中結果格納用RAM502からの9回の読み出し(R18乃至R26)を開始するまでに、時間Twの待ち時間が必要となる。
図18は、図12の受信用メモリ417の詳細構成例を示している。
図18の受信用メモリ417は、プリバッファ511、スイッチ512、入力バッファ513、および受信値格納用メモリ514により構成される。受信用メモリ417には、受信値D418が間欠的に入力され、この受信値D418は、プリバッファ511とスイッチ512の端子512Aに供給される。
プリバッファ511には、入力バッファ513から、プリバッファ511の選択を表す制御信号D515が供給される。プリバッファ511は、その制御信号D515に応じて、受信値D418を一時的に記憶する。なお、プリバッファ511の記憶容量は、入力バッファ513から受信値格納用メモリ514へ1フレーム分の受信値D513を転送するために必要な時間内に、受信可能な受信値D418の最大数Mと、量子化ビット数との乗算値である。
これに対して、後述するように、入力バッファ513と受信値格納用メモリ514の記憶容量は、1フレーム分の受信値のデータ量、即ち、符号長と量子化ビット数の乗算値であるので、プリバッファ511の記憶容量は、入力バッファ513と受信値格納用メモリ514の記憶容量に比べて十分に小さい。
また、プリバッファ511は、記憶している受信値D418を受信値D511として連続的に読み出し、スイッチ512を介して入力バッファ513に供給する。さらに、プリバッファ511は、読み出し済みの受信値D418を削除する。プリバッファ511は、記憶している受信値D418がなくなった場合、スイッチ512に、端子512Aの選択を表す制御信号D514を供給する。
スイッチ512は、3つの端子512A乃至512Cを有している。端子512Aには受信値D418が入力され、端子512Bにはプリバッファ511が接続され、端子512Cには入力バッファ513が接続される。スイッチ512は、プリバッファ511から供給される制御信号D514に応じて、端子512Aと端子512Cを接続し、端子512Aに入力される受信値D418を、受信値D512として入力バッファ513に入力する。また、スイッチ512は、入力バッファ513から供給される制御信号D515に応じて、端子512Bと端子512Cを接続し、プリバッファ511から読み出された受信値D511を、受信値D512として入力バッファ513に入力する。
入力バッファ513の記憶容量は、例えば、符号長と量子化ビット数の乗算値であり、入力バッファ513は、スイッチ512により入力される受信値D512を、一時的に1フレーム分記憶する。なお、ここでは、入力バッファ513のビット幅は、受信値格納用メモリ514のビット幅の1/N(Nは2以上の整数)倍であり、ワード数は、受信値格納用メモリ514のワード数のN倍であるものとするが、入力バッファ513のビット幅は、受信値格納用メモリ514のビット幅より小さければ、1/N倍である必要はない。
入力バッファ513は、1フレーム分の受信値D512の書き込みを完了した場合、例えば、入力バッファ513の空き容量がゼロになった場合、プリバッファ511とスイッチ512に制御信号D515を入力する。そして、入力バッファ513は、記憶している1フレーム分の受信値D512を、受信値D513として連続的に読み出し、受信値格納用メモリ514に転送する。即ち、入力バッファ513は、1フレーム単位、つまり、符号語単位で、受信値D512を連続的に読み出し、受信値格納用メモリ514に転送する。
受信値格納用メモリ514は、入力バッファ513に直列に接続され、受信値格納用メモリ514の記憶容量は、符号長と量子化ビット数の乗算値である。受信値格納用メモリ514は、入力バッファ513から転送されてくる1フレーム分の受信値D513を、第1アドレスから順に格納する。
なお、上述したように、6つの計算器4151乃至4156は、同時に第2の演算を行うので、受信値格納用メモリ514は、6つの受信値D419を同時に計算器4151乃至4156のそれぞれに供給する必要がある。従って、受信値格納用メモリ514は、例えば、6つの受信値D419を同時に読み出し可能なシングルポートRAMで構成され、受信値格納用メモリ514のビット幅は、量子化ビット数の6倍のビットであり、ワード数は、符号長(いまの場合、108)から6を除算した値(いまの場合、18)である。
具体的には、受信値格納用メモリ514の第1アドレスには、検査行列Hの列に対応する受信値D513のうち、第1列から第6列目の受信値D513が格納される。そして、同様に、第2アドレスには、第7列目から第12列目の受信値D513が格納され、第3アドレスには、第13列目から第18列目の受信値D513が格納される。以後、同様に、第103列目から第108列目までの受信値D513が、6個ずつ、第4アドレスから第18アドレスまで格納され、計108個の受信値D513が受信値格納用メモリ514格納される。
受信値格納用メモリ514は、記憶している1フレーム分の受信値D513を、ワード単位で6つずつ読み出し、その読み出した6つの受信値D513を6つの受信値D419として計算部415(図12)に供給する。
以上のように、受信用メモリ417では、入力バッファ513と受信値格納用メモリ514が直列に接続され、計算部415への受信値D419の出力が、1つの受信値格納用メモリ514で行われるので、入力バッファ513は、6つの受信値D419を同時に読み出す必要がなく、入力バッファ513のビット幅を、量子化ビット数の6倍のビットより小さくすることができる。その結果、量子化ビット数の6倍のビット幅を有する2つの受信値格納用メモリ212および213から構成される従来の受信用メモリ104(図11)に比べて、受信用メモリ417を構成するRAMマクロの数を削減し、これにより、受信用メモリ417の回路規模を削減することができる。
次に、図19を参照して、図18の受信用メモリ417におけるタイミングについて説明する。
図19Aに示すように、時刻tAにおいて、受信用メモリ417に対する、先頭からi番目のフレームであるフレーム#iの受信値D418の間欠的な入力が開始されると、図19Bに示すように、プリバッファ511は、入力バッファ513からの制御信号D515に応じて、受信値D418の書き込みを開始し、後述するフレーム#iの1つ前のフレーム#i−1の受信値D513の、受信値格納用メモリ514への転送が終了する時刻tBまでの時間Aの間、受信値D418の書き込みのみを行う(図中、Wi)。なお、フレーム#iの受信値D418の先頭には、上述したように、実際の値の前にヘッダが付加されているので、プリバッファ511は、実際の値が受信される時刻tA´から書き込みを開始する。
また、時刻tA´から時刻tBまでの間、図19Dに示すように、スイッチ512は、入力バッファ513からの制御信号D515に応じて、プリバッファ511を選択するが、図19Bに示したように、プリバッファ511は読み出しを行わない。従って、図19Cに示すように、プリバッファ511からスイッチ512には何も供給されず、図19Eに示すように、スイッチ512から入力バッファ513にも何も供給されない。
一方、図19Fに示すように、時刻tAにおいて、入力バッファ513は、既に記憶しているフレーム#i−1の受信値D512の読み出し、および、その受信値D512の受信値格納用メモリ514への転送を開始し(図中、Ri-1)、これにより、図19Gに示すように、受信値格納用メモリ514には、フレーム#i−1の受信値D512が受信値D513として供給される。そして、図19Hに示すように、受信値格納用メモリ514は、入力バッファ513から供給される、フレーム#i−1の受信値D513の書き込みを開始する(図中、Wi-1)。
時刻tAから時間A後の時刻tBにおいて、図19F乃至図19Hに示すように、入力バッファ513から受信値格納用メモリ514へのフレーム#i−1の受信値D513の転送が終了すると、図19Bに示すように、プリバッファ511は、間欠的に供給されるフレーム#iの受信値D418の書き込みと、既に書き込まれているフレーム#iの受信値D418の連続的な読み出しの両方を開始する(図中、Wi&Ri)。従って、図19Cに示すように、プリバッファ511からスイッチ512には、フレーム#iの受信値D418が、無効時間分を詰めた状態で受信値D511として入力される。
このとき、図19Dに示すように、スイッチ512は、プリバッファ511を選択したままであり、図19Eに示すように、プリバッファ511から読み出されたフレーム#iの受信値D511を、受信値D512として入力バッファ513に供給する。また、図19Fに示すように、時刻tBにおいて、入力バッファ513は、フレーム#i−1の受信値D513の読み出しを終了し、スイッチ512から供給される、フレーム#iの受信値D512の書き込みを開始する(図中、Wi)。従って、図19Gに示すように、受信値格納用メモリ514には、受信値D513が入力されなくなる。このとき、図19Hに示すように、受信値格納用メモリ514は、時間Aに書き込んだフレーム#i−1の受信値D513を6個単位で受信値D419として読み出し、計算部415に供給する。その結果、フレーム#i−1の繰り返し復号が行われる(繰り返し復号#i−1)。
ところで、プリバッファ511には受信値D418が間欠的に供給されるが、プリバッファ511からは受信値D418が連続的に読み出されるので、受信値D418の書き込みと読み出しを両方行うと、所定の時間経過後にプリバッファ511が空になる。図19の例では、この所定の時間は時間Bであるものとする。
従って、図19Bに示すように、プリバッファ511は、時刻tBから時間B後の時刻tCにおいて、受信値D418の書き込みと読み出しを終了し(図中、NO)、これにより、図19Cに示すように、プリバッファ511からスイッチ512への受信値D511の供給が終了される。このとき、プリバッファ511は、制御信号D514をスイッチ512に供給し、スイッチ512は、図19Dに示すように、その制御信号D514に応じて端子512Aを選択する。その結果、図19Eに示すように、間欠的に入力されるフレーム#iの受信値D418が、そのまま受信値D512として入力バッファ513に入力される。
また、図19Fに示すように、時刻tCにおいても、入力バッファ513は、スイッチ512から入力される、フレーム#iの受信値D512の書き込みを続け、時刻tDにおいて、フレーム#iの受信値D512のすべての書き込みを完了すると、書き込みを終了する。即ち、入力バッファ513は、時刻tBから時刻tCまでの時間Bの間、プリバッファ511から連続的に入力される受信値D511を受信値D512として書き込み、時刻tCから時刻tDまでの時間Cの間、プリバッファ511を介さずに間欠的に直接入力される受信値D418を受信値D512として書き込むことにより、フレーム#iのすべての受信値D418を書き込む。
このように、時間BとCの間、入力バッファ513は書き込みを行っており、読み出しを行わないので、図19Gに示すように、時刻tCから時間Cの間においても、入力バッファ513から受信値格納用メモリ514に受信値D513は供給されない。従って、時刻tCから時間Cの間においても、フレーム#i−1の繰り返し復号は行われ続ける。そして、時刻tCから時間C後の時刻tDにおいて、フレーム#i−1の所定の回数の復号が完了すると、その復号は終了される。
次に、図19Aに示すように、時刻tDにおいて、受信用メモリ417に対する、フレーム#iの次のフレーム#i+1の受信値D418の間欠的な入力が開始されると、時刻tAから時刻tDまでの時間A乃至Cと同様に処理が行われる。
即ち、時刻tDから時刻tEまでの時間Aの間、図19F乃至図19Hに示すように、時刻tBから時刻tDまでの間に入力バッファ513に書き込まれたフレーム#iの受信値D512の読み出し、および、その受信値D512の受信値格納用メモリ514への転送が行われるとともに(図中、Ri)、受信値格納用メモリ514からの6つの受信値D419の書き込みが行われる(図中、Wi)。また、図19Bに示すように、フレーム#i+1の実際の値が受信される時刻tD´から時刻tEまでの間、プリバッファ511は、フレーム#i+1の受信値D418の書き込みのみを行い(図中、Wi+1)、図19Dに示すように、スイッチ512は、入力バッファ513からの制御信号D515に応じて、プリバッファ511を選択するので、図19Cと図19Eに示すように、プリバッファ511から入力バッファ513には何も供給されない。
そして、図19B乃至図19Fに示すように、時刻tEから時刻tFまでの時間Bおよび時刻tFから時刻tGまでの時間Cの間、時刻tDからプリバッファ511に書き込まれるフレーム#i+1の受信値D418と、プリバッファ511に書き込まれずに直接供給されるフレーム#i+1の受信値D418が入力バッファ513に書き込まれ(図中、Wi+1)、この間、フレーム#iの復号が所定の回数繰り返される(図中、繰り返し復号#i)。
以上のように、受信値D418は間欠的に供給されるので、連続的にプリバッファ511から読み出される、時間AとBの間に受信される各フレームの受信値D418の無効時間を利用して、その無効時間以内であれば、入力バッファ513から受信値格納用メモリ514に受信値D513を転送することができる。従って、受信用メモリ417では、入力バッファ513と受信値格納用メモリ514を直列に接続することができ、その結果、上述したように回路規模を削減することができる。
なお、受信値D513を転送する時間Aが、時間BおよびCと比較して十分に短くなるように設計することは容易である。この設計により、時間Aが長いことによる復号劣化を抑制することができる。
次に、図20を参照して、図18の受信用メモリ417における受信値処理について説明する。この受信値処理は、例えば、各フレームの受信値D418が受信用メモリ417に間欠的に入力されたとき、開始される。
ステップS21において、プリバッファ511は、間欠的に入力される受信値D418の書き込みを開始する。ステップS22において、スイッチ512は、前のフレームに対するステップS31の処理で、入力バッファ513から制御信号D515が入力されたかどうかを判定する。
ステップS22において、制御信号D515が入力されていないと判定された場合、即ち、前のフレームの受信値D512の入力バッファ513への書き込みが終了していない場合、スイッチ512は、制御信号D515が入力されるまで待機する。一方、ステップS22において、制御信号D515が入力されたと判定された場合、即ち、前のフレームの受信値D512の入力バッファ513への書き込みが終了した場合、ステップS23において、スイッチ512は、その制御信号D515に応じて、プリバッファ511と入力バッファ513を接続する。
ステップS24において、プリバッファ511は、制御信号D515に応じて、既に書き込まれている受信値D418の受信値D511としての連続的な読み出しを開始する。即ち、プリバッファ511は、受信値D418の書き込みを行うとともに、受信値D511の読み出しを行う。プリバッファ511から読み出された受信値D511は、スイッチ512に供給され、受信値D512として入力バッファ513に供給される。
ステップS25において、入力バッファ513は、スイッチ512を介してプリバッファ511から供給される受信値D512の書き込みを開始する。ステップS26において、プリバッファ511は、プリバッファ511が空になったかどうか、即ち、プリバッファ511に書き込まれた受信値D418がすべて読み出されたかどうかを判定し、プリバッファ511が空になっていないと判定した場合、空になるまで待機する。
一方、ステップS26において、プリバッファ511が空になったと判定された場合、ステップS27において、プリバッファ511は、受信値D418の書き込みと読み出しを終了する。ステップS28において、プリバッファ511は、制御信号D514をスイッチ512に出力する。ステップS29において、スイッチ512は、プリバッファ511から供給される制御信号D514に応じて、端子512Aと入力バッファ513を接続する。
ステップS30において、入力バッファ513は、1フレーム分の受信値D512が書き込まれたかどうか、即ち、入力バッファ513の空き容量がゼロになったかどうかを判定する。ステップS30で1フレーム分の受信値D512がまだ書き込まれていないと判定された場合、1フレーム分の受信値D512がすべて書き込まれるまで待機する。
一方、ステップS30で1フレーム分の受信値D512が書き込まれたと判定された場合、ステップS31において、入力バッファ513は、制御信号D515をプリバッファ511とスイッチ512に出力する。この制御信号D515は、いま入力バッファ513に書き込まれた受信値D512に対応するフレームの次のフレームに対する、ステップS22の処理で、スイッチ512に入力されたかどうかが判定される。
ステップS32において、入力バッファ513は、書き込まれている1フレーム分の受信値D512を受信値D513として読み出し、その受信値D513の受信値格納用メモリ514への転送を開始する。
ステップS33において、受信値格納用メモリ514は、入力バッファ513から転送されてきた受信値D513の書き込みを開始する。ステップS34において、入力バッファ513は、1フレーム分の受信値D513の転送が完了したかどうか、即ち、書き込まれている受信値D513のすべてを転送したかどうかを判定し、1フレーム分の受信値D513の転送がまだ完了していないと判定した場合、転送が完了するまで待機する。
一方、ステップS34で1フレーム分の受信値D513の転送が完了したと判定された場合、ステップS35において、入力バッファ513は、受信値D513の転送を終了する。ステップS36において、受信値格納用メモリ514は、入力バッファ513から転送されてきた受信値D513の書き込みを終了する。
ステップS37において、受信値格納用メモリ514は、書き込まれた受信値D513を、ワード単位で6つずつ読み出し、受信値D419として、計算部415に出力する。そして、処理は終了する。
次に、図21を参照して、図12の復号装置400における復号処理について説明する。この復号処理は、例えば、受信用メモリ417から各フレームの受信値D419が6つ単位で読み出されたとき、開始される。
ステップS49において、制御部418は、復号途中結果格納用RAM502および503(図16)のうちのいずれか1つを読み出しメモリとして選択し、その選択を表す制御信号D4224をスイッチ504に供給する。スイッチ504は、制御信号D4224に基づいて、復号途中結果格納用RAM502または503を選択し、その選択した復号途中結果格納用RAM502または503から6つ単位で供給される復号途中結果D503またはD504を、復号途中結果D413としてサイクリックシフト回路414と計算部412に供給する。
ステップS49の処理後は、ステップS50に進み、サイクリックシフト回路414は、復号途中結果格納用メモリ413のスイッチ504から供給される6つの復号途中結果D413(uj)をサイクリックシフトし、計算部415に供給する。
具体的には、サイクリックシフト回路414には、復号途中結果格納用メモリ413から6つ単位で復号途中結果D413が供給されるとともに、制御部418から、その復号途中結果D413に対応するMatrixデータを表す制御信号D423が供給される。サイクリックシフト回路414は、制御信号D423を基に、6つの復号途中結果D413をサイクリックシフトし、その結果を復号途中結果D414として、計算部415に供給する。
ステップS51において、計算部415は、第2の演算を行い、その演算の結果である復号途中結果D415をスイッチ416に供給する。
具体的には、計算部415には、ステップS50でサイクリックシフト回路414から6つの復号途中結果D414が供給されるとともに、受信用メモリ417から6つの受信値D419が供給され、復号途中結果D414と受信値D419が、計算部415の計算器4151乃至4156それぞれに1つずつ供給される。さらに、計算部415には、制御部418から制御信号D424が供給され、その制御信号D424が計算器4151乃至4156に供給される。
計算器4151乃至4156は、復号途中結果D414と受信値D419を用いて、制御信号D424に基づいて、式(5)にしたがって、それぞれ第2の演算を行い、その第2の演算の結果得られる検査行列Hの列に対応する復号途中結果D415(v)をスイッチ416に供給する。
なお、受信用メモリ417から供給された受信値D419に対して、まだ第1の演算が行われておらず、復号途中結果格納用メモリ413に復号途中結果D412が格納されていない場合、計算部415は、復号途中結果ujを初期値に設定し、第2の演算を行う。
ステップS52において、制御部418は、予め設定された所定の回数だけ復号が行われたかどうか、即ち、予め設定された所定の回数だけ第1の演算と第2の演算が行われたかどうかを判定する。ステップS52で、所定の回数だけまだ復号が行われていないと判定された場合、ステップS53において、スイッチ416は、計算部415から供給される6つの復号途中結果D415(v)を復号途中結果格納用メモリ410に供給する。
ステップS54において、復号途中結果格納用メモリ410は、スイッチ416から供給された6つの復号途中結果D415(v)を、同一アドレスに格納する。
ステップS55において、制御部418は、計算部415により、検査行列Hの列に対応する全ての復号途中結果D415が演算されたかどうかを判定し、全ての復号途中結果D415が演算されていないと判定した場合、ステップS49に戻り、上述した処理を繰り返す。
一方、ステップS55において、制御部418は、計算部415により、検査行列Hの列に対応する全ての復号途中結果D415が演算されたと判定した場合、ステップS56において、サイクリックシフト回路411は、制御部418から供給される制御信号D420を基に、復号途中結果格納用メモリ410から供給される6つの復号途中結果D410(v)をサイクリックシフトし、その結果を6つ単位で復号途中結果D411として、計算部412に供給する。
ステップS57において、計算部412は、第1の演算を行い、その第1の演算の結果である復号途中結果D412を復号途中結果格納用メモリ413に供給する。
具体的には、計算部412には、ステップS56でサイクリックシフト回路411から6つの復号途中結果D411(v)が供給されるとともに、後述するステップS59で既に格納された前回の計算部412による第1の演算の結果得られた6つの復号途中結果D413(uj)が供給され、その復号途中結果D411とD413が、計算部412の計算器4121乃至4126のそれぞれに1つずつ供給される。さらに、計算部412には、制御部418から制御信号D421が供給され、その制御信号D421が計算器4121乃至4126に供給される。
計算器4121乃至4126は、それぞれ復号途中結果D411とD413を用いて、制御信号D421に基づいて、式(7)と式(8)にしたがって、それぞれ第1の演算を行い、その第1の演算の結果得られる復号途中結果D412(uj)を復号途中結果格納用メモリ413に供給する。
なお、受信用メモリ417から供給された受信値D419に対して、まだ第1の演算が行われておらず、復号途中結果格納用メモリ413に復号途中結果D412が格納されていない場合、計算部412は復号途中結果udvを0に設定する。具体的には、例えば、受信値D419に対する復号を行う前に、復号途中結果格納用メモリ413が0に初期化されるか、または計算部412が復号途中結果格納用メモリ413からの入力を0にマスクする。
ステップS58において、制御部418は、復号途中結果格納用RAM502および503のうちのいずれか1つを格納メモリとして選択し、その選択を表す制御信号D4221をスイッチ501(図16)に供給する。スイッチ501は、制御信号D4221に基づいて、6つの復号途中結果D412を格納する復号途中結果格納用RAM502または503を選択し、その選択した復号途中結果格納用RAM502または503に、復号途中結果D412を復号途中結果D501またはD502として供給する。
ステップS59において、復号途中結果格納用RAM502または503は、ステップS58でスイッチ501から供給された6つの復号途中結果D501またはD502(uj)を、同一のアドレスに格納する。
ステップS60において、制御部418は、計算部412により、検査行列Hの全ての1に対応する復号途中結果D412が演算されたかどうかを判定し、全ての復号途中結果D412が演算されていないと判定した場合、処理はステップS56に戻り、上述した処理が繰り返される。
一方、ステップS60において、計算部412により、全ての1に対応する復号途中結果D412が演算されたと判定された場合、処理はステップS49に戻り、上述した処理が繰り返される。
また、ステップS52で所定の回数だけ復号が行われたと判定された場合、ステップS61において、制御部418は、制御信号D425をスイッチ416に出力する。ステップS62において、スイッチ416は、直前のステップS51で得られる復号途中結果D415を、最終的な復号結果D417として出力する。
図22は、本発明を適用した復号装置の第2の実施の形態の構成例を示している。
図22の復号装置600は、復号途中結果格納用メモリ410、サイクリックシフト回路411、6つの計算器4121乃至計算器4126からなる計算部412、復号途中結果格納用メモリ413、サイクリックシフト回路414、6つの計算器4151乃至計算器4156からなる計算部415、スイッチ416、受信用メモリ611、および制御部612から構成され、制御部612は、受信用メモリ611から供給される、復号の終了を要求する復号終了要求信号D601に応じて、制御信号D425をスイッチ416に供給する。なお、図12と同一のものには同一の符号を付してあり、説明は繰り返しになるので省略する。
受信用メモリ611には、図12の受信用メモリ417と同様に、受信値D418が入力され、受信用メモリ611は、その受信値D418を格納する。そして、受信用メモリ611は、既に格納している受信値D418を、バリアブルノード演算に必要となる順番に6つずつ読み出し、受信値D419として計算部415に供給する。また、受信用メモリ611は、いまの復号対象の次のフレームの受信値D418が読み出し可能な状態となったとき、復号終了要求信号D601を制御部612に供給する。なお、受信用メモリ611の詳細については、後述する図23を参照して説明する。
制御部612は、受信用メモリ611から復号終了要求信号D601が供給されるまで繰り返して復号が行われるように、各部を制御する。具体的には、制御部612は、制御信号D420をサイクリックシフト回路411に、制御信号D421を計算部412に供給することにより、それぞれを制御する。また、制御部612は、制御信号D422を復号途中結果格納用メモリ413に、制御信号D423をサイクリックシフト回路414に、制御信号D424を計算部415にそれぞれ供給することにより、それぞれを制御する。さらに、制御部612は、復号終了要求信号D601に応じて、制御信号D425をスイッチ416に供給することにより、復号終了要求信号D601が供給されるまでに繰り返し行われた、第2の演算の最後の結果として得られる復号途中結果D415を、復号結果D417として出力させるように、スイッチ416を制御する。
図23は、図22の受信用メモリ611の詳細構成例を示している。
図23の受信用メモリ611は、プリバッファ511、スイッチ512、受信値格納用メモリ514、および入力バッファ621により構成される。なお、図23において、図18と同一のものには同一の符号を付してあり、説明は繰り返しになるので省略する。
入力バッファ621の記憶容量は、図18の入力バッファ513と同様に、例えば、符号長と量子化ビット数の乗算値であり、入力バッファ621は、スイッチ512により入力される受信値D512を、一時的に1フレーム分記憶する。なお、入力バッファ621のビット幅は、入力バッファ513と同様に、受信値格納用メモリ514のビット幅の1/N倍であり、ワード数は、受信値格納用メモリ514のN倍であるものとする。
入力バッファ621は、1フレーム分の受信値D512の書き込みを完了した場合、その受信値D512に対応するフレームを復号対象とするため、そのフレームの1つ前のフレームの復号終了要求信号D601を制御部612に供給する。その後、所定の時間が経過したとき、入力バッファ621は、いま書き込みが完了したフレームの前のフレームの復号が終了されたと判定し、プリバッファ511とスイッチ512に制御信号D515を入力するとともに、記憶している1フレーム分の受信値D512を、受信値D513として読み出し、受信値格納用メモリ514に転送する。これにより、復号対象とするフレームが変更される。
次に、図24を参照して、図23の受信用メモリ611におけるタイミングについて説明する。
なお、図24A乃至図24Eは、図19A乃至図19Eと同様であるので、説明は適宜省略する。
図24Aに示すように、時刻tAにおいて、受信用メモリ611に対する、フレーム#iの受信値D418の間欠的な入力が開始される、即ち、フレーム#i−1の入力バッファ621への書き込みが完了すると、図24Hに示すように、入力バッファ621は、フレーム#i−1の前のフレーム#i−2の復号終了要求信号D601を制御部612に供給し、図24Fに示すように、入力バッファ621は、所定の時間Dが経過するまで待機する。
そして、所定の時間Dが経過した時刻tHにおいて、図24Fに示すように、入力バッファ621は、書き込みが完了しているフレーム#i−1の受信値D512の読み出し、および、その受信値D512の受信値格納用メモリ514への転送を開始し(図中、Ri-1)、これにより、図24Gに示すように、受信値格納用メモリ514には、フレーム#i−1の受信値D512が受信値D513として供給される。そして、図24Iに示すように、受信値格納用メモリ514は、入力バッファ621から供給される、フレーム#i−1の受信値D513の書き込みを開始する(図中、Wi-1)。
なお、時刻tAから時間A後の時刻tBから、時刻tDまでの時間BおよびCの間の処理は、図19A乃至図19Hで示した場合と同様であるので、説明は省略する。
次に、図24Aに示すように、時刻tDにおいて、受信用メモリ611に対する、フレーム#i+1の受信値D418の間欠的な入力が開始されると、時刻tAから時刻tDまでの時間A乃至Cと同様に処理が行われる。
即ち、時刻tDにおいて、図24Hに示すように、入力バッファ621は、時刻tBから時刻tDまでに書き込んだフレーム#iの前のフレーム#i−1の復号終了要求信号D601を制御部612に供給し、図24Fに示すように、入力バッファ621は、所定の時間Dが経過するまで待機する。
そして、所定の時間Dが経過した時刻tJにおいて、入力バッファ621は、時刻tBから時刻tDまでの間に書き込んだフレーム#iの受信値D512の読み出し、および、その受信値D512の受信値格納用メモリ514への転送を開始し(図中、Ri)、図24Iに示すように、受信値格納用メモリ514は、入力バッファ621から供給される、フレーム#iの受信値D513の書き込みを開始する(図中、Wi)。なお、フレーム#i−1の復号は、図24Iに示すように、復号終了要求信号D601が出力された後終了される。図24の例では、復号終了要求信号D601が出力されてから、所定の時間Dが経過した時刻tJに、復号が終了されている。
以上のように、受信値D418は間欠的に供給されるので、連続的にプリバッファ511から読み出される、時間AとBの間に受信される各フレームの受信値D418の無効時間を利用して、その無効時間以内であれば、復号終了要求信号D601を出力して所定の時間待機し、その後、入力バッファ621から受信値格納用メモリ514に受信値D513を転送することができる。
また、受信用メモリ611は、復号終了要求信号D601を制御部612に供給し、制御部612は、その復号終了要求信号D601が供給されるまで復号を繰り返して行うように各部を制御するので、可能な限り多くの回数の復号を行うことができる。その結果、予め設定された所定の回数だけ復号を繰り返し行う場合に比べて、さらに復号性能を向上させることができる。また、復号の回数を予め設定しておく手間を省くことができる。
次に、図25を参照して、図23の受信用メモリ611における受信値処理について説明する。この受信値処理は、例えば、各フレームの受信値D418が受信用メモリ611に間欠的に入力されたとき、開始される。
ステップS111乃至S121の処理は、図20のステップS21乃至S31の処理と同様であるので、説明は省略する。
ステップS122において、入力バッファ621は、復号終了要求信号D601を制御部612に出力する。ステップS123において、入力バッファ621は、ステップS122で復号終了要求信号D601を出力してから、所定の時間が経過したかどうかを判定し、所定の時間が経過していないと判定した場合、所定の時間が経過するまで待機する。
ステップS123において、ステップS122で復号終了要求信号D601を出力してから、所定の時間が経過したと判定された場合、ステップS124において、入力バッファ621は、図20のステップS32の処理と同様に、書き込まれている1フレーム分の受信値D512を受信値D513として読み出し、その受信値D513の受信値格納用メモリ514への転送を開始する。
ステップS124乃至S129の処理は、図20のステップS32乃至S37の処理と同様であるので、説明は省略する。
次に、図26を参照して、図22の復号装置600における復号処理について説明する。この復号処理は、例えば、受信用メモリ611から各フレームの受信値D419が6つ単位で読み出されたとき、開始される。
ステップS149乃至S151の処理は、図21のステップS49乃至S51の処理と同様であるので説明は省略する。
ステップS152において、制御部612は、受信用メモリ611の入力バッファ621から復号終了要求信号が供給されたかどうかを判定し、復号終了要求信号が供給されていないと判定した場合、ステップS153において、スイッチ416は、図21のステップS53の処理と同様に、計算部415から供給される6つの復号途中結果D415(v)を復号途中結果格納用メモリ410に供給する。ステップS154乃至S160の処理は、図21のステップS54乃至S60の処理と同様であるので、説明は省略する。
一方、ステップS152で入力バッファ621から復号終了要求信号が供給されたと判定された場合、ステップS161において、制御部612は、図21のステップS61の処理と同様に、制御信号D425を出力する。ステップS162において、スイッチ416は、図21のステップS62の処理と同様に、直前のステップS51で得られる復号途中結果D415を、最終的な復号結果D417として出力する。
なお、図12の復号装置400および図22の復号装置600では、第1の演算と第2の演算を繰り返し行うことにより復号を行ったが、チェックノード演算とバリアブルノード演算を繰り返し行うことにより復号を行うようにすることもできる。
また、上述の場合には、説明を簡単にするために、Pが6の場合、即ち、検査行列Hを構成する構成行列の行数および列数が6の場合を例に挙げたが、構成行列の行数および列数Pは必ずしも6である必要はなく、検査行列Hによって異なる値を取ることもあり得る。例えば、Pは360や392であってもよい。
例えば、Pが360である場合、量子化ビット数が5ビットであり、DVB-S2規格に準拠した、符号長が64800であるLDPC符号を復号するとすると、図18の受信用メモリ417や図23の受信用メモリ611では、受信値格納用メモリ514のビット幅が、1800(=360×5)ビットとなり、ワード数が、180(=64800/360)ワードとなる。即ち、受信値格納用メモリ514は、ビット幅とワード数の比が10対1の多ビット小ワードのメモリとなる。ここで、例えばNが10であるとすると、入力バッファ513や621のビット幅は、180(=1800/10)ビットとなり、ワード数は1800(=180×10)ワードとなる。即ち、入力バッファ513は、ビット幅とワード数の比が1対10の小ビット多ワードのメモリとなる。
これに対して、従来の図11の受信用メモリ200では、上述したように、受信値格納用メモリ212および213の両方のビット幅が、1800(=360×5)ビットとなり、ワード数が180(=5×1800/360)ワードとなる。即ち、受信値格納用メモリ212および213は、両方とも、ビット幅とワード数の比が10対1の多ビット小ワードのメモリとなる。
以上のように、図18の受信用メモリ417や図23の受信用メモリ611では、多ビット小ワードの受信値格納用メモリ514と、小ビット多ワードの入力バッファ513を1つずつ設ければよいので、図11に示した多ビット小ワードの受信値格納用メモリ212および213を両方設ける必要のある受信用メモリ200に比べて、受信用メモリ417(611)を構成するマクロの数を削減することができる。その結果、受信用メモリ417(611)の回路規模を削減することができる。
また、図18の受信用メモリ417および図23の受信用メモリ611は、全ノードの演算を同時に行うことによって復号を行う場合(full parallel decoding)の復号装置にも適用することができる。
この復号装置の実装法については、例えば、C. Howland and A. Blanksby, "Parallel Decoding Architectures for Low Density Parity Check Codes", Symposium on Circuits and Systems, 2001に記載されている。
図27は、全ノードの演算を同時に行う本発明を適用した復号装置の第3の実施の形態の構成例を示している。
なお、ここでも、図13の検査行列Hで表現される符号(符号化率2/3、符号長108)を復号するものとする。
図27の復号装置1100では、枝用メモリ1202または1206から、323個ある枝に対応するメッセージデータを全て同時に読み出し、そのメッセージデータを用いて、323個の枝に対応する新たなメッセージデータを演算する。さらに、その演算の結果求められた新たなメッセージデータが全て同時に後段の枝用メモリ1206または1202に格納されていく。そして、図27の復号装置1100を繰り返し用いることで繰り返し復号が実現される。
図27において、復号装置1100は、1つの受信用メモリ1205、2つの枝入れ替え装置1200および1203、2つの枝用メモリ1202および1206、36個のチェックノード計算器12011乃至120136、108個のバリアブルノード計算器12041乃至1204108からなる。以下、各部について詳細に説明する。
枝用メモリ1206は、前段のバリアブルノード計算器12041乃至1204108からのメッセージD12061乃至D1206108を全て同時に格納し、次の時刻(次のクロックのタイミング)に、メッセージD12061乃至D1206108を、メッセージD12071乃至D1207108として読み出し、次段の枝入れ替え装置1200に、メッセージD1200(D12001乃至D1200108)として供給する。枝入れ替え装置1200は、枝用メモリ1206から供給されたメッセージD12001乃至D1200108の順番を、図13の検査行列Hにしたがって並び替え、チェックノード計算器12011乃至120136に、メッセージD12011乃至D120136として供給する。
チェックノード計算器12011乃至120136は、枝入れ替え装置1200から供給されるメッセージD12011乃至D120136を用いて式(7)にしたがって演算を行い、その演算の結果得られるメッセージD12021乃至D120236を、枝用メモリ1202に供給する。
枝用メモリ1202は、前段のチェックノード計算器12011乃至120136から供給されるメッセージD12021乃至D120236を全て同時に格納し、次の時刻に、そのすべてのメッセージD12021乃至D120236を、メッセージD12031乃至D120336として、次段の枝入れ替え装置1203に供給する。
枝入れ替え装置1203は、枝用メモリ1202から供給されたメッセージD12031乃至D120336の順番を図13の検査行列Hにしたがって並び替え、バリアブルノード計算器12041乃至1204108に、メッセージD12041乃至D1204108として供給する。
バリアブルノード計算器12041乃至1204108は、枝入れ替え装置1203から供給されるメッセージD12041乃至D1204108と、受信用メモリ1205から供給される受信値D12051乃至D1205108を用いて式(1)にしたがって演算を行い、その演算の結果得られるメッセージD12061乃至D1206108を、次段の枝用メモリ1206に供給する。
受信用メモリ1205は、図18の受信用メモリ417または図23の受信用メモリ611と同様に構成される。即ち、図示は省略するが、受信用メモリ1205は、プリバッファ、スイッチ、入力バッファ、および受信値格納用メモリにより構成され、受信値格納用メモリのビット幅は、バリアブルノード数である108個と量子化ビット数の乗算値であり、入力バッファのビット幅は、その乗算値の1/N倍である。
受信用メモリ1205には、通信路を通して受信されたLDPC符号から計算された、符号ビットの0らしさを表す受信LLRである受信値D12051乃至D1205108が入力される。受信用メモリ1205は、その受信値12051乃至D1205108を格納する。そして、受信用メモリ1205は、既に格納している108個の受信値D12051乃至D1205108をすべて同時に読み出し、受信値D12051乃至D1205108としてバリアブルノード計算器12041乃至1204108に供給する。なお、受信用メモリ1205が図23の受信用メモリ611と同様に構成される場合には、復号終了要求信号が、各部を制御する制御部(図示せず)に出力される。
図28は、チェックノード演算を同時に行う図27のチェックノード計算器1201m(m=1,2,・・・,36)の構成例を示している。
図28のチェックノード計算器1201mでは、図9のチェックノード計算器101と同様にして、式(7)のチェックノード演算が行われるが、そのチェックノード演算が、すべての枝について同時に行われる。
即ち、図28のチェックノード計算器1201mでは、枝入れ替え装置1200から供給される図13の検査行列Hの各列に対応するバリアブルノードからのメッセージD12211乃至D12219(vi)が全て同時に読み込まれ、それぞれの下位5ビットである絶対値D1222乃至D12229(|vi|)がLUT12211乃至12219にそれぞれ供給される。また、メッセージD12211乃至D12219(vi)の最上位ビットである1ビットの符号ビットD12231乃至D12239が、EXOR回路12261乃至12269にそれぞれ供給されるとともに、EXOR回路1225に供給される。
LUT12211乃至12219は、絶対値D1222乃至D12229(|vi|)に対して、式(7)におけるφ(|vi|)の演算を行った5ビットの演算結果D12241乃至D12249(φ(|vi|))をそれぞれ読み出し、それぞれを減算器12231乃至12239に供給する。また、LUT12211乃至12219は、演算結果D12241乃至D12249(φ(|vi|))を加算器1222に供給する。
加算器1222は、演算結果D12241乃至D12249(φ(|vi|))の値の総和(1行分の演算結果の総和)を演算し、9ビットの演算結果D1225(i=1から9のΣφ(|vi|))を、減算器12231乃至12239に供給する。減算器12231乃至12239は、演算結果D1225から、演算結果D12241乃至D12249(φ(|vi|))をそれぞれ減算し、5ビットの減算値D12271乃至D12279を、LUT12241乃至12249に供給する。即ち、減算器12231乃至12239は、全ての枝からのメッセージviから求められたφ(|vi|)の積算値から、求めたい枝からのメッセージviから求められたφ(|vi|)を減算して、その減算値D12271乃至D12279(i=1から8までのΣφ(|vi|))をLUT12241乃至12249にそれぞれ供給する。LUT12241乃至12249は、減算値D12271乃至D12279に対して、式(7)におけるφ-1(Σφ(|vi|))の演算を行った5ビットの演算結果D12281乃至D12289を読み出して出力する。
一方、EXOR回路1225は、全ての符号ビットD12231乃至D12239の排他的論理和を演算することにより、符号ビットD12231乃至D12239の乗算を行い、1ビットの乗算値D1226(1行分の符号ビットの乗算値(i=1から9までのΠsign(vi)))をEXOR回路12261乃至12269にそれぞれ供給する。EXOR回路12261乃至12269は、乗算値D1226と符号ビットD12231乃至D12239それぞれとの排他的論理を演算することにより、乗算値D1226を、符号ビットD12231乃至D12239それぞれで除算した1ビットの除算値D12291乃至D12299(i=1から8までのΠsign(vi))を求めて出力する。
チェックノード計算器1201mでは、LUT12241乃至12249から出力された5ビットの演算結果D12281乃至D12289それぞれを下位5ビットとするとともに、EXOR回路12261乃至12269から出力された除算値D12291乃至D12299それぞれを最上位ビットとする合計6ビットが、チェックノード演算の結果得られるメッセージD12301乃至D12309として出力される。
以上のように、チェックノード計算器1201mでは、式(7)の演算が行われ、メッセージujが求められる。
なお、図28では、各メッセージが符号ビットを合わせて合計6ビットに量子化されているものとして、チェックノード計算器1201mを表している。また、図28の回路は1つのチェックノードに相当する。ここで処理の対象としている図13の検査行列Hについては、その行数である36行のチェックノードが存在するため、図27の復号装置1100は、図28に示したようなチェックノード計算器1201mを36個有している。
また、図28のチェックノード計算器1201mでは、9個のメッセージを同時に計算することができる。そして、ここで処理の対象としている図13の検査行列Hの行の重みは、第1行が8で、第2乃至第36行が9であるため、即ち、チェックノードに供給されるメッセージの数が、8のケースが1つと、9のケースが29あるため、チェックノード計算器12011は、図28の回路と同様の8つのメッセージを同時に計算することができる回路構成となっており、残りのチェックノード計算器12012乃至120136は、図28の回路と同一構成となっている。
図29は、バリアブルノード演算を同時に行う図27のバリアブルノード計算器1204p(p=1,2,・・・,108)の構成例を示している。
図29のバリアブルノード計算器1204pでは、図10のバリアブルノード計算器103と同様にして、式(1)のバリアブルノード演算が行われるが、そのバリアブルノード演算が、すべての枝について同時に行われる。
即ち、図29のバリアブルノード計算器1204pでは、枝入れ替え装置1203から供給される、検査行列Hの各行に対応するチェックノードからの6ビットのメッセージD12511乃至D12515(メッセージuj)が全て同時に読み込まれ、それぞれ加減算器12521乃至12525に供給されるとともに、加算器1251に供給される。また、バリアブルノード計算器1204pには、受信用メモリ1205から受信値D1271が供給され、その受信値D1271は、加減算器12521乃至12525に供給される。
加算器1251は、全てのメッセージD12511乃至D12515(メッセージuj)を積算し、9ビットの積算値D1252(1列分のメッセージの総和値(j=1から5までのΣuj))を加減算器12521乃至12525に供給する。加減算器12521乃至12525は、積算値D1252から、メッセージD12511乃至D12515(メッセージuj)をそれぞれ減算する。即ち、加減算器12521乃至12525は、全ての枝からのメッセージujの積算値D1252から、求めたい枝からのメッセージD12511乃至D12515(メッセージuj)をそれぞれ減算して、その減算値(j=1から4までのΣuj)を求める。
さらに、加減算器12521乃至12525は、減算値(j=1から4までのΣuj)に、受信値D1271(u0i)を加算して、6ビットの加算値D12531乃至D12535を、バリアブルノード演算の結果として出力する。
以上のように、バリアブルノード計算器1204pでは、式(1)の演算が行われ、メッセージviが求められる。
なお、図29では、各メッセージが符号ビットを合わせて合計6ビットに量子化されているものとして、バリアブルノード計算器1204pを表している。また、図29の回路は1つのバリアブルノードに相当する。ここで処理の対象としている図13の検査行列Hについては、その列数である108列のバリアブルノードが存在するから、図27の復号装置1100は、図29に示したような回路を108個有している。
また、図29のバリアブルノード計算器1204pでは、5個のメッセージを同時に計算することができる。そして、ここで処理の対象としている図13の検査行列Hは、重みが5,3,2,1の列が、それぞれ、18列、54列、35列、1列あるので、バリアブルノード計算器12041乃至1204108のうちの18個は、図29の回路と同一構成となっており、残りの54個、35個、1個は、図29の回路と同様の3,2,1つのメッセージをそれぞれ同時に計算することができる回路構成となっている。
なお、図示しないが、図27の復号装置1100においても、図8における場合と同様に、復号の最終段においては、式(1)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が最終的な復号結果として出力される。
図27の復号装置1100によれば、323個ある枝に対応するメッセージすべてを1クロックで同時に計算することができる。
図27の復号装置1100を繰り返し用いて復号する場合には、チェックノード演算とバリアブルノード演算とを交互に行い、1回の復号を2クロックで行うことができる。従って、例えば、50回の復号を行うためには、符号長である108個の符号からなる1フレーム分の符号語を、受信値として受信する間に、2×50=100クロック動作すれば良いことになり、ほぼ受信周波数と同一の動作周波数でよいことになる。一般的に、LDPC符号は、符号長が数千から数万と大きいことから、図27の復号装置1100を用いれば、復号回数を極めて多くすることができ、誤り訂正性能の向上を期待することができる。
但し、図27の復号装置1100は、タナーグラフのすべての枝に対応するメッセージの演算を、並列で行うため、回路規模が、符号長に比例して大きくなる。また、図27の復号装置1100を、ある符号長の、ある符号化率の、ある検査行列Hを持つLDPC符号の復号を行う装置として構成した場合、その復号装置1100において、他の符号長や、他の符号化率、他の検査行列Hを持つLDPC符号の復号を行うことは困難となる。
なお、本実施の形態では、符号長108、符号化率2/3のLDPC符号を用いたが、LDPC符号の符号長や符号化率は、どのような値であってもよい。
また、検査行列Hが、構成行列の行数および列数Pの倍数でない場合は、検査行列Hの端数の外側にすべて0(all 0)の成分を付けてPの倍数とみなして適用することができる場合がある。
一般的に、LDPC符号は符号長が数千から数万と大きいため、Pの値も数百の大きさを持つものが使われる。その場合には、更に本発明に係る復号装置を用いる効果は大きくなる。
なお、上述したLDPC符号を復号する復号装置は、例えば、(ディジタル)衛星放送を受信するチューナなどに適用することができる。
400 復号装置, 412,415 計算部, 417 受信用メモリ, 511 プリバッファ, 513 入力バッファ, 514 受信値格納用メモリ, 600 復号装置, 611 受信用メモリ, 621 入力バッファ, 1100 復号装置, 1205 受信用メモリ, 1201 チェックノード計算器, 1204 バリアブルノード計算器