JP2008301152A - 復号装置および方法、並びにプログラム - Google Patents
復号装置および方法、並びにプログラム Download PDFInfo
- Publication number
- JP2008301152A JP2008301152A JP2007144419A JP2007144419A JP2008301152A JP 2008301152 A JP2008301152 A JP 2008301152A JP 2007144419 A JP2007144419 A JP 2007144419A JP 2007144419 A JP2007144419 A JP 2007144419A JP 2008301152 A JP2008301152 A JP 2008301152A
- Authority
- JP
- Japan
- Prior art keywords
- message
- calculation
- received data
- node
- storage means
- 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.)
- Pending
Links
Images
Landscapes
- Error Detection And Correction (AREA)
Abstract
【課題】LDPC復号装置等の回路規模縮小を図る。
【解決手段】受信データメモリ910には、並列数P=6の場合のPパラレルビットの受信データが2[word]分使って保持されている。制御部914の制御によって、2時刻のうちの最初の1時刻目に、Pパラレルビットのうち先に読み出されたP/2のビットの受信データがレジスタ912に一旦格納される。次の2時刻目に、Pパラレルビットのうちの残りのP/2のビットの受信データが受信データメモリ910から読み出されるので、この残りのP/2のビットの受信データと、レジスタ912に一旦格納されていた先のP/2のビットの受信データとが同時に、受信データD211として、メッセージ計算部913に送信される。本発明は、LDPC復号装置に適用可能である。
【選択図】図20
【解決手段】受信データメモリ910には、並列数P=6の場合のPパラレルビットの受信データが2[word]分使って保持されている。制御部914の制御によって、2時刻のうちの最初の1時刻目に、Pパラレルビットのうち先に読み出されたP/2のビットの受信データがレジスタ912に一旦格納される。次の2時刻目に、Pパラレルビットのうちの残りのP/2のビットの受信データが受信データメモリ910から読み出されるので、この残りのP/2のビットの受信データと、レジスタ912に一旦格納されていた先のP/2のビットの受信データとが同時に、受信データD211として、メッセージ計算部913に送信される。本発明は、LDPC復号装置に適用可能である。
【選択図】図20
Description
本発明は、復号装置および方法並びにプログラムに関し、特に、復号性能を維持しつつ回路規模を従来より縮小できるようになった復号装置および方法並びにプログラムに関する。
通信システムにおいては、コーディングを使用して雑音のある通信チャネルに渡る信頼性ある通信が行われている。例えば、衛星ネットワークのようなワイヤレス(または無線)システムでは、地理的および環境的要因からの雑音源が多い。これらの通信チャネルは固定容量を表し、ある信号対雑音比(SNR)におけるシンボル当たりのビットに関して表すことができ、シャノン限界として知られる理論的上限を規定している。結果として、コーディング設計はこのシャノン限界に近づくレートを達成することを目的としている。この目的は、帯域幅制約衛星システムに対して特に密接な関係がある。
近年では、シャノン限界に近い性能を示す符号化方法として、例えば、並列連接畳み込み符号(PCCC(Parallel Concatenated Convolutional Codes))や、縦列連接畳み込み符号(SCCC(Serially Concatenated Convolutional Codes))といった、いわゆるターボ符号化(Turbo coding)と称される手法が開発されている。また、これらのターボ符号が開発される一方で、古くから知られる符号化方法である低密度パリティ検査符号(Low Density Parity Check codes)(以下、LDPC符号と称する)が脚光を浴びつつある。
LDPC符号は、R. G. Gallagerによる非特許文献1において最初に提案されたものであり、その後、非特許文献2,3等において再注目されるに至ったものである。
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行列である場合には、符号化装置は、生成行列Gに対してkビットからなる情報メッセージ(ベクトルu)を乗算し、nビットからなる符号語c(=uG)を生成する。この符号化装置によって生成された符号語は、値が"0"の符号ビットが"+1"に、値が"1"の符号ビットが"−1"にといったようにマッピングされて送信され、所定の通信路を介して受信側において受信されることになる。
一方、LDPC符号の復号は、Gallagerが確率復号(Probabilistic Decoding)と称して提案したアルゴリズムであって、バリアブルノード(バリアブルノード(メッセージノード(message node)とも呼ばれる。))と、チェックノード(チェックノード)とからなる、いわゆるタナーグラフ(Tanner graph)上での確率伝播(belief propagation)によるメッセージ・パッシング・アルゴリズムによって行うことが可能である。ここで、以下、適宜、バリアブルノードとチェックノードを、単に、ノードともいう。
しかしながら、確率復号においては、各ノード間で受け渡されるメッセージが実数値であることから、解析的に解くためには、連続した値をとるメッセージの確率分布そのもを追跡する必要があり、非常に困難を伴う解析を必要とすることになる。そこで、Gallagerは、LDPC符号の復号アルゴリズムとして、アルゴリズムA又はアルゴリズムBを提案している。
LDPC符号の復号は、例えば、図2に示すような手順に従って行われる。なお、ここでは、符号長の長さのLDPC符号の受信データのi番目をU0(u0i)とし、チェックノードから出力されるj番目のメッセージ(チェックノードに接続しているj番目の枝から出力されるメッセージ)をujとし、バリアブルノードから出力されるi番目のメッセージ(バリアブルノードに接続しているi番目の枝から出力されるメッセージ)をviとする。また、ここでは、メッセージとは、値の"0"らしさを表す、いわゆる対数尤度比(log likelihood ratio)等を表現する実数値である。
まず、LDPC符号の復号においては、図2に示すように、ステップS11において、受信データU0(u0i)が受信され、メッセージujが"0"に初期化されるとともに、繰り返し処理のカウンタとしての整数をとる変数kが"0"に初期化され、処理は、ステップS12に進む。ステップS12において、受信データU0(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に進む。ステップS13では、変数kが所定の繰り返し復号回数N以上であるか否かが判定される。ステップS13において、変数kがN以上ではないと判定された場合、処理は、ステップS12に戻り、以下、同様の処理が繰り返される。
また、ステップS13において、変数kがN以上であると判定された場合、処理は、ステップS14に進み、式(5)に示す演算を行うことによって最終的に出力する復号結果としてのメッセージvが求められて出力され、LDPC符号の復号処理が終了する。
ここで、式(5)の演算は、式(1)の演算とは異なり、バリアブルノードに接続している全ての枝からのメッセージujを用いて行われる。
このようなLDPC符号の復号では、例えば(3,6)符号の場合には、図3に示すように、各ノード間でメッセージの授受が行われる。なお、図3において"="(イコール)で示すノードは、バリアブルノードを表し、式(1)に示したバリアブルノードの演算が行われる。また、図3において"+"(プラス)で示すノードは、チェックノードを表し、式(2)に示したチェックノードの演算が行われる。特に、アルゴリズムAにおいては、メッセージを2元化し、"+"で示すチェックノードにて、dc-1個の入力メッセージ(チェックノードに入力されるメッセージvi)の排他的論理和演算を行い、"="で示すバリアブルノードにて、受信データRに対して、dv-1個の入力メッセージ(バリアブルノードに入力されるメッセージuj)が全て異なるビット値であった場合には、符号を反転して出力する。
また、近年、LDPC符号の復号の実装法に関する研究も行われている。実装方法について述べる前に、まず、LDPC符号の復号を摸式化して説明する。
図4は、(3,6)符号のLDPC符号(符号化率1/2、符号長12)の検査行列(parity check matrix)Hの例である。LDPC符号の検査行列Hは、図5のように、タナーグラフを用いて書き表すことができる。ここで、図5において、"+"で表されるのが、チェックノードであり、"="で表されるのが、バリアブルノードである。チェックノードとバリアブルノードは、それぞれ、検査行列の行と列に対応する。チェックノードとバリアブルノードとの間の結線は、枝(edge)であり、検査行列Hの"1"に相当する。すなわち、検査行列の第j行第i列のコンポーネントが1である場合には、図5において、上からi番目のバリアブルノード("="のノード)と、上からj番目のチェックノード("+"のノード)とが、枝により接続される。枝は、バリアブルノードに対応するLDPC符号(の受信データ)のビットが、チェックノードに対応する拘束条件を持つことを表す。なお、図5は、図4の検査行列Hのタナーグラフとなっている。
LDPC符号の復号方法であるサムプロダクトアルゴリズム(Sum Product Algorithm)は、バリアブルノードの演算とチェックノードの演算とを繰り返し行う。
バリアブルノードでは、図6のように、式(1)のバリアブルノードの演算を行う。すなわち、図6において、バリアブルノードに接続している枝のうちのi番目の枝に対応するメッセージviは、バリアブルノードに接続している残りの枝からのメッセージu1及びu2と、受信データu0iとを用いて計算される。他の枝に対応するメッセージも同様に計算される。
チェックノードの演算について説明する前に、式(2)を、式a×b=exp{ln(|a|)+ln(|b|)}×sign(a)×sign(b)の関係を用いて、式(6)のように書き直す。但し、sign(x)は、x≧0のとき1(論理0)であり、x<0のとき-1(論理1)である。
さらに、x≧0において、非線形関数φ(x)=-ln(tanh(x/2))を定義すると、その逆関数φ-1(x)は、式φ-1(x)=2tanh-1(e-x)で表されるから、式(6)は、式(7)のように書くことができる。
チェックノードでは、図7のように、式(7)のチェックノードの演算を行う。すなわち、図7において、チェックノードに接続している枝のうちのj番目の枝に対応するメッセージujは、チェックノードに繋がっている残りの枝からのメッセージv1,v2,v3,v4,v5を用いて計算される。他の枝に対応するメッセージも同様に計算される。
なお、関数φ(x)は、φ(x)=ln((ex+1)/(ex-1))とも表すことができ、x>0において、φ(x)=φ-1(x)、すなわち、非線形関数φ(x)の演算結果と、その逆関数φ-1(x)の演算結果とは同一である。関数φ(x)及びφ-1(x)をハードウェアに実装する際には、LUT(Look Up Table)を用いて実装される場合があるが、両者は同一のLUTとなる。
また、式(1)のバリアブルノードの演算は、式(5)と、次の式(8)とに分けることができる。
したがって、式(5)及び式(8)と、式(7)の演算を繰り返し行うことにより、式(1)のバリアブルノードの演算と、式(7)のチェックノードの演算を繰り返し行うことができる。この場合、式(5)及び式(8)のバリアブルノードの演算のうちの、式(5)の演算の結果を、そのまま、最終的な復号結果とすることができる。
サムプロダクトアルゴリズムをハードウェアに実装して、復号装置とする場合、式(1)(、又は式(5)及び式(8))で表されるバリアブルノード演算(バリアブルノードの演算)及び式(7)で表されるチェックノード演算(チェックノードの演算)を、適度な回路規模と動作周波数で繰り返し行うことが必要である。
復号装置の実装の例として、単純に各ノードの演算を一つずつ順次行うことによって復号を行うフルシリアルの復号(full serial decoding)の実装法について説明する。
図8は、LDPC符号の復号を行う復号装置の構成例を示している。
図8の復号装置では、動作クロックの1クロック(clock)ごとに、1つの枝に対応するメッセージが計算される。
すなわち、図8の復号装置は、メッセージ計算部101、メッセージメモリ104、受信データメモリ105、制御部106からなる。また、メッセージ計算部101は、バリアブルノード計算器102とチェックノード計算器103とから構成されている。
図8の復号装置では、メッセージメモリ104からメッセージ計算部101に、メッセージが1つずつ読み出され、メッセージ計算部101において、そのメッセージを用いて、所望の枝に対応するメッセージが計算される。そして、その計算によって求められたメッセージが、メッセージメモリ104に格納されていく。図8の復号装置では、以上の処理が繰り返し行われ、いわゆる繰り返し復号が行われる。
すなわち、受信データメモリ105には、送信されてきたLDPC符号を受信することにより得られる、符号の0(又は1)らしさを表す対数尤度比である受信データ(LDPC符号)D100が供給され、受信データメモリ105は、その受信データD100を格納(記憶)する。
バリアブルノード演算時には、受信データメモリ105は、制御部106から供給される制御信号に従って、記憶している受信データを読み出し、受信データD101として、メッセージ計算部101のバリアブルノード計算器102に供給する。
また、バリアブルノード演算時には、メッセージメモリ104は、制御部106から供給される制御信号に従って、記憶しているメッセージ(チェックノードメッセージuj)D102を読み出し、バリアブルノード計算器102に供給する。バリアブルノード計算器102は、メッセージメモリ104から供給されるメッセージD102と受信データメモリ105から供給される受信データD101を用い、式(1)のバリアブルノード演算を行い、そのバリアブルノード演算の結果得られたメッセージ(バリアブルノードメッセージ)viを、メッセージD103として、メッセージメモリ104に供給する。
そして、メッセージメモリ104は、以上のようにしてバリアブルノード計算器102から供給されるメッセージD103を記憶する。
一方、チェックノード演算時には、メッセージメモリ104は、制御部106から供給される制御信号に従って、記憶しているバリアブルノードメッセージviを、メッセージD104として読み出し、チェックノード計算器103に供給する。
チェックノード計算器103は、メッセージメモリ104から供給されるメッセージD104を用いて、式(7)のチェックノード演算を行い、そのチェックノード演算によって求められたメッセージ(チェックノードメッセージ)ujを、メッセージD105として、メッセージメモリ104に供給する。
そして、メッセージメモリ104は、以上のようにしてチェックノード計算器103から供給されるメッセージD105を記憶する。
メッセージメモリ104が記憶したチェックノード計算器103からのメッセージD105、すなわち、チェックノードメッセージujは、次のバリアブルノード演算時に、メッセージD102として読み出され、バリアブルノード計算器102に供給される。
図9は、バリアブルノード演算を1つずつ行う図8のバリアブルノード計算器102の構成例を示している。
バリアブルノード計算器102は、外部からメッセージ(データ)が供給(入力)される入力ポートとして、2つの入力ポートP101とP102を有し、外部にメッセージを供給(出力)するポートとして、1つの出力ポートP103を有している。そして、バリアブルノード計算器102は、入力ポートP101とP102それぞれから入力されるメッセージを用いて、式(1)のバリアブルノード演算を行い、その結果得られるメッセージを、出力ポートP103から出力する。
すなわち、入力ポートP101には、受信データメモリ105から読み出された受信データD101が供給される。また、入力ポートP102には、メッセージメモリ104から読み出されたメッセージD102(チェックノードメッセージuj)が供給される。
バリアブルノード計算器102では、検査行列の各行に対応するチェックノードからのメッセージD102(メッセージuj)が入力ポートP102から1つずつ読み込まれ、そのメッセージD102が、演算器151とFIFOメモリ155に供給される。また、バリアブルノード計算器102では、受信データメモリ105から受信データD101が入力ポートP101から1つずつ読み込まれ、演算器157に供給される。
演算器151は、メッセージD102(メッセージuj)とレジスタ152に格納されている値D151とを加算することにより、メッセージD102を積算し、その結果得られる積算値を、レジスタ152に再格納する。なお、検査行列の1列に亘る全ての枝からのメッセージD102が積算された場合、レジスタ152は0にリセットされる。
検査行列の1列に亘るメッセージD102が1つずつ読み込まれ、レジスタ152に1列分のメッセージD102が積算された値が格納された場合、すなわち、レジスタ152に、検査行列の1列に亘る全ての枝からのメッセージD102(メッセージuj)が積算された積算値(j=1からdvまでのΣuj)が格納された場合、セレクタ153は、レジスタ152に格納されている値、すなわち、検査行列の1列に亘る全ての枝からのメッセージD102(メッセージuj)が積算された積算値D151(j=1からdvまでのΣuj)を選択し、レジスタ154に出力して格納させる。
レジスタ154は、格納している値D151を、値D152として、セレクタ153と演算器156に供給する。レジスタ152に1列分のメッセージD102が積算された値が格納される直前までは、セレクタ153は、レジスタ154から供給された値D152を選択し、レジスタ154に出力し再格納させる。すなわち、検査行列の1列に亘る全ての枝からのメッセージD102(メッセージuj)が積算されるまで、レジスタ154は、前回積算された値を、セレクタ153と演算器156に供給する。
一方、FIFOメモリ155は、レジスタ154から新たな値D152(j=1からdvまでのΣuj)が出力されるまでの間、チェックノードからのメッセージD102を遅延し、値D153として演算器156に供給する。演算器156は、レジスタ154から供給された値D152から、FIFOメモリ155から供給された値D153を減算する。すなわち、演算器156は、検査行列の1列に亘る全ての枝からのメッセージD102(メッセージuj)の積算値(j=1からdvまでのΣuj)から、求めたい枝からのメッセージujを減算して、その減算値(j=1からdv-1までのΣuj)を求め、演算器157に供給する。
演算器157は、入力ポートP101からの受信データD101と、演算器156からの減算値(j=1からdv-1までのΣuj)とを加算し、その結果得られる加算値をメッセージD103(メッセージvi)として、出力ポートP103から出力する。
以上のように、バリアブルノード計算器102では、式(1)のバリアブルノード演算(vi=uoi+Σuj)が行われ、その結果得られるメッセージ(バリアブルノードメッセージ)viが、出力ポートP103から出力される。
図10は、チェックノード演算を1つずつ行う図8のチェックノード計算器103の構成例を示している。
チェックノード計算器103は、外部からメッセージ(データ)が供給(入力)される入力ポートとして、1つの入力ポートP111を有し、外部にメッセージを供給(出力)するポートとして、1つの出力ポートP112を有している。そして、チェックノード計算器103は、入力ポートP111から入力されるメッセージを用いて、式(7)のチェックノード演算を行い、その結果得られるメッセージを、出力ポートP112から出力する。
すなわち、入力ポートP111には、メッセージメモリ104から読み出されたメッセージD104(バリアブルノードメッセージvi)が供給される。
チェックノード計算器103では、検査行列の各列に対応するバリアブルノードからのメッセージD104(メッセージvi)が入力ポートP111から1つずつ読み込まれ、その最上位ビットを除く下位ビット、つまり、メッセージD104の絶対値D122(|vi|)が、LUT121に供給されるとともに、最上位ビット、つまりメッセージD104の符号ビット(正負を表すビット)D121が、EXOR回路129とFIFO(First In First Out)メモリ133にそれぞれ供給される。
LUT121は、そこに入力される値を引数xとして、式(7)のチェックノード演算における非線形関数φ(x)の演算結果を出力するLUTであり、絶対値D122(|vi|)の供給に対して、非線形関数φ(|vi|)の演算を行った演算結果D123(φ(|vi|))を読み出し、演算器122とFIFOメモリ127に供給する。
演算器122は、演算結果D123(φ(|vi|))とレジスタ123に格納されている値D124とを加算することにより、演算結果D123を積算し、その結果得られる積算値をレジスタ123に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD104の絶対値D122(|vi|)に対する演算結果D123(φ(|vi|))が積算された場合、レジスタ123は0にリセットされる。
検査行列の1行に亘るメッセージD104が1つずつ読み込まれ、レジスタ123に1行分の演算結果D123が積算された積算値が格納された場合、セレクタ124は、レジスタ123に格納されている値、すなわち、検査行列の1行に亘る全ての枝からのメッセージD104(メッセージvi)から求められたφ(|vi|)が積算された積算値D124(i=1からdcまでのΣφ(|vi|))を選択し、値D125として、レジスタ125に出力して格納させる。レジスタ125は、格納している値D125を、値D126として、セレクタ124と演算器126に供給する。
レジスタ123に1行分の演算結果D123が積算された積算値が格納される直前までは、セレクタ124は、レジスタ125から供給された値D126を選択し、レジスタ125に出力して再格納させる。すなわち、検査行列の1行に亘る全ての枝からのメッセージD104(メッセージvi)から求められたφ(|vi|)が積算されるまで、レジスタ125は、前回積算されたφ(|vi|)の積算値を、セレクタ124と演算器126に供給する。
一方、FIFOメモリ127は、レジスタ125から新たな値D126(i=1からdcまでのΣφ(|vi|))が出力されるまでの間、LUT121が出力した演算結果D123(φ(|vi|))を遅延し、値D127として演算器126に供給する。演算器126は、レジスタ125から供給された値D126から、FIFOメモリ127から供給された値D127を減算し、その減算結果を、減算値D128としてLUT128に供給する。すなわち、演算器126は、検査行列の1行に亘る全ての枝からのメッセージD104(メッセージvi)から求められたφ(|vi|)の積算値(i=1からdcまでのΣφ(|vi|))から、求めたい枝からのメッセージ(i=dcのメッセージvi)から求められたφ(|vi|)を減算して、その減算値(i=1からdc-1までのΣφ(|vi|))を減算値D128としてLUT128に供給する。
LUT128は、そこに入力される値を引数xとして、式(7)のチェックノード演算における非線形関数φ(x)の逆関数φ-1(x)の演算結果を出力するLUTであり、演算器126からの減算値D128(i=1からdc-1までのΣφ(|vi|))の供給に対して、逆関数φ-1(Σφ(|vi|))の演算を行った演算結果D129(φ-1(Σφ(|vi|)))を出力する。
なお、上述したように、同一の引数xに対する非線形関数φ(x)の演算結果と逆関数φ-1(x)の演算結果とは等しいので、LUT121と128とは、同一構成のLUTとなっている。
以上の処理と並行して、EXOR回路129は、レジスタ130に格納されている値D131と符号ビット(正負を表すビット)D121との排他的論理和を演算することにより、メッセージD104の符号ビットD121どうしの乗算を行い、乗算結果D130をレジスタ130に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD104の符号ビットD121が乗算された場合、レジスタ130はリセットされる。
検査行列の1行に亘る全ての枝からのメッセージD104の符号ビットD121が乗算された乗算結果D130(i=1からdcまでのΠsign(vi))がレジスタ130に格納された場合、セレクタ131は、レジスタ130に格納されている値、すなわち、検査行列の1行に亘る全ての枝からのメッセージD104の符号ビットD121が乗算された値D131(i=1からdcまでのΠsign(vi))を選択し、値D132としてレジスタ132に出力して格納させる。レジスタ132は、格納している値D132を、値D133としてセレクタ131とEXOR回路134に供給する。
検査行列の1行に亘る全ての枝からのメッセージD104の符号ビットD121が乗算された乗算結果D130(i=1からdcまでのΠsign(vi))がレジスタ130に格納される直前までは、セレクタ131は、レジスタ132から供給された値D133を選択し、レジスタ132に出力して再格納させる。すなわち、検査行列の1行に亘る全ての枝からのメッセージD104(メッセージvi)の符号ビットD121が乗算されるまで、レジスタ132は、前回格納した値を、セレクタ131とEXOR回路134に供給する。
一方、FIFOメモリ133は、レジスタ132から新たな値D133(i=1からdcまでのΠsign(vi))がEXOR回路134に供給されるまでの間、符号ビットD121を遅延し、1ビットの値D134としてEXOR回路134に供給する。EXOR回路134は、レジスタ132から供給された値D133と、FIFOメモリ133から供給された値D134との排他的論理和を演算することにより、値D133を、値D134で除算し、除算結果を除算値D135として出力する。すなわち、EXOR回路134は、検査行列の1行に亘る全ての枝からのメッセージD104の符号ビットD121(sign(vi))の乗算値を、求めたい枝からのメッセージD104の符号ビットD121(sign(vi))で除算して、その除算値(i=1からdc-1までのΠsign(vi))を除算値D135として出力する。
そして、チェックノード計算器103では、LUT128から出力された演算結果D129を下位ビットとするとともに、EXOR回路134から出力された除算値D135を最上位ビット(符号ビット)とするビット列がメッセージD105(メッセージuj)として、出力ポートP112から出力される。
以上のように、チェックノード計算器103では、式(7)の演算が行われ、メッセージ(チェックノードメッセージ)ujが求められる。
なお、図示しないが、図8の復号装置では、復号の最終段(例えば、あらかじめ定められた繰り返し復号の回数Nだけ行われるバリアブルノード演算及びチェックノード演算のうちの最後に行われるバリアブルノード演算)において、式(1)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が、最終的な復号結果として出力される。
図8の復号装置によれば、メッセージメモリ104(図8)、バリアブルノード計算器102(図9)のFIFOメモリ155、チェックノード計算器103(図10)のFIFOメモリ127及び133の容量さえ足りれば、様々な検査行列のLDPC符号を復号することができる。
図8の復号装置を繰り返し用いて復号する場合には、チェックノード計算とバリアブルノード計算を交互に行う必要があるため、1回復号するのにメッセージの数の2倍のクロック数が必要となる。但し、検査行列の構造を持つ LDPC符号の場合、各ノード計算器をP個持つ事で、1/P のクロック数で復号させることが可能になる。
以下、LDPCの単位行列毎にパラレルにノード演算を行う構成を有するLDPC符号の復号装置について説明する。なお、以下、かかる演算を、パリティパラレルの復号(partly parallel decoding)と称する。
パリティパラレルの復号を行うLDPC符号の復号装置において、P×Pの単位行列、その1のうち1個から数個が0になった行列、その cyclicshift、それらの複数の和、P×Pの0行列の組合せで表わすことができる検査行列を持つLDPC符号を復号する際には、チェックノード演算とバリアブルノード演算とをP個同時に行うことが可能になる。
例えば図11は、6×6の単位行列、その 1 のうち1 個が 0 になった行列、それらの cyclic shift、それらの和、6×6の 0 行列の組み合わせで表わされる検査行列Hの一例を示している。なお、この符号は符号化率2/3、符号長108とされている。
さらに、以下、別個のバリアブルノード計算器とチェックノード計算器とを採用する代わりに、チェックノード演算とバリアブルノード演算との両演算を同一回路で切り替えて処理できるノード計算器を採用した場合の例として、パリティパラレルの復号を説明する。
図12は、LDPC符号の復号であって、ノード計算器を用いてパリティパラレルの復号を行う復号装置の構成例を示している。ただし、図12の例では、LDPC符号として上述した図11の符号を復号することが想定されている。
図8の復号装置は、受信データメモリ200、メッセージメモリ201、P=6個のノード計算器210−1乃至210−6を含むメッセージ計算部202、制御部203からなる。
なお、以下、ノード計算器210−1乃至210−6を個々に区別する必要が無い場合、これらをまとめて、ノード計算器210と称する。
受信データメモリ200には、送信されてきたLDPC符号を受信することにより得られる、符号の0(又は1)らしさを表す対数尤度比である受信データ(LDPC符号)D200が供給され、受信データメモリ200は、その受信データD200を格納(記憶)する。
バリアブルノード演算時には、受信データメモリ200は、制御部203から供給される制御信号に従って、記憶している受信データを読み出し、受信データD201として、メッセージ計算部202のノード計算器210に供給する。
メッセージメモリ201は、制御部203の制御に基づいてメッセージデータを格納し、また適宜読み出すメモリである。すなわち、メッセージメモリ201は、ノード計算器210にメッセージD202,D203を適宜供給し、また、ノード計算器210の出力メッセージD204をメモリに適宜格納する。メッセージメモリ201は、2つのメッセージデータを同時に読み出すことができるように、独立に制御可能な2つ以上のメモリで構成されている。
メッセージ計算部202の各ノード計算器210は、バリアブルノード演算とチェックノード演算とを切り替えて処理することが可能な演算器である。
すなわち、バリアブルノード演算時には、ノード計算器210は、メッセージメモリ201から供給されるメッセージD202,D203と受信データメモリ200から供給される受信データD201を用いて、式(1)等に従ってバリアブルノード演算を行い、そのバリアブルノード演算の結果得られたメッセージ(バリアブルノードメッセージ)viを、メッセージD204として、メッセージメモリ201に供給する。
また、チェックノード演算時には、ノード計算器210は、メッセージメモリ201から供給されるメッセージD202,D203を用いて、式(7)等に従ってチェックノード演算を行い、そのチェックノード演算によって求められたメッセージ(チェックノードメッセージ)ujを、メッセージD204として、メッセージメモリ201に供給する。
ここでは、単位行列あたりのバリアブルノード 6個をパラレルに演算すべく、P=6個のノード計算器210−1乃至210−6が設けられている。例えば、1受信データ当りのビット数mを6とした場合、単位行列が6 ×6のサイズとなるので、受信データメモリ200は、図12に示されるように、1wordあたり36bitのRAMで構成されている。ノード演算は、単位行列あたりパラレルに行われるので、受信データメモリ200から単位行列分のデータが同時に各ノード演算器210−1乃至210−6に送られる。
図13は、式(1)に従ったバリアブルノード演算と、式(7)に従ったチェックノード演算とを相互に切り替えて行う図12のノード計算器210の構成例を示している。
ノード計算器210は、外部からメッセージ(データ)が供給(入力)される入力ポートとして、3つの入力ポートP301,P302,P303を有し、外部にメッセージを供給(出力)するポートとして、1つの出力ポートP304を有している。
すなわち、入力ポートP301には、図12の受信データメモリ200から読み出された受信データD201が供給される。また、入力ポートP302,P303には、メッセージメモリ201から読み出されたメッセージD202,D203が供給される。そして、後述するメッセージD321が、出力メッセージD204として出力ポートP304から出力されてメッセージメモリ201に供給される。
図13のノード計算器210は、セレクタ301,311,316を有している。これらのセレクタ301,311,316が“v”の側を選択した場合には、図13のノード計算器210はバリアブルノード演算を行うことになる。これに対して、セレクタ301,311,316が“c”の側を選択した場合には、図13のノード計算器210はチェックノード演算を行うことになる。
まず、バリアブルノード演算を行う場合の動作の観点から、図13のノード計算器210の説明をする。
メッセージメモリ201から供給される 検査行列の1列に対応するチェックノードからのメッセージD202が入力ポートP302を介して、メッセージD301(メッセージuj)として一つずつ入力され、セレクタ301を通過してメッセージD306として加算器302に入力される。加算器302において、このメッセージD306に対して、レジスタ303に格納してあるデータD307が加算されて、その加算値がレジスタ303に再格納される。このように、データD307は、メッセージD301(メッセージuj)の積算値となる。
1列分のメッセージD301(メッセージuj)が積算されると、その積算値D307(j=1からdvまでのΣuj)はセレクタ304を通過して、レジスタ305に格納される。
また、ポートP302に入力されたメッセージD301(メッセージuj)と同じ値が再びメッセージメモリ201からメッセージD203として読み出されて、入力ポートP303を介して、遅延入力メッセージD302として、再び入力される。
遅延入力メッセージD302は、セレクタ311を通過して、減算器312においてレジスタ305に格納されている積算メッセージD308から減算されて、その減算値D316(j=1からdv-1までのΣuj)が加算器313に供給される。加算器313にはまた、受信データメモリ200からの受信データD201(u0i)が、入力ポートP301を介して受信データD300として供給される。そこで、加算器313において、減算値D316(j=1からdv-1までのΣuj)に対して、受信データD300 (u0i)が加算され、その加算値D317(j=1からdv-1までのΣuj+u0i)がセレクタ316を通過して、メッセージD321となる。このメッセージD312が、出力メッセージD204として出力ポートP304から出力されてメッセージメモリ201に供給される。
以上の内容を換言すると、図13のノード計算器210は、バリアブルノードに繋がっている全てのチェックノードからのメッセージと受信データの和から、求めたいチェックノードからのメッセージを引いて、求めたい枝 (edge)へのメッセージを計算することで、式(1)の演算を実現している。
次に、チェックノード演算を行う場合の動作の観点から、図13のノード計算器210の説明をする。
メッセージメモリ201から供給される 検査行列の1行に対応するバリアブルノードからのメッセージD202が入力ポートP302を介して、メッセージD301(メッセージvi)として一つずつ入力され、その絶対値D303(|vi|)がLUT300に供給される。
LUT300は、そこに入力される値を引数xとして、式(7)のチェックノード演算における非線形関数φ(x)の演算結果を出力するLUTであり、絶対値D303(|vi|)の供給に対して、非線形関数φ(|vi|)の演算を行った演算結果D305(φ(|vi|))を読み出す。
この演算結果D305(φ(|vi|))は、セレクタ301を通過してメッセージD306として加算器302に入力される。加算器302において、このメッセージD306に対して、レジスタ303に格納してあるデータD307が加算されて、その加算値がレジスタ303に再格納される。このように、データD307は、演算結果D305(φ(|vi|))の積算値となる。
1行分のメッセージD301(メッセージvi)の各演算結果D305(φ(|vi|))が積算されると、その積算値D307(i=1からdcまでのΣφ(|vi|))はセレクタ304を通過して、レジスタ305に格納される。
また、ポートP302に入力されたメッセージD301(メッセージvi)と同じ値が再びメッセージメモリ201からメッセージD203として読み出されて、入力ポートP303を介して、遅延入力メッセージD302として、再び入力される。
遅延入力メッセージD302は、入力メッセージD301に対するLUT300の演算と同様に、LUT310において、その絶対値 D312(|vi|)の供給に対して、非線形関数φ(|vi|)の演算が行われ、その演算結果D314(φ(|vi|))が読み出される。
この演算結果D314(φ(|vi|))は、セレクタ311を通過してメッセージD315として減算器312に入力される。
減算器312において、レジスタ305に格納されている積算メッセージD308から、メッセージD315が減算され、その減算値D316(i=1からdc-1までのΣφ(|vi|))はLUT314に提供される。
LUT314は、そこに入力される値を引数xとして、式(7)のチェックノード演算における非線形関数φ(x)の逆関数φ-1(x)の演算結果を出力するLUTであり、減算器312からの減算値D316(i=1からdc-1までのΣφ(|vi|))の供給に対して、逆関数φ-1(Σφ(|vi|))の演算を行った演算結果D318(φ-1(Σφ(|vi|)))を出力する。
以上の処理と並行して、各メッセージD301の正負を表す符号ビット(sign bit)D304 (sign(vi))と、レジスタ307に格納されている値D310との排他的論理和がEXOR回路306において演算されることで、その演算結果D309がレジスタ307に再格納される。
レジスタ307において、1行分の符号ビットが積算されたところで、その積算値D310(i=1からdcまでのΠsign(vi))がセレクタ308を通過して、レジスタ309に格納される。
また、積算に用いられた値D304(sign(vi))は遅延入力メッセージの符号ビットD313 として再度入力ポートP303から入力され、EXOR回路315に入力される。この符号ビットD313と、レジスタ309の積算値D311との排他的論理和がEXOR回路315において演算されることで、その演算結果、即ちi=1からdc-1までのΠsign(vi)が符号ビットD319として出力される。
最終的に、LUT314の演算結果D318(φ-1(Σφ(|vi|)))に対して、この符号ビットD319が付加された値D320が、セレクタ316を通過してメッセージD321となる。このメッセージD312が、出力メッセージD204として出力ポートP304から出力されてメッセージメモリ201に供給される。
以上の内容を換言すると、図13のノード計算器210は、チェックノードに繋がっている全てのバリアブルノードからのメッセージの和から、求めたいバリアブルノードからのメッセージを引くことで、式(7)の演算を実現している。
ところで、バリアブルノード演算(式(1))とチェックノード演算(式(7))とは、u'j =φ(|uj|) × sign(uj)と置き換えることで、次の式(9),式(10)のように書き直すことができる。
ここで、φ(x)=φ-1(x)である。すなわち、バリアブルノード演算(式(9))とチェックノード演算(式(10))のどちらの演算も入力データの絶対値に対してφ(x)の演算が行われることになる。そこで、チェックノード演算の場合には絶対値での積算を行い、別に求めた符号をかけて出力メッセージを計算することができる。一方、バリアブルノード演算の場合には符号ビットも含めて加算を行い、更に受信データを加算して出力メッセージとすることができる。
図14は、式(9)に従ったバリアブルノード演算と、式(10)に従ったチェックノード演算とを相互に切り替えて行う図12のノード計算器210の構成例を示している。
ノード計算器210は、外部からメッセージ(データ)が供給(入力)される入力ポートとして、3つの入力ポートP601,P602,P603を有し、外部にメッセージを供給(出力)するポートとして、1つの出力ポートP604を有している。
すなわち、入力ポートP601には、図12の受信データメモリ200から読み出された受信データD201が供給される。また、入力ポートP602,P603には、メッセージメモリ201から読み出されたメッセージD602,D603が供給される。そして、後述するメッセージD622が、出力メッセージD204として出力ポートP604から出力されてメッセージメモリ201に供給される。
図14のノード計算器210は、セレクタ601,611,615を有している。これらのセレクタ601,611,615が“v”の側を選択した場合には、図14のノード計算器210はバリアブルノード演算を行うことになる。これに対して、セレクタ601,611,615が“c”の側を選択した場合には、図14のノード計算器210はチェックノード演算を行うことになる。
まず、バリアブルノード演算を行う場合の動作の観点から、図14のノード計算器210の説明をする。
メッセージメモリ201から供給される 検査行列の1列に対応するチェックノードからのメッセージD202が入力ポートP602を介して、メッセージD601(メッセージu'j)として一つずつ入力される。その絶対値D603 (|u'j|)を引数xとするφ-1(x)の演算がLUT600にて行われ、その演算結果D605 (|uj|)に符号ビットD604(sign(uj))がかけられた値D606(メッセージuj)がセレクタ601を通過して、値D607として加算器602に供給される。この値D607は、加算器602において、レジスタ603に格納されていたデータD608と加算されて、レジスタ 603に再格納される。このように、データD608は、メッセージD607(メッセージuj)の積算値となる。
1列分のメッセージD607(メッセージuj)が積算されると、その積算値D608(j=1からdvまでのΣuj)はセレクタ604を通過して、レジスタ605に格納される。
また、ポートP602に入力されたメッセージD601(メッセージu'j)と同じ値が再びメッセージメモリ201からメッセージD203として読み出されて、入力ポートP603を介して、遅延入力メッセージD602として、再び入力される。
遅延入力メッセージD602のうちの、絶対値D613(|u'j|)を引数xとするφ-1(x)の演算がLUT610にて行われ、その演算結果D615(|uj|)に符号ビットD614(sign(uj))がかけられた値D616(メッセージuj)がセレクタ611を通過して、値D617として減算器612に供給される。
減算器612において、レジスタ605に格納されている積算メッセージD609 から、この値D617が減算されて、その減算値D618(j=1からdv-1までのΣuj)が加算器613に供給される。加算器613にはまた、受信データメモリ200からの受信データD201(u0i)が、入力ポートP601を介して受信データD600として供給される。そこで、加算器613において、減算値D618(j=1からdv-1までのΣuj)に対して、受信データD600 (u0i)が加算され、その加算値D619(j=1からdv-1までのΣuj+u0i)がセレクタ615を通過して、メッセージD622となる。このメッセージD622が、出力メッセージD204として出力ポートP604から出力されてメッセージメモリ201に供給される。
以上の内容を換言すると、図14のノード計算器210は、バリアブルノードに繋がっている全てのチェックノードからのメッセージと受信データの和から、求めたいチェックノードからのメッセージを引いて、求めたい枝(edge)へのメッセージを計算することで、式(9)の演算を実現している。
次に、チェックノード演算を行う場合の動作の観点から、図14のノード計算器210の説明をする。
メッセージメモリ201から供給される 検査行列の1行に対応するバリアブルノードからのメッセージD202が入力ポートP602を介して、メッセージD601(メッセージvi)として一つずつ入力され、その絶対値D603(|vi|)がLUT600に供給される。その絶対値D603 (|vi|)を引数xとするφ(x)の演算がLUT600にて行われ、その演算結果D605 (φ|vi|)がセレクタ601を通過して、値D607として加算器602に供給される。この値D607は、加算器602において、レジスタ603に格納されていたデータD608と加算されて、レジスタ 603に再格納される。このように、データD608は、演算結果D607(φ(|vi|))の積算値となる。
1行分のメッセージD601(メッセージvi)の各演算結果D607(φ(|vi|))が積算されると、その積算値D608(i=1からdcまでのΣφ(|vi|))はセレクタ604を通過して、レジスタ605に格納される。
また、ポートP602に入力されたメッセージD601(メッセージvi)と同じ値が再びメッセージメモリ201からメッセージD203として読み出されて、入力ポートP603を介して、遅延入力メッセージD602として、再び入力される。
遅延入力メッセージD602は、入力メッセージD601に対するLUT600の演算と同様に、LUT610において、その絶対値 D613(|vi|)を引数xとするφ(x)の演算が行われ、その演算結果D615(φ(|vi|))が読み出される。
この演算結果D615(φ(|vi|))は、セレクタ611を通過してメッセージD617として減算器612に入力される。
減算器612において、レジスタ605に格納されている積算メッセージD609から、メッセージD617が減算され、その減算値D618(i=1からdc-1までのΣφ(|vi|))が出力される。
以上の処理と並行して、各メッセージD601の正負を表す符号ビット(sign bit)D604 (sign(vi))と、レジスタ607に格納されている値D611との排他的論理和がEXOR回路606において演算されることで、その演算結果D610がレジスタ607に再格納される。
レジスタ607において、1行分の符号ビットが積算されたところで、その積算値D611(i=1からdcまでのΠsign(vi))がセレクタ608を通過して、レジスタ609に格納される。
また、積算に用いられた値D604(sign(vi))は遅延入力メッセージの符号ビットD614として再度入力ポートP603から入力され、EXOR回路614に入力される。この符号ビットD614と、レジスタ609の積算値D612との排他的論理和がEXOR回路614において演算されることで、その演算結果、即ちi=1からdc-1までのΠsign(vi)が符号ビットD620として出力される。
最終的に、減算器612からの減算値D618(i=1からdc-1までのΣφ(|vi|))に対して、この符号ビットD620が付加された値D621が、セレクタ615を通過してメッセージD622となる。このメッセージD622が、出力メッセージD204として出力ポートP604から出力されてメッセージメモリ201に供給される。
以上の内容を換言すると、図14のノード計算器210は、チェックノードに繋がっている全てのバリアブルノードからのメッセージの和から、求めたいバリアブルノードからのメッセージを引くことで、式(10)の演算を実現している。
さらに、バリアブルノード演算(式(1))と チェックノード演算(式(7))は、v'i =φ(|vi|)×sign(vi)と置き換えることで、次の式(12),式(13)のように書き直すことができる。なお、式(11)は、式(12)との比較を容易にすべく、式(1)を再度書いたものである。
ここで、φ(x)=φ-1(x)である。すなわち、バリアブルノード演算(式(12))とチェックノード演算(式(13))のどちらの演算も入力データの絶対値に対してφ(x)の演算が行われることになる。そこで、チェックノード演算の場合には入力データに対して絶対値での積算行い、そのφ(x)の演算を行った後に、別に求めた符号ビットをかけて出力メッセージを計算することができる。一方、バリアブルノード演算の場合には入力データを符号ビットも含めて積算を行い、更に受信データを加算した後、その絶対値に対して、φ(x)の演算を行い、符号ビットをかけたものを出力メッセージとすることができる。
図15は、式(12)に従ったバリアブルノード演算と、式(13)に従ったチェックノード演算とを相互に切り替えて行う図12のノード計算器210の構成例を示している。
ノード計算器210は、外部からメッセージ(データ)が供給(入力)される入力ポートとして、3つの入力ポートP701,P702,P703を有し、外部にメッセージを供給(出力)するポートとして、1つの出力ポートP704を有している。
すなわち、入力ポートP701には、図12の受信データメモリ200から読み出された受信データD201が供給される。また、入力ポートP702,P703には、メッセージメモリ201から読み出されたメッセージD702,D703が供給される。そして、後述するメッセージD722が、出力メッセージD204として出力ポートP704から出力されてメッセージメモリ201に供給される。
図15のノード計算器210は、セレクタ700,705,712,715を有している。これらのセレクタ700,705,712,715が“v”の側を選択した場合には、図15のノード計算器210はバリアブルノード演算を行うことになる。これに対して、セレクタ700,705,712,715が“c”の側を選択した場合には、図15のノード計算器210はチェックノード演算を行うことになる。
まず、バリアブルノード演算を行う場合の動作の観点から、図15のノード計算器210の説明をする。
メッセージメモリ201から供給される 検査行列の1列に対応するチェックノードからのメッセージD202が入力ポートP702を介して、メッセージD701(メッセージuj)として一つずつ入力され、セレクタ700を通過してメッセージD705として加算器701に入力される。加算器701において、このメッセージD705に対して、レジスタ702に格納してあるデータD706と加算されて、レジスタ702に再格納される。このように、データD706は、メッセージD701(メッセージuj)の積算値となる。
1列分のメッセージD701(メッセージuj)が積算されると、その積算値D706(j=1からdvまでのΣuj)はセレクタ703を通過して、レジスタ704に格納される。
また、ポートP702に入力されたメッセージD701(メッセージuj)と同じ値が再びメッセージメモリ201からメッセージD203として読み出されて、入力ポートP703を介して、遅延入力メッセージD702として、再び入力される。
遅延入力メッセージD702は、セレクタ705を通過して、減算器710においてレジスタ704に格納されている積算メッセージD707から減算されて、その減算値D714(j=1からdv-1までのΣuj)が加算器711に供給される。加算器711にはまた、受信データメモリ200からの受信データD700(u0i)が、入力ポートP701を介して受信データD700として供給される。そこで、加算器711において、減算値D714(j=1からdv-1までのΣuj)に対して、受信データD700 (u0i)が加算され、その加算値D715(j=1からdv-1までのΣuj+u0i=vi)の絶対値D716(|vi|)が、セレクタ712を通過して、絶対値D718(|vi|)となりLUT713に供給される。絶対値D718(|vi|)を引数xとするφ(x)の演算がLUT713にて行われ、その演算結果D719(φ|vi|)が出力される。
以上の処理と並行して、加算部711からの加算値D715(vi)の符号ビット(sign bit)D717(sign(vi))が、セレクタ715を通過して符号ビットD721となる。この符号ビットD721が、LUT713の演算結果D719(φ|vi|)に掛け合わされてメッセージD722(φ|vi|×sign(vi))となる。このメッセージD722が、出力メッセージD204として出力ポートP704から出力されてメッセージメモリ201に供給される。
以上の内容を換言すると、図15のノード計算器210は、バリアブルノードに繋がっている全てのチェックノードからのメッセージと受信データの和から、求めたいチェックノードからのメッセージを引いて、求めたい枝(edge)へのメッセージを計算することで、式(12)の演算を実現している。
次に、チェックノード演算を行う場合の動作の観点から、図15のノード計算器210の説明をする。
メッセージメモリ201から供給される 検査行列の1行に対応するバリアブルノードからのメッセージD202が入力ポートP702を介して、メッセージD701(メッセージv'i)として一つずつ入力され、その絶対値D703(|v'i|)がセレクタ700を通過して絶対値D705として加算器701に入力される。加算器701において、この絶対値D705に対して、レジスタ702に格納してあるデータD706が加算されて、レジスタ702に再格納される。このように、データD706は、絶対値D703(|v'i|)の積算値となる。
1行分のメッセージD701(メッセージv'i)の絶対値D703(|v'i|)が積算されると、その積算値D706(i=1からdcまでのΣ|v'i|)はセレクタ703を通過して、レジスタ704に格納される。
また、ポートP702に入力されたメッセージD701(メッセージv'i)と同じ値が再びメッセージメモリ201からメッセージD203として読み出されて、入力ポートP703を介して、遅延入力メッセージD702として、再び入力される。
遅延入力メッセージD702の絶対値 D711(|v'i|)はセレクタ705を通過して、減算器710においてレジスタ704に格納されている積算メッセージD707から減算されて、その減算値D714(i=1からdc-1までのΣ|v'i|)がセレクタ712を通過して減算値D718としてLUT713に供給される。LUT713において、その減算値 D718(i=1からdc-1までのΣ|v'i|)を引数xとするφ-1(x)の演算が行われ、その演算結果D719(φ-1(Σ|v'i|) ただし、i=1からdc-1まで)が読み出される。
以上の処理と並行して、各メッセージD701の正負を表す符号ビット(sign bit)D704 (sign(v'i))と、レジスタ707に格納されている値D709との排他的論理和がEXOR回路706において演算されることで、その演算結果D708がレジスタ707に再格納される。
レジスタ707において、1行分の符号ビットが積算されたところで、その積算値D709(i=1からdcまでのΠsign(v'i))がセレクタ708を通過して、レジスタ709に格納される。
また、積算に用いられた値D704(sign(v'i))は遅延入力メッセージの符号ビットD712として再度入力ポートP703から入力され、EXOR回路714に入力される。この符号ビットD712と、レジスタ709の積算値D710との排他的論理和がEXOR回路714において演算されることで、その演算結果、即ちi=1からdc-1までのΠsign(v'i)が符号ビットD720として出力される。この符号ビットD720は、セレクタ715を通過してさらに符号ビットD721になる。
最終的に、LUT713の演算結果D719(φ-1(Σ|v'i|) ただし、i=1からdc-1まで)に対して、この符号ビットD721が付加された値が、メッセージD722となる。このメッセージD722が、出力メッセージD204として出力ポートP704から出力されてメッセージメモリ201に供給される。
以上の内容を換言すると、図15のノード計算器210は、チェックノードに繋がっている全てのバリアブルノードからのメッセージの和から、求めたいバリアブルノードからのメッセージを引くことで、式(13)の演算を実現している。
なお、図示はしないが、復号の最終段においては、バリアブルノード演算の代わりに式(5)の演算を行い、その演算結果を復号結果として出力することになる。
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 parse 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
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 parse 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符号の復号器では、メモリの回路規模はかなり大きく無視できない。特に、受信データメモリは、符号長n×1受信データ当りのビット数mの大きさのRAMが必要となり、これをいかに削減するかが課題である。
即ち、複数のノード計算器を持ち、並列演算を行う従来の受信データメモリは、並列度Pに応じたbit幅のRAMが必要となっていた。
例えば上述した図12の例では並列度P=6としたため、P=6個のノード計算器210−1乃至210−6が採用されていた。そして、1受信データ当りのビット数mが6とされたため、受信データメモリ200は、1wordあたり36bit(=P×m)のRAMで構成されていた。
ところが、実際の並列度P=6よりもさらに高くなる場合が多い。このような場合、従来の受信データメモリは、受信値一つ当たり数 bitで量子化されている軟値を格納する必要があるため、数千ビット程度のビット幅のRAMが必要になってくることもある。
一方で、物理的なRAM(RAMマクロ)は高々数百ビット程度のビット幅のRAMしか現状存在しないため、数千ビット程度のビット幅のRAMによる受信データメモリを実現するためには、これらのRAMマクロを複数個組み合わせる必要がでてくる。かかるRAMには、指定アドレスに読み書きを行うための制御回路が内蔵されていることを考慮すると、受信データメモリに使用するRAMマクロの個数が多くなればなるほど、その回路規模は増大してしまうことになる。
例えば、上述のP並列演算復号器においてP=6(図12の例)ではなくP=360を採用した場合、受信データ一つ当たりのビット数(量子化ビット数)mを同じく6bitとすると、図示はしないが、P×m=360×6=2160bit幅のRAMが、受信データメモリに必要となってくる。RAMマクロのビット幅の上限を120bit幅とすると、受信データメモリを構成するためには、RAMマクロを2160/120= 18個も使うことになる。このことが、P並列演算復号器の回路規模を増大させる要因となっていた。
また、RAMマクロの個数自体は減らすことのみを目的とした場合には、例えば、受信データ一つ当たりのビット数(量子化ビット数)mを減らすことで、かかる目的を達成できる。しかしながら、受信データ一つ当たりのビット数(量子化ビット数)mを減らすことは、その分復号性能を劣化させてしまうことになり、得策ではない。
本発明は、このような状況に鑑みてなされたものであり、復号性能を維持しつつその回路規模縮小を図ることを目的とするものである。
本発明の一側面の復号装置は、LDPC(Low Density Parity Check)符号を復号する復号装置であって、送信されてきた前記LDPC符号を受信することにより得られる受信データを記憶する受信データ記憶手段と、前記LDPC符号の復号をするためのバリアブルノードの演算、またはチェックノードの演算に用いるメッセージを記憶するメッセージ記憶手段と、前記受信データ記憶手段に記憶された受信データと、前記メッセージ記憶手段に記憶されたメッセージを用いて、前記LDPC符号を定義する検査行列に基づいて、その単位行列毎に並列的に前記バリアブルノードの演算または前記チェックノードの演算をそれぞれ行い、各演算の結果得られる各メッセージを出力するメッセージ計算手段と、前記メッセージ計算手段によって前記単位行列毎に並列的にバリアブルノードの演算が行われる際に、その演算に用いられる前記受信データをR回(Rは2以上の整数値)に分けて前記受信データ記憶手段から読み出す制御を行う制御手段とを備え、前記受信データ記憶手段は、前記受信データの前記受信データ記憶手段からの読み出し回数が1回である場合の構成と比較して、前記R回に増加した分だけビット数を減らしてワード数を増やした構成を有している。
前記R回は、前記検査行列の列のハミング重みに応じた回数である。
前記制御手段の制御により前記R回に分けられて前記受信データが前記受信データ記憶手段から読み出される毎に、読み出された分のデータを逐次格納していく格納手段をさらに備え、前記制御手段は、前記R回に分けた前記受信データの前記受信データ記憶手段からの読み出しを終了したとき、さらに、最後に読み出した分のデータと、前記格納手段に逐次格納されていた分のデータとをあわせて、前記受信データとして前記メッセージ計算手段に提供する制御を行う。
本発明の一側面の復号方法およびプログラムは、本発明の一側面の上述した復号装置に対応する方法およびプログラムである。
本発明の一側面の復号装置および方法並びにプログラムにおいては、LDPC(Low Density Parity Check)符号を復号する復号装置が、送信されてきた前記LDPC符号を受信することにより得られる受信データを記憶する受信データ記憶手段と、前記LDPC符号の復号をするためのバリアブルノードの演算、またはチェックノードの演算に用いるメッセージを記憶するメッセージ記憶手段と、前記受信データ記憶手段に記憶された受信データと、前記メッセージ記憶手段に記憶されたメッセージを用いて、前記LDPC符号を定義する検査行列に基づいて、その単位行列毎に並列的に前記バリアブルノードの演算または前記チェックノードの演算をそれぞれ行い、各演算の結果得られる各メッセージを出力するメッセージ計算手段とを備えおり、前記受信データ記憶手段は、前記受信データの前記受信データ記憶手段からの読み出し回数が1回である場合の構成と比較して、その読み出し回数がR回に増加した分だけビット数を減らしてワード数を増やした構成を有している場合に、次のような処理が実行される。即ち、前記メッセージ計算手段によって前記単位行列毎に並列的にバリアブルノードの演算が行われる際に、その演算に用いられる前記受信データをR回(Rは2以上の整数値)に分けて前記受信データ記憶手段から読み出す制御が行われる。
本発明によれば、LDPC(Low Density Parity Check)符号を復号する復号装置を提供できる。特に、復号性能を維持しつつ、その回路規模を従来より縮小できるようになる。
以下に本発明の実施の形態を説明するが、請求項に記載の構成要件と、明細書または図面における具体例との対応関係を例示すると、次のようになる。この記載は、請求項に記載されている発明をサポートする具体例が、明細書または図面に記載されていることを確認するためのものである。従って、明細書または図面中には記載されているが、構成要件に対応するものとして、ここには記載されていない具体例があったとしても、そのことは、その具体例が、その構成要件に対応するものではないことを意味するものではない。逆に、具体例が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その具体例が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
さらに、この記載は、明細書または図面に記載されている具体例に対応する発明が、請求項に全て記載されていることを意味するものではない。換言すれば、この記載は、明細書または図面に記載されている具体例に対応する発明であって、この出願の請求項には記載されていない発明の存在、すなわち、将来、分割出願されたり、補正により追加される発明の存在を否定するものではない。
本発明の一側面の復号装置は、
LDPC(Low Density Parity Check)符号を復号する復号装置(例えば図20や図21の復号装置)において、
送信されてきた前記LDPC符号を受信することにより得られる受信データを記憶する受信データ記憶手段(例えば図20の受信データメモリ910や図21の受信データメモリ920)と、
前記LDPC符号の復号をするためのバリアブルノードの演算、またはチェックノードの演算に用いるメッセージを記憶するメッセージ記憶手段(例えば図20や図21のメッセージメモリ911)と、
前記受信データ記憶手段に記憶された受信データと、前記メッセージ記憶手段に記憶されたメッセージを用いて、前記LDPC符号を定義する検査行列に基づいて、その単位行列毎に並列的に前記バリアブルノードの演算または前記チェックノードの演算をそれぞれ行い、各演算の結果得られる各メッセージを出力するメッセージ計算手段(例えば図20や図21の6並列のノード計算器210−1乃至210−6からなるメッセージ計算部913)と、
前記メッセージ計算手段によって前記単位行列毎に並列的にバリアブルノードの演算が行われる際に、その演算に用いられる前記受信データをR回(Rは2以上の整数値)に分けて前記受信データ記憶手段から読み出す制御を行う制御手段(例えば、図20や図21の制御部914。ただし、図20の場合R=2であり、図21の場合R=3である)と
を備え、
前記受信データ記憶手段は、前記受信データの前記受信データ記憶手段からの読み出し回数が1回である場合の構成と比較して、前記R回に増加した分だけビット数を減らしてワード数を増やした構成を有している(図20の受信データメモリ910、図21の受信データメモリ920の各構成と、図12の従来の受信データメモリ200の構成の差異参照)。
LDPC(Low Density Parity Check)符号を復号する復号装置(例えば図20や図21の復号装置)において、
送信されてきた前記LDPC符号を受信することにより得られる受信データを記憶する受信データ記憶手段(例えば図20の受信データメモリ910や図21の受信データメモリ920)と、
前記LDPC符号の復号をするためのバリアブルノードの演算、またはチェックノードの演算に用いるメッセージを記憶するメッセージ記憶手段(例えば図20や図21のメッセージメモリ911)と、
前記受信データ記憶手段に記憶された受信データと、前記メッセージ記憶手段に記憶されたメッセージを用いて、前記LDPC符号を定義する検査行列に基づいて、その単位行列毎に並列的に前記バリアブルノードの演算または前記チェックノードの演算をそれぞれ行い、各演算の結果得られる各メッセージを出力するメッセージ計算手段(例えば図20や図21の6並列のノード計算器210−1乃至210−6からなるメッセージ計算部913)と、
前記メッセージ計算手段によって前記単位行列毎に並列的にバリアブルノードの演算が行われる際に、その演算に用いられる前記受信データをR回(Rは2以上の整数値)に分けて前記受信データ記憶手段から読み出す制御を行う制御手段(例えば、図20や図21の制御部914。ただし、図20の場合R=2であり、図21の場合R=3である)と
を備え、
前記受信データ記憶手段は、前記受信データの前記受信データ記憶手段からの読み出し回数が1回である場合の構成と比較して、前記R回に増加した分だけビット数を減らしてワード数を増やした構成を有している(図20の受信データメモリ910、図21の受信データメモリ920の各構成と、図12の従来の受信データメモリ200の構成の差異参照)。
また、本発明の一側面の復号装置は、
前記制御手段の制御により前記R回に分けられて前記受信データが前記受信データ記憶手段から読み出される毎に、読み出された分のデータを逐次格納していく格納手段)例えば図20のレジスタ912や図21のレジスタ群922)をさらに備え、
前記制御手段は、前記R回に分けた前記受信データの前記受信データ記憶手段からの読み出しを終了したとき、さらに、最後に読み出した分のデータと、前記格納手段に逐次格納されていた分のデータとをあわせて、前記受信データとして前記メッセージ計算手段に提供する制御を行う。
前記制御手段の制御により前記R回に分けられて前記受信データが前記受信データ記憶手段から読み出される毎に、読み出された分のデータを逐次格納していく格納手段)例えば図20のレジスタ912や図21のレジスタ群922)をさらに備え、
前記制御手段は、前記R回に分けた前記受信データの前記受信データ記憶手段からの読み出しを終了したとき、さらに、最後に読み出した分のデータと、前記格納手段に逐次格納されていた分のデータとをあわせて、前記受信データとして前記メッセージ計算手段に提供する制御を行う。
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
ここで、図16に示されるようなdegree(チェックノードに接続している枝数、即ちメッセージujの入力数)が2のバリアブルノード演算について考える。
かかるバリアルブルノード演算をする際の回路動作について、上述した図13のノード計算器210を用いて説明する。
図13のノード計算器210は、上述したように、チェックノード計算器としても機能するが、ここでは、バリアブルノード計算器として機能している場合について考える。
メッセージメモリ201から供給される 検査行列の1列に対応するチェックノードからのメッセージD202が入力ポートP302を介して、メッセージD301(メッセージu1 , u2)として一つずつ入力され、セレクタ301を通過してメッセージD306として加算器302に入力される。加算器302において、このメッセージD306に対して、レジスタ303に格納してあるデータD307が加算されて、レジスタ303に再格納される。
1列分のメッセージD301(メッセージu1 , u2)が積算されると、その積算値D307(u1+u2)はセレクタ304を通過して、レジスタ305に格納される。
また、ポートP302に入力されたメッセージD301(メッセージu1 , u2)と同じ値が再びメッセージメモリ201からメッセージD203として読み出されて、入力ポートP303を介して、遅延入力メッセージD302として再び入力され、セレクタ311を通過して、遅延入力メッセージD315として1つずつ減算器312に入力される。
減算器312において、レジスタ305に格納されている積算メッセージD308(u1+u2)から遅延入力メッセージD315(u1 , u2)がそれぞれ減算されて、その減算値D316(u2 , u1)が加算器313に供給される。
加算器313にはまた、受信データメモリ200からの受信データD201(u0i)が、入力ポートP301を介して受信データD300として供給される。そこで、加算器313において、減算値D316(u2 , u1)に対して、受信データD300 (u0i)が加算され、その加算値D317(u0i+u2 , u0i+u1)がセレクタ316を通過して、メッセージD321となる。このメッセージD312が、出力メッセージD204として出力ポートP304から出力されてメッセージメモリ201に供給される。
この場合、受信データD201(u0i)は、単位行列の列分同時に、各バリアブルノード演算器(図12の例ではノード計算器210−1乃至210−6)の全てに入力される必要がある。よって、従来においては、受信データメモリは、m×P[bit] n/P[word]のRAMで構成するのが一般的であった。ここで、mは、1受信データ当りのビット数であり、Pはバリアブルノード演算器の並列数であり、nは符号長である。例えば、図12の例では、m=6,P=6,n=108とされていたため、受信データメモリ200は、36(=6×6)[bit] 18(=108/6)[word]のRAMで構成されていたのである。
ここで、図16のdegreeが2のバリアブルノード演算を行う図13のノード計算器210のタイミングチャートは、図17に示されるようになる。
図17のタイミングチャートにおいて、timeはクロック(ただし、以下時刻と称する)を示し、先頭にDを付した符号は、図13の対応する符号のデータを示している。即ち、例えば、time=1におけるデータD301の項目には、u1[1]が記述されているが、このことは、1時刻目においては、図13の入力ポートP302の出力データD301は、メッセージu1[1]であることを示している。なお、メッセージu1またはu2の後の[]内の数字は、ノード番号(node num)を示している。以上のタイミングチャートの前提事項については、後述する図19についても同様に当てはまる。
なお、以下、先頭にDを付した符号を有するデータについては、その符号のみで区別することし、単にデータと称する。
また、図12の例では受信データメモリ200が採用されているが、以下、図12の例に限定せずに一般的な概念として説明するため、データD201の供給元は、符号を特につけない受信データメモリとする。
この場合、受信データメモリからの受信データの読出しは、図17のデータD300のタイミングチャート(下から2行目の各項目値)からも明らかなように、2時刻に1回Pパラレルビット(P×mビットであって、図12の例では6×6=36ビット)ずつでよいことがわかる。即ち、2時刻に1回の割合で読み出されたPパラレルビットがP個のノード演算器210に各データD300としてそれぞれ同時に入力され、かつその2時刻の間それぞれ保持ればていればよいことがわかる。換言すると、degreeが2のバリアブルノードについての受信データメモリの受信データの読出しの更新要求時刻は、2時刻となる。図示はしないが、バリアブルノードのdegreeが2よりも多くなればなるほど、この更新要求時刻はより一段と長くなっていくことは自明である。
さらに、図18に示される構成のノード計算器210を採用した場合を考える。図18のノード計算器210は、図13の構成と比較して、図13の加算器313の代わりに、セレクタ813が設けられている点が異なる。即ち、このセレクタ813には、図13のデータD300に対応するデータD800と、図13のデータD307に対応するデータD807とが入力され、その出力データが、図13の加算器302に対応する加算器802に入力される点が図13の構成とは異なる点である。
動作の観点でいえば、次の点が図13とは異なることになる。即ち、バリアブルノード演算を行う際には、図13のデータD300に対応するデータD800とは入力メッセージujであり、図13のデータD307に対応するデータD807とは受信データu0iとなる。従って、図13のノード計算器210では加算器302において、入力メッセージujのみが積算されていたのに対して、図18のノード計算器210では、対応する加算器802において、入力メッセージujと同時に受信データu0iが積算される点が異なる。図18のノード計算器210のその他の動作については、図13のノード計算器210の上述した動作と基本的に同様であるため、ここではその詳細な説明については省略する。
図16のdegreeが2のバリアブルノード演算を行う図18のノード計算器210のタイミングチャートは、図19に示されるようになる。
図19のタイミングチャートから明らかなように、degree数分の入力メッセージがデータD801として入力される期間(図19の例ではdegreeが2のため2時刻の間)、加算器802においては、はじめにデータD801として入力されるメッセージ(図19の例では、メッセージu1[k]:kは1以上の整数値)とともに受信データD800(u(k-1)i)が足し合わされてレジスタ803に格納され、その後は、データD801として入力されるメッセージ(図19の例では、メッセージu2[k])のみが、レジスタ803に格納されたデータD807と足しあわされてレジスタ803に再格納されることになる。
よって、受信データメモリからの受信データの読出しは、2時刻に1回Pパラレルビットが次の単位行列のビットに正しく更新されたものが読み出されればよいだけでなく、さらに、図18のノード計算器210に対しては、2時刻のうち1時刻だけ、対応する受信データu(k-1)iが入力されれば足り、残りの1時刻は任意のデータが入力されたとしても、図18のノード計算器210は正常に動作する、ということがわかる。
以上の内容に基づいて、本発明人は次のような手法を発明した。即ち、パリティパラレルの復号(partly parallel decoding)を伴うLDPC符号の復号を行う復号装置において、バリアブルノード演算のための受信データメモリからの単位行列分の受信データの読出しを複数回に分けることで、受信データメモリのビット数を減らしワード数を増やすという手法が、本発明人が発明した手法である。かかる手法を適用することで、受信データメモリに使用するRAMマクロの総数を減らすことができ、その結果、復号性能を維持しつつ復号装置全体の回路規模の削減を図ることができるようになる。
具体的には例えば、かかる手法が適用された復号装置、即ち、本発明が適用される復号装置の構成例が、図20に示されている。
即ち、図20は、LDPC符号の復号であって、ノード計算器を用いてパリティパラレルの復号を行う復号装置に対して本発明を適用した場合の構成例を示している。ただし、図20の例では、従来の図12の例との比較を容易なものとすべく、LDPC符号として上述した図11の符号を復号することが想定されている。
図20の復号装置は、受信データメモリ910、メッセージメモリ911、レジスタ912、メッセージ計算部913、制御部914からなる。
メッセージメモリ911、メッセージ計算部913、および、制御部914は、図12のメッセージメモリ201、メッセージ計算部202、および、制御部203と基本的に同様の機能と構成を有している。この場合、メッセージ計算部202は、例えば図13、図14、図15、図18等の各種構成を有する6つのノード計算器210−1乃至210−6を採用することができる。ただし、この場合、ノード計算器210に対しては、データD201の変わりにデータD211が、データD202の変わりにデータD212が、データD203の変わりにデータD213が、それぞれ入力されることになる。また、ノード計算器210からは、データD204の変わりにデータD214が出力されることになる。
受信データメモリ910は、(P×m)/2[bit](2×n)/P[word]のRAMから構成されている。具体的に例えば図20の例では、従来の図12の例との比較を容易なものとすべく、m=6,P=6,n=108とされているため、受信データメモリ910は、18(=(6×6)/2)[bit] 36(=(2×108)/6)[word]のRAMで構成されているのである。
この場合、受信データメモリ910には、2[word]分使ってPパラレルビットの受信データが保持されている。そして、制御部914の制御によって、2時刻使ってPパラレルビットの受信データが受信データメモリ910から読み出されて、データD211としてメッセージ計算部913に入力されて、そのバリアブルノード演算に利用される。
即ち、2時刻のうちの最初の1時刻目に、Pパラレルビットのうち先に読み出されたP/2のビットの受信データ(2[word]分のうちの先に読み出された1[word]分の受信データ)がレジスタ912に一旦格納される。次の2時刻目に、Pパラレルビットのうちの残りのP/2のビットの受信データ(2[word]分のうちの残りの1[word]分の受信データ)が受信データメモリ910から読み出されるので、この残りのP/2のビットの受信データと、レジスタ912に一旦格納されていた先のP/2のビットの受信データとが同時に、受信データD211として、メッセージ計算部913の各ノード演算器210−1乃至210−6に送信される。
この場合、バリアブルノードのdegreeが2以上のLDPC符号の復号において、上述したように、バリアブルノード演算は1ノード当り2時刻以上常に必要とする。よって、このような受信データD211の送信タイミングが2時刻単位であっても、即ち、(P×m)/2[bit](2×n)/P[word]のRAMから構成される受信データメモリ910を採用した場合であっても、復号遅延が生ずることは無い。
ただし、ノード計算器210が、例えば図13、図14、または図15の構成を有する場合、図17のデータD300のタイミングチャート(下から2行目の各項目値)から明らかなように、2時刻に渡って、同一受信データu(k-1)iが必要となる。即ち、図示はしないが、2時刻単位で受信データD211として提供される受信データu(k-1)iを、ノード計算器210内部で2時刻に渡って保持することが必要になる。
ここで、図12の従来の受信データメモリ200と、図20の受信データメモリ910との構成を比較するに、後者は前者に比較して半分のビット数のRAMで構成できていることがわかる。ただし、RAMマクロのビット幅の上限を120bit幅とすると、図20に例示された受信データメモリ910を採用したからといって直ちにRAMマクロの削減には繋がらない。
ところが、上述したように、実際の符号の並列度Pは、図20の例であるP=6よりも遥かに高くなることが多い。例えばP=360の場合、受信データ一つ当たりの量子化ビット数mを6bitとすると、復号装置全体の構成を図20のようにすることで、受信データメモリ910は、1080[bit]360[word]のRAMで構成できるようになる。この場合のRAMマクロの総数は、RAMマクロのビット幅の上限を 120bit幅とすると1080 / 120 = 9個となる。
これに対して、図12の従来の受信データメモリ200では、[発明が解決しようとする課題]の欄で上述したように、P=360の場合のRAMマクロの総数は、18個も必要となる。
よって、復号装置全体の構成を図20のようにすることで、受信データメモリ910のRAMマクロの数として9個分も削減することが可能になり、その結果、復号装置全体の回路規模の削減を図ることが可能になる。さらに、この場合、上述したように、図20の受信データD211の量子化ビット数は、従来の図12の受信データD201の量子化ビット数と何等変わることは無いので、復号性能が劣化することもない。即ち、図20の構成を採用することで、復号性能を維持しつつその回路規模縮小を図ることが可能になるのである。
さらに、図21に示されるように、RAMのビット数の大きさをより減らした受信データメモリ920を採用することもできる。即ち、図21は、本発明が適用される復号装置の構成例であって、図20とは異なる例を示している。
図21の復号装置は、図20の復号装置に対して、受信データメモリ910の代わりに受信データメモリ920を設け、レジスタ912の代わりにレジスタ群922を設けている点が差異点である。図21の復号装置のその他の構成は、図20の復号装置と基本的に同様である。
受信データメモリ920は、(P×m)/3[bit](3×n)/P[word]のRAMから構成されている。具体的に例えば図21の例では、従来の図12の例との比較を容易なものとすべく、m=6,P=6,n=108とされているため、受信データメモリ920は、12(=(6×6)/3)[bit] 54(=(3×108)/6)[word]のRAMで構成されているのである。
この場合、受信データメモリ920には、3[word]分使ってPパラレルビットの受信データが保持されている。そして、制御部914の制御によって、3時刻使ってPパラレルビットの受信データが受信データメモリ920から読み出されて、データD211としてメッセージ計算部913に入力されて、メッセージ計算部913のバリアブルノード演算に利用される。
即ち、3時刻のうちの最初の1時刻目に、Pパラレルビットのうち先に読み出されたP/3のビットの受信データ(3[word]分のうちの先に読み出された1[word]分の受信データ)がレジスタ群922のうちの図中上段のレジスタに一旦格納される。次の2時刻目に、Pパラレルビットのうちの次に読み出されたP/3のビットの受信データ(3[word]分のうちの次の1[word]分の受信データ)がレジスタ群922のうちの図中下段のレジスタに一旦格納される。そして、最後の3時刻目に、Pパラレルビットのうちの最後のP/3のビットの受信データが読みだされるので、このP/3のビットの受信データと、レジスタ群922の両レジスタにそれぞれ格納されていた2つの(P/3のビットの受信データ)とが同時に受信データD211として、メッセージ計算部913の各ノード演算器210−1乃至210−6に送信される。
この場合、バリアブルノードのdegreeが3以上のLDPC符号の復号においては、バリアブルノード演算は1ノード当り3時刻以上常に必要となる。よって、このような受信データD211の送信タイミングが3時刻単位であっても、即ち、(P×m)/3[bit](3×n)/P[word]のRAMから構成される受信データメモリ920を採用した場合であっても、復号遅延が生ずることは無い。なお、degreeが2のLDPC符号のバリアブルノード演算に限って、従来では2時刻かけて演算していたものが、3時刻かかることになる。
図20の効果として説明した場合と同様に、例えばP=360である場合について考えるに、受信データ一つ当たりの量子化ビット数mを6bitとすると、復号装置の構成を図21のようにすることで、受信データメモリ920は、720[bit]480[word]のRAMで構成できることになる。この場合のRAMマクロの総数は、RAMマクロのビット幅の上限を 120bit幅とすると720 / 120 = 6個となる。
よって、復号装置の構成を図21のようにすることで、受信データメモリ910のRAMマクロの数として、図20の構成と比較して3個分、従来の図12の構成と比較して12個分も削減することが可能になり、その結果、復号装置全体の回路規模の削減を図ることが可能になる。さらに、この場合、上述したように、図21の受信データD211の量子化ビット数は、従来の図12の受信データD201の量子化ビット数と何等変わることは無いので、復号性能が劣化することもない。即ち、図21の構成を採用することで、復号性能を維持しつつその回路規模縮小を図ることが可能になるのである。
以下同様に、図示はしないが、受信データの受信データメモリからの読み出し回数をR回(Rは2以上の整数値)とすれば、(P×m)/R[bit](R×n)/P[word]のRAMから構成された受信データメモリと、(R×n)/P[word]のデータを格納できるR-1個のレジスタ群とを備えた復号装置を採用すればよい。この場合、Rを大きくすればするほど、回路規模縮小効果の度合いはその分だけ顕著なものとなる。
ここで、バリアブルノード演算の1ノード当りに要する処理時間は、上述したように、バリアブルノードのdegreeの大きさに応じて長くなっていく。よって、バリアブルノードのdegreeが大きくなればなるほど、受信データの受信データメモリからの読み出し回数であるR回もその分だけ多くすることができ、その結果、その分だけビット数を減らした受信データメモリを採用できるようになり、ひいては、その分だけ復号装置全体の回路規模も縮小できるようになる。
また、バリアブルノードのdegreeの大きさとは、結局、検査行列の列のハミング重みを表すので、受信データの受信データメモリからの読み出し回数であるR回は、検査行列の列のハミング重みに応じて決定すると好適である。
なお、ノード計算器210自体は、上述した各種例に限定されず、その他のものを採用した場合にも、本発明を適用できることは言うまでも無い。
また、ノード計算器210の代わりに、バリアブルノード演算器とチェックノード演算器とが別の回路として構成されている復号装置に対しても、本発明を適用できることも言うまでも無い。
さらにまた、ノード計算器210を用いずにバリアブルノード演算を行う場合にも、本発明を適用できることも言うまでも無い。
なお、説明は省略するが、本発明が適用される上述した手法は、他の変調方式や符号化率が変わっても全く同様に適用することができる。即ち、本発明は他のおよび異なる実施形態を取ることができ、そのいくつかの詳細は全て本発明の精神および範囲を逸脱することなくさまざまな明白な点で修正できる。従って図面および発明の詳細な説明は本質的に例証とみなされるべきであり、限定的とみなされてはならない。
ところで、上述した一覧表示処理も含む一連の処理は、ハードウェアにより実行させることもできるし、ソフトウエアにより実行させることもできる。
上述した一連の処理をソフトウエアにより実行させる場合、本発明が適用される復号装置は、例えば、図22に示されるコンピュータで構成することもできる。
図22において、CPU(Central Processing Unit)1201は、ROM(Read Only Memory)1202に記録されているプログラム、または記憶部1208からRAM(Random Access Memory)1203にロードされたプログラムに従って各種の処理を実行する。RAM1203にはまた、CPU1201が各種の処理を実行する上において必要なデータなども適宜記憶される。
CPU1201、ROM1202、およびRAM1203は、バス1204を介して相互に接続されている。このバス1204にはまた、入出力インターフェース1205も接続されている。
入出力インターフェース1205には、キーボード、マウスなどよりなる入力部1206、ディスプレイなどよりなる出力部1207、ハードディスクなどより構成される記憶部1208、および、モデム、ターミナルアダプタなどより構成される通信部1209が接続されている。通信部1209は、インターネットを含むネットワークを介して他の装置(図示せず)との間で行う通信を制御する。
入出力インターフェース1205にはまた、必要に応じてドライブ1210が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどよりなるリムーバブルメディア1211が適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部1208にインストールされる。
一連の処理をソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、ネットワークや記録媒体からインストールされる。
このようなプログラムを含む記録媒体は、図22に示されるように、装置本体とは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク(フロッピディスクを含む)、光ディスク(CD-ROM(Compact Disk-Read Only Memory),DVD(Digital Versatile Disk)を含む)、光磁気ディスク(MD(Mini-Disk)を含む)、もしくは半導体メモリなどよりなるリムーバブルメディア(パッケージメディア)1211により構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに提供される、プログラムが記録されているROM1202や、記憶部1208に含まれるハードディスクなどで構成される。
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、その順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
また、本明細書において、システムとは、複数の装置や処理部により構成される装置全体を表すものである。
210 ノード計算部, 910 受信データメモリ, 911 メッセージメモリ, 912 レジスタ, 913 メッセージ計算部, 914 制御部, 920 受信データメモリ, 922 レジスタ群, 1201 CPU, 1202 ROM, 1203 RAM, 1208 記憶部, 1210 リムーバブルメディア
Claims (5)
- LDPC(Low Density Parity Check)符号を復号する復号装置において、
送信されてきた前記LDPC符号を受信することにより得られる受信データを記憶する受信データ記憶手段と、
前記LDPC符号の復号をするためのバリアブルノードの演算、またはチェックノードの演算に用いるメッセージを記憶するメッセージ記憶手段と、
前記受信データ記憶手段に記憶された受信データと、前記メッセージ記憶手段に記憶されたメッセージを用いて、前記LDPC符号を定義する検査行列に基づいて、その単位行列毎に並列的に前記バリアブルノードの演算または前記チェックノードの演算をそれぞれ行い、各演算の結果得られる各メッセージを出力するメッセージ計算手段と、
前記メッセージ計算手段によって前記単位行列毎に並列的にバリアブルノードの演算が行われる際に、その演算に用いられる前記受信データをR回(Rは2以上の整数値)に分けて前記受信データ記憶手段から読み出す制御を行う制御手段と
を備え、
前記受信データ記憶手段は、前記受信データの前記受信データ記憶手段からの読み出し回数が1回である場合の構成と比較して、前記R回に増加した分だけビット数を減らしてワード数を増やした構成を有している
復号装置。 - 前記R回は、前記検査行列の列のハミング重みに応じた回数である
請求項1に記載の復号装置。 - 前記制御手段の制御により前記R回に分けられて前記受信データが前記受信データ記憶手段から読み出される毎に、読み出された分のデータを逐次格納していく格納手段をさらに備え、
前記制御手段は、前記R回に分けた前記受信データの前記受信データ記憶手段からの読み出しを終了したとき、さらに、最後に読み出した分のデータと、前記格納手段に逐次格納されていた分のデータとをあわせて、前記受信データとして前記メッセージ計算手段に提供する制御を行う
請求項1に記載の復号装置。 - LDPC(Low Density Parity Check)符号を復号する復号装置であって、
送信されてきた前記LDPC符号を受信することにより得られる受信データを記憶する受信データ記憶手段と、
前記LDPC符号の復号をするためのバリアブルノードの演算、またはチェックノードの演算に用いるメッセージを記憶するメッセージ記憶手段と、
前記受信データ記憶手段に記憶された受信データと、前記メッセージ記憶手段に記憶されたメッセージを用いて、前記LDPC符号を定義する検査行列に基づいて、その単位行列毎に並列的に前記バリアブルノードの演算または前記チェックノードの演算をそれぞれ行い、各演算の結果得られる各メッセージを出力するメッセージ計算手段とを備え、
前記受信データ記憶手段は、前記受信データの前記受信データ記憶手段からの読み出し回数が1回である場合の構成と比較して、その読み出し回数がR回に増加した分だけビット数を減らしてワード数を増やした構成を有している復号装置の復号方法において、
前記メッセージ計算手段によって前記単位行列毎に並列的にバリアブルノードの演算が行われる際に、その演算に用いられる前記受信データをR回(Rは2以上の整数値)に分けて前記受信データ記憶手段から読み出す制御を行う
ステップを含む復号方法。 - LDPC(Low Density Parity Check)符号を復号する復号装置であって、
送信されてきた前記LDPC符号を受信することにより得られる受信データを記憶する受信データ記憶手段と、
前記LDPC符号の復号をするためのバリアブルノードの演算、またはチェックノードの演算に用いるメッセージを記憶するメッセージ記憶手段と、
前記受信データ記憶手段に記憶された受信データと、前記メッセージ記憶手段に記憶されたメッセージを用いて、前記LDPC符号を定義する検査行列に基づいて、その単位行列毎に並列的に前記バリアブルノードの演算または前記チェックノードの演算をそれぞれ行い、各演算の結果得られる各メッセージを出力するメッセージ計算手段とを備え、
前記受信データ記憶手段は、前記受信データの前記受信データ記憶手段からの読み出し回数が1回である場合の構成と比較して、その読み出し回数がR回に増加した分だけビット数を減らしてワード数を増やした構成を有している復号装置を制御するコンピュータに、
前記メッセージ計算手段によって前記単位行列毎に並列的にバリアブルノードの演算が行われる際に、その演算に用いられる前記受信データをR回(Rは2以上の整数値)に分けて前記受信データ記憶手段から読み出す制御を行う
ステップを含む制御処理を実行させるプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007144419A JP2008301152A (ja) | 2007-05-31 | 2007-05-31 | 復号装置および方法、並びにプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007144419A JP2008301152A (ja) | 2007-05-31 | 2007-05-31 | 復号装置および方法、並びにプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008301152A true JP2008301152A (ja) | 2008-12-11 |
Family
ID=40174249
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007144419A Pending JP2008301152A (ja) | 2007-05-31 | 2007-05-31 | 復号装置および方法、並びにプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2008301152A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8234555B2 (en) | 2007-10-19 | 2012-07-31 | Sony Corporation | Data decoding apparatus, data decoding method, data transmitting/receiving system, data receiving apparatus, data receiving method and program |
US8281205B2 (en) | 2007-10-19 | 2012-10-02 | Sony Corporation | LDPC decoding apparatus, decoding method and program |
CN111052670A (zh) * | 2017-09-01 | 2020-04-21 | 三菱电机株式会社 | 加密装置、解密装置、加密方法、解密方法、加密程序和解密程序 |
-
2007
- 2007-05-31 JP JP2007144419A patent/JP2008301152A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8234555B2 (en) | 2007-10-19 | 2012-07-31 | Sony Corporation | Data decoding apparatus, data decoding method, data transmitting/receiving system, data receiving apparatus, data receiving method and program |
US8281205B2 (en) | 2007-10-19 | 2012-10-02 | Sony Corporation | LDPC decoding apparatus, decoding method and program |
CN111052670A (zh) * | 2017-09-01 | 2020-04-21 | 三菱电机株式会社 | 加密装置、解密装置、加密方法、解密方法、加密程序和解密程序 |
CN111052670B (zh) * | 2017-09-01 | 2024-02-09 | 三菱电机株式会社 | 加密装置、解密装置、加密方法、解密方法和计算机能读取的存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4807063B2 (ja) | 復号装置、制御方法、およびプログラム | |
JP4487213B2 (ja) | 復号装置および方法、並びにプログラム | |
JP4487212B2 (ja) | 復号装置および方法、送受信システム、受信装置および方法、並びにプログラム | |
JP4224777B2 (ja) | 復号方法および復号装置、並びにプログラム | |
JP4225163B2 (ja) | 復号装置および復号方法、並びにプログラム | |
JP4595650B2 (ja) | 復号装置および復号方法 | |
JP4626827B2 (ja) | 受信装置および方法、並びにプログラム | |
JP4622654B2 (ja) | 復号装置および復号方法 | |
JP4293172B2 (ja) | 復号装置および復号方法 | |
JP2008301152A (ja) | 復号装置および方法、並びにプログラム | |
JP4285148B2 (ja) | 復号装置および復号方法、並びにプログラム | |
JP4284600B2 (ja) | 復号装置 | |
JP4729964B2 (ja) | 復号装置および復号方法 | |
JP4288582B2 (ja) | 復号装置および復号方法、並びにプログラム | |
JP2010028408A (ja) | 情報処理装置、情報処理方法、およびプログラム | |
JP4822071B2 (ja) | 復号装置および復号方法 | |
JP4780027B2 (ja) | 復号装置、制御方法、及びプログラム | |
JP4821724B2 (ja) | 復号装置および復号方法 | |
JP2007081602A (ja) | 復号装置および復号方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20100514 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20110531 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110607 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20111108 |