JP2007081602A - 復号装置および復号方法 - Google Patents

復号装置および復号方法 Download PDF

Info

Publication number
JP2007081602A
JP2007081602A JP2005264731A JP2005264731A JP2007081602A JP 2007081602 A JP2007081602 A JP 2007081602A JP 2005264731 A JP2005264731 A JP 2005264731A JP 2005264731 A JP2005264731 A JP 2005264731A JP 2007081602 A JP2007081602 A JP 2007081602A
Authority
JP
Japan
Prior art keywords
bit
value
quantized value
quasi
message
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.)
Withdrawn
Application number
JP2005264731A
Other languages
English (en)
Inventor
Mineshi Yokogawa
峰志 横川
Osamu Shintani
修 新谷
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 JP2005264731A priority Critical patent/JP2007081602A/ja
Publication of JP2007081602A publication Critical patent/JP2007081602A/ja
Withdrawn legal-status Critical Current

Links

Images

Abstract

【課題】LDPC符号の復号性能の劣化を抑えつつ、装置規模を小さくする。
【解決手段】準チェックノード計算器412は、LDPC符号の復号のためのチェックノードのチェックノード演算と、LDPC符号の復号のためのバリアブルノードのバリアブルノード演算の一部とを、準チェックノード演算として行う。準バリアブルノード計算器415は、バリアブルノード演算の他の一部を、準バリアブルノード演算として行う。準バリアブルノード演算で行われる積算では、その積算の対象の量子化値よりも1ビットだけ多いビット数の量子化値で表現される積算結果が出力される。本発明は、例えば、衛星放送を受信するチューナに内蔵される、LDPC符号を復号する復号装置など適用できる。
【選択図】図28

Description

本発明は、復号装置および復号方法に関し、特に、低密度パリティ検査符号(LDPC符号)による符号化が施された符号の復号を、装置の大規模化を抑えつつ精度良く行うことができるようにする復号装置および復号方法に関する。
近年、例えば、移動体通信や深宇宙通信といった通信分野、及び地上波又は衛星ディジタル放送といった放送分野の研究が著しく進められているが、それに伴い、誤り訂正符号化及び復号の効率化を目的として符号理論に関する研究も盛んに行われている。
符号性能の理論的限界としては、いわゆるシャノン(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で表すものとすると、そのような検査行列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行列(k行n列の行列)である場合には、検査行列Hは、n-k行n列の行列である。
符号化装置は、生成行列Gに対してkビットからなる情報メッセージ(ベクトル)uを乗算し、nビットからなる符号語(LDPC符号)c(=uG)を生成する。この符号化装置によって生成された符号語cは、値が"0"のビットが"+1"に、値が"1"のビットが"−1"にといったようにマッピングされて送信され、所定の通信路を介して受信側において受信されることになる。
なお、例えば、nビットの符号語cが、kビットの情報メッセージuに続けて、n-kビットのパリティビットを配置したビット列に一致する組織符号である場合に、n-k行n列の検査行列Hにおいて、nビットの符号語cのうちのkビットの情報メッセージuに対応するn-k行k列の部分を情報部というとともに、n-kビットのパリティビットに対応するn-k行n-k列の部分をパリティ部ということとすると、パリティ部が、下三角行列または上三角行列になっていれば、情報メッセージuのLDPC符号への符号化は、検査行列Hを用いて行うことができる。
即ち、例えば、検査行列Hが、図2に示すように、情報部と、下三角行列のパリティ部とで構成され、パリティ部の下三角の部分の要素が、すべて1であるとすると、符号語cのパリティビットの1番目のビットは、情報メッセージuのうちの、検査行列Hの情報部の第1行において1になっている要素に対応するビットのEXOR(排他的論理和)を演算した値となる。
また、符号語cのパリティビットの2番目のビットは、情報メッセージuのうちの、検査行列Hの情報部の第2行において1になっている要素に対応するビットと、パリティビットの1番目のビットのEXORを演算した値となる。
さらに、符号語cのパリティビットの3番目のビットは、情報メッセージuのうちの、検査行列Hの情報部の第3行において1になっている要素に対応するビットと、パリティビットの1番目および2番目のビットのEXORを演算した値となる。
以下、同様にして、符号語cのパリティビットのi番目のビットは、情報メッセージuのうちの、検査行列Hの情報部の第i行において1になっている要素に対応するビットと、パリティビットの1乃至i-1番目のビットのEXORを演算した値となる。
以上のようにして、n-kビットのパリティビットを求め、kビットの情報メッセージuに続けて配置することにより、nビットの符号語cを得ることができる。
一方、LDPC符号の復号は、Gallagerが確率復号(Probabilistic Decoding)と称して提案したアルゴリズムであって、バリアブルノード(variable node(メッセージノード(message node)とも呼ばれる。))と、チェックノード(check node)とからなる、いわゆるタナーグラフ(Tanner graph)上での確率伝播(belief propagation)によるメッセージ・パッシング・アルゴリズムによって行うことが可能である。ここで、以下、適宜、バリアブルノードとチェックノードを、単に、ノードともいう。
なお、確率復号においては、各ノード間で受け渡されるメッセージが実数値であることから、解析的に解くためには、連続した値をとるメッセージの確率分布そのものを追跡する必要があり、非常に困難を伴う解析を必要とすることになる。そこで、Gallagerは、LDPC符号の復号アルゴリズムとして、アルゴリズムA又はアルゴリズムBを提案している。
LDPC符号の復号は、一般的には、図3に示すような手順にしたがって行われる。なお、ここでは、LDPC符号(符号語cの)受信値をU0とし、チェックノードから出力されるメッセージ(以下、適宜、チェックノードメッセージともいう)をujとし、バリアブルノードから出力されるメッセージ(以下、適宜、バリアブルノードメッセージともいう)をviとする。また、メッセージは、"0"らしさを、いわゆる対数尤度比(log likelihood ratio)で表現した実数値である。さらに、受信値U0の"0"らしさの対数尤度比を、受信データu0iと表すこととする。
まず、LDPC符号の復号においては、図3に示すように、ステップS101において、受信値U0(受信データu0i)が受信され、メッセージujが"0"に初期化されるとともに、繰り返し処理のカウンタとしての整数をとる変数kが"0"に初期化され、ステップS102に進む。ステップS102において、受信データu0iに基づいて、式(1)に示す演算を行うことによってバリアブルノードメッセージviが求められ、さらに、このバリアブルノードメッセージviに基づいて、式(2)に示す演算を行うことによってチェックノードメッセージujが求められる。
Figure 2007081602
・・・(1)
Figure 2007081602
・・・(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 2007081602
・・・(3)
Figure 2007081602
・・・(4)
ステップS102では、さらに、変数kが"1"だけインクリメントされ、ステップS103に進む。ステップS103では、変数kが所定の繰り返し復号回数N以上であるか否かが判定される。ステップS103において、変数kがN以上ではないと判定された場合、ステップS102に戻り、以下、同様の処理が繰り返される。
また、ステップS103において、変数kがN以上であると判定された場合、ステップS104に進み、式(5)に示す演算を行うことによって最終的に出力する復号結果としてのメッセージvが求められて出力され、LDPC符号の復号処理が終了する。
Figure 2007081602
・・・(5)
ここで、式(5)の演算は、式(1)の演算とは異なり、バリアブルノードに接続している全ての枝からのメッセージを用いて行われる。
このようなLDPC符号の復号は、例えば(3,6)符号の場合には、図4に示すように、各ノード間でメッセージの授受が行われる。なお、図4における"="で示すノード(バリアブルノード)では、式(1)に示した演算が行われ、"+"で示すノード(チェックノード)では、式(2)に示した演算が行われる。特に、アルゴリズムAにおいては、メッセージを2元化し、"+"で示すノードにて、そのノードに入力されるdc-1個のメッセージの排他的論理和演算を行い、"="で示すノードにて、受信データR(u0i)に対して、そのノードに入力されるdv-1個のメッセージが全て異なるビット値であった場合には、符号を反転して出力する。
また、一方で、近年、LDPC符号の復号の実装法に関する研究も行われている。実装法について述べる前に、まず、LDPC符号の復号を摸式化して説明する。
図5は、(3,6)LDPC符号(符号化率1/2、符号長12)の検査行列(parity check matrix)の例である。LDPC符号の検査行列Hは、図6のように、タナーグラフを用いて書き表すことができる。ここで、図6において、"+"で表されるのが、チェックノードであり、"="で表されるのが、バリアブルノードである。チェックノードとバリアブルノードは、それぞれ、検査行列Hの行と列に対応する。チェックノードとバリアブルノードとの間の結線は、枝(edge)であり、検査行列の"1"に相当する。即ち、検査行列Hの第j行第i列のコンポーネントが1である場合には、図6において、上からi番目のバリアブルノード("="のノード)と、上からj番目のチェックノード("+"のノード)とが、枝により接続される。枝は、バリアブルノードに対応するLDPC符号のビットが、チェックノードに対応する拘束条件を持つことを表す。なお、図6は、図5の検査行列Hのタナーグラフとなっている。
LDPC符号の復号方法であるサムプロダクトアルゴリズム(Sum Product Algorithm)は、バリアブルノードの演算とチェックノードの演算とを繰り返し行う。
バリアブルノードでは、図7のように、式(1)の演算を行う。すなわち、図7において、計算しようとしている枝に対応するバリアブルノードメッセージviは、バリアブルノードに繋がっている残りの枝からのチェックノードメッセージu1およびu2と、受信データu0iを用いて計算される。他の枝に対応するバリアブルノードメッセージも同様に計算される。
チェックノードの演算について説明する前に、式(2)を、式a×b=exp{ln(|a|)+ln(|b|)}×sign(a)×sign(b)の関係を用いて、式(6)のように書き直す。但し、sign(x)は、xの符号(正または負)を表し、x≧0のとき1であり、x<0のとき-1である。
Figure 2007081602
・・・(6)
更に、x≧0において、非線形な関数(非線形関数)φ(x)を、式φ(x)=ln(tanh(x/2))と定義すると(ln()は自然対数関数)、その非線形関数φ(x)の逆関数φ-1(x)は、式φ-1(x)=2tanh-1(e-x)で表されるから、式(6)は、式(7)のように書くことができる。
Figure 2007081602
・・・(7)
チェックノードでは、図8のように、式(7)の演算を行う。すなわち、図8において、計算しようとしている枝に対応するチェックノードメッセージ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となる。
また、LDPC符号の復号方法には、サムプロダクトアルゴリズムの他、例えば、ビリーフプロパゲーション(Belief Propagation)などと呼ばれる方法もあるが、いずれにしても、行われる演算の内容は同様である。
復号装置へのサムプロダクトアルゴリズムの実装の例として、各ノードの演算を一つずつ順次行うことによって復号を行う場合(full serial decoding)の実装法について説明する。
なお、サムプロダクトアルゴリズムをハードウェアに実装する場合、式(1)で表されるバリアブルノード演算および式(7)で表されるチェックノード演算とを、適度な回路規模と動作周波数で繰り返し行うことが必要である。
また、ここでは、例えば、図9の、36(行)×108(列)の検査行列Hで表現される符号(符号化率2/3、符号長108)を復号することとする。図9の検査行列Hの1の数は323であり、従って、そのタナーグラフでは、枝の数は323個となる。ここで、図9の検査行列Hでは、0を、"."で表現している。
図10は、LDPC符号の1回の復号を行う復号装置の構成例を示している。
図10の復号装置では、その動作する1クロック(clock)ごとに、1つの枝に対応するメッセージが計算される。
即ち、図10の復号装置は、2つの枝用メモリ100および102、1つのチェックノード計算器101、1つのバリアブルノード計算器103、1つの受信用メモリ104、1つの制御部105からなる。
図10の復号装置では、枝用メモリ100または102からメッセージが1つずつ読み出され、そのメッセージを用いて、所望の枝に対応するメッセージが計算される。そして、その計算によって求められたメッセージが1つずつ後段の枝用メモリ102または100に格納されていく。繰り返し復号を行う際には、この1回復号を行う図10の復号装置を複数個縦列に連接するか、もしくは図10の復号装置を繰り返し用いることによって、繰り返し復号を実現する。なお、ここでは、例えば、図10の復号装置が複数個接続されているものとする。
枝用メモリ100は、前段の復号装置(図示せず)のバリアブルノード計算器103から供給されるメッセージ(バリアブルノードメッセージ)D100を、後段のチェックノード計算器101が読み出す順番に格納していく。そして、枝用メモリ100は、チェックノード計算のフェーズでは、メッセージD100を、格納してある順番通りに、メッセージD101として、チェックノード計算器101に供給する。
チェックノード計算器101は、制御部105から供給される制御信号D106に基づき、枝用メモリ100から供給されるメッセージD101(バリアブルノードメッセージvi)を用いて、式(7)に従って演算(チェックノード演算)を行い、その演算によって求められたメッセージD102(チェックノードメッセージuj)を、後段の枝用メモリ102に供給する。
枝用メモリ102は、前段のチェックノード計算器101から供給されるメッセージD102を、後段のバリアブルノード計算器103が読み出す順番に格納していく。そして、枝用メモリ102は、バリアブルノード計算のフェーズでは、メッセージD102を、格納してある順番通りに、メッセージD103として、バリアブルノード計算器103に供給する。
バリアブルノード計算器103には、制御部105から制御信号D107が供給されるとともに、受信用メモリ104から受信データD104が供給される。バリアブルノード計算器103は、制御信号D107に基づき、枝用メモリ100から供給されるメッセージD103(チェックノードメッセージuj)と受信用メモリ100から供給される受信データD104(受信データu0i)を用い、式(1)に従って演算(バリアブルノード演算)を行い、その演算の結果得られるメッセージD105(バリアブルノードメッセージvi)を、図示せぬ後段の復号装置の枝用メモリ100に供給する。
受信用メモリ104には、LDPC符号の受信データu0iが格納される。制御部105は、チェックノード演算を制御する制御信号D106と、バリアブルノード演算を制御する制御信号D107を、それぞれチェックノード計算器101とバリアブルノード計算器103に供給する。
図11は、チェックノード演算を1つずつ行う図10のチェックノード計算器101の構成例を示している。
なお、図11では、各メッセージが符号ビット(正負を表すビット)を合わせて合計6ビット(bit)に量子化されているものとして、チェックノード計算器101を表している。即ち、メッセージは、所定の数値範囲を符号ビット付きの6ビットで表すことができる64値に均等に分割する各数値に割り当てられた6ビットの量子化値で表される。
また、図11では、図9の検査行列Hで表されるLDPC符号のチェックノード演算が行われる。さらに、図11のチェックノード演算器101には、クロックckが供給され、このクロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図11のチェックノード計算器101は、制御部105から供給される、例えば、1ビットの制御信号D106に基づき、枝用メモリ100から1つずつ読み込まれるメッセージD101(バリアブルノードメッセージvi)を用いて、式(7)にしたがって演算を行う。
即ち、チェックノード計算器101では、検査行列Hの各列に対応するバリアブルノードからの6ビットのメッセージD101(バリアブルノードメッセージvi)が1つずつ読み込まれ、その下位5ビットである絶対値D122(|vi|)がLUT121に、その最上位ビットである符号ビットD121がEXOR回路129とFIFO(First In First Out)メモリ133にそれぞれ供給される。また、チェックノード計算器101には、制御部105から制御信号D106が供給され、その制御信号D106は、セレクタ2124とセレクタ131に供給される。
LUT121は、そこに入力される絶対値D122(|vi|)に対して、式(7)における非線形関数φ(|vi|)の演算を行った5ビットの演算結果D2123(φ(|vi|))を読み出し、演算器2122とFIFOメモリ127に供給する。
演算器2122は、演算結果D2123(φ(|vi|))とレジスタ2123に格納されている9ビットの値D2124とを加算することにより、演算結果D2123を積算し、その結果得られる9ビットの積算値をレジスタ2123に再格納する。なお、検査行列Hの1行に亘る全ての枝からのメッセージD101の絶対値D122(|vi|)に対する演算結果D2123が積算された場合、レジスタ2123はリセットされる。
ここで、演算器2122およびレジスタ2123では、LUT121から供給される5ビットの演算結果D2123(φ(|vi|))が、最大で、FIFOメモリ127における最大の遅延回数分、即ち、検査行列Hの行の最大の重み分の回数だけ積算される。いま、図9の検査行列Hの行の最大の重みは9であり、従って、演算器2122およびレジスタ2123では、9ビットの演算結果D2123(φ(|vi|))が、最大で、9回積算される(5ビットの値の9個分の積算が行われる)。このため、演算器2122の出力以降においては、5ビットの値を9回積算した値を表すことができるように、量子化ビット数は、LUT121が出力する5ビットの演算結果D1123(φ(|vi|))よりも4ビット(9(回)を表すことができる最小のビット数)だけ多い9ビットになっている。
検査行列の1行に亘るメッセージD101(バリアブルノードメッセージvi)が1つずつ読み込まれ、レジスタ2123に1行分の演算結果D2123が積算された積算値が格納された場合、制御部105から供給される制御信号D106は、0から1に変化する。例えば、行の重み(row weight)が「9」である場合、制御信号D106は、1から8クロック目までは、「0」となり、9クロック目では「1」となる。
制御信号D106が「1」の場合、セレクタ2124は、レジスタ2123に格納されている値、即ち、検査行列Hの1行に亘る全ての枝からのメッセージD101(バリアブルノードメッセージvi)から求められたφ(|vi|)が積算された9ビットの値D2124(i=1からi=dcまでのΣφ(|vi|))を選択し、値D2125として、レジスタ2125に出力して格納させる。レジスタ2125は、格納している値D2125を、9ビットの値D2126として、セレクタ2124と演算器2126に供給する。制御信号D106が「0」の場合、セレクタ2124は、レジスタ2125から供給された値D2126を選択し、レジスタ2125に出力して再格納させる。即ち、検査行列Hの1行に亘る全ての枝からのメッセージD101(バリアブルノードメッセージvi)から求められたφ(|vi|)が積算されるまで、レジスタ2125は、前回積算されたΣφ(|vi|)を、セレクタ2124と演算器2126に供給する。
一方、FIFOメモリ127は、レジスタ2125から新たな値D2126(i=1からi=dcまでのΣφ(|vi|))が出力されるまでの間、LUT121が出力した5ビットの演算結果D2123(φ(|vi|))を遅延し、5ビットの値D2127として演算器2126に供給する。演算器2126は、レジスタ2125から供給された値D2126から、FIFOメモリ127から供給された値D2127を減算し、その減算結果を、5ビットの減算値D128としてLUT128に供給する。即ち、演算器2126は、検査行列Hの1行に亘る全ての枝からのメッセージD101(バリアブルノードメッセージvi)から求められたφ(|vi|)の積算値から、チェックノードメッセージujを求めたい枝からのメッセージD101(バリアブルノードメッセージvi)から求められたφ(|vi|)を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を減算値D128としてLUT128に供給する。
なお、演算器2126は、レジスタ2125から供給される9ビットの値D2126から、FIFOメモリ127から供給される5ビットの値D2127を減算するから、その減算結果は、最大で9ビットとなり得るのに対して、5ビットの減算値D128を出力する。このため、レジスタ2125から供給される9ビットの値D2126から、FIFOメモリ127から供給される5ビットの値D2127を減算した減算結果が、5ビットで表せない場合、つまり、減算結果が、5ビットで表すことができる最大値(31(2進数では11111))を越える場合には、演算器2126は、減算結果を、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(バリアブルノードメッセージvi)の符号ビット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|))の乗算値を、チェックノードメッセージujを求めたい枝からのメッセージ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が求められる。
なお、図9の検査行列Hの行の重みの最大は9であるため、即ち、チェックノードに供給されるバリアブルノードメッセージviの最大数は9であるため、チェックノード計算器101は、9個のチェックノードメッセージviの非線形関数の演算結果(φ(|vi|))を遅延させるFIFOメモリ127とFIFOメモリ133を有している。行の重みが9未満の行のチェックノードメッセージujを計算するときには、FIFOメモリ127とFIFOメモリ133における遅延量が、その行の重みの値に減らされる。
図12は、バリアブルノード演算を1つずつ行う図10のバリアブルノード計算器103の構成例を示している。
なお、図12でも、図11と同様に、各メッセージが符号ビットを合わせて合計6ビット(bit)に量子化されているものとして、バリアブルノード計算器103を表している。さらに、図12でも、図9の検査行列Hで表されるLDPC符号のバリアブルノード演算が行われる。また、図12のバリアブルノード計算器103には、クロックckが供給され、クロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図12のバリアブルノード計算器103は、制御部105から供給される、例えば、1ビットの制御信号D107に基づき、枝用メモリ102から1つずつ読み込まれるメッセージD103と、受信用メモリ104から読み込まれる受信データD104(u0i)を用いて、式(1)にしたがって演算(バリアブルノード演算)を行う。
即ち、バリアブルノード計算器103では、検査行列Hの各行に対応するチェックノードからの6ビットのメッセージD103(チェックノードメッセージuj)が1つずつ読み込まれ、そのメッセージD103が、演算器2151とFIFOメモリ155に供給される。また、バリアブルノード計算器103では、受信用メモリ104から6ビットの受信データD104(u0i)が1つずつ読み込まれ、演算器2156に供給される。さらに、バリアブルノード計算器103には、制御部105から制御信号D107が供給され、その制御信号D107は、セレクタ2153に供給される。
演算器2151は、6ビットのメッセージD103(チェックノードメッセージuj)とレジスタ2152に格納されている9ビットの値D2151とを加算することにより、6ビットのメッセージD103を積算し、その結果得られる9ビットの積算値を、レジスタ2152に再格納する。なお、検査行列Hの1列に亘る全ての枝からのメッセージD103が積算された場合、レジスタ2152はリセットされる。
ここで、演算器2151およびレジスタ2152では、6ビットのメッセージD103が、最大で、FIFOメモリ155における最大の遅延回数分、即ち、検査行列Hの列の最大の重み分の回数だけ積算される。いま、図9の検査行列Hの列の最大の重みは5であり、従って、演算器2151およびレジスタ2152では、6ビットのメッセージD103が、最大で、5回積算される(6ビットの値の5個分の積算が行われる)。このため、演算器2151の出力以降においては、6ビットの値を5回積算した値を表すことができるように、量子化ビット数は、6ビットのメッセージD103よりも3ビット(5(回)を表すことができる最小のビット数)だけ多い9ビットになっている。
検査行列Hの1列に亘るメッセージD103が1つずつ読み込まれ、レジスタ2152に1列分のメッセージD103が積算された値が格納された場合、制御部105から供給される制御信号D107は、「0」から「1」に変化する。例えば、列の重みが「5」である場合、制御信号D107は、1から4クロック目までは「0」となり、5クロック目では「1」となる。
制御信号D107が「1」の場合、セレクタ2153は、レジスタ2152に格納されている値、即ち、検査行列Hの1列に亘る全ての枝からのメッセージD103(チェックノードメッセージuj)が積算された9ビットの値D2151(j=1からdVまでのΣuj)を選択し、レジスタ2154に出力して格納させる。レジスタ2154は、格納している値D2151を、9ビットの値D2152として、セレクタ2153と演算器2156に供給する。制御信号D107が「0」の場合、セレクタ2153は、レジスタ2154から供給された値D2152を選択し、レジスタ2154に出力し再格納させる。即ち、検査行列Hの1列に亘る全ての枝からのメッセージD103(チェックノードメッセージuj)が積算されるまで、レジスタ2154は、前回積算された値を、セレクタ2153と演算器2156に供給する。
一方、FIFOメモリ155は、レジスタ2154から新たな値D2152(j=1からdVまでのΣuj)が出力されるまでの間、チェックノードからのメッセージD103を遅延し、6ビットの値D153として演算器2156に供給する。演算器2156は、レジスタ2154から供給された値D2152から、FIFOメモリ155から供給された値D153を減算する。即ち、演算器2156は、検査行列Hの1列に亘る全ての枝からのメッセージD103(チェックノードメッセージuj)の積算値から、バリアブルノードメッセージviを求めたい枝からのチェックノードメッセージujを減算して、その減算値(j=1からdv−1までのΣuj)を求める。さらに、演算器2156は、その減算値(j=1からdv−1までのΣuj)に、受信用メモリ104から供給された受信データD104(u0i)を加算して、その結果得られる6ビットの値をメッセージD105(バリアブルノードメッセージvi)として出力する。
以上のように、バリアブルノード計算器103では、式(1)の演算が行われ、バリアブルノードメッセージviが求められる。
なお、図9の検査行列Hの列の重みの最大は5であるため、即ち、バリアブルノードバリアブルノードに供給されるチェックノードメッセージujの最大数は5であるため、バリアブルノード計算器103は、5個のチェックノードメッセージujを遅延させるFIFOメモリ155を有している。列の重みが5未満の列のバリアブルノードメッセージviを計算するときには、FIFOメモリ155における遅延量が、その列の重みの値に減らされる。
また、演算器2156は、レジスタ2154から供給される9ビットの値D2152から、FIFOメモリ155から供給される6ビットの値D153を減算するとともに、受信用メモリ104から供給される6ビットの受信データD104を加算する演算を行うから、その演算結果は、6ビットのメッセージD105で表すことができる最小値未満となるか、または最大値を越えることがある。演算器2156は、演算結果が、6ビットのメッセージD105で表すことができる最小値未満である場合には、その最小値にクリッピングし、演算結果が、6ビットのメッセージD105で表すことができる最大値を越える場合には、その最大値にクリッピングする。
図10の復号装置では、検査行列Hの重みにしたがって、制御部105から制御信号が与えられる。図10の復号装置によれば、枝用メモリ100および102、並びにチェックノード計算器101およびバリアブルノード計算器103のFIFOメモリ127,133,155の容量さえ足りれば、制御信号のみを変えることで様々な検査行列HのLDPC符号を復号することができる。
なお、図示しないが、図10の復号装置において、復号の最終段においては、式(1)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が、最終的な復号結果として出力される。
図10の復号装置を繰り返し用いて、LDPC符号を復号する場合には、チェックノード演算とバリアブルノード演算とが交互に行われる。即ち、図10の復号装置では、チェックノード計算器101によるチェックノード演算の結果を用いて、バリアブルノード計算器103によりバリアブルノード演算が行われ、バリアブルノード計算器103によるバリアブルノード演算の結果を用いて、チェックノード計算器101によりチェックノード演算が行われる。
なお、図10の復号装置は、各ノードの演算を一つずつ順次行うことによって、LDPC符号の復号を行う(full serial decoding)復号装置であるが、その他、全ノードの演算を同時に行う(full parallel decoding)復号装置(例えば、非特許文献1参照)や、一つでも全てでもない、ある数のノードの演算を同時に行う(partly parallel decoding)復号装置(例えば、非特許文献2や特許文献1を参照)も提案されている。
特開2004-364233号公報 C. Howland and A. Blanksby, "Parallel Decoding Architectures for Low Density Parity Check Codes", Symposium on Circuits and Systems, 2001 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
ところで、LDPC符号を復号する復号装置については、復号性能の劣化を抑えつつ、装置規模を小さくすることが要請されている。
本発明は、このような状況に鑑みてなされたものであり、LDPC符号の復号性能の劣化を抑えつつ、装置規模を小さくすることができるようにするものである。
本発明の一側面は、LDPC符号の復号のためのチェックノードのチェックノード演算を行う第1の演算手段と、前記LDPC符号の復号のためのバリアブルノードのバリアブルノード演算を行う第2の演算手段とを備える復号装置、またはその復号装置の復号方法であり、前記第2の演算手段が、前記バリアブルノード演算で行われる積算において、その積算の対象の量子化値よりも1ビットだけ多いビット数の量子化値で表現される積算結果を出力する。
かかる一側面の復号装置または復号方法においては、前記バリアブルノード演算で行われる積算において、その積算の対象の量子化値よりも1ビットだけ多いビット数の量子化値で表現される積算結果が出力される。
本発明の一側面によれば、LDPC符号の復号を、LDPC符号の復号性能の劣化を抑えつつ、装置規模を小さくすることができる。
以下に本発明の実施の形態を説明するが、本発明の構成要件と、発明の詳細な説明に記載の実施の形態との対応関係を例示すると、次のようになる。この記載は、本発明をサポートする実施の形態が、発明の詳細な説明に記載されていることを確認するためのものである。従って、発明の詳細な説明中には記載されているが、本発明の構成要件に対応する実施の形態として、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その構成要件に対応するものではないことを意味するものではない。逆に、実施の形態が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
本発明の一側面の復号装置は、第1に、
LDPC(Low Density Parity Check)符号の復号装置(例えば、図13や、図19、図28の復号装置)であって、
前記LDPC符号の復号のためのチェックノードのチェックノード演算を行う第1の演算手段(例えば、図14のチェックノード計算器171や図20のチェックノード計算器181、図30、図33、図34の準チェックノード計算器412)と、
前記LDPC符号の復号のためのバリアブルノードのバリアブルノード演算を行う第2の演算手段(例えば、図17のバリアブルノード計算器172や、図31の準バリアブルノード計算器415)と
を備え、
前記第2の演算手段が、前記バリアブルノード演算で行われる積算(例えば、図17の演算器151や図31の演算器471が行う積算Σuj)において、その積算の対象の量子化値よりも1ビットだけ多いビット数の量子化値で表現される積算結果を出力する。
本発明の一側面の復号装置では、第2に、
前記第1の演算手段が、前記チェックノード演算で行われる積算(例えば、図14や図20の演算器1122や、図30や図33、図34の演算器433が行う積算Σφ(|vi|))において、その積算の対象の量子化値よりも1ビットだけ多いビット数の量子化値で表現される積算結果を出力する。
本発明の一側面の復号装置では、第3に、
前記第2の演算手段が、前記チェックノード演算の結果得られるチェックノードメッセージを対象とした積算(例えば、式(5)の演算)を、前記バリアブルノード演算の他の一部として行い、前記チェックノードメッセージを表現する量子化値よりも1ビットだけ多いビット数の量子化値で表現される、前記バリアブルノード演算の他の一部として行われた前記積算の積算結果を出力する。
本発明の一側面の復号装置は、第4に、
前記第2の演算手段が出力する前記積算結果を記憶する記憶手段(例えば、図28の復号途中結果格納用メモリ410)をさらに備える。
本発明の一側面の復号方法は、
LDPC(Low Density Parity Check)符号の復号のためのチェックノードのチェックノード演算を行う第1の演算手段(例えば、図14のチェックノード計算器171や図20のチェックノード計算器181、図30、図33、図34の準チェックノード計算器412)と、
前記LDPC符号の復号のためのバリアブルノードのバリアブルノード演算を行う第2の演算手段(例えば、図17のバリアブルノード計算器172や、図31の準バリアブルノード計算器415)と
を備える復号装置(例えば、図13や、図19、図28の復号装置)の復号方法であって、
前記第2の演算手段では、前記バリアブルノード演算で行われる積算(例えば、図17の演算器151や図31の演算器471が行う積算Σuj)において、その積算の対象の量子化値よりも1ビットだけ多いビット数の量子化値で表現される積算結果を出力する(例えば、図18のステップS11)。
以下、図面を参照して、本発明の実施の形態について説明する。
図13は、本発明を適用した、LDPC符号を復号する復号装置の第1実施の形態の構成例を示している。なお、図中、図10の復号装置と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。
図13の復号装置は、枝用メモリ100,102、受信用メモリ104、制御部105が設けられている点で、図10の復号装置と共通するが、チェックノード計算器101に代えてチェックノード計算器171が設けられているとともに、バリアブルノード計算器103に代えてバリアブル計算器172が設けられている点で、図10の復号装置と相違している。
ここで、図13の復号装置では、例えば、前述の図9に示した検査行列Hで表されるLDPC符号(符号化率2/3、符号長108)の復号が行われることとする。後述する図19および図28の復号装置においても同様である。
図13の復号装置では、チェックノード計算器171がチェックノード演算を行い、バリアブルノード計算器172がバリアブルノード演算を行い、これらのチェックノード演算とバリアブルノード演算とが交互に行われることによって、LDPC符号が復号される。
即ち、受信用メモリ104には、LDPC符号の受信データu0iが、符号長(ここでは、上述したように108)の単位で順次供給されて記憶される。
そして、バリアブルノード計算器172は、LDPC符号の復号のためのバリアブルノードのバリアブルノード演算を行う。
即ち、枝用メモリ102には、後述するチェックノード計算器171によるチェックノード演算の結果としてのメッセージD102(チェックノードメッセージuj)が格納されており、枝用メモリ102は、そのメッセージD102を、メッセージD103として、バリアブルノード計算器172に供給する。さらに、バリアブルノード計算器172には、制御部105から制御信号D107が供給されるとともに、受信用メモリ104から受信データD104が供給される。
バリアブルノード計算器172は、大雑把には、前述の図12に示したバリアブルノード計算器103と同様に、制御信号D107に基づき、枝用メモリ100から供給されるメッセージD103(チェックノードメッセージuj)と受信用メモリ100から供給される受信データD104(u0i)を用い、式(1)に従ってバリアブルノード演算を行い、そのバリアブルノード演算の結果得られるメッセージD105(バリアブルノードメッセージvi)を、メッセージD100として、枝用メモリ100に供給する。
枝用メモリ100は、バリアブルノード計算器172から供給される、バリアブルノード演算の結果であるメッセージD100(バリアブルノードメッセージvi)を格納していく。そして、枝用メモリ100は、メッセージD100を、メッセージD101として読み出し、チェックノード計算器171に供給する。
チェックノード計算器171は、大雑把には、前述の図11に示したチェックノード計算器101と同様に、LDPC符号の復号のためのチェックノードのチェックノード演算であって、非線形関数の演算および非線形関数の逆関数の演算を含むチェックノード演算を行う。
即ち、チェックノード計算器171は、制御部105から供給される制御信号D106に基づき、枝用メモリ100から供給されるメッセージD101(バリアブルノードメッセージvi)を用いて、非線形関数φ(x)の演算およびその非線形関数φ(x)の逆関数φ-1(x)の演算を含む式(7)に従ってチェックノード演算を行い、そのチェックノード演算によって求められたメッセージD102(チェックノードメッセージuj)を、後段の枝用メモリ102に供給する。
枝用メモリ102は、前段のチェックノード計算器171から供給されるメッセージD102を格納していく。そして、枝用メモリ102に記憶されたメッセージD102は、上述したようにメッセージD103として読み出され、バリアブルノード計算器172に供給される。
図13の復号装置では、受信用メモリ104に記憶された符号長分の受信データu0iについて、バリアブルノード演算とチェックノード演算が、例えば、所定の複数回数だけ繰り返し行われ、また、最後の回には、式(1)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が、受信用メモリ104に記憶された符号長分の受信データu0i(LDPC符号)の最終的な復号結果として出力される。
図13の復号装置は、チェックノード演算およびバリアブルノード演算を繰り返し行うことによって、LDPC符号を復号する点では、前述の図10の復号装置と共通する。
但し、図13の復号装置は、チェックノード演算およびバリアブルノード演算として行う処理のうちの、非線形関数φ(x)の演算後から逆関数φ-1(x)の演算までの処理では、図10の復号装置が使用している量子化値よりも精度の高い数値を表す量子化値を使用し、他の処理では、図10の復号装置が使用しているのと同様の量子化値を使用する。
ここで、図10の復号装置では、上述したように、メッセージ(受信データu0iも同様)は、所定の数値範囲を符号ビット付きの6ビットで表すことができる64値に均等に分割する各数値に割り当てられた6ビットの量子化値で表される。即ち、所定の数値範囲が−R/2から+R/2であるとすると(R>0)、メッセージを表す6ビットの各量子化値は、−R/2から+R/2−R/64までの、量子化幅であるR/64きざみの64の各数値に割り当てられ、その各数値を表す。いま、この、メッセージを表す6ビットの量子化値を、通常量子化値という。
また、図13の復号装置において、非線形関数φ(x)の演算後から逆関数φ-1(x)の演算までの処理で使用される、通常量子化値よりも精度の高い数値を表す量子化値を、高精度量子化値という。
高精度量子化値は、通常量子化値よりも精度の高い数値を表すから、量子化幅、即ち、ある量子化値に割り当てられた数値と、その量子化値よりも1だけ小さい量子化値に割り当てられた数値との差(の絶対値)が通常量子化値よりも小さい。
従って、高精度量子化値のビット数(量子化ビット数)を、通常量子化値のビット数(ここでは6ビット)と同一とすると、高精度量子化値によって表すことができる数値範囲は、通常量子化値によって表すことができる数値範囲よりも狭くなる。即ち、高精度量子化値によって表すことができる最大値と最小値との差(ダイナミックレンジ)は、通常量子化値によって表すことができる最大値と最小値との差(ダイナミックレンジ)よりも狭くなる
また、高精度量子化値のビット数を、通常量子化値のビット数と同一とした場合の、高精度量子化値によって表すことができるダイナミックレンジを、Dy1と表すとともに、そのような高精度量子化値の量子化幅を、Qd1と表すと、例えば、高精度量子化値の量子化幅をQd1のままで、ダイナミックレンジがDy1よりも広いDy2の数値範囲を高精度量子化値で表し、あるいは高精度量子化値の量子化幅をQd1より小さいQd2として、ダイナミックレンジがDy1の数値範囲を高精度量子化値で表す場合には、高精度量子化値のビット数は、通常量子化値のビット数よりも多く必要となる。
通常量子化値よりも精度の高い数値を表す量子化値、つまり、量子化幅が通常量子化値よりも小さい量子化値であれば、ダイナミックレンジやビット数にかかわらず、高精度量子化値として採用しうるが、ここでは、量子化幅が通常量子化値よりも小さい量子化値であって、ダイナミックレンジが通常量子化値よりも広く、ビット数も通常量子化値よりも多い量子化値を、高精度量子化値として採用することとする。
いま、高精度量子化値のビット数を、6ビットの通常量子化値よりも多い、例えば、符号ビットを含む10ビットとすると、図13の復号装置は、非線形関数φ(x)の演算後から逆関数φ-1(x)の演算までの処理(以下、適宜、非線形関数演算間処理という)では、10ビットの高精度量子化値を使用し、他の処理では、6ビットの通常量子化値を使用する。
ここで、非線形関数演算間処理は、チェックノード演算の一部の処理であり、その非線形関数演算間処理でのみ、10ビットの高精度量子化値が使用される。従って、枝用メモリ100と102に記憶されるメッセージにも、また、受信用メモリ104に記憶される受信データu0iにも、6ビットの通常量子化値が使用されるので、図13の復号装置において、枝用メモリ100,102、および受信用メモリ104に必要な記憶容量は、図10の復号装置のそれと同一である。
次に、図14は、図13のチェックノード計算器171の構成例を示している。なお、図中、図11のチェックノード計算器101と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。
チェックノード計算器171は、図11のLUT121、演算器2122、レジスタ2123、セレクタ2124、レジスタ2125、演算器2126、FIFOメモリ127、LUT128それぞれに代えて、LUT1121、演算器1122、レジスタ1123、セレクタ1124、レジスタ1125、演算器1126、FIFOメモリ1127、LUT1128が設けられている点で、図11のチェックノード計算器101と相違している。さらに、チェックノード計算器171は、図14において細線で示す部分では、通常量子化値が用いられるとともに、図14において太線で示す部分では、高精度量子化値が用いられる点で、図11のチェックノード計算器101と相違している。
以上のように構成される図14のチェックノード計算器171では、図11のチェックノード計算器101と同様に、制御部105から供給される、例えば、1ビットの制御信号D106に基づき、枝用メモリ100から1つずつ読み込まれるメッセージD101(バリアブルノードメッセージvi)を用いて、式(7)にしたがってチェックノード演算を行う。
即ち、図15は、チェックノード計算器171で行われる処理を示している。
チェックノード計算器171では、検査行列Hの各列に対応するバリアブルノードからの6ビットのメッセージD101(バリアブルノードメッセージvi)が、枝用メモリ100(図13)から1つずつ読み込まれ、その下位5ビットである絶対値D122(|vi|)がLUT1121に、その最上位ビットである符号ビットD121がEXOR回路129とFIFO(First In First Out)メモリ133にそれぞれ供給される。また、チェックノード計算器171には、制御部105から制御信号D106が供給され、その制御信号D106は、セレクタ1124とセレクタ131に供給される。
LUT1121は、5ビットの絶対値D122(|vi|)に対して、式(7)における非線形関数φ(|vi|)の演算結果D1123(φ(|vi|))を対応付けて記憶している。さらに、LUT1121では、絶対値D122(|vi|)は、通常量子化値で表されているのに対して、非線形関数φ(|vi|)の演算結果D1123(φ(|vi|))は、符号ビットなしの高精度量子化値で表されている。即ち、LUT1121は、通常量子化値で表される5ビットの絶対値D122(|vi|)に対して、例えば、高精度量子化値で表される9ビットの、非線形関数φ(|vi|)の演算結果D1123(φ(|vi|))を対応付けて記憶している。
LUT1121は、ステップS1において、通常量子化値で表される5ビットの絶対値D122(|vi|)を入力として、それに対応付けられている、高精度量子化値で表される9ビットの、非線形関数φ(|vi|)の演算結果D1123(φ(|vi|))を読み出し、演算器1122とFIFOメモリ1127に出力する。
従って、LUT1121は、ステップS1において、式(7)における非線形関数φ(|vi|)を演算する処理、および通常量子化値を高精度量子化値に変換する処理を、等価的に行い、以降は、後述するLUT1128において、高精度量子化値を通常量子化値に変換する処理が行われるまで、高精度量子化値を使用して処理が行われる。
その後、ステップS2において、演算器1122は、9ビットの演算結果D1123(φ(|vi|))とレジスタ1123に格納されている10ビットの値D1124とを加算することにより、演算結果D1123を積算し、その結果得られる10ビットの積算値(積算結果)を出力して、レジスタ1123に再格納する。なお、検査行列Hの1行に亘る全ての枝からのメッセージD101の絶対値D122(|vi|)に対する演算結果が積算された場合、レジスタ1123はリセットされる。
ここで、演算器1122およびレジスタ1123では、LUT1121から供給される9ビットの演算結果D1123(φ(|vi|))が、最大で、FIFOメモリ1127における最大の遅延回数分、即ち、検査行列Hの行の最大の重み分の回数だけ積算される。いま、図9の検査行列Hの行の最大の重みは9であり、従って、演算器1122およびレジスタ1123では、9ビットの高精度量子化値が、最大で、9回積算される(9ビットの高精度量子化値の9個分の積算が行われる)。
このため、本来ならば、演算器1122が出力する積算値を表す高精度量子化値としては、9ビットの高精度量子化値を9回積算した値を表すことができるように、LUT1121が出力する9ビットの演算結果D1123(φ(|vi|))よりも4ビット(9(回)を表すことができる最小のビット数)だけ多い13ビットが必要となる。即ち、演算器1122で行われる積算において、その積算の結果得られる積算値のオーバフローを完全に防止するためには、その積算値を表す高精度量子化値は13ビットである必要がある。
しかしながら、チェックノード計算器171では、演算器1122は、9ビットの高精度量子化値で表される演算結果D1123(φ(|vi|))を対象とする積算において、その積算の対象の9ビットの高精度量子化値よりも1ビットだけ多いビット数である10ビットの高精度量子化値で表現される積算値(積算結果)を出力する。
このように、演算器1122は、本来ならば13ビットの高精度量子化値で表現すべき積算値を、その13ビットよりも少ないビット数である10ビットの高精度量子化値で出力するので、チェックノード計算器171において、以降の高精度量子化値を対象とした処理を行うブロックは、ビット数が少ない高精度量子化値を処理することができるように構成すればよい。従って、チェックノード計算器171の規模を小さくすることができる。
なお、演算器1122は、本来ならば13ビットの高精度量子化値で表現すべき積算値を、その13ビットよりも少ないビット数である10ビットの高精度量子化値で出力するので、積算値がオーバフローし、その結果、チェックノード演算の精度、ひいては、LDPC符号の復号性能が劣化することが予想されるが、このLDPC符号の復号性能に関しては、後述する。
検査行列Hの1行に亘るメッセージD101(バリアブルノードメッセージvi)が1つずつ読み込まれ、レジスタ1123に1行分の演算結果D1123が積算された積算値が格納された場合、制御部105から供給される制御信号D106は、0から1に変化する。例えば、検査行列Hの行の重み(row weight)が「9」である場合、制御信号D106は、1から8クロック目までは、「0」となり、9クロック目では「1」となる。
制御信号D106が「1」の場合、セレクタ1124は、ステップS3において、レジスタ1123に格納されている値、即ち、検査行列Hの1行に亘る全ての枝からのメッセージD101(バリアブルノードメッセージvi)から求められたφ(|vi|)が積算された、本来ならば13ビットで表現されるべき10ビットの積算値D1124(i=1からi=dcまでのΣφ(|vi|))を選択し、10ビットの値D1125として、レジスタ1125に出力して格納させる。レジスタ1125は、格納している値D1125を、10ビットの値D1126として、セレクタ1124と演算器1126に供給する。制御信号D106が「0」の場合、セレクタ1124は、レジスタ1125から供給された値D1126を選択し、レジスタ1125に出力して再格納させる。即ち、検査行列Hの1行に亘る全ての枝からのメッセージD101(バリアブルノードメッセージvi)から求められたφ(|vi|)が積算されるまで、レジスタ1125は、前回積算されたφ(|vi|)を、セレクタ1124と演算器1126に供給する。
一方、FIFOメモリ1127は、レジスタ1125から新たな値D1126(i=1からi=dcまでのΣφ(|vi|))が出力されるまでの間、LUT1121が出力した9ビットの演算結果D1123(φ(|vi|))を遅延し、9ビットの値D1127として演算器1126に供給する。演算器1126は、ステップS4において、レジスタ1125から供給された10ビットの値D1126から、FIFOメモリ1127から供給された9ビットの値D1127を減算し(レジスタ1125から供給された10ビットの値D1126に、FIFOメモリ1127から供給された9ビットの値D1127に-1を乗算して得られる値を積算し)、その減算結果を、9ビットの減算値D1128としてLUT1128に供給する。
即ち、演算器1126は、検査行列Hの1行に亘る全ての枝からのメッセージD101(バリアブルノードメッセージvi)から求められたφ(|vi|)の積算値から、チェックノードメッセージujを求めたい枝からのメッセージD101(バリアブルノードメッセージvi)から求められたφ(|vi|)を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を減算値D1128としてLUT1128に供給する。
なお、レジスタ1125から供給される10ビットの値D1126から、FIFOメモリ1127から供給される9ビットの値D1127を減算した減算結果としての量子化値(高精度量子化値)が、9ビットの減算値D1128で表すことができる最大値を越える場合には、演算器1126は、減算結果としての高精度量子化値を、9ビットの高精度量子化値で表すことができる最大値にクリッピングし、9ビットの減算値D1128として出力する。
LUT1128は、減算値D1128(i=1からi=dc−1までのΣφ(|vi|))に対して、式(7)における逆関数φ-1(Σφ(|vi|))の演算を行った演算結果D1129(φ-1(Σφ(|vi|)))を対応付けて記憶している。さらに、LUT1128では、減算値D1128(i=1からi=dc−1までのΣφ(|vi|))は、高精度量子化値で表されているのに対して、逆関数φ-1(Σφ(|vi|))の演算結果D1129(φ-1(Σφ(|vi|)))は、符号ビットなしの通常量子化値で表されている。即ち、LUT1128は、高精度量子化値で表される9ビットの減算値D1128(i=1からi=dc−1までのΣφ(|vi|))に対して、通常量子化値で表される5ビットの、逆関数φ-1(Σφ(|vi|))の演算結果D1129(φ-1(Σφ(|vi|)))を対応付けて記憶している。
LUT1128は、ステップS5において、高精度量子化値で表される9ビットの減算値D1128(i=1からi=dc−1までのΣφ(|vi|))を入力として、それに対応付けられている、通常量子化値で表される5ビットの、逆関数φ-1(Σφ(|vi|))の演算結果D1129(φ-1(Σφ(|vi|)))を読み出して出力する。
従って、LUT1128は、ステップS5において、式(7)における逆関数φ-1(Σφ(|vi|))を演算する処理、および高精度量子化値を通常量子化値に変換する処理を、等価的に行い、以降は、上述したLUT1121において、通常量子化値を高精度量子化値に変換する処理が行われるまで、通常量子化値を使用して処理が行われる。
以上の処理と並行して、EXOR回路129、レジスタ130、セレクタ131、レジスタ132、FIFOメモリ133、EXOR回路134では、図11のチェックノード計算器101と同様の処理が行われ、これにより、EXOR回路134は、検査行列Hの1行に亘る全ての枝からのメッセージD101(バリアブルノードメッセージvi)の符号ビットD121(sign(|vi|))の乗算値を、チェックノードメッセージujを求めたい枝からのメッセージD101の符号ビットD121(sign(|vi|))で除算して、その除算値(i=1からi=dc−1までのΠsign(|vi|))を除算値D135として出力する。
そして、チェックノード計算器171では、LUT1128から出力された通常量子化値の5ビットの演算結果D1129を下位5ビットとするとともに、EXOR回路134から出力された1ビットの除算値D135を最上位ビット(符号ビット)とする合計6ビットの通常量子化値で表されるメッセージD102(チェックノードメッセージuj)が出力される。
以上のように、演算器1122は、本来ならば13ビットの高精度量子化値で表現すべき積算値を、その13ビットよりも少ないビット数である10ビットの高精度量子化値で出力するので、チェックノード計算器171において、以降の高精度量子化値を対象とした処理を行うブロックは、ビット数が少ない高精度量子化値を処理することができるように構成すればよく、その結果、チェックノード計算器171の規模を小さくすることができる。
さらに、チェックノード計算器171では、LUT1121において、通常量子化値を高精度量子化値に変換するとともに、LUT1128において、高精度量子化値を通常量子化値に変換することにより、チェックノード演算およびバリアブルノード演算として行う処理のうちの、非線形関数φ(x)の演算後からその逆関数φ-1(x)の演算までの処理では、高精度量子化値を使用し、他の処理では、通常量子化値を使用するので、LDPC符号の復号を、復号装置の大規模化を抑えつつ精度良く行うことができる。
即ち、図16は、非線形関数φ(x)と、その逆関数φ-1(y)とを示している。なお、図16において、○印は、通常量子化値を採用した場合に、非線形関数φ(x)の演算結果とその引数xとがとり得る数値、および逆関数φ-1(y)とその引数yとがとり得る数値を示している。
図16の左側は、非線形関数φ(x)を示しており、図16の右側は、その逆関数φ-1(y)を示している。
図16の左側に示した非線形関数φ(x)は、その引数xが、ある程度の大きな数値以上となると、ほぼ0となる。
一方、図16の右側に示した逆関数φ-1(y)は、その引数yが、数値0付近である場合に、急峻に変化する。
従って、チェックノード演算である式(7)の演算において、非線形関数φ(|vi|)の演算後からその逆関数φ-1(x)の演算までの処理を、通常量子化値を使用して行った場合、演算精度が劣化する。
即ち、非線形関数φ(x)の演算結果を、通常量子化値で表すと、ある程度の大きな数値以上の引数xに対しては、すべて、非線形関数φ(x)の演算結果として、同一の数値0を表す通常量子化値が得られる。つまり、ある程度の大きな数値以上の引数xに対する非線形関数φ(x)の演算結果は、ほぼ0となるため、通常量子化値によって精度良く表すことが困難である。
また、式(7)のチェックノード演算において、逆関数φ-1(y)の引数yとなるのは、非線形関数φ(|vi|)の積算値(i=1からi=dc−1までのΣφ(|vi|))であるが、非線形関数φ(|vi|)の演算結果を表す通常量子化値は、上述したように、ある程度の大きな数値以上の引数|vi|に対しては、すべて、数値0を表す通常量子化値となる。
従って、式(7)の積算の対象となる非線形関数φ(|vi|)の演算結果として、すべて、数値0を表す通常量子化値が得られた場合には、その積算値(i=1からi=dc−1までのΣφ(|vi|))も、数値0を表す通常量子化値となり、逆関数φ-1(y)の引数yとして、数値0を表す通常量子化値が与えられることになる。
一方、逆関数φ-1(y)は、その引数yが、数値0付近である場合に急峻に変化するから、逆関数φ-1(y)の演算結果として、精度の良い演算結果を得るためには、特に、0付近の数値を精度良く表す量子化値によって、引数yを表現することが望ましい。
しかしながら、通常量子化値を使用した場合には、上述したように、ある程度の大きな数値以上の引数|vi|に対しては、すべて、非線形関数φ(|vi|)の演算結果として、数値0を表す通常量子化値が得られ、その結果、逆関数φ-1(Σφ(|vi|))の引数となる積算値Σφ(|vi|)を表す通常量子化値も、数値0を表す通常量子化値となる。
このため、積算値Σφ(|vi|)が数値0付近の値である場合には、その積算値Σφ(|vi|)が僅かに違えば、本来は、逆関数φ-1(Σφ(|vi|))の演算結果が大きく異なるはずなのに、0付近の積算値Σφ(|vi|)が、すべて数値0を表す通常量子化値で表されてしまうために、僅かに違う積算値Σφ(|vi|)に対し、逆関数φ-1(Σφ(|vi|))の演算結果として、同一の演算結果、つまり、誤差の大きな演算結果が得られることになる。
これに対して、非線形関数φ(|vi|)の演算後からその逆関数φ-1(x)の演算までの処理を、高精度量子化値を使用して行う場合には、ある程度の大きな数値以上の引数xに対しても、非線形関数φ(x)の演算結果として、0付近の数値を精度良く表す高精度量子化値が得られる。さらに、その結果、逆関数φ-1(Σφ(|vi|))の引数となる積算値Σφ(|vi|)が、0付近の数値であっても、その数値を精度良く表す高精度量子化値が得られる。
従って、積算値Σφ(|vi|)が数値0付近の値である場合であっても、その積算値Σφ(|vi|)が僅かに異なるごとに応じて異なる、精度の良い逆関数φ-1(Σφ(|vi|))の演算結果(を表す高精度量子化値)が得られることになる。そして、その結果、LDPC符号の復号を精度良く行うことができる。
さらに、非線形関数φ(|vi|)の演算後からその逆関数φ-1(x)の演算までの処理だけを、高精度量子化値を使用し、他の処理を、通常量子化値を使用して行うので、上述したように、図13の復号装置の枝用メモリ100,102、および受信用メモリ104に必要な記憶容量は、通常量子化値を使用する図10の復号装置のそれと変わらない。
従って、LDPC符号の復号を、復号装置の大規模化を抑えつつ精度良く行うことができる。
なお、図9の検査行列Hの行の重みの最大は9であるため、即ち、チェックノードに供給されるメッセージの最大数は9であるため、チェックノード計算器171(図14)は、9個のメッセージ(φ(|vi|))を遅延させるFIFOメモリ1127とFIFOメモリ133を有し、行の重みが9未満の行のメッセージを計算するときには、FIFOメモリ1127とFIFOメモリ133における遅延量が、その行の重みの値に減らされる。
次に、図17は、図13のバリアブルノード計算器172の構成例を示している。なお、図中、図12のバリアブルノード計算器103と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。
バリアブルノード計算器172は、図12の演算器2151、レジスタ2152、セレクタ2153、レジスタ2154、演算器2156それぞれに代えて、演算器151、レジスタ152、セレクタ153、レジスタ154、演算器156が設けられている点で、図12のバリアブルノード計算器103と相違している。
以上のように構成される図17のバリアブルノード計算器172では、図12のバリアブルノード計算器103と同様に、制御部105から供給される、例えば、1ビットの制御信号D107に基づき、枝用メモリ102から1つずつ読み込まれるメッセージD103と、受信用メモリ104から読み込まれる受信データD104(u0i)を用いて、式(1)にしたがって演算(バリアブルノード演算)を行う。
即ち、図18は、バリアブルノード計算器172で行われる処理を示している。
バリアブルノード計算器172では、検査行列Hの各行に対応するチェックノードからの6ビットの通常量子化値で表現されるメッセージD103(チェックノードメッセージuj)が、枝用メモリ102(図13)から1つずつ読み込まれ、そのメッセージD103が、演算器151とFIFOメモリ155に供給される。また、バリアブルノード計算器172では、受信用メモリ104から6ビットの通常量子化値で表現される受信データD104(u0i)が、受信用メモリ104(図13)から1つずつ読み込まれ、演算器156に供給される。さらに、バリアブルノード計算器172には、制御部105から制御信号D107が供給され、その制御信号D107は、セレクタ153に供給される。
演算器151は、ステップS11において、6ビットの通常量子化値で表現されるメッセージD103(チェックノードメッセージuj)とレジスタ152に格納されている7ビットの値D151とを加算することにより、6ビットのメッセージD103を積算し、その結果得られる7ビットの通常量子化値で表現される積算値(積算結果)を出力し、レジスタ152に再格納する。なお、検査行列Hの1列に亘る全ての枝からのメッセージD103が積算された場合、レジスタ152はリセットされる。
ここで、演算器151およびレジスタ152では、6ビットのメッセージD103が、最大で、FIFOメモリ155における最大の遅延回数分、即ち、検査行列Hの列の最大の重み分の回数だけ積算される。いま、図9の検査行列Hの列の最大の重みは5であり、従って、演算器151およびレジスタ152では、6ビットのメッセージD103が、最大で、5回積算される(6ビットの値の5個分の積算が行われる)。
このため、本来ならば、演算器151が出力する積算値を表す通常量子化値としては、6ビットの通常量子化値を5回積算した値を表すことができるように、6ビットのメッセージD103よりも3ビット(5(回)を表すことができる最小のビット数)だけ多い9ビットが必要となる。即ち、演算器151において行われる積算において、その積算の結果得られるオーバフローを完全に防止するためには、その積算値を表す通常量子化値は9ビットである必要がある。
しかしながら、バリアブルノード計算器172では、演算器151は、6ビットの通常量子化値で表されるメッセージ(チェックノードメッセージ)D103を対象とする積算において、その積算の対象の6ビットの通常量子化値よりも1ビットだけ多いビット数である7ビットの通常量子化値で表現される積算値(積算結果)を出力する。
このように、演算器151は、本来ならば9ビットの通常量子化値で表現すべき積算値を、その9ビットよりも少ないビット数である7ビットの高精度量子化値で出力するので、バリアブルノード計算器172において、以降の処理を行うブロックは、ビット数が少ない通常量子化値を処理することができるように構成すればよい。従って、バリアブルノード計算器172の規模を小さくすることができる。
なお、演算器151は、本来ならば9ビットの通常量子化値で表現すべき積算値を、その9ビットよりも少ないビット数である7ビットの通常量子化値で出力するので、積算値がオーバフローし、その結果、バリアブルノード演算の精度、ひいては、LDPC符号の復号性能が劣化することが予想されるが、このLDPC符号の復号性能に関しては、後述する。
検査行列Hの1列に亘るメッセージD103が1つずつ読み込まれ、レジスタ152に1列分のメッセージD103が積算された値が格納された場合、制御部105から供給される制御信号D107は、「0」から「1」に変化する。例えば、列の重みが「5」である場合、制御信号D107は、1から4クロック目までは「0」となり、5クロック目では「1」となる。
制御信号D107が「1」の場合、セレクタ153は、ステップS12において、レジスタ152に格納されている値、即ち、検査行列Hの1列に亘る全ての枝からのメッセージD103(チェックノードメッセージuj)が積算された、本来ならば9ビットで表現されるべき7ビットの通常量子化値で表現される値D151(j=1からdVまでのΣuj)を選択し、レジスタ154に出力して格納させる。レジスタ154は、格納している値D151を、7ビットの値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は、ステップS13において、レジスタ154から供給された7ビットの値D152から、FIFOメモリ155から供給された6ビットの値D153を減算する。即ち、演算器156は、検査行列Hの1列に亘る全ての枝からのメッセージD103(チェックノードメッセージuj)の積算値から、バリアブルノードメッセージviを求めたい枝からのチェックノードメッセージujを減算して、その減算値(j=1からdv−1までのΣuj)を求める。さらに、演算器156は、ステップS13において、その減算値(j=1からdv−1までのΣuj)に、受信用メモリ104から供給された受信データD104(u0i)を加算して、その結果得られる6ビットの値をメッセージD105(バリアブルノードメッセージvi)として出力する。
以上のように、演算器151は、本来ならば9ビットの通常量子化値で表現すべき積算値を、その9ビットよりも少ないビット数である7ビットの通常量子化値で出力するので、バリアブルノード計算器172において、以降の通常量子化値を対象とした処理を行うブロックは、ビット数が少ない通常量子化値を処理することができるように構成すればよく、その結果、バリアブルノード計算器172の規模を小さくすることができる。
なお、図9の検査行列Hの列の重みの最大は5であるため、即ち、バリアブルノードバリアブルノードに供給されるチェックノードメッセージujの最大数は5であるため、バリアブルノード計算器172は、5個のチェックノードメッセージujを遅延させるFIFOメモリ155を有している。列の重みが5未満の列のバリアブルノードメッセージviを計算するときには、FIFOメモリ155における遅延量が、その列の重みの値に減らされる。
また、演算器156は、レジスタ154から供給される7ビットの値D152から、FIFOメモリ155から供給される6ビットの値D153を減算するとともに、受信用メモリ104から供給される6ビットの受信データD104を加算する演算を行うから、その演算結果は、6ビットのメッセージD105で表すことができる最小値未満となるか、または最大値を越えることがある。演算器156は、演算結果が、6ビットのメッセージD105で表すことができる最小値未満である場合には、その最小値にクリッピングし、演算結果が、6ビットのメッセージD105で表すことができる最大値を越える場合には、その最大値にクリッピングする。
ところで、図14のチェックノード計算器171において、チェックノード演算における非線形関数φ(|vi|)の演算と逆関数φ-1(x)の演算とは、それぞれLUT1121とLUT1128で行われる。
即ち、非線形関数φ(|vi|)の演算は、5ビットの通常量子化値を入力として、非線形関数φ(|vi|)の演算の結果を、9ビットの高精度量子化値で出力するLUT1121で行われ、逆関数φ-1(x)の演算は、9ビットの高精度量子化値を入力として、逆関数φ-1(x)の演算の結果を、5ビットの通常量子化値で出力するLUT1128で行われる。
このようなLUT1121やLUT1128などのLUTの容量としては、入力としての量子化値のビット数をaビットとするとともに、出力としての量子化値をbビットとすると、2a×bビットだけの容量が必要となる。
従って、入力および出力のいずれの量子化値も5ビットの通常量子化値である図11のLUT121とLUT128には、25×5ビットの容量が必要である。
一方、入力としての量子化値が5ビットの通常量子化値であり、出力としての量子化値が9ビットの高精度量子化値であるLUT1121には、25×9ビットの容量が必要であり、入力としての量子化値が9ビットの高精度量子化値であり、出力としての量子化値が5ビットの通常量子化値であるLUT1128には、29×5ビットの容量が必要である。
従って、図14のチェックノード計算器171におけるLUT1121やLUT1128に必要な容量は、図11のチェックノード計算器101におけるLUT121やLUT128と比較して大になり、その分、図14のチェックノード計算器171は、図11のチェックノード計算器101よりも大型化する。
そこで、図19は、本発明を適用した復号装置の第2実施の形態の構成例を示している。なお、図中、図13の復号装置と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。
図19の復号装置は、枝用メモリ100,102、受信用メモリ104、バリアブルノード計算器172、制御部105が設けられている点で、図13の復号装置と共通するが、チェックノード計算器171に代えてチェックノード計算器181が設けられている点で、図13の復号装置と相違している。
ここで、図19の復号装置では、図13で説明したように、例えば、前述の図9に示した検査行列Hで表されるLDPC符号(符号化率2/3、符号長108)の復号が行われる。
図19の復号装置でも、図13の復号装置と同様に、図13のチェックノード計算器171に対応するチェックノード計算器181がチェックノード演算を行い、バリアブルノード計算器172がバリアブルノード演算を行い、これらのチェックノード演算とバリアブルノード演算とが交互に行われることによって、LDPC符号が復号される。
従って、チェックノード計算器181でも、図13のチェックノード計算器171と同様に、LDPC符号の復号のためのチェックノードのチェックノード演算であって、非線形関数の演算および非線形関数の逆関数の演算を含むチェックノード演算が行われ、即ち、制御部105から供給される制御信号D106に基づき、枝用メモリ100から供給されるメッセージD101(バリアブルノードメッセージvi)を用いて、非線形関数φ(x)の演算およびその非線形関数φ(x)の逆関数φ-1(x)の演算を含む式(7)に従ってチェックノード演算が行われ、そのチェックノード演算によって求められたメッセージD102(チェックノードメッセージuj)が、後段の枝用メモリ102に供給される。
但し、チェックノード計算器181では、固定の量子化幅で数値を表現するビット列である第1の量子化値を入力として、非線形関数φ(x)の演算の結果を、一部のビット列に応じて決まる量子化幅で数値を表現するビット列である第2の量子化値で出力する点、および、第2の量子化値を入力として、逆関数φ-1(x)の演算の結果を、第1の量子化値で出力する点が、図13のチェックノード計算器171と異なっている。
ここで、固定の量子化幅で数値を表現するビット列である第1の量子化値については、固定の量子化幅をSと表すとともに、第1の量子化値をQ1と表すと、第1の量子化値(ビット列)Q1+1が表す数値は、必ず、第1の量子化値Q1が表す数値よりもSだけ大きい数値となる。従って、第1の量子化値は、数値を、いわゆる固定小数点と呼ばれる表現形式で表現するビット列と等価であり、以下、適宜、固定小数点量子化値、または固定小数点形式の量子化値という。
また、一部のビット列に応じて決まる量子化幅で数値を表現するビット列である第2の量子化値については、量子化幅が、第2の量子化値の一部のビット列に応じて変化するので、第2の量子化値をQ2と表すと、第2の量子化値Q2+1が表す数値が、第2の量子化値Q2が表す数値よりもどれだけ大きい数値であるかは、第2の量子化値Q2とQ2+1の一部のビット列によって異なる。
即ち、第2の量子化値Q2とQ2+1の一部のビット列によっては、第2の量子化値Q2+1が表す数値は、第2の量子化値Q2が表す数値よりも、ある数Sだけ大きい数値であることや、Sとは異なるある数S’だけ大きいことがある。つまり、第2の量子化値が、1だけ増加すると、その第2の量子化値が表す数値は、例えば、Sだけ増加することもあるし、Sとは異なるS’だけ増加することもある。
一方、数値を、いわゆる浮動小数点と呼ばれる表現形式で表現するビット列は、符号ビット(正負を表すビット)を考慮しなければ、一般に、指数部eを一部のビット列に割り当てるとともに、仮数部fを残りのビット列に割り当てることによって、f×2eで表される数値を表す。
例えば、指数部eとしてのビット列が0であれば、仮数部fとしてのビット列が1だけ増加することに、その指数部eと仮数部fとで構成される、数値を浮動小数点で表現するビット列が表す数値f×2eは、1ずつ増加する。また、例えば、指数部eとしてのビット列が1であれば、仮数部fとしてのビット列が1だけ増加することに、その指数部eと仮数部fとで構成される、数値を浮動小数点で表現するビット列が表す数値f×2eは、2ずつ増加する。
このように、数値を浮動小数点で表現するビット列が表す数値は、その一部のビット列に割り当てられる指数部eによっては、残りのビット列に割り当てられている仮数部fが1だけ増加すると、例えば、1だけ増加することもあるし、2だけ増加することもある。
一部のビット列に応じて決まる量子化幅で数値を表現するビット列である第2の量子化値は、その第2の量子化値が表す数値の増加の仕方が一部のビット列によって異なる点において、数値の増加の仕方が指数部eによって異なる、数値を浮動小数点で表現するビット列と共通する。
以上のように、第2の量子化値は、数値を浮動小数点で表現するビット列に、いわば準ずるので、第2の量子化値を、以下、適宜、準浮動小数点量子化値、または準浮動小数点形式の量子化値という。
なお、上述の通常量子化値および高精度量子化値は、いずれも、固定小数点量子化値である。
次に、図20は、図19のチェックノード計算器181の構成例を示している。
なお、図20において、図14のチェックノード計算器171と共通する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。
即ち、図20のチェックノード計算器181は、LUT1121とLUT1128に代えて、LUT221とLUT228がそれぞれ設けられており、かつ、変換回路231,232、および233が新たに設けられている他は、図14のチェックノード計算器171と同様に構成されている。
チェックノード計算器181は、式(7)のチェックノード演算を行うが、その際、上述したように、固定小数点量子化値(第1の量子化値)を入力として、非線形関数φ(x)の演算の結果を、準浮動小数点量子化値(第2の量子化値)で出力するとともに、準浮動小数点量子化値を入力として、逆関数φ-1(x)の演算の結果を、固定小数点量子化値で出力する。
即ち、LUT221は、図14のLUT1121と同様に、固定小数点量子化値でもある通常量子化値の5ビットの絶対値D122(|vi|)に対して、式(7)における非線形関数φ(|vi|)の演算結果を対応付けて記憶している。但し、LUT1121では、非線形関数φ(|vi|)の演算結果が、9ビットの高精度量子化値で表されているのに対して、LUT221では、非線形関数φ(|vi|)の演算結果が、5ビットの準浮動小数点量子化値で表されている。
従って、LUT221は、5ビットの固定小数点量子化値に対し、その固定小数点量子化値が表す数値|vi|を入力として、非線形関数φ(|vi|)の演算を行った結果得られる数値を表す5ビットの準浮動小数点量子化値を対応付けて記憶している。
そして、LUT221は、そこに供給される5ビットの固定小数点量子化値である絶対値D122(|vi|)に対応付けられている、非線形関数φ(|vi|)の演算結果を表す5ビットの準浮動小数点量子化値を、変換回路231とFIFO1127に供給する。
LUT228は、図14のLUT1128と同様に、5ビットの量子化値y(=Σφ(|vi|))に対して、式(7)における逆関数φ-1(y)(=φ-1(Σφ(|vi|)))の演算結果を表す5ビットの通常量子化値を対応付けて記憶している。但し、LUT1128に対しては、逆関数φ-1(y)の引数yが9ビットの固定小数点量子化値でもある高精度量子化値で与えられるのに対して、LUT228に対しては、逆関数φ-1(y)の引数yが5ビットの準浮動小数点量子化値で、後述する変換回路233から与えられるようになっている。
従って、LUT228は、5ビットの準浮動小数点量子化値(符号ビットなしの準浮動小数点量子化値)に対し、その準浮動小数点量子化値が表す数値Σφ(|vi|)を入力として、逆関数φ-1(Σφ(|vi|))の演算を行った結果得られる数値を表す5ビットの固定小数点量子化値(符号ビットなしの固定小数点量子化値)を対応付けて記憶している。
そして、LUT228は、そこに供給される5ビットの準浮動小数点量子化値F1128(Σφ(|vi|))に対応付けられている、逆関数φ-1(Σφ(|vi|))の演算結果を表す、通常量子化値でもある5ビットの固定小数点量子化値を、逆関数φ-1(Σφ(|vi|))の演算結果D1129として出力する。
変換回路231は、LUT221から供給される、非線形関数φ(|vi|)の演算結果を表す5ビットの準浮動小数点量子化値を、その非線形関数φ(|vi|)の演算結果を表す、高精度量子化値でもある9ビットの固定小数点量子化値(符号ビットなしの固定小数点量子化値)に変換する、数値の表現形式の変換を行い、その結果得られる9ビットの固定小数点量子化値D1123を、演算器1122に供給する。
ここで、LUT221が出力する非線形関数φ(|vi|)の演算結果を表す5ビットの準浮動小数点量子化値は、上述したように、一部のビット列に応じて決まる量子化幅で数値を表現するビット列であるため、そのままでは、後段の演算器1122での積算を行うことが困難である。このため、変換回路231は、LUT221が出力する5ビットの準浮動小数点量子化値を、9ビットの高精度量子化値でもある固定小数点量子化値に変換する。
変換回路232は、変換回路231と同様に、数値の表現形式の変換を行う。即ち、変換回路232には、LUT221が出力する非線形関数φ(|vi|)の演算結果を表す5ビットの準浮動小数点量子化値が、FIFO1127において遅延されて供給されるようになっている。変換回路232は、FIFO1127から供給される(遅延後の)5ビットの準浮動小数点量子化値を、9ビットの高精度量子化値でもある固定小数点量子化値に変換し、演算器1126に供給する。
つまり、変換回路232は、変換回路231で準浮動小数点量子化値を固定小数点量子化値に変換するのと同様の理由で、後段の演算器1126の演算(積算)の対象となる5ビットの準浮動小数点量子化値を、9ビットの高精度量子化値でもある固定小数点量子化値に変換する。
変換回路233は、変換回路231や232の変換とは逆の表現形式の変換を行う。即ち、変換回路233には、演算器1126から9ビットの高精度量子化値でもある固定小数点量子化値が供給されるようになっている。変換回路233は、演算器1126からの9ビットの固定小数点量子化値を5ビットの準浮動小数点量子化値に変換し、LUT228に入力として与える。
なお、図20では、9ビットの固定小数点量子化値(およびその9ビットの固定小数点量子化値を用いて行われた演算の結果)がやりとりされる接続線を、実線の太線で示してあり、5ビットの浮動小数点量子化値がやりとりされる接続線を、点線の太線で示してある。後述する図30においても、同様である。
次に、図21を参照して、図20のLUT221についてさらに説明する。
LUT221には、図21左の表に示す5ビットの通常量子化値でもある固定小数点量子化値が供給される。なお、図21左の表では、5ビットの固定小数点量子化値としてのビット列とともに、そのビット列が表す10進数の数値も示してある。
LUT221は、5ビットの固定小数点量子化値に対して、その固定小数点量子化値が表す数値xを入力として式(7)における非線形関数φ(|vi|)の演算を行った結果得られる数値φ(x)を表す5ビットの準浮動小数点量子化値を出力する。
図21右の表は、LUT221が出力する5ビットの準浮動小数点量子化値を示している。ここで、図21右の表には、5ビットの準浮動小数点量子化値としてのビット列とともに、その準浮動小数点量子化値に対応する固定小数点量子化値(準浮動小数点量子化値が表す数値を表す固定小数点量子化値)としての9ビットと、その9ビットが表す10進数の数値も示してある。
図21左の表の5ビットの固定小数点量子化値が表す10進数の数値の範囲は、0乃至31であるのに対して、図10右の表の5ビットの準浮動小数点量子化値(に対応する9ビットの固定小数点量子化値)が表す10進数の数値の範囲は、0乃至448であり、従って、同一の5ビットでも、準浮動小数点量子化値の方が、固定小数点量子化値よりも広いダイナミックレンジの数値を表すことができる。なお、例えば、9ビットの固定小数点量子化値が表す10進数の範囲は、0乃至511であるから、5ビットの準浮動小数点量子化値によれば、9ビットの固定小数点量子化値と同程度に広いダイナミックレンジの数値を表すことができる。
また、図21右の表の5ビットの準浮動小数点量子化値の量子化幅は、その一部のビットである上位3ビットによって異なっている。
即ち、10進数の数値で考えれば、5ビットの準浮動小数点量子化値の上位3ビットが000である場合と001である場合には、残りの下位2ビットが1だけ増加するごとに、5ビットの準浮動小数点量子化値が表す10進数の数値は1ずつ増加する。従って、量子化幅は1になっている。
また、5ビットの準浮動小数点量子化値の上位3ビットが010である場合には、残りの下位2ビットが1だけ増加するごとに、5ビットの準浮動小数点量子化値が表す10進数の数値は2ずつ増加する。従って、量子化幅は2になっている。
さらに、5ビットの準浮動小数点量子化値の上位3ビットが011である場合には、残りの下位2ビットが1だけ増加するごとに、5ビットの準浮動小数点量子化値が表す10進数の数値は4ずつ増加する。従って、量子化幅は4になっている。
以下、同様に、5ビットの準浮動小数点量子化値の上位3ビットが100,101,110,111である場合には、それぞれ、量子化幅は、8,16,32,64になっている。
ここで、図21右の表の5ビットの準浮動小数点量子化値の上位3ビットを準指数部eと呼ぶとともに、残りの下位2ビットを準仮数部fと呼ぶこととすると、準指数部eが000である場合を除けば、5ビットの準浮動小数点量子化値が表す10進数の数値は、(1+f/22)×2e+1となる。従って、準浮動小数点量子化値は、仮数部を(1+f/22)とし、指数部をe+1とする基数が2の浮動小数点(数)であるということができる。例えば、5ビットの準浮動小数点量子化値10001は、準指数部eである上位3ビットが100(10進数で4)であり、準仮数部fである下位2ビットが01(10進数で1)であるから、10進数の数値で表すと、(1+1/22)×24+1=40となる。
なお、準指数部eが000である場合、5ビットの準浮動小数点量子化値が表す10進数の数値は、f/2×2e+1となる。この場合、準浮動小数点量子化値は、仮数部をf/2とし、指数部をe+1とする基数が2の浮動小数点(数)であるということができる。
上述のように、準浮動小数点量子化値の量子化幅は、その準浮動小数点量子化値が表す数値が大になるほど大になる(小になるほど小になる)。本実施の形態では、5ビットの準浮動小数点量子化値の最小の量子化幅が、例えば、9ビットの固定小数点量子化値でもある高精度量子化値の量子化幅以下(高精度量子化値の量子化幅と同一か、それよりも小さい値)になっており、従って、5ビットの準浮動小数点量子化値によれば、9ビットの高精度量子化値と同様に、非線形関数φ(x)の演算結果(図16左側)として、0付近の数値を精度良く表すことができる。
即ち、5ビットの準浮動小数点量子化値によれば、5ビットの固定小数点量子化値(通常量子化値)よりも広い、9ビットの固定小数点量子化値(高精度量子化値)と同程度のダイナミックレンジの数値を表すことができ、かつ、9ビットの固定小数点量子化値(高精度量子化値)と同様に(あるいは、それ以上に)、0付近の数値を精度良く表すことができる。
次に、図22を参照して、図20の変換回路231についてさらに説明する。
図22は、変換回路231に入力される(与えられる)5ビットの準浮動小数点量子化値と、変換回路231が出力する9ビットの固定小数点量子化値との関係を示している。
変換回路231は、上述したように、LUT221から供給される5ビットの準浮動小数点量子化値を、高精度量子化値でもある9ビットの固定小数点量子化値に変換する、数値の表現形式の変換を行う。
即ち、変換回路231は、図22の左から1番目の欄に示す5ビットの準浮動小数点量子化値を、図22の左から2番目の欄に示す9ビットの固定小数点量子化値に変換して出力する。
具体的には、変換回路231は、5ビットの準浮動小数点量子化値の準指数部(上位3ビット)eが000である場合には、準仮数部(下位2ビット)fを、そのまま下位2ビットとし、かつ、残りの上位7ビットを0とする9ビットの固定小数点量子化値を出力する。
また、変換回路231は、5ビットの準浮動小数点量子化値の準指数部eが001である場合には、下位3ビット目(最下位ビットから数えて3ビット目)を1とするとともに、その直後の下位側の2ビットを準仮数部fとし、かつ、残りの上位6ビットを0とする9ビットの固定小数点量子化値を出力する。
さらに、変換回路231は、5ビットの準浮動小数点量子化値の準指数部eが010である場合には、下位4ビット目を1とするとともに、その直後の下位側の2ビットを準仮数部fとし、かつ、残りの6ビットを0とする9ビットの固定小数点量子化値を出力する。
以下、同様に、変換回路231は、準指数部がeで表され、準仮数部がfで表される5ビットの準浮動小数点量子化値に対して、下位e+1ビット目を1とするとともに、その直後の下位側の2ビットを準仮数部fとし、かつ、残りの6ビットを0とする9ビットの固定小数点量子化値を出力する。
なお、図22では、5ビットの準浮動小数点量子化値と、9ビットの固定小数点量子化値とともに、その固定小数点量子化値が表す10進数の数値も、図22の左から3番目(一番右)の欄に示してある。
また、図20の変換回路232も、上述した図20の変換回路231と同一の表示形式の変換(準浮動小数点量子化値から固定小数点量子化値への変換)を行う。
次に、図23を参照して、図20の変換回路231が行う表現形式の変換の処理について説明する。
変換回路231は、5ビットの準浮動小数点量子化値が入力されると、その準浮動小数点量子化値の上位3ビットである準指数部eに基づき、9ビットのビット列に対して、準浮動小数点量子化値の下位2ビットである準仮数部fを挿入する位置(準仮数部fに置換するビット)を決定し、その位置に、準仮数部fを挿入した9ビットのビット列を、9ビットの固定小数点量子化値として出力する。
即ち、変換回路231は、図23に示すように、準指数部eとしての3ビットで表される値000,001,010,011,100,101,110,111に対して、2ビットxyが未定の9ビットのビット列0000000xy,0000001xy,000001xy0,00001xy00,0001xy000,001xy0000,01xy00000,1xy000000を対応付けて記憶している。
そして、準浮動小数点量子化値の下位2ビットである準仮数部fの左から1番目のビットと2番目のビットを、それぞれ、xとyと表すこととすると、変換回路231は、5ビットの準浮動小数点量子化値の上位3ビットである準指数部eに対応付けられている9ビットのビット列を選択し、その9ビットのビット列の未定の2ビットxyに対して、準仮数部fの左から1番目のビットxと2番目のビットyをセットすることにより、9ビットのビット列を得て、その9ビットのビット列を、9ビットの固定小数点量子化値として出力する。
従って、変換回路231に対して、例えば、5ビットの準浮動小数点量子化値10001が入力された場合、その上位3ビットである準指数部eは100であるから、変換回路231は、100に対応付けられている9ビットのビット列0001xy000を選択する。
そして、5ビットの準浮動小数点量子化値10001の下位2ビットである準仮数部fは01であるから、変換回路231は、選択した9ビットのビット列0001xy000の未定の2ビットxyに対して、準仮数部fである01の左から1番目のビット0と2番目のビット1をセットすることにより、9ビットのビット列000101000を得て、9ビットの固定小数点量子化値として出力する。
なお、5ビットの準浮動小数点量子化値の最小の量子化幅と、9ビットの固定小数点量子化値の量子化幅とが同一であれば、図23で説明したように、変換回路231において、浮動小数点量子化値の準仮数部f(であるビット列)をそのまま使用して、その準浮動小数点量子化値を固定小数点量子化値に変換することができるので、変換回路231は比較的簡単に構成することができ、従って、その回路規模もそれほど大きくはならない。
次に、図24を参照して、図20の変換回路233についてさらに説明する。
図24は、変換回路233に入力される(与えられる)9ビットの固定小数点量子化値と、変換回路233が出力する5ビットの準浮動小数点量子化値との関係を示している。
変換回路233は、上述したように、演算回路1126(図20)から供給される9ビットの高精度量子化値でもある固定小数点量子化値を、5ビットの準浮動小数点量子化値に変換する、数値の表現形式の変換を行う。
即ち、変換回路233は、図24左の表に示す9ビットの固定小数点量子化値を、図24右の表に示す5ビットの準浮動小数点量子化値に変換して出力する。
ここで、図24左の表には、9ビットの固定小数点量子化値を、その固定小数点量子化値が表す10進数の数値とともに示してある。
また、図24右の表は、図22と同一であり、従って、5ビットの準浮動小数点量子化値と、9ビットの固定小数点量子化値との対応関係を示している。
変換回路233は、図24左の表に示す9ビットの固定小数点量子化値の入力に対して、その固定小数点量子化値が表す10進数に近い10進数、即ち、例えば、図24左の表に示す9ビットの固定小数点量子化値が表す10進数以下の最大の10進数を表す図24右の表の固定小数点量子化値に対応する5ビットの準浮動小数点量子化値を出力する。
具体的には、変換回路233は、図24左の表に示す9ビットの固定小数点量子化値の入力に対して、その9ビットの固定小数点量子化値の上位6ビットが0である場合には、図24右の表において、その9ビットの固定小数点量子化値に対応する5ビットの準浮動小数点量子化値を出力する。
また、変換回路233は、図24左の表に示す9ビットの固定小数点量子化値の入力に対して、その9ビットの固定小数点量子化値の上位5ビットが0であり、上位6ビット目(最上位ビットから6ビット目)が1である場合には、図24右の表において、その9ビットの固定小数点量子化値の下位1ビット(最下位ビット)を0に切り捨てた固定小数点量子化値に対応する5ビットの準浮動小数点量子化値を出力する。
さらに、変換回路233は、図24左の表に示す9ビットの固定小数点量子化値の入力に対して、その9ビットの固定小数点量子化値の上位4ビットが0であり、上位5ビット目が1である場合には、図24右の表において、その9ビットの固定小数点量子化値の下位2ビットを0に切り捨てた固定小数点量子化値に対応する5ビットの準浮動小数点量子化値を出力する。
また、変換回路233は、図24左の表に示す9ビットの固定小数点量子化値の入力に対して、その9ビットの固定小数点量子化値の上位3ビットが0であり、上位4ビット目が1である場合には、図24右の表において、その9ビットの固定小数点量子化値の下位3ビットを0に切り捨てた固定小数点量子化値に対応する5ビットの準浮動小数点量子化値を出力する。
変換回路233は、上位2ビットが0で、上位3ビット目が1の固定小数点量子化値や、上位1ビットが0で、上位2ビット目が1の固定小数点量子化値の入力に対しても、上述の場合と同様の5ビットの準浮動小数点量子化値を出力する。
そして、変換回路233は、上位1ビット(最上位ビット)が1の固定小数点量子化値の入力に対して、図24右の表において、その9ビットの固定小数点量子化値の下位6ビットを0に切り捨てた固定小数点量子化値に対応する5ビットの準浮動小数点量子化値を出力する。
次に、図25を参照して、図20の変換回路233が行う表現形式の変換の処理について説明する。
変換回路233は、9ビットの固定小数点量子化値が入力されると、その9ビットの固定小数点量子化値の、最も上位ビット側にある1の位置を検出し、その位置に基づき、3ビットの準指数部eと、2ビットの準仮数部fとを求めて、その3ビットの準指数部eと、2ビットの準仮数部fとを、最上位ビット側から順次並べた5ビットのビット列を、5ビットの準浮動小数点量子化値として出力する。
即ち、9ビットの固定小数点量子化値をINと表し、さらに、9ビットの固定小数点量子化値INの最下位ビットから数えてa+1ビット目を、IN[a]と表す。但し、ここでは、a=0,1,・・・,8である。さらに、9ビットの固定小数点量子化値INの最下位ビットから数えてa+1ビット目からb+1ビット目までのビット列を、IN[a:b]と表す。但し、ここでは、b=0,1,・・・,8であり、また、a>bであるとする。
変換回路233は、図25に示すように、9ビットの固定小数点量子化値INのうちのビットIN[8](最上位ビット)が、1になっている場合、指数部eを111とするとともに、9ビットの固定小数点量子化値INのうちのIN[7:6]の2ビットを仮数部fとする。
また、変換回路233は、9ビットの固定小数点量子化値INのうちのビットIN[8]が0で、ビットIN[7]が1になっている場合、指数部eを110とするとともに、9ビットの固定小数点量子化値INのうちのIN[6:5]の2ビットを仮数部fとする。
さらに、変換回路233は、9ビットの固定小数点量子化値INのうちの2ビットIN[8:7]が0で、ビットIN[6]が1になっている場合、指数部eを101とするとともに、9ビットの固定小数点量子化値INのうちのIN[5:4]の2ビットを仮数部fとする。
また、変換回路233は、9ビットの固定小数点量子化値INのうちの3ビットIN[8:6]が0で、ビットIN[5]が1になっている場合、指数部eを100とするとともに、9ビットの固定小数点量子化値INのうちのIN[4:3]の2ビットを仮数部fとする。
さらに、変換回路233は、9ビットの固定小数点量子化値INのうちの4ビットIN[8:5]が0で、ビットIN[4]が1になっている場合、指数部eを011とするとともに、9ビットの固定小数点量子化値INのうちのIN[3:2]の2ビットを仮数部fとする。
また、変換回路233は、9ビットの固定小数点量子化値INのうちの5ビットIN[8:4]が0で、ビットIN[3]が1になっている場合、指数部eを010とするとともに、9ビットの固定小数点量子化値INのうちのIN[2:1]の2ビットを仮数部fとする。
さらに、変換回路233は、9ビットの固定小数点量子化値INのうちの6ビットIN[8:3]が0で、ビットIN[2]が1になっている場合、指数部eを001とするとともに、9ビットの固定小数点量子化値INのうちのIN[1:0]の2ビットを仮数部fとする。
また、変換回路233は、9ビットの固定小数点量子化値INのうちの7ビットIN[8:2]が0になっている場合、指数部eを000とするとともに、9ビットの固定小数点量子化値INのうちのIN[1:0]の2ビットを仮数部fとする。
そして、変換回路233は、準指数部eを上位3ビットとするとともに、準仮数部fを下位2ビットとする5ビットのビット列を、5ビットの準浮動小数点量子化値として出力する。
従って、変換回路233に対して、例えば、9ビットの固定小数点量子化値000011000が入力された場合、その9ビットの固定小数点量子化値INについては、その4ビットIN[8:5]が0で、ビットIN[4]が1になっているので、変換回路233は、指数部eを011とするとともに、9ビットの固定小数点量子化値INのうちのIN[3:2]の2ビット10を仮数部fとする。そして、変換回路233は、準指数部eである011を上位3ビットとするとともに、準仮数部fである10を下位2ビットとする5ビットのビット列01110を、5ビットの準浮動小数点量子化値として出力する。
なお、5ビットの準浮動小数点量子化値の最小の量子化幅と、9ビットの固定小数点量子化値の量子化幅とが同一であれば、図25で説明したように、変換回路233において、固定小数点量子化値の一部のビット列をそのまま準仮数部fに使用して、その固定小数点量子化値を準浮動小数点量子化値に変換することができるので、変換回路233は比較的簡単に構成することができ、従って、その回路規模もそれほど大きくはならない。
次に、図26を参照して、図20のLUT228についてさらに説明する。
LUT221には、図26右の表に示す5ビットの準浮動小数点量子化値が供給される。ここで、図26右の表には、5ビットの準浮動小数点量子化値としてのビット列とともに、その準浮動小数点量子化値に対応する固定小数点量子化値としての9ビットと、その9ビットが表す10進数の数値も示してある。
LUT221は、5ビットの準浮動小数点量子化値に対して、その準浮動小数点量子化値が表す数値yを入力として式(7)における逆関数φ-1(Σφ(|vi|))の演算を行った結果得られる数値φ-1(y)を表す5ビットの固定小数点量子化値を出力する。
即ち、図26左の表は、LUT228が出力する5ビットの固定小数点量子化値を示している。なお、図26左の表では、5ビットの固定小数点量子化値としてのビット列とともに、そのビット列が表す10進数の数値も示してある。
図21で説明したように、5ビットの固定小数点量子化値が表す10進数の数値の範囲は、0乃至31であるのに対して、5ビットの準浮動小数点量子化値(に対応する9ビットの固定小数点量子化値)が表す10進数の数値の範囲は、0乃至448である。また、9ビットの固定小数点量子化値が表す10進数の範囲は、0乃至511である。従って、5ビットの準浮動小数点量子化値は、5ビットの固定小数点量子化値よりも広い、9ビットの固定小数点量子化値と同程度のダイナミックレンジの数値を表すことができる。
さらに、本実施の形態では、上述したように、5ビットの準浮動小数点量子化値の最小の量子化幅が、例えば、9ビットの固定小数点量子化値でもある高精度量子化値の量子化幅以下になっており、従って、5ビットの準浮動小数点量子化値によれば、9ビットの高精度量子化値と同様に、引数yが数値0付近である場合に急峻に変化する逆関数φ-1(y)の引数yとして、0付近の数値を精度良く表すことができる。
即ち、5ビットの準浮動小数点量子化値によれば、5ビットの固定小数点量子化値(通常量子化値)よりも広い、9ビットの固定小数点量子化値(高精度量子化値)と同程度のダイナミックレンジの数値を表すことができ、かつ、9ビットの固定小数点量子化値(高精度量子化値)と同様に(あるいは、それ以上に)、0付近の数値を精度良く表すことができる。
以上のように、LUT221は、ある程度の大きな数値以上の引数xに対して0付近の値となる非線形関数φ(x)の演算結果として、0付近の数値を精度良く表す5ビットの準浮動小数点量子化値を出力する。
さらに、LUT228は、逆関数φ-1(Σφ(|vi|))の引数となる積算値Σφ(|vi|)として入力される、0付近の数値を精度良く表す5ビットの浮動小数点量子化値に対して、逆関数φ-1(Σφ(|vi|))の演算結果を、5ビットの通常量子化値でもある固定小数点量子化値で出力する。
従って、5ビットの準浮動小数点量子化値によれば、ある程度の大きな数値以上の引数xに対する非線形関数φ(x)の演算結果である0付近の数値を精度良く表すことができ、かつ、逆関数φ-1(Σφ(|vi|))の引数となる積算値Σφ(|vi|)が、0付近の数値であっても、その数値を精度良く表すことができるので、積算値Σφ(|vi|)が数値0付近の値である場合であっても、その積算値Σφ(|vi|)が僅かに異なるごとに応じて異なる、精度の良い逆関数φ-1(Σφ(|vi|))の演算結果が得られることになる。そして、その結果、LDPC符号の復号を精度良く行うことができる。
さらに、LUT221およびLUT228については、その入力と出力のいずれも5ビットとなるので、必要な容量は、25×5ビットとなる。従って、LUT221に必要とされる、回路規模に比例する容量は、対応する図14のLUT1121の容量(25×9ビット)の5/9で済む。また、LUT228に必要とされる、回路規模に比例する容量は、対応する図14のLUT1128の容量(29×5ビット)の1/24で済む。
従って、LUT221およびLUT228を小型に構成することができ、その結果、チェックノード計算器181(図20)、ひいては、図19の復号装置の大規模化を抑制することができる。
次に、図27のフローチャートを参照して、図20のチェックノード計算器181の処理について説明する。
チェックノード計算器181では、検査行列Hの各列に対応するバリアブルノードからの6ビットのメッセージD101(バリアブルノードメッセージvi)が、枝用メモリ100(図19)から1つずつ読み込まれ、その下位5ビットである絶対値D122(|vi|)がLUT221に、その最上位ビットである符号ビットD121がEXOR回路129とFIFOメモリ133にそれぞれ供給される。また、チェックノード計算器181には、制御部105(図19)から制御信号D106が供給され、その制御信号D106は、セレクタ1124とセレクタ131に供給される。
LUT221は、ステップS21において、そこに供給される5ビットの絶対値D122(|vi|)を入力として、その5ビットの絶対値D122(|vi|)に一致する5ビットの通常量子化値でもある固定小数点量子化値(図21左の表)に対応付けられている、非線形関数φ(|vi|)の演算結果を表す5ビットの準浮動小数点量子化値F1123を読み出し、変換回路231とFIFOメモリ1127に出力する。
即ち、LUT221では、ステップS21において、等価的に、固定小数点量子化値で表される絶対値D122(|vi|)を入力として、式(7)における非線形関数φ(|vi|)を演算する処理と、その演算結果を表す固定小数点量子化値を準浮動小数点量子化値に変換する、表現形式の変換とが行われる。
変換回路231は、ステップS22において、LUT221からの非線形関数φ(|vi|)の演算結果を表す5ビットの準浮動小数点量子化値F1123を、図22で説明したように、9ビットの高精度量子化値でもある固定小数点量子化値に変換する、表示形式の変換を行い、その結果得られる9ビットの固定小数点量子化値D1123を、演算器1122に出力する。
その後、ステップS23において、演算器1122は、9ビットの固定小数点量子化値が表す非線形関数の演算結果D1123(φ(|vi|))とレジスタ1123に格納されている10ビットの値D1124とを加算することにより、演算結果D1123を積算し、その結果得られる10ビットの積算値をレジスタ1123に再格納する。なお、検査行列Hの1行に亘る全ての枝からのメッセージD101の絶対値D122(|vi|)に対する演算結果が積算された場合、レジスタ1123はリセットされる。
ここで、演算器1122およびレジスタ1123では、変換回路231から供給される9ビットの固定小数点量子化値が表す演算結果D1123(φ(|vi|))が、最大で、FIFOメモリ1127における最大の遅延回数分、即ち、検査行列Hの行の最大の重み分の回数だけ積算される。いま、図9の検査行列Hの行の最大の重みは9であり、従って、演算器1122およびレジスタ1123では、9ビットの固定小数点量子化値が、最大で、9回積算される(9ビットの固定小数点量子化値の9個分の積算が行われる)。
このため、演算器1122が出力する積算値は、オーバフローを完全に防止するには、9ビットの固定小数点量子化値を9回積算した値を表すことができるように、LUT221が出力する9ビットの固定小数点量子化値D1123よりも4ビット(9(回)を表すことができる最小のビット数)だけ多い13ビットとする必要があるが、図20のチェックノード計算器181でも、図14のチェックノード計算171における場合と同様に、積算の対象の9ビットの高精度量子化値よりも1ビットだけ多いビット数である10ビットの高精度量子化値で表現される積算値(積算結果)になっている。
検査行列Hの1行に亘るメッセージD101(バリアブルノードメッセージvi)が枝用メモリ100(図19)から1つずつ読み込まれ、レジスタ1123に1行分の演算結果D1123が積算された積算値が格納された場合、制御部105から供給される制御信号D106は、0から1に変化する。例えば、検査行列Hの行の重み(row weight)が「9」である場合、制御信号D106は、1から8クロック目までは、「0」となり、9クロック目では「1」となる。
制御信号D106が「1」の場合、セレクタ1124は、ステップS24において、レジスタ1123に格納されている値、即ち、検査行列Hの1行に亘る全ての枝からのメッセージD101(バリアブルノードメッセージvi)から求められたφ(|vi|)が積算された10ビットの積算値D1124(i=1からi=dcまでのΣφ(|vi|))を選択し、10ビットの値D1125として、レジスタ1125に出力して格納させる。レジスタ1125は、格納している値D1125を、10ビットの値D1126として、セレクタ1124と演算器1126に供給する。制御信号D106が「0」の場合、セレクタ1124は、レジスタ1125から供給された値D1126を選択し、レジスタ1125に出力して再格納させる。即ち、検査行列Hの1行に亘る全ての枝からのメッセージD101(バリアブルノードメッセージvi)から求められたφ(|vi|)が積算されるまで、レジスタ1125は、前回積算されたφ(|vi|)を、セレクタ1124と演算器1126に供給する。
一方、FIFOメモリ1127は、レジスタ1125から新たな値D1126(i=1からi=dcまでのΣφ(|vi|))が出力されるまでの間、LUT221が出力した非線形関数の演算結果D1123(φ(|vi|))を表す5ビットの準浮動小数点量子化値を遅延し、レジスタ1125から新たな値D1126(i=1からi=dcまでのΣφ(|vi|))が出力されると、遅延後の5ビットの準浮動小数点量子化値F1127を、変換回路232に供給する。
変換回路232は、変換回路231と同様に、FIFO1127からの、非線形関数φ(|vi|)の演算結果を表す5ビットの準浮動小数点量子化値F1127を、9ビットの高精度量子化値でもある固定小数点量子化値に変換する、表示形式の変換を行い、その結果得られる9ビットの固定小数点量子化値D1127を、演算器1126に供給する。
演算器1126は、ステップS25において、レジスタ1125から供給された10ビットの値D1126から、FIFOメモリ1127から出力されて変換回路232で表現形式が変換された9ビットの値D1127を減算し(レジスタ1125から供給された10ビットの値D1126に、9ビットの値D1127に-1を乗算して得られる値を積算し)、その減算結果を表す9ビットの高精度量子化値でもある固定小数点量子化値D1128を、変換回路233に供給する。
即ち、演算器1126は、検査行列Hの1行に亘る全ての枝からのメッセージD101(バリアブルノードメッセージvi)から求められたφ(|vi|)の積算値から、チェックノードメッセージujを求めたい枝からのメッセージD101(バリアブルノードメッセージvi)から求められたφ(|vi|)を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を表す9ビットの固定小数点量子化値D1128を、変換回路233に供給する。
なお、レジスタ1125から供給される10ビットの値D1126から、FIFOメモリ1127から供給される9ビットの値D1127を減算した減算結果としての量子化値が、9ビットの固定小数点量子化値D1128で表すことができる最大値を越える場合には、演算器1126は、減算結果を、9ビットの固定小数点量子化値で表すことができる最大値にクリッピングして出力する。
変換回路233は、ステップS26において、演算器1126からの9ビットの固定小数点量子化値D1128を、図24で説明したように、5ビットの準浮動小数点量子化値に変換する、表示形式の変換を行い、その結果得られる5ビットの準浮動小数点量子化値F1128を、LUT228に供給する。
LUT228は、ステップS27において、変換回路233から供給される、式(7)の積算値Σφ(|vi|)を表す5ビットの準浮動小数点量子化値F1128を入力として、その準浮動小数点量子化値F1128に対応付けられている、逆関数φ-1(Σφ(|vi|))の演算結果を表す5ビットの通常量子化値でもある固定小数点量子化値D1129(φ-1(Σφ(|vi|)))を読み出して出力する。
即ち、LUT228では、ステップS27において、等価的に、準浮動小数点量子化値で表される式(7)の積算値Σφ(|vi|)を入力として、式(7)における逆関数φ-1(Σφ(|vi|))を演算する処理と、その演算結果を表す浮動小数点量子化値を固定小数点量子化値に変換する、表現形式の変換とが行われる。
以上の処理と並行して、EXOR回路129、レジスタ130、セレクタ131、レジスタ132、FIFOメモリ133、EXOR回路134では、図11のチェックノード計算器101と同様の処理が行われ、これにより、EXOR回路134は、検査行列Hの1行に亘る全ての枝からのメッセージD101(バリアブルノードメッセージvi)の符号ビットD121(sign(|vi|))の乗算値を、チェックノードメッセージujを求めたい枝からのメッセージD101の符号ビットD121(sign(|vi|))で除算して、その除算値(i=1からi=dc−1までのΠsign(|vi|))を除算値D135として出力する。
そして、チェックノード計算器181では、LUT228から出力された5ビットの固定小数点量子化値D1129を下位5ビットとするとともに、EXOR回路134から出力された1ビットの除算値D135を最上位ビット(符号ビット)とする合計6ビットの通常量子化値でもある固定小数点量子化値で表されるメッセージD102(チェックノードメッセージuj)が出力される。
以上のように、チェックノード計算器181では、図14のチェックノード計算器171と同様に、非線形関数φ(x)の演算後からその逆関数φ-1(x)の演算までの処理では、高精度量子化値でもある9ビットの固定小数点量子化値、または、その9ビットの固定小数点量子化値と同程度の精度で0付近の数値を表し、かつ、同程度のダイナミックレンジを有する5ビットの準浮動小数点量子化値を使用し、他の処理では、通常量子化値でもある固定小数点量子化値を使用するので、LDPC符号の復号を、復号装置の大規模化を抑えつつ(図19の枝用メモリ100と102、受信用メモリ104の容量を増加させずに)精度良く行うことができる。
さらに、チェックノード計算器181では、LUT221において、5ビットの固定小数点量子化値を入力として、非線形関数φ(x)の演算の結果を、5ビットの準浮動小数点量子化値で出力し、かつ、LUT228において、5ビットの準浮動小数点量子化値を入力として、逆関数φ-1(x)の演算の結果を、5ビットの固定小数点量子化値で出力するので、かかる点からも、LDPC符号の復号を、復号装置の大規模化を抑えつつ(容量の小さいLUT221および228を用いて)精度良く行うことができる。
また、チェックノード計算器181でも、図14のチェックノード計算器171と同様に、演算器1122は、本来ならば13ビットの高精度量子化値で表現すべき積算値を、その13ビットよりも少ないビット数である10ビットの高精度量子化値で出力するので、チェックノード計算器181において、以降の高精度量子化値を対象とした処理を行うブロックは、ビット数が少ない高精度量子化値を処理することができるように構成することができる。従って、チェックノード計算器181の規模を小さくすることができる。
なお、チェックノード計算器181においては、図14のチェックノード計算器171と比較して、変換回路231乃至233が新たに必要となる。但し、準浮動小数点量子化値の量子化幅の最小値が、高精度量子化値でもある固定小数点量子化値の量子化幅と同程度であれば、変換回路231乃至233は、上述したように簡単に構成することができ、変換回路231乃至233を新たに設けることによる回路規模の増分は、それほど大きくはない。
一方、上述したように、LUT221に必要とされる、回路規模に比例する容量は、対応する図14のLUT1121の5/9で済み、LUT228に必要とされる、回路規模に比例する容量は、対応する図14のLUT1128の1/24で済むため、LUT221およびLUT228を採用することによる回路規模の削減量は、極めて大きい。
従って、LUT221およびLUT228を採用した場合には、変換回路231乃至233を新たに設けることによる回路規模の増分を加味しても、チェックノード計算器181の回路規模を削減することができる。
次に、図28は、本発明を適用した、LDPC符号を復号する復号装置の第3実施の形態の構成例を示している。
図28の復号装置は、LDPC符号の復号を、復号装置の大規模化を抑えつつ精度良く行い、さらに、図19の復号装置よりも、復号装置に必要となるメモリの記憶容量を低減することができるようになっている。
なお、図28の復号装置では、例えば、上述の図19の復号装置と同様に、前述の図9に示した検査行列Hで表されるLDPC符号(符号化率2/3、符号長108)の復号が行われる。
図28において、復号装置は、復号途中結果格納用メモリ410、スイッチ411、準チェックノード計算器412、枝用メモリ413、準バリアブルノード計算器415、受信用メモリ416、および制御部417から構成され、図19の復号装置と同様のチェックノード演算とバリアブルノード演算とを等価的に繰り返し行うことにより、LDPC符号を復号する。
ここで、図28の復号装置の各部について説明する前に、上述の図20と、図29乃至図31を用いて、図28の準チェックノード計算器412および準バリアブルノード計算器415と、図19のチェックノード計算器181およびバリアブルノード計算器172との関係について説明する。
図20は、上述したように、チェックノード演算を行う図19のチェックノード計算器181の構成例を示している。
図29は、バリアブルノード演算を行う図19のバリアブルノード計算器172の構成例を示している。なお、図29のバリアブルノード計算器172は、図17のバリアブルノード計算器172と同一である。但し、図29では、図17の演算器156を、2つの演算器1561と1562に分けて図示してある。
即ち、図17の演算器156は、上述したように、レジスタ154から供給された値D152から、FIFOメモリ155から供給された値D153を減算し、さらに、その減算値に、受信用メモリ104から供給された受信データD104を加算して、その結果得られる6ビットの値をメッセージD105(バリアブルノードメッセージvi)として出力するから、演算器156が行う処理は、レジスタ154から供給された値D152を対象に、FIFOメモリ155から供給された値D153を減算する減算処理と、受信用メモリ104から供給された受信データD104を加算する加算処理とに分けることができる。
そこで、図29では、図17の演算器156を、加算処理を行う演算器1561と、減算処理を行う演算器1562とに分けて図示してある。
一方、図30は、図28の準チェックノード計算器412の構成例を示しており、図31は、図28の準バリアブルノード計算器415の構成例を示している。
図28の復号装置では、準チェックノード計算器412がチェックノード演算そのものを行うとともに、準バリアブルノード計算器415kがバリアブルノード演算そのものを行うのではなく、準チェックノード計算器412がチェックノード演算とバリアブルノード演算の一部を行い、準バリアブルノード計算器415がバリアブルノード演算の他の一部を行う。
即ち、図30の準チェックノード計算器412は、ブロックA'とブロックB'から構成されている。ブロックA’は、図20のチェックノード計算器181のチェックノード演算を行うブロックAに対応している。また、ブロックB’は、図29のバリアブルノード計算器172の一部である、検査行列Hの各列の全ての枝に対応するチェックノードメッセージuj(と受信データu0i)の積算値から、バリアブルノードメッセージviを求めたい枝に対応するチェックノードメッセージujを減算するブロックBに対応している。
一方、図31の準バリアブルノード計算器415は、ブロックC'から構成されている。ブロックC'は、図29のバリアブルノード計算器172の他の一部である、検査行列Hの各列の枝に対応するチェックノードメッセージujを積算し、その積算値に受信データu0iを加算するブロックCに対応している。
つまり、図19のチェックノード計算器181は、図20に示すように、チェックノード演算そのものを行うブロックAで構成される。また、図19のバリアブルノード計算器172は、図29に示すように、検査行列Hの各列の全ての枝に対応するチェックノードメッセージuj(と受信データu0i)の積算値から、バリアブルノードメッセージviを求めたい枝に対応するチェックノードメッセージujを減算する、バリアブルノード演算の一部を行うブロックBと、検査行列Hの各列の枝に対応するチェックノードメッセージujを積算し、その積算値に受信データu0iを加算する、バリアブルノード演算の他の一部を行うブロックCとに分けることができる。
図30の準チェックノード計算器412は、図20のブロックAに対応するブロックA'と、図29のブロックBに対応するブロックB'から構成され、ブロックB’において、バリアブルノード演算の一部を行うとともに、ブロックAにおいて、チェックノード演算そのものを行う。ここで、準チェックノード計算器412で行われる、バリアブルノード演算の一部とチェックノード演算を、以下、適宜、準チェックノード演算という。
一方、図31の準バリアブルノード計算器415は、図29のブロックCに対応するブロックC’で構成され、ブロックC’において、バリアブルノード演算の他の一部を行う。ここで、準バリアブルノード計算器415で行われる、バリアブルノード演算の他の一部を、以下、適宜、準バリアブルノード演算という。
図28の復号装置では、準チェックノード計算器412が、復号途中結果格納用メモリ410の記憶内容等を用いて、準チェックノード演算(バリアブルノード演算の一部とチェックノード演算)を行い、その結果得られるチェックノードメッセージujを、枝用メモリ413に供給して記憶させる。さらに、準バリアブルノード計算器415が、枝用メモリ413に記憶されたチェックノードメッセージuj等を用いて、準バリアブルノード演算(バリアブルノード演算の他の一部)を行い、その結果得られる復号途中結果vを、復号途中結果格納用メモリ410に供給して記憶させる。
従って、図28の復号装置では、準チェックノード計算器412による準チェックノード演算と、準バリアブルノード計算器415による準バリアブルノード演算とが交互に行われることにより、結局、チェックノード演算とバリアブルノード演算とが交互に行われ、これにより、LDPC符号の復号が行われる。
なお、図29のバリアブルノード計算器172では、ブロックCにおいて、検査行列Hの各列の枝に対応するチェックノードメッセージujを積算し、その積算値に受信データu0iを加算する加算処理を行い、ブロックBにおいて、その加算処理の結果得られる値(検査行列Hの各列の全ての枝に対応するチェックノードメッセージujの積算値と、受信データu0iとの加算値)からバリアブルノードメッセージviを、求めたい枝からのチェックノードメッセージujを減算する減算処理を行うために、バリアブルノードメッセージviを求めたい枝からのチェックノードメッセージujを、検査行列Hの各列の枝に対応するチェックノードメッセージujの積算が終了するまで遅延するFIFOメモリ155が必要となる。
一方、図30の準チェックノード計算器412のブロックB’では、対応するブロックB(図29)と同様に、検査行列Hの各列の全ての枝に対応するチェックノードメッセージujの積算値から、バリアブルノードメッセージviを求めたい枝からのチェックノードメッセージujを減算する減算処理が行われるが、図28の復号装置では、チェックノードメッセージujが枝用メモリ413に記憶されており、その枝用メモリ413から、準チェックノード計算器412に対して、バリアブルノードメッセージviを求めたい枝からのチェックノードメッセージuj(メッセージD411)が供給されるようになっている。
従って、図28の復号装置では、バリアブルノードメッセージviを求めたい枝からのチェックノードメッセージujを、検査行列Hの各列の枝に対応するチェックノードメッセージujの積算が終了するまで遅延するFIFOメモリ155(図29)が必要ない。よって、図28の復号装置は、FIFOメモリ155の分だけ、図19の復号装置よりも小型に構成することができる。
次に、図28の準チェックノード計算器412(図30)で行われる準チェックノード演算と、準バリアブルノード計算器415(図31)で行われる準バリアブルノード演算について、式を用いて説明する。
準チェックノード計算器412は、次の式(8)の演算(バリアブルノード演算の一部)と、上述した式(7)の演算(チェックノード演算)とを、準チェックノード演算として行い、その準チェックノード演算の結果であるチェックノードメッセージujを、枝用メモリ413に供給して格納(記憶)させる。また、準バリアブルノード計算器415は、上述した式(5)の演算(バリアブルノード演算の他の一部)を、準バリアブルノード演算として行い、その準バリアブルノード演算の結果である復号途中結果vを、復号途中結果格納用メモリ410に供給して格納させる。
Figure 2007081602
・・・(8)
なお、式(8)のudvは、バリアブルノード演算によって、検査行列Hのi列のバリアブルノードメッセージviを求めようとする枝からのチェックノード演算(準チェックノード演算)の結果を表している。即ち、udvは、バリアブルノード演算によってバリアブルノードメッセージviを求めたい枝に対応するチェックノードメッセージuj(枝からのチェックノードメッセージuj)である。
ここで、上述した式(5)の演算の結果得られる復号途中結果vは、受信データu0iと検査行列Hのi列の各行の1に対応するすべての枝からのチェックノード演算の結果得られたチェックノードメッセージujとを加算したものであるので、式(8)にしたがい、そのような復号途中結果vから、検査行列Hのi列の、各行の1に対応する枝からのチェックノード演算によって求められたチェックノードメッセージujのうち、バリアブルノードメッセージviを求めようとする枝からのチェックノードメッセージudvを減算することにより、各枝のバリアブルノードメッセージviを求めることができる。
従って、バリアブルノードメッセージviを求める式(1)のバリアブルノード演算は、式(5)の演算と、式(8)の演算とに分けることができる。
一方、チェックノードメッセージujを求めるチェックノード演算は、式(7)で表される。
従って、式(1)のバリアブルノード演算と、式(7)のチェックノード演算との処理は、式(5)の演算と、式(8)および式(7)の演算との処理に等価である。
そこで、図28の復号装置では、準チェックノード計算器412において、式(8)および式(7)の演算(準チェックノード演算)を行うとともに、準バリアブルノード計算器415において、式(5)の演算(準バリアブルノード演算)を行い、LDPC符号の復号が行われる。
なお、式(5)の準バリアブルノード演算によって求められる復号途中結果vは、式(1)のバリアブルノード演算の結果得られる各枝のバリアブルノードメッセージviに対して、そのバリアブルノードメッセージviに対応する枝からのチェックノードメッセージujを加算したものであるから、検査行列Hの1列(1つのバリアブルノード)に対して、1つだけ求められる。従って、符号長分の受信データu0iに対しては、符号長分(検査行列Hの列数)の復号途中結果vが求められる。
図28の復号装置では、準チェックノード計算器412が、準バリアブルノード計算器415による準バリアブルノード演算の結果である検査行列Hの各列に対応する復号途中結果vを用いて、準チェックノード演算を行い、その準チェックノード演算の結果得られるチェックノードメッセージ(各チェックノードが各枝に出力するチェックノードメッセージ)ujを、枝用メモリ413に格納する。
従って、枝用メモリ413に必要な記憶容量は、チェックノード演算の結果を格納する図19の枝用メモリ102と同様に、検査行列Hの1の数(全枝数)とチェックノードメッセージujの量子化ビット数(本実施の形態では、固定小数点量子化値でもある通常量子化値のビット数)とを乗算した値となる。
一方、準バリアブルノード計算器415は、準チェックノード計算器412による準チェックノード演算の結果である検査行列Hのi列の、各行の“1”に対応するチェックノードメッセージujと受信データu0iを用いて、準バリアブルノード演算を行い、その準バリアブルノード演算の結果得られるi列に対応する復号途中結果vを、復号途中結果格納用メモリ410に格納する。
従って、復号途中結果格納用メモリ410に必要な記憶容量は、検査行列Hの“1”の数より少ない検査行列Hの列数、即ち、LDPC符号の符号長と、復号途中結果vの量子化ビット数(本実施の形態では、固定小数点量子化値でもある通常量子化値のビット数)とを乗算した値となる。
以上から、検査行列Hにおける1が疎らなLDPC符号を復号する図28の復号装置では、図19の枝用メモリ100に比べて、復号途中結果格納用メモリ410の記憶容量を削減することができ、これにより、図28の復号装置の装置規模を小さくすることができる。
さらに、図28の復号装置において、準バリアブルノード計算器415が行う式(5)の準バリアブルノード演算は、チェックノード演算とバリアブルノード演算とを交互に繰り返すことにより、LDPC符号の繰り返し復号を行うにあたって、そのLDPC符号の最終的な復号結果(としての、0らしさを表す尤度)を求める演算であり、従って、図28の復号装置には、図19の復号装置のように、LDPC符号の最終的な復号結果を求める式(5)の演算を行う不図示のブロックを設ける必要がない。従って、そのようなブロックが不要な分だけ、図19の復号装置に比べて、図28の復号装置の装置規模を小さくすることができる。
次に、図28の復号装置の各部について詳細に説明する。
復号途中結果格納用メモリ410には、準バリアブルノード計算器415から、検査行列Hの列ごとの、式(5)の準バリアブルノード演算の結果得られる復号途中結果D415(式(5)のv)が供給され、復号途中結果格納用メモリ410は、準バリアブルノード計算器415から供給される復号途中結果D415を、順次記憶する。復号途中結果格納用メモリ410に記憶された、検査行列Hの列ごとの復号途中結果D415は、そこから順次読み出され、スイッチ411に供給される。
スイッチ411には、復号途中結果格納用メモリ410から復号途中結果D415が供給される他、受信用メモリ416から、受信データD417(u0i)が供給される。スイッチ411は、制御部417から供給される制御信号D421にしたがって、復号途中結果格納用メモリ410から供給される復号途中結果D415、または受信用メモリ416から供給される受信データD417のうちのいずれか一方を選択し、復号途中結果D411として、準チェックノード計算器412に供給する。
即ち、受信用メモリ416に、受信データD417が記憶された直後(受信データD417が記憶された後、その受信データD417を用いた最初の準バリアブルノード演算が行われる前)は、その受信データD417に対する復調途中結果D415が、復号途中結果格納用メモリ410に記憶されていないため、その復調途中結果D415を用いた準チェックノード演算を行うことができない。そこで、受信用メモリ416に、受信データD417が記憶された直後においては、制御部417は、受信データD417の選択を指示する制御信号D421を、スイッチ411に供給する。これにより、スイッチ411では、受信用メモリ416から供給される受信データD417が選択され、復号途中結果D411として、準チェックノード計算器412に供給される。従って、この場合、準チェックノード計算器412では、受信データD417を、式(8)の復号途中結果vとして用いて、準チェックノード演算が行われる。なお、準チェックノード演算には、枝用メモリ413に記憶されたチェックノードメッセージujが使用されるが、枝用メモリ413のチェックノードメッセージujは、新たな受信データD417が、受信用メモリ416に記憶されたときに、0に初期化される。
一方、受信用メモリ416に、受信データD417が記憶され、その受信データD417を用いた最初の準バリアブルノード演算が行われた後(、その受信データD417に対する最終的な復号結果が出力されるまで)は、その受信データD417に対する復調途中結果D415が、復号途中結果格納用メモリ410に記憶されているので、制御部417は、復号途中結果D415の選択を指示する制御信号D421を、スイッチ411に供給する。これにより、スイッチ411では、復号途中結果格納用メモリ410から供給される復号途中結果D415が選択され、復号途中結果D411として、準チェックノード計算器412に供給される。従って、この場合、準チェックノード計算器412では、復号途中結果D415を、式(8)の復号途中結果vとして、準チェックノード演算が行われる。
準チェックノード計算器412には、スイッチ411から、式(8)の復号途中結果vとしての復号途中結果D411が供給される他、枝用メモリ413から、準チェックノード計算器412による前回の準チェックノード演算の結果得られたチェックノードメッセージujが、メッセージD413として供給される。また、準チェックノード計算器412には、制御部417から制御信号D420が供給される。
準チェックノード計算器412は、スイッチ411からの復号途中結果D411(式(8)のv)と、メッセージD413(前回のチェックノードメッセージuj)を用いて、準チェックノード演算を行い、即ち、式(8)の演算を行い、その後、さらに、式(7)の演算を行い、これにより、式(7)のチェックノードメッセージujを、検査行列Hの枝(値が1になっている要素)ごとに求める。そして、準チェックノード計算器412は、式(8)の準チェックノード演算の結果得られる、各枝のチェックノードメッセージujを、メッセージD412として、枝用メモリ413に供給する。
枝用メモリ413は、準チェックノード計算器412から供給される各枝のメッセージD412を、順次記憶する。枝用メモリ413に記憶された各枝のメッセージD412(uj)は、次の準チェックノード演算と、次の準バリアブルノード演算のために、そこから順次読み出され、メッセージD413として、準チェックノード計算器412と、準バリアブルノード演算器415に供給される。
準バリアブルノード計算器415には、枝用メモリ413から、各枝のメッセージD413(チェックノードメッセージuj)が供給される。また、準バリアブルノード計算器415には、受信用メモリ416からLDPC符号の受信データD417(式(5)のu0i)が供給される。さらに、準バリアブルノード計算器415には、制御部417から制御信号D422が供給される。
準バリアブルノード計算器415は、枝用メモリ413から、各枝のメッセージD413(uj)と、受信用メモリ416からの受信データD417(u0i)とを用いて、式(5)の準バリアブルノード演算を、検査行列Hの列ごとに行い、これにより、復号途中結果vを、検査行列Hの列ごとに求める。そして、準バリアブルノード計算器415は、式(5)の準バリアブルノード演算の結果得られる復号途中結果vを、復号途中結果D415として、復号途中結果格納用メモリ410に供給する。
ここで、上述したように、復号途中結果格納用メモリ410では、準バリアブルノード計算器415から供給される復号途中結果D415が、順次記憶され、さらに、その記憶された復号途中結果D415は、そこから順次読み出され、スイッチ411に供給される。
但し、準バリアブルノード計算器415において、最後の準バリアブルノード演算が行われた場合、即ち、例えば、受信用メモリ416に記憶された受信データD417について、あらかじめ決められた回数だけ、準チェックノード演算と準バリアブルノード演算とが繰り返し行われた場合、復号途中結果格納用メモリ410は、最後に行われた準バリアブルノード演算の結果としての復号途中結果D415を、受信用メモリ416に記憶された受信データD417(LDPC符号)の最終的な復号結果(尤度)として出力する。
受信用メモリ416は、通信路を通して受信した受信信号D416から計算されたLDPC符号の各ビットの0らしさの値である、符号長分の受信LLR(対数尤度比)を、受信データD417として記憶し、スイッチ411と準バリアブルノード計算器415に供給する。
制御部417は、制御信号D420を準チェックノード計算器412に、制御信号D421をスイッチ411に、制御信号D422を準バリアブルノード計算器415に、それぞれ供給することにより、それぞれを制御する。
以上のように構成される図28の復号装置では、復号途中結果格納用メモリ410、準チェックノード計算器412、枝用メモリ413、準バリアブルノード計算器415の順で、データが一巡することで、1回の復号(繰り返し復号の1回分の処理(チェックノード演算とバリアブルノード演算))が行われる。図28の復号装置では、所定の回数だけ繰り返して復号が行われた後、準バリアブルノード計算器415による準バリアブルノード演算の結果である復号途中結果D415が、最終的な復号結果(尤度)として出力される。
次に、図28の準チェックノード計算器412と準バリアブルノード計算器415について、さらに詳述する。
図30は、図28の準チェックノード計算器412の構成例を示している。
準チェックノード計算器412には、スイッチ411(図28)から、式(8)の復号途中結果vとしての復号途中結果D411が供給されるとともに、枝用メモリ413(図28)から、準チェックノード計算器412による前回の準チェックノード演算の結果得られたチェックノードメッセージuj(直前に行われた準バリアブルノード演算に用いられたチェックノードメッセージuj)のうちの、いま式(8)によってバリアブルノードメッセージviを求めようとしている枝からのチェックノードメッセージudvが、メッセージD413として供給される。さらに、準チェックノード計算器412には、制御部417(図28)から制御信号D420が供給される。
ここで、図28の復号装置では、準チェックノード演算と準バリアブルノード演算とが繰り返し行われることにより、等価的に、図19の復号装置と同様に、チェックノード演算とバリアブルノード演算とが繰り返し行われる。
そして、図19の復号装置では、チェックノード演算によって得られるメッセージujと、バリアブルノード演算によって得られるメッセージviとが、いずれも、符号ビットを含めて6ビットの通常量子化値でもある固定小数点量子化値で表されることとしたが、図28の復号装置でも、メッセージujとメッセージviとは、いずれも、符号ビットを含めて6ビットの通常量子化値でもある固定小数点量子化値で表されることとする。また、図28の復号装置において、受信用メモリ416に記憶される受信データD417も、図19の復号装置と同様に、符号ビットを含めて6ビットの通常量子化値でもある固定小数点量子化値で表されていることとする。
この場合、枝用メモリ413(図28)から準チェックノード計算器412に供給されるメッセージD413(チェックノードメッセージudv)は、6ビットの通常量子化値でもある固定小数点量子化値で表される。
なお、スイッチ411(図28)から準チェックノード計算器412に供給される復号途中結果D411(v)、即ち、準バリアブルノード計算器415が準バリアブルノード演算を行うことによって求める復号途中結果D415は、後述するように、準バリアブルノード演算における積算の対象となる6ビットのチェックノードメッセージujよりも1ビットだけ多いビット数である7ビットの通常量子化値でもある固定小数点量子化値で表される。
枝用メモリ413(図28)から準チェックノード計算器412に供給された6ビットの通常量子化値でもある固定小数点量子化値によるメッセージD413(前回の準チェックノード演算の結果得られたチェックノードメッセージujのうちの、いま式(8)によってバリアブルノードメッセージviを求めようとしている枝からのチェックノードメッセージudv)と、スイッチ411(図28)から準チェックノード計算器412に供給された7ビットの通常量子化値でもある固定小数点量子化値による復号途中結果D411(v)とは、いずれも、ブロックB’の演算器431に供給される。
また、制御部417(図28)から準チェックノード計算器412に供給された制御信号D420は、セレクタ435とセレクタ442に供給される。
演算器431は、式(8)の演算、即ち、そこに供給される7ビットの復号途中結果D411(v)から、同じくそこに供給される6ビットのチェックノードメッセージD413(udv)を減算し、これにより、バリアブルノードメッセージviを求め、そのバリアブルノードメッセージviを表す6ビットの通常量子化値でもある固定小数点量子化値D431(vi)を出力する。
なお、演算器431は、前述した図17のバリアブルノード計算器172を構成する演算器156と同様に、式(8)の演算結果であるバリアブルノードメッセージviの値が、6ビットの通常量子化値でもある固定小数点量子化値によって表される数値範囲外である場合には、その演算結果をクリッピングして出力する。
演算器431が出力した6ビットの固定小数点量子化値D431(vi)は、ブロックA’に供給される。ブロックA’では、演算器431からの6ビットの固定小数点量子化値D431(バリアブルノードメッセージvi)のうち、最上位ビットの正負を示す符号ビットD432(sign(vi))がEXOR回路440およびFIFOメモリ444に供給され、下位5ビットの絶対値D433(|vi|)がLUT432に供給される。
上述したように、ブロックA’は、図20に示したチェックノード計算器181のブロックAに対応しており、従って、ブロックAと同様の処理を行う。
即ち、ブロックA’において、LUT432、演算器433、レジスタ434、セレクタ435、レジスタ436、演算器437、FIFOメモリ438、LUT439、EXOR回路440、レジスタ441、セレクタ442、レジスタ443、FIFOメモリ444、EXOR回路445、変換回路501乃至503は、図20のブロックAのLUT221、演算器1122、レジスタ1123、セレクタ1124、レジスタ1125、演算器1126、FIFOメモリ1127、LUT228、EXOR回路129、レジスタ130、セレクタ131、レジスタ132、FIFOメモリ133、EXOR回路134、変換回路231乃至233とそれぞれ同様に構成されている。
そして、ブロックA’において、LUT432は、演算器431からの5ビットの絶対値D433(|vi|)を表す5ビットの通常量子化値でもある固定小数点量子化値を入力として、それに対応付けられている、非線形関数φ(|vi|)の演算結果を表す5ビットの準浮動小数点量子化値F434を読み出し、変換回路501とFIFOメモリ438に出力する。
変換回路501は、図20の変換回路231と同様に、LUT432からの5ビットの準浮動小数点量子化値F434を、9ビットの高精度量子化値でもある固定小数点量子化値D434に変換し、演算器433に出力する。
演算器433は、変換回路501からの、非線形関数φ(|vi|)の演算結果を表す9ビットの固定小数点量子化値D434とレジスタ434に格納されている10ビットの値D435とを加算することにより、非線形関数φ(|vi|)の演算結果を表す9ビットの固定小数点量子化値D434を積算し、その結果得られる10ビットの高精度量子化値でもある固定小数点量子化値で表される積算値D435を出力して、レジスタ434に再格納する。なお、検査行列Hの1行に亘る全ての枝からのメッセージD431(バリアブルノードメッセージvi)の絶対値D433(|vi|)に対する演算結果が積算された場合、レジスタ434はリセットされる。
ここで、演算器433が出力する積算値D435は、オーバフローを完全に防止するには、図20の演算器1122で説明したように、13ビットである必要があるが、図20の演算器1122が出力する積算値と同様に、演算器433が積算の対象とする9ビットの固定小数点量子化値D434より1ビットだけ多いビット数である10ビットになっている。
検査行列Hの1行に亘るメッセージD431(バリアブルノードメッセージvi)が1つずつ読み込まれ、レジスタ434に1行分の演算結果D434が積算された積算値が格納された場合、制御部417(図28)から供給される制御信号D420は、0から1に変化する。例えば、検査行列Hの行の重み(row weight)が「9」である場合、制御信号D420は、8個目の演算結果D434が積算されるまでは、「0」となり、9個目の演算結果D434が積算されると「1」となる。
制御信号D420が「1」の場合、セレクタ435は、レジスタ434に格納されている値、即ち、検査行列Hの1行に亘る全ての枝からのメッセージD431(バリアブルノードメッセージvi)から求められたφ(|vi|)が積算された10ビットの固定小数点量子化値D435(i=1からi=dcまでのΣφ(|vi|))を選択し、10ビットの固定小数点量子化値D436として、レジスタ436に出力して格納させる。レジスタ436は、格納している固定小数点量子化値D436を、10ビットの固定小数点量子化値D437として、セレクタ435と演算器437に供給する。制御信号D420が「0」の場合、セレクタ435は、レジスタ436から供給された固定小数点量子化値D437を選択し、レジスタ436に出力して再格納させる。即ち、検査行列Hの1行に亘る全ての枝からのメッセージD431(バリアブルノードメッセージvi)から求められたφ(|vi|)が積算されるまで、レジスタ436は、前回積算されたφ(|vi|)を、セレクタ435と演算器437に供給する。
一方、FIFOメモリ438は、レジスタ436から新たな固定小数点量子化値D437(i=1からi=dcまでのΣφ(|vi|))が出力されるまでの間、LUT432が出力した非線形関数φ(|vi|)の演算結果を表す5ビットの準浮動小数点量子化値F434を遅延し、5ビットの準浮動小数点量子化値F438として、変換回路502に供給する。
変換回路502は、FIFO438からの5ビットの準浮動小数点量子化値F438を、9ビットの高精度量子化値でもある固定小数点量子化値D438に変換し、演算器437に供給する。
演算器437は、レジスタ436から供給された10ビットの固定小数点量子化値D437から、変換回路502から供給された9ビットの固定小数点量子化値D438を減算し、その減算結果として得られる9ビットの固定小数点量子化値D439を、LUT439に供給する。即ち、演算器437は、検査行列Hの1行に亘る全ての枝からのメッセージD431(バリアブルノードメッセージvi)から求められた非線形関数φ(|vi|)の演算結果の積算値から、チェックノードメッセージujを求めたい枝からのメッセージD431(バリアブルノードメッセージvi)から求められた非線形関数φ(|vi|)の演算結果を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を表す9ビットの固定小数点量子化値D439を、変換回路503に供給する。
なお、レジスタ436から供給される10ビットの固定小数点量子化値D437から、変換回路502から供給される9ビットの固定小数点量子化D438を減算した減算結果が、9ビットの高精度量子化値でもある固定小数点量子化値で表すことができる最大値を越える場合には、演算器437は、減算結果を、9ビットの高精度量子化値でもある固定小数点量子化値で表すことができる最大値にクリッピングして出力する。
変換回路503は、演算器437からの、減算値(i=1からi=dc−1までのΣφ(|vi|))を表す9ビットの固定小数点量子化値D439を、5ビットの準浮動小数点量子化値F439に変換し、LUT439に供給する。
LUT439は、変換回路503からの、減算値(i=1からi=dc−1までのΣφ(|vi|))を表す5ビットの準浮動小数点量子化値F439を入力として、それに対応付けられている、逆関数φ-1(Σφ(|vi|))の演算結果を表す5ビットの通常量子化値でもある固定小数点量子化値を読み出して出力する。
以上の処理と並行して、EXOR回路440は、レジスタ441に格納されている1ビットの値D442と符号ビットD432との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、1ビットの乗算結果D441をレジスタ441に再格納する。なお、検査行列の1行に亘る全ての1に対応する復号途中結果D411から求められたバリアブルノードメッセージvi(D431)の符号ビットD432が乗算された場合、レジスタ441はリセットされる。
検査行列の1行に亘る全ての1に対応する復号途中結果D411から求められたバリアブルノードメッセージvi(D431)の符号ビットD432が乗算された乗算結果D441(i=1からdcまでのΠsign(vi))がレジスタ441に格納された場合、制御部417から供給される制御信号D420は、「0」から「1」に変化する。
制御信号D420が「1」の場合、セレクタ442は、レジスタ441に格納されている値、即ち、検査行列の1行に亘る全ての1に対応する復号途中結果D411から求められた符号ビットD432が乗算された値D442(i=1からi=dcまでのΠsign(vi))を選択し、1ビットの値D443としてレジスタ443に出力して格納させる。レジスタ443は、格納している値D443を、1ビットの値D444としてセレクタ442とEXOR回路445に供給する。制御信号D420が「0」の場合、セレクタ442は、レジスタ443から供給された値D444を選択し、レジスタ443に出力して再格納させる。即ち、検査行列の1行に亘る全ての1に対応する復号途中結果D411(復号途中結果v)から求められたバリアブルノードメッセージvi(D431)の符号ビット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は、検査行列の1行に亘る全ての1に対応する復号途中結果D411から求められたバリアブルノードメッセージvi(D431)の符号ビットD432(sign(vi))の乗算値を、チェックノードメッセージujを求めようとする枝からのバリアブルノードメッセージvi(D431)の符号ビットD432(sign(vi))で除算して、その除算値(i=1からi=dc−1までのΠsign(vi))を除算値D446として出力する。
そして、準チェックノード計算器412では、LUT439から出力された5ビットの通常量子化値D440を下位5ビットとするとともに、EXOR回路445から出力された1ビットの除算値D446を最上位ビット(符号ビット)とする合計6ビットの通常量子化値で表されるメッセージD412(チェックノードメッセージuj)が出力される。
以上のように、準チェックノード計算器412では、式(7)と式(8)の演算が行われ、チェックノード演算の結果である、6ビットの通常量子化値によるチェックノードメッセージujが求められる。このチェックノードメッセージujは、準チェックノード計算器412から枝用メモリ413(図28)に供給されて記憶される。
準チェックノード計算器412でも、演算器433が、本来ならば13ビットの高精度量子化値で表現すべき積算値を、その13ビットよりも少ないビット数である10ビット(積算の対象の9ビットの非線形関数φ(|vi|)の演算結果よりも1ビットだけ多いビット数である10ビット)の高精度量子化値で出力するので、準チェックノード計算器412も、図14のチェックノード計算器171や、図20のチェックノード計算器181と同様に、規模を小さくすることができる。
ここで、演算器433は、本来ならば13ビットの高精度量子化値で表現すべき積算値を、その13ビットよりも少ないビット数である10ビットの高精度量子化値で出力するので、積算値がオーバフローし、その結果、準チェックノード演算の精度、ひいては、LDPC符号の復号性能が劣化することが予想されるが、このLDPC符号の復号性能に関しては、後述する。
なお、図9の検査行列の行の重みの最大は9であるため、準チェックノード計算器412は、9個の復号途中結果D411から求められる9個の演算結果D434(φ(|vi|))を遅延させるFIFOメモリ438と、9個の符号ビットD432を遅延させるFIFOメモリ444を有している。行の重みが9未満の行のチェックノードメッセージujを計算するときには、FIFOメモリ438とFIFOメモリ444における遅延量が、その行の重みの値に減らされる。
次に、図31は、図28の準バリアブルノード計算器415の構成例を示している。
準バリアブルノード計算器415は、ブロックC’で構成される。ブロックC’は、上述したように、図29に示したバリアブルノード計算器172のブロックCに対応しており、従って、ブロックCと同様の処理を行う。
即ち、ブロックC’において、演算器471、レジスタ472、セレクタ473、レジスタ474、演算器475は、図29のブロックCの演算器151、レジスタ152、セレクタ153、レジスタ154、演算器1561とそれぞれ同様に構成されている。
準バリアブルノード計算器415には、枝用メモリ413(図28)から、チェックノード演算の結果である、6ビットの通常量子化値で表現されるメッセージD413(チェックノードメッセージuj)が供給され、そのメッセージD413は、演算器471に供給される。また、準バリアブルノード計算器415には、受信用メモリ416(図28)から6ビットの通常量子化値で表現される受信データD417(u0i)が供給され、その受信データD417は、演算器475に供給される。さらに、準バリアブルノード計算器415には、制御部417(図28)から制御信号D422が供給され、その制御信号D422は、セレクタ473に供給される。
ここで、準バリアブルノード計算器415に対して、枝用メモリ413(図28)から供給されるメッセージD413(チェックノードメッセージuj)と、受信用メモリ416(図28)から供給される受信データD417(u0i)とは、上述したように、いずれも、6ビットの通常量子化値でもある固定小数点量子化値で表されている。
演算器471は、6ビットの固定小数点量子化値で表されるメッセージD413とレジスタ472に格納されている7ビットの値D471とを加算することにより、6ビットのメッセージD413(チェックノードメッセージuj)を積算し、その結果得られる7ビットの積算値を出力して、レジスタ472に再格納する。なお、検査行列の1列に亘る全ての1に対応するメッセージD413(チェックノードメッセージuj)が積算された場合、レジスタ472はリセットされる。
ここで、演算器471が出力する積算値は、オーバフローを完全に防止するには、図17の演算器151で説明したように、9ビットである必要があるが、図17の演算器151が出力する積算値と同様に、演算器471が積算の対象とする、チェックノードメッセージujを表現する6ビットの固定小数点量子化値D413より1ビットだけ多いビット数である7ビットになっている。
レジスタ472に1列分のメッセージD413が積算された値が格納された場合、制御部417(図28)から供給される制御信号D422は、「0」から「1」に変化する。例えば、列の重みが「5」である場合、制御信号D422は、4番目のメッセージD413が積算されるまでは「0」となり、5番目のメッセージD413が積算されると「1」となる。
制御信号D422が「1」の場合、セレクタ473は、レジスタ472に格納されている値、即ち、検査行列Hの1列に亘る全ての枝からのメッセージD413(チェックノードメッセージuj)が積算された7ビットの積算値D471(j=1からdVまでのΣuj)を選択し、レジスタ474に出力して格納させる。レジスタ474は、格納している7ビットの積算値D471を、7ビットの値D472として、セレクタ471と演算器475に供給する。制御信号D422が「0」の場合、セレクタ473は、レジスタ474から供給された7ビットの値D472を選択し、レジスタ474に出力し再格納させる。即ち、検査行列の1列に亘る全ての枝からのメッセージD413(チェックノードメッセージuj)が積算されるまで、レジスタ474は、前回の積算値D472を、セレクタ473と演算器475に供給する。
演算器475は、7ビットの積算値D472と、受信用メモリ416(図28)から供給された6ビットの受信データD417とを加算して、その結果得られる7ビットの値を復号途中結果D415(尤度を表す復号途中結果v)として出力する。
以上のように、準バリアブルノード計算器415では、通常量子化値でもある固定小数点量子化値を使用したまま、式(5)の演算が行われ、7ビットの復号途中結果vが求められる。この復号途中結果vは、準バリアブルノード計算器415から復号途中結果格納用メモリ410(図28)に供給されて記憶される。
そして、準バリアブルノード計算器415でも、演算器471が、本来ならば9ビットの通常量子化値で表現すべき積算値を、その9ビットよりも少ないビット数である7ビット(積算の対象の6ビットのチェックノードujよりも1ビットだけ多いビット数である7ビット)の通常量子化値で出力し、さらに、やはり、本来ならば9ビットの通常量子化値で表現すべき復号途中結果vを、7ビットの通常量子化値で出力するので、準バリアブルノード計算器415も、図17のバリアブルノード計算器172と同様に、規模を小さくすることができる。
ここで、準バリアブルノード計算器415では、上述したように、本来ならば9ビットの通常量子化値で表現すべき、演算器471の積算値や復号途中結果vを、その9ビットよりも少ないビット数である7ビットの通常量子化値で出力するので、積算値や復号途中結果vがオーバフローし、その結果、準バリアブルノード演算の精度、ひいては、LDPC符号の復号性能が劣化することが予想されるが、このLDPC符号の復号性能に関しては、後述する。
なお、図28の復号途中結果格納用メモリ410には、7ビットの固定小数点量子化値(通常量子化値)で表された復号途中結果vが記憶され、この7ビットの復号途中結果vが、上述したように、スイッチ411(図28)を介して、準チェックノード計算器412に供給される。
図28の復号装置でも、図19の復号装置と同様に、準チェックノード計算器412において、非線形関数φ(x)の演算後からその逆関数φ-1(x)の演算までの処理では、高精度量子化値でもある9ビットの固定小数点量子化値、または、その9ビットの固定小数点量子化値と同程度の精度で0付近の数値を表し、かつ、同程度のダイナミックレンジを有する5ビットの準浮動小数点量子化値を使用し、他の処理では、通常量子化値でもある固定小数点量子化値を使用するので、LDPC符号の復号を、復号装置の大規模化(メッセージ等を記憶する復号途中結果格納用メモリ410や枝用メモリ413の大容量化)を抑えつつ精度良く行うことができる。
さらに、準チェックノード計算器412(図30)では、LUT432において、固定小数点量子化値を入力として、非線形関数φ(x)の演算の結果を、5ビットの準浮動小数点量子化値で出力し、かつ、LUT439において、5ビットの準浮動小数点量子化値を入力として、逆関数φ-1(x)の演算の結果を、固定小数点量子化値で出力するので、かかる点からも、LDPC符号の復号を、復号装置の大規模化(LUT432や439の大容量化)を抑えつつ精度良く行うことができる。
また、図28の復号装置では、準チェックノード計算器412(図30)において、チェックノード演算と、バリアブルノード演算の一部とを行い、準バリアブルノード計算器415(図31)において、バリアブルノード演算の他の一部を行うので、図19の復号装置よりも、装置の規模を小さくすることができる。
さらに、図28の復号装置では、準バリアブルノード計算器415(図31)において、本来ならば9ビットで表現すべき、演算器471の積算値、ひいては、復号途中結果vを、7ビットの通常量子化値で出力するので、演算器471の積算値、および復号途中結果vを、本来の9ビットで表現した場合に比較して、装置の規模をより小さくすることができる。
即ち、図28の復号装置において、枝用メモリ413は、図19の枝用メモリ102に対応し、復号途中結果格納用メモリ410は、図19の枝用メモリ100に対応し、受信用メモリ416は、図19の受信用メモリ104に対応する。
そして、図28の枝用メモリ413と、対応する図19の枝用メモリ102とは、いずれも、6ビットのチェックノードメッセージujを、全枝数分だけ記憶する必要があるので、全枝数の6ビット倍の記憶容量を必要とする。また、図28の受信用メモリ416と、対応する図19の受信用メモリ104も、いずれも、6ビットの受信データu0iを、符号長分だけ記憶する必要があるので、符号長の6ビット倍の記憶容量を必要とする。
そして、図19の枝用メモリ100は、図19の枝用メモリ102と同様に、6ビットのバリアブルノードメッセージviを、全枝数分だけ記憶する必要があるので、全枝数の6ビット倍の記憶容量を必要とする。
これに対して、図19の枝用メモリ100に対応する図28の復号途中結果格納用メモリ410は、準バリアブルノード計算器415が出力する復号途中結果v(D415)を、符号長分だけ記憶することができればよい。
従って、いま、仮に、準バリアブルノード計算器415(図31)において、演算器471の積算値、ひいては、復号途中結果vが、本来の9ビットの通常量子化値で表現されることとすると、復号途中結果格納用メモリ410は、符号長の9ビット倍の記憶容量を有していればよい。
以上から、復号途中結果vが、本来の9ビットの通常量子化値で表現される場合には、全枝数が、符号長の3/2(=9ビット/6ビット)倍より少なければば、復号途中結果格納用メモリ410の記憶容量は、対応する図19の枝用メモリ100の記憶容量よりも大となる。
しかしながら、LDPC符号の検査行列Hは疎らではあるが、全枝数(検査行列Hにおいて1になっている要素の総数)は、一般に、符号長(検査行列Hの列数)の3/2倍よりも大であり、例えば、図9の検査行列Hでも、全枝数(323個)は、符号長(108)の約3(≒323/108)倍になっている。
従って、準チェックノード計算器412(図30)において、準チェックノード演算としてのチェックノード演算と、バリアブルノード演算の一部とを行うとともに、準バリアブルノード計算器415(図31)において、準バリアブルノード演算としてのバリアブルノード演算の他の一部を行い、バリアブルノード演算の結果得られるバリアブルノードではなく、準バリアブルノード演算の結果得られる復号途中結果vを、復号途中結果格納用メモリ410に記憶することにより、復号途中結果格納用メモリ410の記憶容量は、対応する図19の枝用メモリ100よりも少ない記憶容量とすることができる。
その結果、図28の復号装置は、復号途中結果格納用メモリ410の記憶容量を、対応する図19の枝用メモリ100の記憶容量よりも少なくすることができる分だけ、図19の復号装置よりも、装置の規模を小さくすることができる。
さらに、図28の復号装置では、上述したように、準バリアブルノード計算器415(図31)において、本来ならば9ビットで表現すべき、演算器471の積算値、ひいては、復号途中結果vを、7ビットの通常量子化値で出力するので、演算器471の積算値、および復号途中結果vを、本来の9ビットで表現した場合に比較して、装置の規模をより小さくすることができる。
即ち、復号途中結果vが、本来の9ビットの通常量子化値で表現されることとすると、復号途中結果格納用メモリ410は、上述したように、符号長の9ビット倍の記憶容量を必要とする。
これに対して、図28の復号装置では、上述したように、本来ならば9ビットで表現すべき復号途中結果vが、準バリアブルノード演算における積算の対象である6ビットのチェックノードメッセージujよりも1ビットだけ多い7ビットで表現されるので、復号途中結果格納用メモリ410の記憶容量は、符号長の7ビット倍の記憶容量で済む。
言い換えれば、準バリアブルノード演算の結果得られる復号途中結果vのビット数は、本来ならば、オーバフローを完全に防止するために、準バリアブルノード演算における積算の対象であるチェックノードメッセージujを、検査行列Hの列の最大の重み分の回数だけ積算したときにオーバフローが生じないビット数とする必要がある。
具体的には、例えば、上述したように、チェックノードメッセージujが6ビットで表され、検査行列Hが、図9に示したように、列の最大の重みを5とする検査行列Hである場合、6ビットのチェックノードメッセージujを5回積算して得られる積算値のオーバフローを完全に防止するには、復号途中結果vのビット数は、9ビットとする必要がある。
従って、例えば、図9の検査行列Hについては、LDPC符号の符号長は、108であるから、復号途中結果vを、本来の9ビットの通常量子化値で表現することとすると、その復号途中結果vを記憶する復号途中結果格納用メモリ410は、符号長の9ビット倍の972ビット(=108×9ビット)の記憶容量を必要とする。
これに対して、図28の復号装置では、検査行列Hの列の最大の重みに関係なく、復号途中結果vが、準バリアブルノード演算における積算の対象であるチェックノードメッセージujよりも1ビットだけ多いビット数で表現されるので、そのような復号途中結果vを記憶する復号途中結果格納用メモリ410の記憶容量は、756ビット(=108×7ビット)で済む。
つまり、復号途中結果vを7ビットで表現する場合には、9ビットで表現する場合に比較して、復号途中結果格納用メモリ410の記憶容量を、約20%程度削減することができる。
ここで、実際に使用されるLDPC符号の符号長は、数千から数万程度といった大きな値であり、この場合、復号途中結果格納用メモリ410などのメモリが、復号装置全体に占める割合が大きくなる。このため、復号途中結果格納用メモリ410の記憶容量を、約20%程度削減することによる、復号装置全体の規模の削減の効果は、極めて大きなものとなる。
また、図28の復号装置は、上述したように、(準バリアブルノード計算器415とは別に)式(5)を演算するブロックを設ける必要がなく、図29(図17)のFIFOメモリ155を設ける必要もないので、かかる観点からも、図19の復号装置より小型に構成することができる。
ところで、チェックノード演算(準チェックノード演算の中のチェックノード演算の全体を含む)や、バリアブルノード演算(準バリアブルノード演算の中のバリアブルノード演算の他の一部を含む)で行われる積算において、その積算の対象の量子化値よりも1ビットだけ多いビット数の量子化値で表現される積算値を出力する場合には、上述したように、積算値がオーバフローし、その結果、LDPC符号の復号性能が劣化することが予想される。
しかしながら、チェックノード演算やバリアブルノード演算で行われる積算において、その積算の対象の量子化値よりも1ビットだけ多いビット数の量子化値で表現される積算値を出力する場合であっても、オーバフローが生じないビット数の積算値を出力する場合の復号性能とほとんど変わらない復号性能を得ることができることが、本件発明者によるシミュレーションによって確認されている。
即ち、図32は、図28の復号装置についてのBER/FERのシミュレーション結果を示している。
なお、図32において、横軸は、1ビットあたりの信号電力対雑音電力比Eb/N0を表し、縦軸は、BER(Bit Error Rate)またはFER(Frame Error Rate)を表している。また、図32では、BERは実線で、FERは点線で、それぞれ示してある。
図32において▽印は、準チェックノード演算と準バリアブルノード演算で行われる積算によって得られる積算値のいずれも量子化せずに表現した場合のBERとFERを表している。
また、図32において○印は、準チェックノード演算で9ビットの量子化値(バリアブルノードメッセージviの絶対値|vi|に対する非線形関数φ(x)の演算結果φ(|vi|))を対象として積算を行い、その積算値を、オーバフローが生じない13ビットの量子化値で表現するとともに、準バリアブルノード演算で6ビットの量子化値(チェックノードメッセージuj)を対象として積算を行い、その積算値、ひいては、復号途中結果vを、オーバフローが生じない9ビットの量子化値で表現した場合のBERとFERを表している。
さらに、図32において□印および+印は、準チェックノード演算で9ビットの量子化値を対象として積算を行い、その積算値を、オーバフローが生じうるビット数の量子化値で表現するとともに、準バリアブルノード演算で6ビットの量子化値を対象として積算を行い、その積算値、ひいては、復号途中結果vを、オーバフローが生じうるビット数の量子化値で表現した場合のBERとFERを表している。
但し、□印は、積算値および復号途中結果vを、積算の対象の量子化値と同一のビット数で表現した場合のBERとFERを示しており、+印は、積算値および復号途中結果vを、積算の対象の量子化値よりも1ビットだけ多いビット数で表現した場合のBERとFERを示している。
従って、例えば、準バリアブルノード演算について言えば、□印は、積算値および復号途中結果vを、積算の対象の6ビットの量子化値と同一の6ビットで表現した場合のBERとFERを示しており、+印は、積算値および復号途中結果vを、積算の対象の6ビットの量子化値よりも1ビットだけ多い7ビットで表現した場合のBERとFERを示している。
理論上は、準バリアブルノード演算(準チェックノード演算についても同様)における積算値および復号途中結果vを、オーバフローが生じない9ビットの量子化値で表現した場合に、復号性能は最も良くなり、以下、積算値および復号途中結果vを表す量子化値のビット数を減らしていくと、復号性能は劣化していく。つまり、積算値および復号途中結果vを表す量子化値のビット数が9ビット、8ビット、7ビット、6ビットと減っていくと、オーバフローが生じる可能性が高くなっていき、復号性能は、その順で劣化していく。
図32に示したBERとFERによれば、積算値および復号途中結果vを表す量子化値のビット数を、積算の対象の量子化値と同一のビット数である6ビットとした場合(□印)には、その量子化値のビット数が9ビットである場合(○印)に比較して、復号性能が著しく劣化している。
一方、積算値および復号途中結果vを表す量子化値のビット数を、積算の対象の量子化値よりも1ビットだけ多いビット数である7ビットとした場合(+印)には、その量子化値のビット数が9ビットである場合(○印)に比較して、復号性能はほとんど劣化していない。
また、図32には示していないが、積算値および復号途中結果vを表す量子化値のビット数を、積算の対象の量子化値よりも2ビットだけ多い8ビットとした場合のBERとFERは、積算値および復号途中結果vを表す量子化値のビット数を7ビットとした場合と、9ビットとした場合との間になるので、その復号性能は、積算値および復号途中結果vを表す量子化値のビット数を7ビットとした場合とほとんど変わらない。
以上から、図32によれば、積算値および復号途中結果vを表す量子化値のビット数を、積算の対象の量子化値よりも1ビットだけ多いビット数とした場合には、それより多いビット数とした場合とほとんど変わらない復号性能を実現することができることが分かる。これは、見方を変えれば、積算値および復号途中結果vを表す量子化値のビット数を、積算の対象の量子化値よりも2ビット以上多いビット数としても、1ビットだけ多いビット数にした場合に比較して、復号性能がそれほど変わらないことを意味する。
従って、積算値および復号途中結果vを表す量子化値のビット数を、積算の対象の量子化値よりも1ビットだけ多いビット数とすることにより、LDPC符号の復号性能の劣化を抑えつつ、復号装置の規模を小さくすることができる。
なお、復号装置の規模だけを考えれば、例えば、積算値および復号途中結果vを表す量子化値のビット数を、積算の対象の量子化値と同一のビット数である6ビットとすることにより、積算値および復号途中結果vを表す量子化値のビット数を、積算の対象の量子化値よりも1ビットだけ多いビット数とした場合よりも、復号装置の規模を小さくすることができる。しかしながら、積算値および復号途中結果vを表す量子化値のビット数を、積算の対象の量子化値と同一のビット数である6ビットとした場合には、図32の□印で示すように、BERおよびFERが著しく劣化することになる。
従って、復号性能の劣化を抑えつつ、復号装置の規模を小さくするには、積算値および復号途中結果vを表す量子化値のビット数を、積算の対象の量子化値よりも1ビットだけ多いビット数とするのが最適であるということができる。
次に、図33は、図28の準チェックノード計算器412の他の構成例を示している。
なお、図中、図30における場合と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。即ち、図33の準チェックノード計算器412は、図30の準チェックノード計算器412と基本的に同様に構成されている。
但し、図30のチェックノード計算器412では、LUT432が、5ビットの固定小数点量子化値を入力として、非線形関数φ(|vi|)の演算結果を表す5ビットの準浮動小数点量子化値を出力するとともに、LUT439が、5ビットの準浮動小数点量子化値を入力として、逆関数φ-1(Σφ(|vi|))の演算結果を表す5ビットの固定小数点量子化値を出力するのに対して、図33のチェックノード計算器412では、LUT432が、5ビットの固定小数点量子化値を入力として、非線形関数φ(|vi|)の演算結果を表す6ビットの準浮動小数点量子化値を出力するとともに、LUT439が、6ビットの準浮動小数点量子化値を入力として、逆関数φ-1(Σφ(|vi|))の演算結果を表す5ビットの固定小数点量子化値を出力するようになっている。
即ち、図33のチェックノード計算器412では、例えば、準仮数部fが3ビットで、準指数部eも3ビットの、合計で6ビットの準浮動小数点量子化値が用いられている。
なお、図33では、準浮動小数点量子化値が6ビットであることに対応して、変換回路501および502は、6ビットの準浮動小数点量子化値を9ビットの固定小数点量子化値に変換し、変換回路503は、9ビットの固定小数点量子化値を6ビットの準浮動小数点量子化値に変換するようになっている。
図33の準チェックノード計算器412では、準浮動小数点量子化値が5ビットではなく、6ビットになっていることを除けば、図30の準チェックノード計算器412と同様にして、準チェックノード演算が行われる。
図33の準チェックノード計算器412によれば、3ビットの準仮数部fと3ビットの準指数部eからなる6ビットの準浮動小数点量子化値が採用されているので、2ビットの準仮数部fと3ビットの準指数部eからなる5ビットの準浮動小数点量子化値を採用する図30のチェックノード演算器412に比較して、LUT432および439の容量は多少増加するものの、より精度の高い準チェックノード演算を行うことができる。
次に、準チェックノード計算器412では、準チェックノード演算の一部の演算である演算器437で行われる演算のために、FIFOメモリ438がデータを遅延する。即ち、図30や図33の準チェックノード計算器412では、FIFOメモリ438が、LUT432が出力する非線形関数φ(|vi|)の演算結果を遅延し、変換回路502を介して演算器437に供給することにより、演算器437が、その遅延後の非線形関数φ(|vi|)の演算結果を用いて演算を行う。
ところで、図30では、LUT432が、5ビットの固定小数点量子化値の入力に対して、非線形関数φ(|vi|)の演算結果としての5ビットの準浮動小数点量子化値を出力するが、図33では、LUT432が、5ビットの固定小数点量子化値の入力に対して、非線形関数φ(|vi|)の演算結果としての6ビットの準浮動小数点量子化値を出力する。従って、FIFOメモリ438としては、5ビットの準浮動小数点量子化値を遅延する図30の場合よりも、6ビットの準浮動小数点量子化値を遅延する図33の場合の方が、容量の大きいFIFOメモリが必要となる。
そこで、準チェックノード計算器412は(図20のチェックノード計算器181も同様)、LUT432に入力される固定小数点量子化値と、LUT432から出力される準浮動小数点量子化値とのうちの、ビット数が少ない方を、FIFOメモリ438で遅延するように構成することができる。
即ち、図34は、LUT432に入力される固定小数点量子化値が5ビットで、LUT432から出力される準浮動小数点量子化値が6ビットである場合の、ビット数が少ない、LUT432に入力される固定小数点量子化値を、FIFOメモリ438で遅延するように構成した図28の準チェックノード計算器412の構成例を示している。
なお、図中、図33における場合と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。
図34の準チェックノード計算器412では、FIFOメモリ438において、LUT432から出力される6ビットの準浮動小数点量子化値ではなく、LUT432に入力される5ビットの固定小数点量子化値が遅延されるようになっている。
さらに、図34の準チェックノード計算器412では、FIFOメモリ438において、LUT432から出力される6ビットの準浮動小数点量子化値ではなく、LUT432に入力される5ビットの固定小数点量子化値を遅延することに伴い、FIFOメモリ438で遅延された後の5ビットの固定小数点量子化値を入力として、非線形関数φ(|vi|)の演算結果を表す6ビットの準浮動小数点量子化値を出力する、LUT432と同様に構成されるLUT504が、FIFOメモリ438と変換回路502との間に、新たに設けられている。
以上のように構成される図34の準チェックノード計算器412では、FIFOメモリ438において、LUT432から出力される6ビットの準浮動小数点量子化値ではなく、LUT432に入力される5ビットの固定小数点量子化値が遅延されて出力される。その後、LUT504が、FIFOメモリ438が出力する、遅延後の5ビットの固定小数点量子化値を入力として、非線形関数φ(|vi|)の演算結果を表す6ビットの準浮動小数点量子化値を出力する。
そして、変換回路502は、LUT504が出力する6ビットの準浮動小数点量子化値を、9ビットの固定小数点量子化値に変換し、演算器437に供給する。これにより、演算器437では、変換回路502から供給される、遅延後の非線形関数φ(|vi|)の演算結果を用いて演算が行われる。
なお、図34の準チェックノード計算器412において行われるその他の処理は、図33の場合と同様である。
以上のように、LUT432に入力される固定小数点量子化値と、LUT432から出力される準浮動小数点量子化値とのうちの、ビット数が少ない方を、FIFOメモリ438で遅延するように、準チェックノード計算器412を構成することにより、即ち、例えば、LUT432に入力される固定小数点量子化値が5ビットで、LUT432から出力される準浮動小数点量子化値が6ビットである場合には、図34に示したように、ビット数が少ない、LUT432に入力される固定小数点量子化値を、FIFOメモリ438で遅延するように、準チェックノード計算器412を構成することにより、FIFOメモリ438として、容量の小さいFIFOメモリを採用することができる。
ここで、図34に示したように、LUT432に入力される固定小数点量子化値を、FIFOメモリ438で遅延するように、準チェックノード計算器412を構成する場合には、FIFOメモリ438と変換回路502との間に、LUT504を新たに設ける必要がある。このため、LUT432に入力される固定小数点量子化値と、LUT432から出力される準浮動小数点量子化値とのビット数が同一である場合には、準チェックノード計算器412は、図30に示したように、LUT432から出力される準浮動小数点量子化値を、FIFOメモリ438で遅延するように構成する方が、LUT504を設けずに済む分だけ回路規模を小さくすることができる。
また、LUT432に入力される固定小数点量子化値を、FIFOメモリ438で遅延するように、準チェックノード計算器412を構成する場合には、FIFOメモリ438と変換回路502との間に、LUT504を新たに設ける必要があるので、LUT432に入力される固定小数点量子化値と、LUT432から出力される準浮動小数点量子化値とのうちのいずれを、FIFOメモリ438で遅延するかは、LUT432に入力される固定小数点量子化値と、LUT432から出力される準浮動小数点量子化値とのビット数の大小関係の他、LUT504の規模を考慮して決めるのが望ましい。
即ち、LUT432に入力される固定小数点量子化値が、LUT432から出力される準浮動小数点量子化値のビット数以上のビット数である場合には、準チェックノード計算器412は、図30に示したように、LUT432から出力される準浮動小数点量子化値を、FIFOメモリ438で遅延するように構成することにより、回路規模を小さくすることができる。
また、LUT432に入力される固定小数点量子化値が、LUT432から出力される準浮動小数点量子化値のビット数未満のビット数である場合には、LUT432に入力される、ビット数が小の固定小数点量子化値をFIFOメモリ438で遅延するときのFIFOメモリ438の規模およびそのとき必要となるLUT504の規模を合わせた規模と、LUT432から出力される、ビット数が大の準浮動小数点量子化値をFIFOメモリ438で遅延するときのFIFOメモリ438の規模とを比較し、規模が小さくなる方の構成を採用するのが望ましい。
なお、本実施の形態では、各ノードの演算を一つずつ順次行うフルシリアルデコード(full serial decoding)のアーキテクチャを有する復号装置を採用したが、復号装置のアーキテクチャは、特に限定されるものではない。即ち、本発明は、フルシリアルデコードのアーキテクチャを有する復号装置の他、例えば、全ノードの演算を同時に行うフルパラレルデコード(full parallel decoding)のアーキテクチャを有する復号装置や、一つでも全てでもない、ある数のノードの演算を同時に行う一部パラレルデコード(partly parallel decoding)のアーキテクチャを有する復号装置にも適用可能である。
フルパラレルデコードのアーキテクチャを有する復号装置や、一部パラレルデコードのアーキテクチャを有する復号装置は、チェックノード演算を行うチェックノード計算器(準チェックノード計算器)を複数有することから、非線形関数φ(x)やその逆関数φ-1(y)の演算を行う(演算結果を出力する)LUTの容量の削減の効果は、さらに大になる。
また、検査行列Hは、図9に示したものに限定されるものではない。
さらに、固定小数点量子化値である通常量子化値や高精度量子化値、準浮動小数点量子化値のビット数(量子化ビット数)も、上述した値に限定されるものではない。
さらに、図19の枝用メモリ100および102、受信用メモリ104や、図28の復号途中結果格納用メモリ410、枝用メモリ413、受信用メモリ416としては、例えば、RAM(Read Only Memory)を使用することができる。ここで、これらの枝用メモリ100等として使用するRAMの1ワードあたりのビット数(ビット幅)や、RAMが記憶することができるワード数は、特に限定されるものではない。また、RAMのビット幅やワード数によっては、複数のRAMに対して、同様の制御信号(例えば、チップセレクト信号やアドレス信号)を与えることにより、その複数のRAMを論理的に1つのRAMとみなして、枝用メモリ100等として使用することができる。即ち、例えば、物理的に1つのRAMのビット幅が、受信データu0i等の量子化ビット数に足りない場合には、複数のRAMを論理的に1つのRAMとみなして、受信データu0i等を記憶させることができる。
また、本実施の形態では、非線形関数φ(x)、またはその逆関数φ-1(x)の演算を、LUT1121(図20)やLUT432(図30)、またはLUT1128(図20)やLUT439(図30)といったLUTによって行うようにしたが、非線形関数φ(x)やその逆関数φ-1(x)の演算は、例えば、CPU(Central Processing Unit)や論理回路によって行うことが可能である。
さらに、図20のチェックノード計算器181では、FIFO1127において、LUT221が出力する5ビットの準浮動小数点量子化値を遅延するようにしたが、FIFO1127では、LUT221が出力する5ビットの準浮動小数点量子化値ではなく、その5ビットの準浮動小数点量子化値の表示形式を変換回路231で変換して得られる9ビットの固定小数点量子化値を遅延するようにすることが可能である。この場合、図20において、FIFO1127の後段に設けられている変換回路232は、不要となる。
但し、FIFO1127において、5ビットの準浮動小数点量子化値を遅延する場合には、9ビットの固定小数点量子化値を遅延する場合に比較して、FIFO1127の容量を小さくすることができる。図30のFIFO438についても同様である。
また、図28の復号装置においては、準バリアブルノード計算器415における準バリアブルノード演算における積算値と復号途中結果vを、積算の対象となるチェックノードメッセージujを表す量子化値よりも1ビットだけ多い量子化値で表すとともに、準チェックノード計算器412における準チェックノード演算における積算値を、積算の対象となる量子化値よりも1ビットだけ多い量子化値で表すようにしたが、復号途中結果格納用メモリ410の記憶容量を削減するという観点からは、準バリアブルノード計算器415における準バリアブルノード演算における復号途中結果vを、積算の対象となるチェックノードメッセージujを表す量子化値よりも1ビットだけ多い量子化値で表すだけで良い。
なお、上述した復号装置は、例えば、(ディジタル)衛星放送を受信するチューナに内蔵される、LDPC符号を復号する復号装置などに適用することができる。
LDPC符号の検査行列Hを説明する図である。 パリティ部が下三角行列になっている検査行列Hを示す図である。 LDPC符号の復号手順を説明するフローチャートである。 メッセージの流れを説明する図である。 LDPC符号の検査行列Hの例を示す図である。 検査行列Hのタナーグラフを示す図である。 バリアブルノードを示す図である。 チェックノードを示す図である。 LDPC符号の検査行列Hの例を示す図である。 ノード演算を一つずつ行うLDPC符号の復号装置の構成例を示すブロック図である。 メッセージを一つずつ計算するチェックノード計算器101の構成例を示すブロック図である。 メッセージを一つずつ計算するバリアブルノード計算器103の構成例を示すブロック図である。 本発明を適用した復号装置の第1実施の形態の構成例を示すブロック図である。 チェックノード計算器171の構成例を示すブロック図である。 チェックノード計算器171の処理を説明するためのフローチャートである。 非線形関数φ(x)と、その逆関数φ-1(y)とを示す図である。 バリアブルノード計算器172の構成例を示すブロック図である。 バリアブルノード計算器172の処理を説明するためのフローチャートである。 本発明を適用した復号装置の第2実施の形態の構成例を示すブロック図である。 チェックノード計算器181の構成例を示すブロック図である。 LUT221を説明するための図である。 変換回路231を説明するための図である。 変換回路231の処理を説明する図である。 変換回路233を説明するための図である。 変換回路233の処理を説明する図である。 LUT228を説明するための図である。 チェックノード計算器181の処理を説明するためのフローチャートである。 本発明を適用した復号装置の第3実施の形態の構成例を示すブロック図である。 バリアブルノード計算器172の構成例を示すブロック図である。 準チェックノード計算器412の構成例を示すブロック図である。 準バリアブルノード計算器415の構成例を示すブロック図である。 BER/FERを示す図である。 準チェックノード計算器412の他の構成例を示すブロック図である。 準チェックノード計算器412のさらに他の構成例を示すブロック図である。
符号の説明
100,102 枝用メモリ, 103 バリアブルノード計算器, 104 受信用メモリ, 105 制御部, 129 EXOR回路, 130 レジスタ, 131 セレクタ, 132 レジスタ, 133 FIFOメモリ, 134 EXOR回路, 171 チェックノード計算器, 172 バリアブルノード計算器, 181 チェックノード計算器, 221,228 LUT, 231乃至233 変換回路, 410 復号途中結果格納用メモリ, 411 スイッチ, 412 準チェックノード計算器, 413 枝用メモリ, 415 準バリアブルノード計算器, 416 受信用メモリ, 417 制御部, 431 演算器, 432 LUT, 433 演算器, 434 レジスタ, 435 セレクタ, 436 レジスタ, 437 演算器, 438 FIFOメモリ, 439 LUT, 440 EXOR回路, 441 レジスタ, 442 セレクタ, 443 レジスタ, 444 FIFOメモリ, 445 EXOR回路, 471 演算器, 472 レジスタ, 473 セレクタ, 474 レジスタ, 475 演算器, 501乃至503 変換回路, 504 LUT, 1211 LUT, 1122 演算器, 1123 レジスタ, 1124 セレクタ, 1125 レジスタ, 1126 演算器, 1127 FIFOメモリ, 1128 LUT

Claims (6)

  1. LDPC(Low Density Parity Check)符号の復号装置であって、
    前記LDPC符号の復号のためのチェックノードのチェックノード演算を行う第1の演算手段と、
    前記LDPC符号の復号のためのバリアブルノードのバリアブルノード演算を行う第2の演算手段と
    を備え、
    前記第2の演算手段は、前記バリアブルノード演算で行われる積算において、その積算の対象の量子化値よりも1ビットだけ多いビット数の量子化値で表現される積算結果を出力する
    復号装置。
  2. 前記第1の演算手段は、前記チェックノード演算で行われる積算において、その積算の対象の量子化値よりも1ビットだけ多いビット数の量子化値で表現される積算結果を出力する
    請求項1に記載の復号装置。
  3. 前記第1の演算手段は、前記チェックノード演算と、前記バリアブルノード演算の一部とを行い、
    前記第2の演算手段は、前記バリアブルノード演算の他の一部を行う
    請求項1に記載の復号装置。
  4. 前記第2の演算手段は、前記チェックノード演算の結果得られるチェックノードメッセージを対象とした積算を、前記バリアブルノード演算の他の一部として行い、前記チェックノードメッセージを表現する量子化値よりも1ビットだけ多いビット数の量子化値で表現される、前記バリアブルノード演算の他の一部として行われた前記積算の積算結果を出力する
    請求項3に記載の復号装置。
  5. 前記第2の演算手段が出力する前記積算結果を記憶する記憶手段をさらに備える
    請求項4に記載の復号装置。
  6. LDPC(Low Density Parity Check)符号の復号のためのチェックノードのチェックノード演算を行う第1の演算手段と、
    前記LDPC符号の復号のためのバリアブルノードのバリアブルノード演算を行う第2の演算手段と
    を備える復号装置の復号方法であって、
    前記第2の演算手段では、前記バリアブルノード演算で行われる積算において、その積算の対象の量子化値よりも1ビットだけ多いビット数の量子化値で表現される積算結果を出力する
    復号方法。
JP2005264731A 2005-09-13 2005-09-13 復号装置および復号方法 Withdrawn JP2007081602A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005264731A JP2007081602A (ja) 2005-09-13 2005-09-13 復号装置および復号方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005264731A JP2007081602A (ja) 2005-09-13 2005-09-13 復号装置および復号方法

Publications (1)

Publication Number Publication Date
JP2007081602A true JP2007081602A (ja) 2007-03-29

Family

ID=37941461

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005264731A Withdrawn JP2007081602A (ja) 2005-09-13 2005-09-13 復号装置および復号方法

Country Status (1)

Country Link
JP (1) JP2007081602A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101442317B (zh) * 2007-10-19 2012-07-11 索尼株式会社 数据解码装置和方法、发送/接收系统、接收装置和方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101442317B (zh) * 2007-10-19 2012-07-11 索尼株式会社 数据解码装置和方法、发送/接收系统、接收装置和方法

Similar Documents

Publication Publication Date Title
JP4293172B2 (ja) 復号装置および復号方法
JP4595650B2 (ja) 復号装置および復号方法
KR101090001B1 (ko) 복호 장치 및 복호 방법, 및 기록 매체
JP4622654B2 (ja) 復号装置および復号方法
KR101158919B1 (ko) 복호 방법 및 복호 장치, 및 기록 매체
JP4487212B2 (ja) 復号装置および方法、送受信システム、受信装置および方法、並びにプログラム
JP2007174027A (ja) 復号装置、制御方法、およびプログラム
JP2009100423A (ja) 復号装置および方法、並びにプログラム
KR20080096387A (ko) 디코딩 장치
JP2007036776A (ja) 復号装置および復号方法
JP4285148B2 (ja) 復号装置および復号方法、並びにプログラム
JP2007081602A (ja) 復号装置および復号方法
JP4729964B2 (ja) 復号装置および復号方法
JP4730592B2 (ja) 復号装置および復号方法
JP4284600B2 (ja) 復号装置
JP4822071B2 (ja) 復号装置および復号方法
JP4821724B2 (ja) 復号装置および復号方法
JP2010028408A (ja) 情報処理装置、情報処理方法、およびプログラム
JP4288582B2 (ja) 復号装置および復号方法、並びにプログラム

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20081202