JP4807063B2 - 復号装置、制御方法、およびプログラム - Google Patents

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

Info

Publication number
JP4807063B2
JP4807063B2 JP2005365909A JP2005365909A JP4807063B2 JP 4807063 B2 JP4807063 B2 JP 4807063B2 JP 2005365909 A JP2005365909 A JP 2005365909A JP 2005365909 A JP2005365909 A JP 2005365909A JP 4807063 B2 JP4807063 B2 JP 4807063B2
Authority
JP
Japan
Prior art keywords
message
calculation
supplied
node
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2005365909A
Other languages
English (en)
Other versions
JP2007174027A (ja
Inventor
峰志 横川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Corp
Original Assignee
Sony Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Corp filed Critical Sony Corp
Priority to JP2005365909A priority Critical patent/JP4807063B2/ja
Priority to EP06256425A priority patent/EP1801981A3/en
Priority to US11/640,256 priority patent/US7937648B2/en
Priority to CN2006100644521A priority patent/CN101047390B/zh
Priority to KR1020060130730A priority patent/KR101283087B1/ko
Publication of JP2007174027A publication Critical patent/JP2007174027A/ja
Application granted granted Critical
Publication of JP4807063B2 publication Critical patent/JP4807063B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1131Scheduling of bit node or check node processing
    • H03M13/1137Partly parallel processing, i.e. sub-blocks or sub-groups of nodes being processed in parallel
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1111Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1111Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms
    • H03M13/1117Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms using approximations for check node processing, e.g. an outgoing message is depending on the signs and the minimum over the magnitudes of all incoming messages according to the min-sum rule
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1131Scheduling of bit node or check node processing
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1131Scheduling of bit node or check node processing
    • H03M13/1134Full parallel processing, i.e. all bit nodes or check nodes are processed in parallel
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/19Single error correction without using particular properties of the cyclic codes, e.g. Hamming codes, extended or generalised Hamming codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/65Purpose and implementation aspects
    • H03M13/6502Reduction of hardware complexity or efficient processing
    • H03M13/6505Memory efficient implementations
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/65Purpose and implementation aspects
    • H03M13/6566Implementations concerning memory access contentions

Landscapes

  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Error Detection And Correction (AREA)
  • Detection And Correction Of Errors (AREA)

Description

本発明は、復号装置、制御方法、およびプログラムに関し、特に、例えば、LDPC(Low Density Parity Check)符号を復号する復号装置の規模を削減することができるようにする復号装置、制御方法、およびプログラムに関する。
近年、例えば、移動体通信や深宇宙通信といった通信分野、及び地上波又は衛星ディジタル放送といった放送分野の研究が著しく進められているが、それに伴い、誤り訂正符号化及び復号の効率化を目的として符号理論に関する研究も盛んに行われている。
符号性能の理論的限界としては、いわゆるシャノン(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行列である場合には、符号化装置は、生成行列Gに対してkビットからなる情報メッセージ(ベクトルu)を乗算し、nビットからなる符号語c(=uG)を生成する。この符号化装置によって生成された符号語は、値が"0"の符号ビットが"+1"に、値が"1"の符号ビットが"−1"にといったようにマッピングされて送信され、所定の通信路を介して受信側において受信されることになる。
一方、LDPC符号の復号は、Gallagerが確率復号(Probabilistic Decoding)と称して提案したアルゴリズムであって、バリアブルノード(variable node(メッセージノード(message node)とも呼ばれる。))と、チェックノード(check node)とからなる、いわゆるタナーグラフ(Tanner graph)上での確率伝播(belief propagation)によるメッセージ・パッシング・アルゴリズムによって行うことが可能である。ここで、以下、適宜、バリアブルノードとチェックノードを、単に、ノードともいう。
しかしながら、確率復号においては、各ノード間で受け渡されるメッセージが実数値であることから、解析的に解くためには、連続した値をとるメッセージの確率分布そのもを追跡する必要があり、非常に困難を伴う解析を必要とすることになる。そこで、Gallagerは、LDPC符号の復号アルゴリズムとして、アルゴリズムA又はアルゴリズムBを提案している。
LDPC符号の復号は、例えば、図2に示すような手順にしたがって行われる。なお、ここでは、符号長の長さの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が求められる。
Figure 0004807063
・・・(1)
Figure 0004807063
・・・(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 0004807063
・・・(3)
Figure 0004807063
・・・(4)
ステップS12では、さらに、変数kが"1"だけインクリメントされ、ステップS13に進む。ステップS13では、変数kが所定の繰り返し復号回数N以上であるか否かが判定される。ステップS13において、変数kがN以上ではないと判定された場合、ステップS12に戻り、以下、同様の処理が繰り返される。
また、ステップS13において、変数kがN以上であると判定された場合、ステップS14に進み、式(5)に示す演算を行うことによって最終的に出力する復号結果としてのメッセージvが求められて出力され、LDPC符号の復号処理が終了する。
Figure 0004807063
・・・(5)
ここで、式(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)である。
Figure 0004807063
・・・(6)
更に、x≧0において、非線形関数φ(x)=-ln(tanh(x/2))を定義すると、その逆関数φ-1(x)は、式φ-1(x)=2tanh-1(e-x)で表されるから、式(6)は、式(7)のように書くことができる。
Figure 0004807063
・・・(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)とに分けることができる。
Figure 0004807063
・・・(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のバリアブルノード計算器103に供給する。
また、バリアブルノード演算時には、メッセージメモリ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からi=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からi=dcまでのΣφ(|vi|))が出力されるまでの間、LUT121が出力した演算結果D123(φ(|vi|))を遅延し、値D127として演算器126に供給する。演算器126は、レジスタ125から供給された値D126から、FIFOメモリ127から供給された値D127を減算し、その減算結果を、減算値D128としてLUT128に供給する。即ち、演算器126は、検査行列の1行に亘る全ての枝からのメッセージD104(メッセージvi)から求められたφ(|vi|)の積算値(i=1からi=dcまでのΣφ(|vi|))から、求めたい枝からのメッセージ(i=dcのメッセージvi)から求められたφ(|vi|)を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を減算値D128としてLUT128に供給する。
LUT128は、そこに入力される値を引数xとして、式(7)のチェックノード演算における非線形関数φ(x)の逆関数φ-1(x)の演算結果を出力するLUTであり、演算器126からの減算値D128(i=1からi=dc−1までのΣφ(|vi|))の供給に対して、逆関数φ-1(Σφ(|vi|))の演算を行った演算結果D129(φ-1(Σφ(|vi|)))を出力する。
なお、上述したように、非線形関数φ(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からi=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からi=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からi=dc−1までのΠsign(vi))を除算値D135として出力する。
そして、チェックノード計算器103では、LUT128から出力された演算結果D129を下位ビットとするとともに、EXOR回路134から出力された除算値D135を最上位ビット(符号ビット)とするビット列がメッセージD105(メッセージuj)として、出力ポートP112から出力される。
以上のように、チェックノード計算器103では、式(7)の演算が行われ、メッセージ(チェックノードメッセージ)ujが求められる。
なお、図示しないが、図8の復号装置では、復号の最終段において、式(1)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が、最終的な復号結果として出力される。
図8の復号装置によれば、メッセージメモリ104(図8)、バリアブルノード計算器102(図9)のFIFOメモリ155、チェックノード計算器103(図10)のFIFOメモリ127および133の容量さえ足りれば、様々な検査行列のLDPC符号を復号することができる。
次に、図11は、図8の復号装置のメッセージメモリ104に対するメッセージの読み書きのタイミングを示すタイミングチャートである。
図8の復号装置において、バリアブルノード演算時には、メッセージメモリ104から、チェックノードからのメッセージ(チェックノードメッセージ)ujが読み出され、メッセージ計算部101のバリアブルノード計算器102が、メッセージメモリ104から読み出されたメッセージujを用いてバリアブルノード演算を行う一方で、そのバリアブルノード演算の結果得られるメッセージ(バリアブルノードメッセージ)viが、メッセージメモリ104に書き込まれる。
また、チェックノード演算時には、メッセージメモリ104から、バリアブルノードからのメッセージ(バリアブルノードメッセージ)viが読み出され、メッセージ計算部101のチェックノード計算器103が、メッセージメモリ104から読み出されたメッセージviを用いてチェックノード演算を行う一方で、そのチェックノード演算の結果得られるメッセージ(チェックノードメッセージ)ujが、メッセージメモリ104に書き込まれる。
従って、図8の復号装置では、バリアブルノード演算時であっても、チェックノード演算時であっても、メッセージメモリ104からのメッセージの読み出しと、そのメッセージを用いたバリアブルノード演算またはチェックノード演算(以下、適宜、両方まとめて、単に、ノード演算ともいう)の結果得られるメッセージの書き込みとを同時に行う必要がある。
このため、メッセージメモリ104は、例えば、1つのバンク(メモリバンク)としての1つのRAM(Random Access Memory)#Aと、他の1つのバンクとしての他の1つのRAM#Bとから構成され、RAM#AとRAM#Bのそれぞれにアクセスすることにより、メッセージメモリ104に対しては、見かけ上、同時に、2つのアクセスを行うことが可能になっている。
図11のタイミングチャートは、メッセージメモリ104を構成するRAM#AとRAM#Bのそれぞれに対する読み書きのタイミングを表している。
図11においては、まず最初に、RAM#Aから、あるチェックノードまたはバリアブルノード(以下、適宜、両方まとめて、単に、ノードともいう)node#1の枝に対応するメッセージを求めるのに必要なメッセージが読み出され(R(node#1))、そのメッセージを用いてノード演算が行われる。そして、そのノード演算の結果得られる、ノードnode#1の枝に対応するメッセージがRAM#Aに書き込まれる(W(node#1))のと同時に、RAM#Bから、次のノードnode#2の枝に対応するメッセージを求めるのに必要なメッセージが読み出され(R(node#2))、ノード演算が行われる。
さらに、そのノード演算の結果得られる、ノードnode#2の枝に対応するメッセージがRAM#Bに書き込まれる(W(node#2))のと同時に、RAM#Aから、次のノードnode#3の枝に対応するメッセージを求めるのに必要なメッセージが読み出され(R(node#3)、ノード演算が行われる。以下、同様にして、メッセージメモリ104を構成するRAM#AとRAM#Bのそれぞれに対するメッセージの読み書きが行われていく。
なお、図8の復号装置において、チェックノード演算とバリアブルノード演算とを交互に行う繰り返し復号によって、LDPC符号を復号する場合には、1回の復号(1セットのチェックノード演算とバリアブルノード演算)に、メッセージの数の2倍のクロック数が必要となり、高速な動作が要求されることになる。
そこで、特定の検査行列のLDPC符号については、メッセージ計算部101を複数であるp個設けることによって、p個のノードについてメッセージを同時に求め、1回の復号を、図8の復号装置の場合の1/pのクロック数で行うことができる復号装置、即ち、それほど高くない動作周波数での動作が可能な復号装置が提案されている(例えば、特許文献1参照)。
特開2004-364233号公報
ところで、上述したように、メッセージ計算部101を構成するバリアブルノード計算器102(図9)には、演算器151およびレジスタ152でのメッセージの積算が終了するまでメッセージを遅延するFIFOメモリ155が設けられている。同様に、チェックノード計算器103(図10)にも、演算器122およびレジスタ123での積算が終了するまでφ(|vi|)を遅延するFIFOメモリ127と、EXOR回路129およびレジスタ130での符号ビットの相乗積の算出が終了するまで符号ビットを遅延するFIFOメモリ133が設けられている。このように、LDPC符号を復号する復号装置においては、データ(メッセージ)を遅延するためのメモリが必要となる。
特に、ノードの数(degree)が多いLDPC符号を復号する復号装置を、それほど高くない動作周波数で動作させるためには、復号装置を、複数のノードのメッセージを並列で求めるのに複数のメッセージ計算部101を設けて構成する必要があり、この場合、データを遅延するためのメモリがさらに必要となって、復号装置が大規模化することになる。
本発明は、このような状況に鑑みてなされたものであり、LDPC符号を復号する復号装置の規模を削減することができるようにするものである。
本発明の一側面の復号装置、又は、プログラムは、LDPC(Low Density Parity Check)符号を復号する復号装置であり、供給されるメッセージを用いて、前記LDPC符号の復号のためのバリアブルノードの演算と、チェックノードの演算、選択的に行い、演算の結果得られるメッセージを出力するメッセージ計算手段と、前記メッセージを記憶する記憶手段と、前記メッセージ計算手段が出力するメッセージを前記記憶手段に書き込む書き込み制御と、前記メッセージ計算手段での演算に用いられる同一のメッセージを、前記記憶手段から2回読み出し、前記メッセージ計算手段に供給する読み出し制御とを行う制御手段とを備え、前記メッセージ計算手段において、バリアブルノードの演算を行う回路と、チェックノードの演算を行う回路との一部が共有化されている復号装置、又は、復号装置として、コンピュータを機能させるためのプログラムである。
本発明の一側面の制御方は、LDPC(Low Density Parity Check)符号を復号する復号装置を制御する制御方であり、前記復号装置は、供給されるメッセージを用いて、前記LDPC符号の復号のためのバリアブルノードの演算と、チェックノードの演算、選択的に行い、演算の結果得られるメッセージを出力するメッセージ計算手段と、前記メッセージを記憶する記憶手段とを備え、前記メッセージ計算手段において、バリアブルノードの演算を行う回路と、チェックノードの演算を行う回路との一部が共有化されており、前記メッセージ計算手段が出力するメッセージを前記記憶手段に書き込む書き込み制御と、前記メッセージ計算手段での演算に用いられる同一のメッセージを、前記記憶手段から2回読み出し、前記メッセージ計算手段に供給する読み出し制御とを行うステップを含む制御方法である
本発明の一側面の復号装置、制御方法、またはプログラムにおいては、前記メッセージ計算手段が出力するメッセージを前記記憶手段に書き込む書き込み制御と、前記メッセージ計算手段での演算に用いられる同一のメッセージを、前記記憶手段から2回読み出し、前記メッセージ計算手段に供給する読み出し制御とが行われる。
本発明の一側面によれば、LDPC符号を復号する復号装置の規模を削減することができる。
また、前記メッセージ計算手段には、
バリアブルノードの演算を行うバリアブルノード計算手段(例えば、図12のバリアブルノード計算器172)と、
チェックノードの演算を行うチェックノード計算手段(例えば、図12のチェックノード計算器173)と
を設けることができる。
前記メッセージ計算手段には、バリアブルノードから出力された出力データxに対して、逆関数φ-1(x)=2tanh-1(e-x)と同一の演算結果が得られる非線形関数φ(x)=-ln(tanh(x/2))の演算結果を出力するとともに、チェックノードから出力された出力データxに対して、前記逆関数φ-1(x)の演算結果を出力するLUT(Look Up Table)(例えば、図32のLUT713)を設けることができる。
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
図12は、本発明を適用した復号装置の第1実施の形態の構成例を示すブロック図である。
なお、図中、図8の復号装置と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。即ち、図12の復号装置は、メッセージ計算部101に代えてメッセージ計算部171が設けられているとともに、制御部106に代えて制御部174が設けられている他は、図8の復号装置と同様に構成されている。
図12の復号装置は、図8の復号装置と同様に、フルシリアルの復号を繰り返し行う。
即ち、図12の復号装置は、メッセージメモリ104、受信データメモリ105、メッセージ計算部171、制御部174からなる。また、メッセージ計算部171は、バリアブルノード計算器172とチェックノード計算器173とから構成されている。
図12の復号装置では、メッセージメモリ104から、メッセージが1つずつ読み出され、メッセージ計算部171において、そのメッセージを用いて、所望の枝に対応するメッセージが計算される。そして、その計算によって求められたメッセージが、メッセージメモリ104に格納されていく。図12の復号装置では、以上の処理が繰り返し行われることで、繰り返し復号が行われる。
即ち、受信データメモリ105には、送信されてきたLDPC符号を受信することにより得られる、符号の0(または1)らしさを表す対数尤度比である受信データ(LDPC符号)D100が供給され、受信データメモリ105は、その受信データD100を格納(記憶)する。
バリアブルノード演算時には、受信データメモリ105は、制御部174から供給される制御信号にしたがって、記憶している受信データを読み出し、受信データD101として、メッセージ計算部171のバリアブルノード計算器173に供給する。
また、バリアブルノード演算時には、メッセージメモリ104は、制御部174から供給される制御信号にしたがい、記憶している同一のメッセージを2回読み出して、(注目しているバリアブルノードから出力されるバリアブルノードメッセージviを求めるのに必要なチェックノードメッセージ(注目しているバリアブルノードに接続されているチェックノードからのチェックノードメッセージ)ujを、2回繰り返し読み出して)1回目に読み出したメッセージをメッセージD102として、バリアブルノード計算器172に供給し、2回目に読み出したメッセージをメッセージDD102として、バリアブルノード計算器172に供給する。バリアブルノード計算器172は、メッセージメモリ104から供給されるメッセージD102とDD102、および受信データメモリ105から供給される受信データD101を用い、式(1)のバリアブルノード演算を行い、そのバリアブルノード演算の結果得られたメッセージ(バリアブルノードメッセージ)viを、メッセージD103として、メッセージメモリ104に供給する。
そして、メッセージメモリ104は、制御部174から供給される制御信号にしたがい、バリアブルノード計算器172から供給されるメッセージD103を記憶する(書き込む)。
一方、チェックノード演算時には、メッセージメモリ104は、制御部174から供給される制御信号にしたがって、記憶している同一のメッセージ(バリアブルノードメッセージvi)を2回読み出して(注目しているチェックノードから出力されるチェックノードメッセージujを求めるのに必要なバリアブルノードメッセージ(注目しているチェックノードに接続されているバリアブルノードからのバリアブルノードメッセージ)viを、2回繰り返し読み出して)、1回目に読み出したメッセージをメッセージD104として、チェックノード計算器173に供給し、2回目に読み出したメッセージをメッセージDD104として、チェックノード計算器173に供給する。
チェックノード計算器173は、メッセージメモリ104から供給されるメッセージD104とDD104を用いて、式(7)のチェックノード演算を行い、そのチェックノード演算によって求められたメッセージ(チェックノードメッセージ)ujを、メッセージD105として、メッセージメモリ104に供給する。
そして、メッセージメモリ104は、制御部174から供給される制御信号にしたがい、チェックノード計算器173から供給されるメッセージD105を記憶する(書き込む)。
メッセージメモリ104が記憶したチェックノード計算器173からのメッセージD105、即ち、チェックノードメッセージujは、次のバリアブルノード演算時に、メッセージD102およびDD102として読み出され、バリアブルノード計算器172に供給される。
図13は、図12のバリアブルノード計算器172の構成例を示している。
なお、図中、図9のバリアブルノード計算器102と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。
バリアブルノード計算器172は、データを遅延するためのメモリ(図9のバリアブルノード計算器102に設けられているFIFOメモリ155)を設けずに構成されている。
但し、バリアブルノード計算器172は、外部からメッセージ(データ)が供給(入力)される入力ポートとして、3つの入力ポートP101,P102,PD102を有している。
入力ポートP101には、受信データメモリ105から読み出された受信データD101が供給(入力)される。また、入力ポートP102には、メッセージメモリ104から2回読み出される同一のメッセージD102およびDD102のうちの1回目に読み出されるメッセージD102が供給(入力)され、入力ポートPD102には、2回目に読み出されるメッセージDD102が供給される。
チェックノード計算器173は、入力ポートP101,P102,PD102それぞれから入力されるメッセージを用いて、式(1)のバリアブルノード演算を行い、その結果得られるメッセージを、出力ポートP103から出力する。
即ち、入力ポートP101には、受信データメモリ105から読み出された受信データD101が供給される。また、入力ポートP102には、メッセージメモリ104から読み出されたメッセージD102(チェックノードメッセージuj)が供給される。
そして、バリアブルノード計算器172では、検査行列の各行に対応するチェックノードからのメッセージD102、即ち、メッセージメモリ104から1回目に読み出されたメッセージujが、入力ポートP102から1つずつ入力され、そのメッセージD102が、演算器151に供給される。
また、バリアブルノード計算器172では、受信データメモリ105から受信データD101が入力ポートP101から1つずつ読み込まれ、演算器157に供給される。
演算器151は、メッセージD102(メッセージuj)とレジスタ152に格納されている値D151とを加算することにより、メッセージD102を積算し、その結果得られる積算値を、レジスタ152に再格納する。なお、検査行列の1列に亘る全ての枝からのメッセージD102が積算された場合、レジスタ152はリセットされる。
検査行列の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に供給する。
一方、レジスタ154から新たな値D152(j=1からdVまでのΣuj)の出力が開始されると、即ち、レジスタ152に1列分のメッセージD102が積算された積算値(j=1からdVまでのΣuj)が格納された直後、バリアブルノード計算器172においては、メッセージD102(メッセージuj)と同一のメッセージDD102、即ち、メッセージメモリ104から2回目に読み出されたメッセージujが、入力ポートPD102から1つずつ入力され、そのメッセージDD102が、演算器156に供給される。
演算器156は、レジスタ154から供給された積算値D152から、入力ポートPD102からのメッセージDD102を減算する。即ち、演算器156では、検査行列の1列に亘る全ての枝からのメッセージD102(メッセージuj)の積算値D152(j=1からdvまでのΣuj)から、求めたい枝からのメッセージuj(j=dvのuj)としてのメッセージDD102を減算して、減算値(j=1からdv−1までのΣuj)を求め、演算器157に供給する。
演算器157は、入力ポートP101からの受信データD101と、演算器156からの減算値(j=1からdv−1までのΣuj)とを加算し、その結果得られる加算値をメッセージD103(メッセージvi)として、出力ポートP103から出力する。
以上のように、バリアブルノード計算器172では、式(1)のバリアブルノード演算が行われ、その結果得られるメッセージ(バリアブルノードメッセージ)viが、出力ポートP103から出力される。
図14は、図12のチェックノード計算器173の構成例を示している。
なお、図中、図10のチェックノード計算器103と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。
チェックノード計算器173は、データを遅延するためのメモリ(図10のチェックノード計算器103に設けられているFIFOメモリ127および133)を設けずに構成されている。
但し、チェックノード計算器173は、外部からメッセージ(データ)が供給(入力)される入力ポートとして、2つの入力ポートP111とPD111を有している。
入力ポートP111には、メッセージメモリ104から2回読み出される同一のメッセージD104およびDD104のうちの1回目に読み出されるメッセージD104が供給(入力)され、入力ポートPD111には、2回目に読み出されるメッセージDD104が供給される。
チェックノード計算器173は、入力ポートP111とPD111それぞれから入力されるメッセージを用いて、式(7)のチェックノード演算を行い、その結果得られるメッセージを、出力ポートP112から出力する。
即ち、入力ポートP111には、メッセージメモリ104から読み出されたメッセージD104(バリアブルノードメッセージuj)が供給される。
そして、チェックノード計算器173では、検査行列の各列に対応するバリアブルノードからのメッセージD104(メッセージvi)が入力ポートP111から1つずつ入力され、その最上位ビットを除く下位ビット、つまり、メッセージD104の絶対値D122(|vi|)が、LUT121に供給されるとともに、最上位ビット、つまりメッセージD104の符号ビットD121が、EXOR回路129に供給される。
LUT121は、絶対値D122(|vi|)を引数として、非線形関数φ(|vi|)の演算を行った演算結果D123(φ(|vi|))を読み出し、演算器122に供給する。
演算器122は、演算結果D123(φ(|vi|))とレジスタ123に格納されている値D124とを加算することにより、演算結果D123を積算し、その結果得られる積算値をレジスタ123に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD104の絶対値D122(|vi|)に対する演算結果D123(φ(|vi|))が積算された場合、レジスタ123はリセットされる。
検査行列の1行に亘るメッセージD104が1つずつ読み込まれ、レジスタ123に1行分の演算結果D123が積算された積算値が格納された場合、セレクタ124は、レジスタ123に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD104(メッセージvi)から求められたφ(|vi|)が積算された積算値D124(i=1からi=dcまでのΣφ(|vi|))を選択し、積算値D125として、レジスタ125に出力して格納させる。レジスタ125は、格納している積算値D125を、値D126として、セレクタ124と演算器126に供給する。
レジスタ123に1行分の演算結果D123が積算された積算値が格納される直前までは、セレクタ124は、レジスタ125から供給された値D126を選択し、レジスタ125に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD104(メッセージvi)から求められたφ(|vi|)が積算されるまで、レジスタ125は、前回積算されたφ(|vi|)の積算値を、セレクタ124と演算器126に供給する。
一方、レジスタ125から新たな値D126(i=1からi=dcまでのΣφ(|vi|))の出力が開始されると、即ち、レジスタ125に1行分の演算結果D123が積算された積算値(i=1からi=dcまでのΣφ(|vi|))が格納された直後、チェックノード計算器173において、メッセージD104(メッセージvi)と同一のメッセージDD104、即ち、メッセージメモリ104から2回目に読み出されたメッセージviが、入力ポートPD104から1つずつ入力され、そのメッセージDD104のうちのその最上位ビットを除く下位ビット、つまり、メッセージDD104の絶対値(|vi|)が、LUT135に供給されるとともに、最上位ビット、つまりメッセージDD104の符号ビットが、EXOR回路134に供給される。
LUT135は、LUT121と同様のLUTで、メッセージDD104の絶対値(|vi|)を引数として、非線形関数φ(|vi|)の演算を行った演算結果(φ(|vi|))を読み出し、演算器126に供給する。
演算器126は、レジスタ125から供給された値D126から、LUT135からの演算結果(φ(|vi|))を減算し、減算結果を、減算値D128としてLUT128に供給する。即ち、演算器126は、検査行列の1行に亘る全ての枝からのメッセージD104(メッセージvi)から求められたφ(|vi|)の積算値(i=1からi=dcまでのΣφ(|vi|))から、求めたい枝からのメッセージvi(i=dcのvi)としてのメッセージDD104から求められたφ(|vi|)を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を減算値D128としてLUT128に供給する。
LUT128は、演算器126からの減算値D128(i=1からi=dc−1までのΣφ(|vi|))を引数として、逆関数φ-1(Σφ(|vi|))の演算を行った演算結果D129(φ-1(Σφ(|vi|)))を出力する。
以上の処理と並行して、EXOR回路129は、レジスタ130に格納されている値D131と符号ビット(正負を表すビット)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からi=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に供給する。
一方、レジスタ132から新たな値D133(i=1からi=dcまでのΠsign(vi))がEXOR回路134に供給されたとき、即ち、レジスタ130に1行に亘る全ての枝からのメッセージD104の符号ビットD121が乗算された値D131(i=1からi=dcまでのΠsign(vi))が格納されたとき、上述したように、レジスタ125には、1行分の演算結果D123が積算された積算値(i=1からi=dcまでのΣφ(|vi|))が格納される。
レジスタ125に1行分の演算結果D123が積算された積算値(i=1からi=dcまでのΣφ(|vi|))が格納されると、上述したように、チェックノード計算器173において、メッセージD104(メッセージvi)と同一のメッセージDD104、即ち、メッセージメモリ104から2回目に読み出されたメッセージviが、入力ポートPD104から1つずつ入力され、そのメッセージDD104のうちのその最上位ビットを除く下位ビット、つまり、メッセージDD104の絶対値(|vi|)が、LUT135に供給されるとともに、最上位ビット、つまりメッセージDD104の符号ビットが、EXOR回路134に供給される。
EXOR回路134は、レジスタ132から供給された値D133と、入力ポートPD104からのメッセージDD104の符号ビットとの排他的論理和を演算することにより、値D133を、メッセージDD104の符号ビットで除算し、除算結果を除算値D135として出力する。即ち、EXOR回路134は、検査行列の1行に亘る全ての枝からのメッセージD104の符号ビットD121の乗算値(i=1からi=dcまでのΠsign(vi))を、求めたい枝からのメッセージviとしてのメッセージDD104の符号ビットD121(i=dcのsign(vi))で除算して、その除算値(i=1からi=dc−1までのΠsign(vi))を除算値D135として出力する。
そして、チェックノード計算器173では、LUT128から出力された演算結果D129を下位ビットとするとともに、EXOR回路134から出力された除算値D135を最上位ビット(符号ビット)とするビット列がメッセージD105(メッセージuj)として、出力ポートP112から出力される。
以上のように、チェックノード計算器173では、式(7)の演算が行われ、メッセージ(チェックノードメッセージ)ujが求められる。
なお、図示しないが、図12の復号装置では、復号の最終段において、式(1)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が、最終的な復号結果として出力される。
次に、図15のフローチャートを参照して、図12の復号装置の制御部174によるメッセージメモリ104に対するメッセージ(データ)の読み書き制御の処理について説明する。
なお、以下、適宜、ノードにおいてメッセージを求めるのに用いられる、そのノードに入力されるメッセージを、入力メッセージというとともに、ノードにおいて、入力メッセージを用いて求められて出力されるメッセージを、出力メッセージという。
ステップS101において、制御部174は、ある注目しているノード(注目ノード)から出力される出力メッセージ(注目ノードに接続している枝から出力されるメッセージ)を求めるのに必要な入力メッセージ、即ち、注目ノードに接続している枝から入力されるメッセージを読み出し、メッセージ計算部171に供給するように(入力メッセージの1回目の読み出しを行うように)、メッセージメモリ104を制御して、ステップS102に進む。
ステップS102では、制御部174は、直前のステップS101でメッセージメモリ104から読み出したのと同一の入力メッセージを読み出し、メッセージ計算部171に供給するように(入力メッセージの2回目の読み出しを行うように)、メッセージメモリ104を制御して、ステップS103に進む。
即ち、ステップS101およびS102では、メッセージ計算部171での演算(チェックノード演算またはバリアブルノード演算)に用いられる同一の入力メッセージを、メッセージメモリ104から2回読み出し、メッセージ計算部171に供給する読み出し制御が行われる。
ステップS103では、制御部174は、メッセージ計算部171がステップS101とS102でメッセージメモリ104から読み出された入力メッセージを用いて演算を行うことにより求めた出力メッセージを書き込むように、メッセージメモリ104を制御する。
即ち、ステップS103では、メッセージ計算部171が式(1)または式(7)の演算を行うことによって出力する出力メッセージをメッセージメモリ104に書き込む書き込み制御が行われる。
そして、ステップS103からステップS101に戻り、制御部174は、他のノードを新たな注目ノードとし、その新たな注目ノードから出力される出力メッセージを求めるのに必要な入力メッセージを読み出して、メッセージ計算部171に供給するように、メッセージメモリ104を制御し、以下、同様の処理を繰り返す。
メッセージメモリ104は、前述したように、RAM#AとRAM#Bとの2バンク構成になっており、制御部174は、そのRAM#AとRAM#Bのそれぞれを対象に、図15で説明した読み書き制御を行う。
即ち、図16は、図12の復号装置のメッセージメモリ104に対するメッセージの読み書きのタイミングを示すタイミングチャートである。
図16のタイミングチャートは、前述の図11のタイミングチャートと同様に、メッセージメモリ104を構成するRAM#AとRAM#Bのそれぞれに対する読み書きのタイミングを表している。
図16においては、まず最初に、あるノードnode#1からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Aからの1回目の読み出しが行われる(R1(node#1))。その読み出しの終了後、ノードnode#1からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Aからの2回目の読み出しが行われる(R2(node#1))のと同時に、次のノードnode#2からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Bからの1回目の読み出しが行われる(R1(node#2))。
ノードnode#1からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Aからの2回目の読み出しが終了し、メッセージ計算部171において、ノードnode#1からの出力メッセージが求められると、そのノードnode#1からの出力メッセージがRAM#Aに書き込まれる(W(node#1))のと同時に、ノードnode#2からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Bからの2回目の読み出しが行われる(R2(node#2))。
ノードnode#2からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Bからの2回目の読み出しが終了し、メッセージ計算部171において、ノードnode#2からの出力メッセージが求められると、そのノードnode#2からの出力メッセージがRAM#Bに書き込まれる(W(node#2))のと同時に、次のノードnode#3からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Aからの1回目の読み出しが行われる(R1(node#3))。
ノードnode#2からの出力メッセージのRAM#Bへの書き込みと、ノードnode#3からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Aからの1回目の読み出しとが終了すると、ノードnode#3からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Aからの2回目の読み出しが行われる(R2(node#3))のと同時に、次のノードnode#4からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Bからの1回目の読み出しが行われる(R1(node#4))。
ノードnode#3からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Aからの2回目の読み出しが終了し、メッセージ計算部171において、ノードnode#3からの出力メッセージが求められると、そのノードnode#3からの出力メッセージがRAM#Aに書き込まれる(W(node#3))のと同時に、ノードnode#4からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Bからの2回目の読み出しが行われる(R2(node#4))。
以下、同様にして、メッセージメモリ104を構成するRAM#AとRAM#Bのそれぞれに対するメッセージの読み書きが行われていく。
図12の復号装置によれば、メッセージ計算部171において出力メッセージを求めるのに必要な(同一の)入力メッセージを、メッセージメモリ104から2回読み出すことによって、メッセージ計算部171の内部において、入力メッセージを遅延せずに済むので、メッセージ計算部171を、データを遅延するためだけのメモリ(図9のバリアブルノード計算器102に設けられているFIFOメモリ155、並びに図10のチェックノード計算器103に設けられているFIFOメモリ127および133)を設けずに構成することができる。そして、その結果、復号装置の規模を削減することができる
なお、データを遅延するためだけのメモリ(以下、適宜、遅延メモリという)を設けずに、メッセージメモリ104から同一の入力メッセージを2回読み出す図12の復号装置におけるメッセージメモリ104に対するメッセージの読み書きのタイミング(図16)と、遅延メモリを設けて、メッセージメモリ104から入力メッセージを1回だけ読み出す図8の復号装置におけるメッセージメモリ104に対するメッセージの読み書きのタイミング(図11)とを比較して分かるように、図12の復号装置は、あるノードからの出力メッセージを求めるのに、図8の復号装置の1.5倍程度の時間を要し、その分だけ高速に動作することが要求される(高速な動作クロックを必要とする)。
しかしながら、特に、ノードすべてについて、出力メッセージを求める演算を同時(並列)に行うフルパラレルの復号(full parallel decoding)を行う復号装置や、1つでもなくすべてでもないp個のノードについて、出力メッセージを求める演算を同時に行う一部並列の復号(例えば、特許文献1に記載の復号)を行う復号装置を、遅延メモリを設けて構成した場合には、多数の遅延メモリが必要となり、装置全体の規模に大きく影響する。
かかる復号装置において、図12の復号装置のように、メッセージメモリ104から同一の入力メッセージを2回読み出して、出力メッセージを求めることにより、遅延メモリを不要とする構成を採用することにより、復号装置において多少の高速な動作が要求されることにはなるが、その代償として、極めて大きな装置規模の削減の効果を得ることができる。
なお、本明細書では、説明を簡単にするために、フルシリアルの復号装置を説明するが、図12の復号装置を含め、以下説明する復号装置の構成や処理の方法は、フルパラレルの復号を行う復号装置や、一部並列の復号を行う復号装置に適用することができ、そのような復号装置に適用した場合に、特に大きな装置規模の削減の効果を得ることができる。
ところで、図12の復号装置では、出力メッセージを求める手段としてのメッセージ計算部171を、バリアブルノード演算を行うバリアブルノード計算器172と、チェックノード演算を行うチェックノード計算器173とで構成するようにしたが、出力メッセージを求める手段は、バリアブルノード演算を行う回路と、チェックノード演算を行う回路との一部を共有化して構成し、バリアブルノード演算とチェックノード演算とを、選択的に行うようにすることができる。
そこで、次に、バリアブルノード演算を行う回路と、チェックノード演算を行う回路との一部を共有化し、かつ、遅延メモリを設けずに構成された復号装置について説明するが、その前段階の準備として、バリアブルノード演算を行う回路と、チェックノード演算を行う回路との一部が共有化され、かつ、遅延メモリが設けられた復号装置について説明する。
即ち、図17は、そのような復号装置の構成例を示すブロック図である。
なお、図中、図8の復号装置と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。即ち、図17の復号装置は、メッセージ計算部101に代えてメッセージ計算部191が設けられているとともに、制御部106に代えて制御部192が設けられている他は、図8の復号装置と同様に構成されている。
図17の復号装置は、図8の復号装置と同様に、フルシリアルの復号を繰り返し行う。
図17の復号装置では、メッセージメモリ104からメッセージ計算部191に、入力メッセージが1つずつ読み出され、メッセージ計算部191において、その入力メッセージを用いて、所望の枝に対応する出力メッセージが計算される。そして、その計算によって求められた出力メッセージが、メッセージメモリ104に格納されていく。図17の復号装置では、以上の処理が繰り返し行われ、いわゆる繰り返し復号が行われる。
即ち、受信データメモリ105には、送信されてきたLDPC符号を受信することにより得られる、符号の0(または1)らしさを表す対数尤度比である受信データ(LDPC符号)D100が供給され、受信データメモリ105は、その受信データD100を記憶する。
バリアブルノード演算時には、受信データメモリ105は、制御部192から供給される制御信号にしたがって、記憶している受信データを読み出し、受信データD101として、メッセージ計算部191に供給する。
また、バリアブルノード演算時には、メッセージメモリ104は、制御部192から供給される制御信号にしたがって、記憶しているメッセージD201を読み出し、メッセージ計算部191に供給する。さらに、バリアブルノード演算時には、制御部192は、制御信号D203として、バリアブルノード演算を指示する制御信号を、メッセージ計算部191に供給する。
メッセージ計算部191は、メッセージメモリ104から供給される入力メッセージD201と受信データメモリ105から供給される受信データD101を用い、制御部192からの制御信号D203にしたがって、式(1)のバリアブルノード演算を行い、そのバリアブルノード演算の結果得られた出力メッセージ(バリアブルノードメッセージ)viを、メッセージD202として、メッセージメモリ104に供給する。
そして、メッセージメモリ104は、以上のようにしてメッセージ計算部191から供給されるメッセージD202を記憶する。
一方、チェックノード演算時には、メッセージメモリ104は、制御部192から供給される制御信号にしたがって、記憶しているバリアブルノードメッセージviを、入力メッセージD201として読み出し、メッセージ計算部191に供給する。
さらに、チェックノード演算時には、制御部192は、制御信号D203として、チェックノード演算を指示する制御信号を、メッセージ計算部191に供給する。
メッセージ計算部191は、メッセージメモリ104から供給される入力メッセージD201を用い、制御部192からの制御信号D203にしたがって、式(7)のチェックノード演算を行い、そのチェックノード演算にって求められた出力メッセージ(チェックノードメッセージ)ujを、メッセージD202として、メッセージメモリ104に供給する。
そして、メッセージメモリ104は、以上のようにしてメッセージ計算部191から供給されるメッセージD202を記憶する。
メッセージメモリ104が記憶したメッセージ計算部191からのチェックノードメッセージujとしてのメッセージD202は、次のバリアブルノード演算時に、メッセージD201として読み出され、メッセージ計算部191に供給される。
次に、図18は、図17のメッセージ計算部191の構成例を示している。
メッセージ計算部191は、外部からメッセージ(データ)が供給(入力)される入力ポートとして、2つの入力ポートP101とP201を有し、外部にメッセージを供給(出力)するポートとして、1の出力ポートP202を有している。さらに、メッセージ計算部191は、外部から制御信号が供給(入力)される入力ポートとして、1つの入力ポートP203を有している。
メッセージ計算部191は、入力ポートP201から入力されるメッセージ、さらには、必要に応じて、入力ポートP101から入力されるメッセージ(受信データ)を用い、入力ポートP203から入力される制御信号D203にしたがって、式(1)のバリアブルノード演算または式(7)のチェックノード演算を選択的に行い、その結果得られるメッセージを、出力ポートP202から出力する。
即ち、入力ポートP101には、受信データメモリ105から読み出された受信データD101が供給される。また、入力ポートP201には、メッセージメモリ104から読み出されたメッセージD201(チェックノードメッセージujまたはバリアブルノードメッセージvi)が供給される。さらに、入力ポートP203には、制御部192からの制御信号D203が供給される。
そして、入力ポートP101に供給された受信データD101は、演算器313に供給され、入力ポートP201に供給されたメッセージD201は、セレクタ301のv端子に供給される。さらに、入力ポートP201に供給されたメッセージD201のうちの最上位ビットを除く下位ビット、即ち、メッセージD201の絶対値は、値D303として、LUT300に供給され、メッセージD201のうちの最上位ビット、即ち、メッセージD201の符号ビットは、値D304として、EXOR回路306とFIFOメモリ320に供給される。
また、入力ポートP203に供給された制御信号D203は、セレクタ301および316に供給される。
セレクタ301および316は、v端子とc端子とを有し、制御信号D203にしたがい、v端子またはc端子のうちのいずれかに供給される値を選択して、後段に出力する。即ち、セレクタ301および316は、制御信号D203がバリアブルノード演算を指示する制御信号である場合には、v端子に供給される値を選択して後段に出力し、制御信号D203がチェックノード演算を指示する制御信号である場合には、c端子に供給される値を選択して後段に出力する。
その結果、メッセージ計算部191は、バリアブルノード演算時には、実質的に、図19に示す構成となって、バリアブルノード演算を行い、チェックノード演算時には、実質的に、図20に示す構成となって、チェックノード演算を行う。
即ち、図19は、バリアブルノード演算時のメッセージ計算部191の実質的な構成例を示している。
なお、上述したように、バリアブルノード演算時には、セレクタ301および316はv端子を選択するが、図19では、図18に図示した構成のうちの、セレクタ301および316がv端子を選択することによってバリアブルノード演算時に(実質的に)機能しない部分(バリアブルノード演算に関係がない部分)の図示を省略してある。
バリアブルノード演算時においては、入力ポートP101には、受信データメモリ105から1つずつ読み出された受信データD101が供給される。また、入力ポートP201には、メッセージメモリ104から1つずつ読み出された、検査行列の各行に対応するチェックノード(出力メッセージviを求めようとしているバリアブルノードに対応する列の、各行に対応するチェックノード)からのチェックノードメッセージujが、順次、メッセージD201として供給される。
入力ポートP101に供給された受信データD101は、演算器313に供給される。
また、入力ポートP201に供給されたメッセージD201(メッセージuj)は、セレクタ301のv端子に供給され、バリアブルノード演算時にはv端子を選択しているセレクタ301から、メッセージD306として、演算器302とFIFOメモリ320に供給される。
演算器302は、セレクタ301からのメッセージD306(メッセージuj)とレジスタ303に格納されている値D307とを加算することにより、メッセージD306を積算し、その結果得られる積算値を、レジスタ303に再格納する。なお、検査行列の1列に亘る全ての枝からのメッセージD306が積算された場合、レジスタ303はリセットされる。
検査行列の1列に亘るメッセージD306が1つずつ読み込まれ、レジスタ303に1列分のメッセージD306が積算された値が格納された場合、即ち、レジスタ303に、検査行列の1列に亘る全ての枝からのメッセージD306(メッセージuj)が積算された積算値(j=1からdVまでのΣuj)が格納された場合、セレクタ304は、レジスタ303に格納されている値、即ち、検査行列の1列に亘る全ての枝からのメッセージD306(メッセージuj)が積算された積算値D307(j=1からdVまでのΣuj)を選択し、レジスタ305に出力して格納させる。
レジスタ305は、格納している値D307を、値D308として、セレクタ304と演算器312に供給する。レジスタ303に1列分のメッセージD306が積算された値が格納される直前までは、セレクタ304は、レジスタ305から供給された値D308を選択し、レジスタ305に出力し再格納させる。即ち、検査行列の1列に亘る全ての枝からのメッセージD306(メッセージuj)が積算されるまで、レジスタ305は、前回積算された値を、セレクタ304と演算器312に供給する。
一方、FIFOメモリ320は、レジスタ305から新たな値D308(j=1からdVまでのΣuj)が出力されるまでの間、セレクタ301が出力したチェックノードからのメッセージD306を遅延し、値D315として演算器312に供給する。演算器312は、レジスタ305から供給された値D308から、FIFOメモリ320から供給された値D315を減算する。即ち、演算器312は、検査行列の1列に亘る全ての枝からのメッセージD306(メッセージuj)の積算値D308(j=1からdVまでのΣuj)から、求めたい枝からのメッセージD315(uj)を減算して、減算値D316(j=1からdv−1までのΣuj)を求め、演算器313に供給する。
演算器313は、入力ポートP101からの受信データD101と、演算器312からの減算値D316(j=1からdv−1までのΣuj)とを加算し、その結果得られる加算値D317(バリアブルノードメッセージvi)を、セレクタ316のv端子に供給する。
セレクタ316は、バリアブルノード演算時にはv端子を選択しており、そのv端子に供給される演算器313からの加算値D317を、メッセージD202(メッセージvi)として、出力ポートP202から出力する。
以上のように、セレクタ301および304がv端子を選択しているメッセージ計算部191では、式(1)のバリアブルノード演算が行われ、その結果得られるメッセージ(バリアブルノードメッセージ)viが、出力ポートP202から出力される。
図20は、チェックノード演算時の図18のメッセージ計算部191の実質的な構成例を示している。
なお、上述したように、チェックノード演算時には、セレクタ301および316はc端子を選択するが、図20では、図18に図示した構成のうちの、セレクタ301および316がc端子を選択することによってチェックノード演算時に(実質的に)機能しない部分(チェックノード演算に関係がない部分)の図示を省略してある。
チェックノード演算時においては、入力ポートP201には、メッセージメモリ104から1つずつ読み出された、検査行列の各列に対応するバリアブルノード(出力メッセージujを求めようとしているチェックノードに対応する行の、各列に対応するバリアブルノード)からのバリアブルノードメッセージviが、順次、メッセージD201として供給される。
入力ポートP201に供給されたメッセージD201(メッセージuj)のうちの最上位ビットを除く下位ビット、つまり、メッセージD201の絶対値D303(|vi|)は、LUT300に供給され、最上位ビット、つまりメッセージD201の符号ビットD304は、EXOR回路306とFIFOメモリ320にそれぞれ供給される。
LUT300は、そこに入力される値を引数xとして、式(7)のチェックノード演算における非線形関数φ(x)の演算結果を出力するLUTであり、絶対値D303(|vi|)を引数として、非線形関数φ(|vi|)の演算を行った演算結果D305(φ(|vi|))を読み出し、セレクタ301のc端子に供給する。
セレクタ301は、チェックノード演算時にはc端子を選択しており、そのc端子に供給されるLUT300からの演算結果D305(φ(|vi|))を、演算結果D306(φ(|vi|))として、演算器302とFIFOメモリ320に供給する。
演算器302は、演算結果D306(φ(|vi|))とレジスタ303に格納されている値D307とを加算することにより、演算結果D306を積算し、その結果得られる積算値をレジスタ303に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD201の絶対値D303(|vi|)に対する演算結果D306(φ(|vi|))が積算された場合、レジスタ303はリセットされる。
検査行列の1行に亘るメッセージD201が1つずつ読み込まれ、レジスタ303に1行分の演算結果D306が積算された積算値が格納された場合、セレクタ304は、レジスタ303に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD201(メッセージvi)から求められたφ(|vi|)が積算された積算値D307(i=1からi=dcまでのΣφ(|vi|))を選択し、レジスタ305に出力して格納させる。レジスタ305は、格納している積算値D307を、値D308として、セレクタ304と演算器312に供給する。
レジスタ303に1行分の演算結果D306が積算された積算値が格納される直前までは、セレクタ304は、レジスタ305から供給された値D308を選択し、レジスタ305に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD201(メッセージvi)から求められたφ(|vi|)が積算されるまで、レジスタ305は、前回積算されたφ(|vi|)の積算値を、セレクタ304と演算器312に供給する。
一方、FIFOメモリ320は、レジスタ305から新たな値D308(i=1からi=dcまでのΣφ(|vi|))が出力されるまでの間、LUT300が出力した演算結果D306(φ(|vi|))を遅延し、値D315として演算器312に供給する。演算器312は、レジスタ305から供給された値D308から、FIFOメモリ320から供給された値D315を減算し、その減算結果を、減算値D316としてLUT314に供給する。即ち、演算器312は、検査行列の1行に亘る全ての枝からのメッセージD201(メッセージvi)から求められたφ(|vi|)の積算値(i=1からi=dcまでのΣφ(|vi|))から、求めたい枝からのメッセージD201(メッセージvi)から求められたφ(|vi|)を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を減算値D316としてLUT314に供給する。
LUT314は、そこに入力される値を引数xとして、式(7)のチェックノード演算における非線形関数φ(x)の逆関数φ-1(x)の演算結果を出力するLUTであり、演算器312からの減算値D316(i=1からi=dc−1までのΣφ(|vi|))を引数として、逆関数φ-1(Σφ(|vi|))の演算を行った演算結果D318(φ-1(Σφ(|vi|)))を出力する。
なお、上述したように、非線形関数φ(x)の演算結果と逆関数φ-1(x)の演算結果とは等しいので、LUT300と314とは、同一構成のLUTとなっている。
以上の処理と並行して、EXOR回路306は、レジスタ307に格納されている値D310と符号ビット(正負を表すビット)D304との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、乗算結果D309を、レジスタ307に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD201の符号ビットD304が乗算された場合、レジスタ307はリセットされる。
検査行列の1行に亘る全ての枝からのメッセージD201の符号ビットD304が乗算された乗算結果D309(i=1からdcまでのΠsign(vi))がレジスタ307に格納された場合、セレクタ308は、レジスタ307に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD201の符号ビットD304が乗算された値D310(i=1からi=dcまでのΠsign(vi))を選択し、レジスタ309に出力して格納させる。レジスタ309は、格納している値D311を、セレクタ308とEXOR回路315に供給する。
検査行列の1行に亘る全ての枝からのメッセージD201の符号ビットD304が乗算された乗算結果D309(i=1からdcまでのΠsign(vi))がレジスタ307に格納される直前までは、セレクタ308は、レジスタ309から供給された値D311を選択し、レジスタ309に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD201(メッセージvi)の符号ビットD304が乗算されるまで、レジスタ309は、前回格納した値を、セレクタ308とEXOR回路315に供給する。
一方、FIFOメモリ320は、レジスタ309から新たな値D311(i=1からi=dcまでのΠsign(vi))がEXOR回路315に供給されるまでの間、符号ビットD304を遅延し、1ビットの値D313としてEXOR回路315に供給する。EXOR回路315は、レジスタ309から供給された値D311と、FIFOメモリ320から供給された値D313との排他的論理和を演算することにより、値D311を、値D313で除算し、除算結果を除算値D319として出力する。即ち、EXOR回路315は、検査行列の1行に亘る全ての枝からのメッセージD201の符号ビットD304(sign(vi))の乗算値(i=1からi=dcまでのΠsign(vi))を、求めたい枝からのメッセージD201の符号ビットD304(sign(vi))で除算して、その除算値(i=1からi=dc−1までのΠsign(vi))を除算値D319として出力する。
そして、メッセージ計算部191では、LUT314から出力された演算結果D318を下位ビットとするとともに、EXOR回路315から出力された除算値D319を最上位ビット(符号ビット)とするビット列D320(チェックノードメッセージuj)が、セレクタ316のc端子に供給される。
セレクタ316は、チェックノード演算時にはc端子を選択しており、そのc端子に供給されるビット列D320(メッセージuj)を、メッセージD202(メッセージvi)として、出力ポートP202から出力する。
以上のように、セレクタ301および304がc端子を選択しているメッセージ計算部191では、式(7)のチェックノード演算が行われ、その結果得られるメッセージ(チェックノードメッセージ)ujが、出力ポートP202から出力される。
なお、図示しないが、図17の復号装置では、復号の最終段において、式(1)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が、最終的な復号結果として出力される。
図17の復号装置によれば、メッセージメモリ104と、メッセージ計算部191のFIFOメモリ320の容量さえ足りれば、様々な検査行列のLDPC符号を復号することができる。
また、図17の復号装置のメッセージ計算部191(図18)では、図19と図20とを比較して分かるように、値の積算を行って積算値を出力する演算器302およびレジスタ303、積算値から、ある値を減算して減算値を出力するセレクタ304、レジスタ305、および演算器312、並びに値を遅延する遅延メモリとしてのFIFOメモリ320が、バリアブルノード演算とチェックノード演算とで共有されているので、例えば、図8の復号装置のように、独立のバリアブルノード計算器102とチェックノード計算器103とを有するメッセージ計算部101よりも回路規模を小さくすることができる。
次に、図21は、本発明を適用した復号装置の第2実施の形態の構成例を示すブロック図である。なお、図中、図17の復号装置の場合と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。即ち、図21の復号装置は、メッセージ計算部191に代えて、メッセージ計算部201が設けられているとともに、制御部192に代えて、制御部202が設けられている他は、図17の復号装置と同様に構成されている。
図21の復号装置では、メッセージ計算部201が、図17の復号装置のメッセージ計算部191と同様に、バリアブルノード演算を行う回路と、チェックノード演算を行う回路との一部を共有する構成となっている。さらに、図21の復号装置は、バリアブルノード演算とチェックノード演算とを行うメッセージ計算部201が、遅延メモリ(図18のメッセージ計算部191のFIFOメモリ320に相当するメモリ)を設けずに構成されている。
図21の復号装置では、メッセージメモリ104からメッセージ計算部201に、入力メッセージが1つずつ読み出され、メッセージ計算部201において、その入力メッセージを用いて、所望の枝に対応する出力メッセージが計算される。そして、その計算によって求められた出力メッセージが、メッセージメモリ104に格納されていく。図21の復号装置では、以上の処理が繰り返し行われ、フルシリアルの繰り返し復号が行われる。
即ち、受信データメモリ105には、送信されてきたLDPC符号を受信することにより得られる、符号の0(または1)らしさを表す対数尤度比である受信データ(LDPC符号)D100が供給され、受信データメモリ105は、その受信データD100を格納(記憶)する。
バリアブルノード演算時には、受信データメモリ105は、制御部202から供給される制御信号にしたがって、記憶している受信データを読み出し、受信データD101として、メッセージ計算部201に供給する。
また、バリアブルノード演算時には、メッセージメモリ104は、制御部202から供給される制御信号にしたがい、記憶している同一のメッセージを2回読み出して、1回目に読み出したメッセージをメッセージD201として、メッセージ計算部201に供給し、2回目に読み出したメッセージをメッセージDD201として、メッセージ計算部201に供給する。メッセージ計算部201は、メッセージメモリ104から供給されるメッセージD201とDD201、および受信データメモリ105から供給される受信データD101を用い、制御部202から供給される制御信号D203が表すバリアブルノード演算の指示にしたがって、式(1)のバリアブルノード演算を行い、そのバリアブルノード演算の結果得られたメッセージ(バリアブルノードメッセージ)viを、メッセージD202として、メッセージメモリ104に供給する。
そして、メッセージメモリ104は、制御部202から供給される制御信号にしたがい、メッセージ計算部201から供給されるメッセージD202(バリアブルノードメッセージvi)を記憶する。
一方、チェックノード演算時には、メッセージメモリ104は、制御部202から供給される制御信号にしたがって、記憶している同一のメッセージ(バリアブルノードメッセージvi)を2回読み出して、1回目に読み出したメッセージをメッセージD201として、メッセージ計算部201に供給し、2回目に読み出したメッセージをメッセージDD201として、メッセージ計算部201に供給する。
メッセージ計算部201は、メッセージメモリ104から供給されるメッセージD201とDD201を用い、制御部202からの制御信号D203が表すチェックノード演算の指示にしたがって、式(7)のチェックノード演算を行い、そのチェックノード演算によって求められたメッセージ(チェックノードメッセージ)ujを、メッセージD202として、メッセージメモリ104に供給する。
そして、メッセージメモリ104は、制御部202から供給される制御信号にしたがい、メッセージ計算部201から供給されるメッセージD202(チェックノードメッセージuj)を記憶する。
メッセージメモリ104が記憶したメッセージ計算部201からのメッセージD202、即ち、チェックノードメッセージujは、次のバリアブルノード演算時に、メッセージD201およびDD201として読み出され、メッセージ計算部201に供給される。
図22は、図21のメッセージ計算部201の構成例を示している。
なお、図中、図18のメッセージ計算部191と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。
メッセージ計算部201は、データを遅延するための遅延メモリ(図18のメッセージ計算部191に設けられているFIFOメモリ320)を設けずに構成されている。
その代わり、メッセージ計算部201は、外部からメッセージ(データ)が供給(入力)される入力ポートとして、入力ポートP101およびP201の他に、入力ポートPD201を有しているとともに、LUT310およびセレクタ311を有している。
入力ポートP101には、受信データメモリ105から読み出された受信データD101が供給(入力)される。また、入力ポートP201には、メッセージメモリ104から2回読み出される同一のメッセージD201およびDD201のうちの1回目に読み出されるメッセージ(以下、適宜、1回目のメッセージともいう)D201が供給(入力)され、入力ポートPD201には、2回目に読み出されるメッセージ(以下、適宜、2回目のメッセージともいう)DD201が供給される。
メッセージ計算部201は、入力ポートP201から入力される1回目のメッセージD201と、入力ポートPD201から入力される2回目のメッセージDD201、さらには、必要に応じて、入力ポートP101から入力されるメッセージ(受信データ)を用い、入力ポートP203から入力される制御信号D203にしたがって、式(1)のバリアブルノード演算または式(7)のチェックノード演算を行い、その結果得られるメッセージを、出力ポートP202から出力する。
即ち、入力ポートP101に供給された受信データD101は、演算器313に供給され、入力ポートP201に供給された1回目のメッセージD201は、セレクタ301のv端子に供給される。
さらに、入力ポートP201に供給された1回目のメッセージD201のうちの最上位ビットを除く下位ビット、即ち、メッセージD201の絶対値は、値D303として、LUT300に供給され、1回目のメッセージD201のうちの最上位ビット、即ち、メッセージD201の符号ビットは、値D304として、EXOR回路306に供給される。
また、入力ポートPD201に供給された2回目のメッセージDD201は、セレクタ311のv端子に供給される。さらに、入力ポートPD201に供給された2回目のメッセージDD201のうちの最上位ビットを除く下位ビット、即ち、メッセージDD201の絶対値は、値D312として、LUT310に供給され、2回目のメッセージDD201のうちの最上位ビット、即ち、メッセージDD201の符号ビットは、値D313として、EXOR回路306に供給される。
また、入力ポートP203に供給された制御信号D203は、セレクタ301,311、および316に供給される。
セレクタ301,311、および316は、v端子とc端子とを有し、制御信号D203にしたがい、v端子またはc端子のうちのいずれかに供給される値を選択して、後段に出力する。即ち、セレクタ301,311、および316は、制御信号D203がバリアブルノード演算を指示する制御信号である場合には、v端子に供給される値を選択して後段に出力し、制御信号D203がチェックノード演算を指示する制御信号である場合には、c端子に供給される値を選択して後段に出力する。
その結果、図22のメッセージ計算部201では、制御信号D203がバリアブルノード演算を指示しているときには、バリアブルノード演算が行われ、制御信号D203がチェックノード演算を指示しているときには、チェックノード演算が行われる。
ここで、図23を参照して、図22のメッセージ計算部201で行われるバリアブルノード演算とチェックノード演算について説明する。
図23左側は、式(1)のバリアブルノード演算を行うバリアブルノードと、式(7)のチェックノード演算を行うチェックノードとを模式的に示している。
バリアブルノードでは、計算しようとしている枝(バリアブルノードに接続している枝のうちのi番目の枝)に対応するメッセージviが、バリアブルノードに繋がっている残りの枝からのメッセージu1,u2,・・・を、式(1)に示したように加算することによって求められる。
また、チェックノードでは、計算しようとしている枝(チェックノードに接続している枝のうちのj番目の枝)に対応するメッセージujが、式(7)に示したように、チェックノードに繋がっている残りの枝からのメッセージv1,v2,・・・を引数xとする非線形関数φ(x)の演算結果を積算し、その結果得られる積算値を引数xとする逆関数φ-1(x)を演算することによって求められる。
いま、ノードに入力されるデータ(入力前のデータ)を入力データというとともに、ノードから出力されるデータ(出力前のデータ)を出力データということとすると、図23左側のバリアブルノードおよびチェックノードでの演算は、図23右側に示す演算と等価である。
即ち、図23右側では、バリアブルノードにおいて、図23左側のバリアブルノードと同一の演算によって、メッセージviが求められている。また、図23右側では、チェックノードにおいて非線形関数φ(x)の演算を行うのではなく、チェックノードに入力される入力データ(入力前のメッセージv1,v2,・・・)に、非線形関数φ(x)の演算を施してから、その演算結果が、チェックノードに入力され、チェックノードにおいて、非線形関数φ(x)の演算結果が積算されている。さらに、図23右側では、チェックノードにおいて逆関数φ-1(x)の演算を行うのではなく、チェックノードから出力された出力データ(逆関数φ-1(x)の演算が施される前の、非線形関数φ(x)の演算結果の積算値)に、逆関数φ-1(x)の演算が施され、これにより、メッセージujが求められている。
図22のメッセージ計算部201では、図23右側に示したようにメッセージviとujを求めるバリアブルノード演算とチェックノード演算が行われる。
ここで、図23右側のバリアブルノードについては、バリアブルノードに入力される入力データと、バリアブルノードから出力された出力データのいずれに対しても、非線形関数φ(x)および逆関数φ-1(x)の演算は施されない。一方、チェックノードについては、入力データに、非線形関数φ(x)の演算が施され、出力データに、逆関数φ-1(x)の演算が施される。
このため、バリアブルノード演算とチェックノード演算の両方を行う図22のメッセージ計算部201には、非線形関数φ(x)の演算を行う(演算結果を出力する)LUT300および310と、逆関数φ-1(x)の演算を行う(演算結果を出力する)LUT314とが設けられている。
そして、メッセージ計算部201は、バリアブルノード演算時には、実質的に、バリアブルノードに対する入力データおよび出力データを、LUT300,310、および314をバイパスさせる構成(後述する図24の構成)となって、図23右側でバリアブルノードについて説明した演算を行う。
また、メッセージ計算部201は、チェックノード演算時には、チェックノードに入力される入力データを、LUT300または310を経由させるとともに、チェックノードから出力された出力データを、LUT314を経由させる構成(後述する図25の構成)となって、図23右側でチェックノードについて説明した演算を行う。
図24は、図23右側に示したバリアブルノード演算時の図22のメッセージ計算部201の実質的な構成例を示している。
なお、上述したように、バリアブルノード演算時には、セレクタ301,311、および316はv端子を選択するが、図24では、図22に図示した構成のうちの、セレクタ301,311、および316がv端子を選択することによってバリアブルノード演算時に機能しない部分(バリアブルノード演算に関係がない部分)の図示を省略してある。
メッセージ計算部201は、入力ポートP101,P201,PD201それぞれから入力されるメッセージを用いて、式(1)のバリアブルノード演算を行い、その結果得られるメッセージD202を、出力ポートP202から出力する。
即ち、入力ポートP101には、受信データメモリ105から読み出された受信データD101が供給される。また、入力ポートP201には、メッセージメモリ104から1つずつ読み出された、検査行列の各行に対応するチェックノードからの1回目のメッセージD201(チェックノードメッセージuj)が供給される。
入力ポートP101に供給された受信データD101は、演算器313に供給される。
また、入力ポートP201に供給されたメッセージD201(メッセージuj)は、セレクタ301のv端子に供給され、バリアブルノード演算時にはv端子を選択しているセレクタ301から、メッセージD306として、演算器302に供給される。
そして、演算器302、レジスタ303、セレクタ304、およびレジスタ305では、図19で説明したメッセージ計算部191と同様の処理が行われる。
即ち、演算器302は、セレクタ301からのメッセージD306(メッセージuj)とレジスタ303に格納されている値D307とを加算することにより、メッセージD306を積算し、その結果得られる積算値を、レジスタ303に再格納する。なお、検査行列の1列に亘る全ての枝からのメッセージD306が積算された場合、レジスタ303はリセットされる。
検査行列の1列に亘るメッセージD306が1つずつ読み込まれ、レジスタ303に1列分のメッセージD306が積算された値が格納された場合、即ち、レジスタ303に、検査行列の1列に亘る全ての枝からのメッセージD306(メッセージuj)が積算された積算値(j=1からdVまでのΣuj)が格納された場合、セレクタ304は、レジスタ303に格納されている値、即ち、検査行列の1列に亘る全ての枝からのメッセージD306(メッセージuj)が積算された積算値D307(j=1からdVまでのΣuj)を選択し、レジスタ305に出力して格納させる。
レジスタ305は、格納している値D307を、値D308として、セレクタ304と演算器312に供給する。レジスタ303に1列分のメッセージD306が積算された値が格納される直前までは、セレクタ304は、レジスタ305から供給された値D308を選択し、レジスタ305に出力し再格納させる。即ち、検査行列の1列に亘る全ての枝からのメッセージD306(メッセージuj)が積算されるまで、レジスタ305は、前回積算された値を、セレクタ304と演算器312に供給する。
一方、レジスタ305から新たな値D308(j=1からdVまでのΣuj)の出力が開始されると、即ち、レジスタ303に1列分のメッセージD201が積算された積算値(j=1からdVまでのΣuj)が格納された直後、メッセージ計算部201においては、メッセージD201(メッセージuj)と同一のメッセージDD201、即ち、メッセージメモリ104からの2回目のメッセージujが、入力ポートPD201から1つずつ入力され、そのメッセージDD201が、セレクタ311のv端子に供給される。
セレクタ311は、バリアブルノード演算時には、v端子を選択しており、そのv端子に供給されるメッセージ(2回目のメッセージuj)DD201を、演算器312に供給する。
演算器312は、レジスタ305から供給された積算値D308から、入力ポートPD201からセレクタ311を介して供給されたメッセージDD201を減算する。即ち、演算器312では、検査行列の1列に亘る全ての枝からのメッセージD201(メッセージuj)の積算値D308(j=1からdvまでのΣuj)から、求めたい枝からのメッセージuj(j=dvのuj)としてのメッセージDD201を減算して、減算値(j=1からdv−1までのΣuj)を求め、演算器313に供給する。
演算器313は、入力ポートP101からの受信データD101と、演算器312からの減算値(j=1からdv−1までのΣuj)とを加算し、その結果得られる加算値D317(バリアブルノードメッセージvi)を、セレクタ316のv端子に供給する。
セレクタ316は、バリアブルノード演算時にはv端子を選択しており、そのv端子に供給される演算器313からの加算値D317を、メッセージD202(メッセージvi)として、出力ポートP202から出力する。
以上のように、セレクタ301および304がv端子を選択しているメッセージ計算部201では、式(1)のバリアブルノード演算が行われ、その結果得られるメッセージ(バリアブルノードメッセージ)viが、出力ポートP202から出力される。
図25は、図23右側に示したチェックノード演算時の図22のメッセージ計算部201の実質的な構成例を示している。
なお、上述したように、チェックノード演算時には、セレクタ301,311、および316はc端子を選択するが、図25では、図22に図示した構成のうちの、セレクタ301,311、および316がc端子を選択することによってチェックノード演算時に機能しない部分(チェックノード演算に関係がない部分)の図示を省略してある。
チェックノード演算時においては、入力ポートP201には、メッセージメモリ104から1つずつ読み出された、検査行列の各列に対応するバリアブルノードからのバリアブルノードメッセージviが、順次、メッセージD201として供給される。
そして、LUT300、セレクタ301、演算器302、レジスタ303、セレクタ304、レジスタ305、EXOR回路306、レジスタ307、セレクタ308、レジスタ309、演算器312、LUT314、およびEXOR回路315において、図20で説明したメッセージ計算部191と同様の処理が行われる。
即ち、入力ポートP201に供給されたメッセージD201(メッセージuj)のうちの最上位ビットを除く下位ビット、つまり、メッセージD201の絶対値D303(|vi|)は、LUT300に供給され、最上位ビット、つまりメッセージD201の符号ビットD304は、EXOR回路306に供給される。
LUT300は、絶対値D303(|vi|)を引数として、非線形関数φ(|vi|)の演算を行った演算結果D305(φ(|vi|))を読み出し、セレクタ301のc端子に供給する。
セレクタ301は、チェックノード演算時にはc端子を選択しており、そのc端子に供給されるLUT300からの演算結果D305(φ(|vi|))を、演算結果D306(φ(|vi|))として、演算器302に供給する。
演算器302は、演算結果D306(φ(|vi|))とレジスタ303に格納されている値D307とを加算することにより、演算結果D306を積算し、その結果得られる積算値をレジスタ303に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD201の絶対値D303(|vi|)に対する演算結果D306(φ(|vi|))が積算された場合、レジスタ303はリセットされる。
検査行列の1行に亘るメッセージD201が1つずつ読み込まれ、レジスタ303に1行分の演算結果D306が積算された積算値が格納された場合、セレクタ304は、レジスタ303に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD201(メッセージvi)から求められたφ(|vi|)が積算された積算値D307(i=1からi=dcまでのΣφ(|vi|))を選択し、レジスタ305に出力して格納させる。レジスタ305は、格納している積算値D307を、値D308として、セレクタ304と演算器312に供給する。
レジスタ303に1行分の演算結果D306が積算された積算値が格納される直前までは、セレクタ304は、レジスタ305から供給された値D308を選択し、レジスタ305に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD201(メッセージvi)から求められたφ(|vi|)が積算されるまで、レジスタ305は、前回積算されたφ(|vi|)の積算値を、セレクタ304と演算器312に供給する。
一方、レジスタ305から新たな値D308(i=1からi=dcまでのΣφ(|vi|))の出力が開始されると、即ち、レジスタ305に1行分の演算結果D306が積算された積算値(i=1からi=dcまでのΣφ(|vi|))が格納された直後、メッセージ計算部201において、メッセージD201(メッセージvi)と同一のメッセージDD201、即ち、メッセージメモリ104からの2回目のメッセージviが、入力ポートPD201から1つずつ入力され、そのメッセージDD201のうちのその最上位ビットを除く下位ビット、つまり、メッセージDD201の絶対値D312(|vi|)が、LUT310に供給されるとともに、最上位ビット、つまりメッセージDD201の符号ビットD313が、EXOR回路315に供給される。
LUT310は、LUT300と同様のLUTで、メッセージDD201の絶対値D312(|vi|)を引数として、非線形関数φ(|vi|)の演算を行った演算結果D314(φ(|vi|))を読み出し、セレクタ311のc端子に供給する。
セレクタ311は、チェックノード演算時にはc端子を選択しており、そのc端子に供給されるLUT310からの演算結果D314(φ(|vi|))を、演算結果D315(φ(|vi|))として、演算器312に供給する。
演算器312は、レジスタ305から供給された値D308から、セレクタ311から供給された値D315を減算し、その減算結果を、減算値D316としてLUT314に供給する。即ち、演算器312は、検査行列の1行に亘る全ての枝からのメッセージD201(メッセージvi)から求められたφ(|vi|)の積算値D308(i=1からi=dcまでのΣφ(|vi|))から、求めたい枝からのメッセージDD201(メッセージvi)から求められたφ(|vi|)の値D315を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を減算値D316としてLUT314に供給する。
LUT314は、演算器312からの減算値D316(i=1からi=dc−1までのΣφ(|vi|))を引数として、逆関数φ-1(Σφ(|vi|))の演算を行った演算結果D318(φ-1(Σφ(|vi|)))を出力する。
以上の処理と並行して、EXOR回路306は、レジスタ307に格納されている値D310と符号ビット(正負を表すビット)D304との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、乗算結果D309を、レジスタ307に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD201の符号ビットD304が乗算された場合、レジスタ307はリセットされる。
検査行列の1行に亘る全ての枝からのメッセージD201の符号ビットD304が乗算された乗算結果D309(i=1からdcまでのΠsign(vi))がレジスタ307に格納された場合、セレクタ308は、レジスタ307に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD201の符号ビットD304が乗算された値D310(i=1からi=dcまでのΠsign(vi))を選択し、レジスタ309に出力して格納させる。レジスタ309は、格納している値D311を、セレクタ308とEXOR回路315に供給する。
検査行列の1行に亘る全ての枝からのメッセージD201の符号ビットD304が乗算された乗算結果D309(i=1からdcまでのΠsign(vi))がレジスタ307に格納される直前までは、セレクタ308は、レジスタ309から供給された値D311を選択し、レジスタ309に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD201(メッセージvi)の符号ビットD304が乗算されるまで、レジスタ309は、前回格納した値を、セレクタ308とEXOR回路315に供給する。
一方、レジスタ309から新たな値D311(i=1からi=dcまでのΠsign(vi))がEXOR回路315に供給されたとき、即ち、レジスタ307に1行に亘る全ての枝からのメッセージD201の符号ビットD304が乗算された値D310(i=1からi=dcまでのΠsign(vi))が格納されたとき、レジスタ305には、上述したように、1行分の演算結果D306が積算された積算値(i=1からi=dcまでのΣφ(|vi|))が格納される。
レジスタ305に1行分の演算結果D306が積算された積算値(i=1からi=dcまでのΣφ(|vi|))が格納されると、上述したように、メッセージ計算部201において、メッセージD201(メッセージvi)と同一のメッセージDD201、即ち、メッセージメモリ104からの2回目のメッセージviが、入力ポートPD201から1つずつ入力され、そのメッセージDD201のうちのその最上位ビットを除く下位ビット、つまり、メッセージDD201の絶対値(|vi|)が、LUT310に供給されるとともに、最上位ビット、つまりメッセージDD201の符号ビットD313が、EXOR回路315に供給される。
EXOR回路315は、レジスタ309から供給された値D311と、入力ポートPD201からのメッセージDD201の符号ビットとの排他的論理和を演算することにより、値D311を、メッセージDD201の符号ビットで除算し、除算結果を除算値D319として出力する。即ち、EXOR回路315は、検査行列の1行に亘る全ての枝からのメッセージD201の符号ビットD304の乗算値(i=1からi=dcまでのΠsign(vi))を、求めたい枝からのメッセージviとしてのメッセージDD201の符号ビットD304(i=dcのsign(vi))で除算して、その除算値(i=1からi=dc−1までのΠsign(vi))を除算値D319として出力する。
そして、メッセージ計算部201では、LUT314から出力された演算結果D318を下位ビットとするとともに、EXOR回路315から出力された除算値D319を最上位ビット(符号ビット)とするビット列D320(メッセージuj)が、セレクタ316のc端子に供給される。
セレクタ316は、チェックノード演算時にはc端子を選択しており、そのc端子に供給されるビット列D320(メッセージuj)を、メッセージD202として、出力ポートP202から出力する。
以上のように、セレクタ301,311、および304がc端子を選択しているメッセージ計算部201では、式(7)のチェックノード演算が行われ、その結果得られるメッセージ(チェックノードメッセージ)ujが、出力ポートP202から出力される。
なお、図示しないが、図21の復号装置では、復号の最終段において、式(1)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が、最終的な復号結果として出力される。
また、図21の復号装置において、制御部202は、メッセージメモリ104に対するメッセージ(データ)の読み書き制御として、図15のフローチャートで説明したように、図12の復号装置の制御部174と同様の読み書き制御を行う。
また、図21の復号装置のメッセージメモリ104に対するメッセージの読み書きのタイミングも、図12の復号装置について説明した図16の場合と同様であり、図21の復号装置についても、多少の高速動作が必要となるが、遅延メモリを設ける必要がない分、装置規模を低減することができる。さらに、図21の復号装置では、メッセージ計算部201において、バリアブルノードの演算を行う回路と、チェックノードの演算を行う回路との一部(演算器302、レジスタ303、セレクタ304、レジスタ305、および演算器312)が共有化されているので、その共有化の分だけ、図12の復号装置よりも規模を削減することができる。
次に、図26は、本発明を適用した復号装置の第3実施の形態の構成例を示すブロック図である。なお、図中、図21の復号装置の場合と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。即ち、図26の復号装置は、メッセージ計算部201に代えて、メッセージ計算部211が設けられているとともに、制御部202に代えて、制御部212が設けられている他は、図21の復号装置と同様に構成されている。
図26の復号装置では、メッセージ計算部211が、バリアブルノード演算を行う回路と、チェックノード演算を行う回路との一部を共有する構成となっており、さらに、遅延メモリを設けずに構成されている。
図26の復号装置では、メッセージメモリ104に記憶されているメッセージが1つずつ読み出され、メッセージ計算部211に供給される。メッセージ計算部211は、メッセージメモリ104からのメッセージを用いて演算が行われ、その演算によって求められたメッセージが、メッセージメモリ104に格納される。図26の復号装置では、以上の処理が繰り返し行われ、フルシリアルの繰り返し復号が行われる。
即ち、受信データメモリ105には、送信されてきたLDPC符号を受信することにより得られる、符号の0(または1)らしさを表す対数尤度比である受信データ(LDPC符号)D100が供給され、受信データメモリ105は、その受信データD100を記憶する。
バリアブルノード演算時には、受信データメモリ105は、制御部212から供給される制御信号にしたがって、記憶している受信データを読み出し、受信データD101として、メッセージ計算部211に供給する。
また、バリアブルノード演算時には、メッセージメモリ104は、制御部212から供給される制御信号にしたがい、記憶している同一のメッセージを2回読み出して、1回目に読み出したメッセージをメッセージD601として、メッセージ計算部211に供給し、2回目に読み出したメッセージをメッセージDD601として、メッセージ計算部211に供給する。さらに、制御部212が、バリアブルノード演算を指示する制御信号D603を、メッセージ計算部211に供給する。メッセージ計算部211は、メッセージメモリ104から供給されるメッセージD601とDD601、および受信データメモリ105から供給される受信データD101を用い、制御部212から供給される制御信号D603にしたがって、バリアブルノード演算を行い、そのバリアブルノード演算の結果得られたメッセージを、メッセージD622として、メッセージメモリ104に供給する。
そして、メッセージメモリ104は、制御部212から供給される制御信号にしたがい、メッセージ計算部211から供給されるメッセージD622を記憶する。
一方、チェックノード演算時には、メッセージメモリ104は、制御部212から供給される制御信号にしたがって、記憶している同一のメッセージを2回読み出して、1回目に読み出したメッセージをメッセージD601として、メッセージ計算部211に供給し、2回目に読み出したメッセージをメッセージDD601として、メッセージ計算部211に供給する。さらに、制御部212が、チェックノード演算を指示する制御信号D603を、メッセージ計算部211に供給する。
メッセージ計算部211は、メッセージメモリ104から供給されるメッセージD601とDD601を用い、制御部212からの制御信号D603にしたがって、チェックノード演算を行い、そのチェックノード演算によって求められたメッセージを、メッセージD622として、メッセージメモリ104に供給する。
そして、メッセージメモリ104は、制御部212から供給される制御信号にしたがい、メッセージ計算部211から供給されるメッセージD622を記憶する。
ここで、図26のメッセージ計算部211で行われる演算について説明する。
いま、チェックノードに接続している枝のうちのj番目の枝から出力されるメッセージ(データ)として、式u'j=φ(|uj|)×sign(uj)で表されるメッセージu'jを導入すると、式(1)と式(7)は、それぞれ、式(9)と式(10)に書き直すことができる。
Figure 0004807063
・・・(9)
Figure 0004807063
・・・(10)
ここで、式u'j=φ(|uj|)×sign(uj)を、メッセージujについて書き直すと、式uj-1(|u'j|)×sign(u'j)となる。この式uj-1(|u'j|)×sign(u'j)を、バリアブルノード演算の式(1)に代入することにより、新たなバリアブルノード演算の式としての式(9)を得ることができる。
また、式u'j=φ(|uj|)×sign(uj)に、チェックノード演算の式(7)を代入することにより、新たなチェックノード演算の式としての式(10)を得ることができる。
式(9)のバリアブルノード演算では、入力データ(メッセージ)u'jの絶対値|u'j|を引数とする逆関数φ-1(|u'j|)の演算が行われ、式(10)のチェックノード演算では、入力データviの絶対値|vi|を引数とする非線形関数φ(|vi|)の演算が行われる。ここで、非線形関数φ(x)とその逆関数φ-1(x)とは、x>0において等しい。従って、式(9)および式(10)のいずれでも、入力データxの絶対値|x|を引数として、関数φ(x)の演算が行われる。
そして、式(9)では、関数φ(x)の演算結果(φ-1(|u'j|)の演算結果)に入力データu'jの符号(sign(u'j))を考慮した値(φ-1(|u'j|)×sign(u'j))を積算し、さらに、受信データu0iを加算して、メッセージviが求められる。
また、式(10)では、関数φ(x)の演算結果(φ(|uj|)の演算結果)を積算し、それとは別に、入力データviの符号ビットの相乗積(Πsign(vi))を求め、関数φ(x)の演算結果の積算値と、符号ビットの相乗積とを乗算して、メッセージu'jが求められる。
図26のメッセージ計算部211では、式(9)のバリアブルノード演算と、式(10)のチェックノード演算とが行われる。
図27は、図26のメッセージ計算部211の構成例を示している。
メッセージ計算部211は、図22のメッセージ計算部201と同様に、遅延メモリを設けずに構成されている。また、メッセージ計算部211には、入力ポートP101,P601,PD601,P603と、出力ポートP622が設けられている。
入力ポートP101には、受信データメモリ105から読み出された受信データD101が供給(入力)される。入力ポートP601には、メッセージメモリ104から2回読み出される同一のメッセージD601およびDD601のうちの1回目に読み出されるメッセージ(1回目のメッセージ)D601が供給(入力)され、入力ポートPD601には、2回目に読み出されるメッセージ(2回目のメッセージ)DD601が供給される。また、入力ポートP603には、制御部212(図26)からの制御信号D603が供給される。
メッセージ計算部211は、入力ポートP601から入力される1回目のメッセージD601と、入力ポートPD601から入力される2回目のメッセージDD601、さらには、必要に応じて、入力ポートP101から入力されるメッセージ(受信データ)を用い、入力ポートP603から入力される制御信号D603にしたがって、式(9)のバリアブルノード演算または式(10)のチェックノード演算を行い、その結果得られるメッセージD622を、出力ポートP622から出力する。
ここで、図28を参照して、図27のメッセージ計算部211で行われるバリアブルノード演算とチェックノード演算について説明する。
図28左側は、式(1)のバリアブルノード演算を行うバリアブルノードと、式(7)のチェックノード演算を行うチェックノードとを模式的に示しており、図23右側と同一の図である。
図28左側では、図23右側で説明したように、チェックノードに入力される入力データに、非線形関数φ(x)の演算を施してから、その演算結果が、チェックノードに入力され、チェックノードにおいて、非線形関数φ(x)の演算結果が積算されている。さらに、チェックノードから出力された出力データ(逆関数φ-1(x)の演算が施される前の、非線形関数φ(x)の演算結果の積算値)に、逆関数φ-1(x)の演算が施され、これにより、メッセージujが求められている。
このメッセージujは、入力データとして、バリアブルノードに入力され、バリアブルノード演算に用いられる。
従って、図28左側に示したように、チェックノードから出力された出力データxに、逆関数φ-1(x)の演算を施す代わりに、図28右側に示すように、バリアブルノードに入力される入力データxに、逆関数φ-1(x)の演算を施しても、バリアブルノード演算とチェックノード演算を行うことができる。
即ち、図28右側では、式(9)で説明したように、バリアブルノードに入力される入力データに、逆関数φ-1(x)の演算が施され、バリアブルノードにおいて、その逆関数φ-1(x)の演算結果を積算することにより、メッセージviが求められている。また、図28右側では、式(10)で説明したように、チェックノードに入力される入力データに、非線形関数φ(x)の演算が施され、チェックノードにおいて、その非線形関数φ(x)の演算結果が積算されている。さらに、図28右側では、チェックノードにおいて、非線形関数φ(x)の演算結果を積算して得られる積算値が、(逆関数φ-1(x)の演算が施されずに)そのまま出力データu'jとして出力されている。
図27のメッセージ計算部211では、図28右側に示したようにメッセージviとu'jを求める式(9)のバリアブルノード演算と式(10)のチェックノード演算が行われる。
このように、メッセージ計算部211は、図28右側に示したメッセージviとu'jを求める式(9)のバリアブルノード演算と式(10)のチェックノード演算の両方を行うため、メッセージ計算部211(図27)には、チェックノードに入力される入力データxに対して、逆関数φ-1(x)と同一の演算結果が得られる非線形関数φ(x)の演算結果を出力するとともに、バリアブルノードに入力される入力データxに対して、逆関数φ-1(x)の演算結果を出力するLUT600(およびLUT610)が設けられている。
そして、メッセージ計算部211は、入力ポートP603に供給された制御信号D603にしたがって、その実質的な構成を変えて、式(9)のバリアブルノード演算と式(10)のチェックノード演算を選択的に行う。
即ち、メッセージ計算部211(図27)は、セレクタ601,611、および615を有しており、入力ポートP603に供給された制御信号D603は、セレクタ601,611、および615に供給される。
セレクタ601,611、および615は、v端子とc端子とを有し、制御信号D603にしたがい、v端子またはc端子のうちのいずれかに供給される値を選択して、後段に出力する。即ち、セレクタ601,611、および615は、制御信号D603がバリアブルノード演算を指示する制御信号である場合には、v端子に供給される値を選択して後段に出力し、制御信号D603がチェックノード演算を指示する制御信号である場合には、c端子に供給される値を選択して後段に出力する。
その結果、図27のメッセージ計算部211では、制御信号D603がバリアブルノード演算を指示しているときには、バリアブルノード演算が行われ、制御信号D603がチェックノード演算を指示しているときには、チェックノード演算が行われる。
即ち、図29は、図28右側に示したバリアブルノード演算時の図27のメッセージ計算部211の実質的な構成例を示している。
なお、上述したように、バリアブルノード演算時には、セレクタ601,611、および615はv端子を選択するが、図29では、図27に図示した構成のうちの、セレクタ601,611、および615がv端子を選択することによってバリアブルノード演算時に機能しない部分(バリアブルノード演算に関係がない部分)の図示を省略してある。
メッセージ計算部211は、入力ポートP101,P601,PD601それぞれから入力されるメッセージを用いて、式(9)のバリアブルノード演算を行い、その結果得られるメッセージD622を、出力ポートP622から出力する。
即ち、入力ポートP101には、受信データメモリ105から読み出された受信データD101が供給される。また、入力ポートP601には、メッセージメモリ104から1つずつ読み出された、検査行列の各行に対応するチェックノードからの1回目のメッセージD601(メッセージu'j)が供給される。
入力ポートP101に供給された受信データD101は、演算器613に供給される。
また、入力ポートP601に供給されたメッセージD601(メッセージu'j)のうちの最上位ビットを除く下位ビット、つまり、メッセージD601の絶対値D603(|u'j|)は、LUT600に供給される。
LUT600は、絶対値D603(|u'j|)を引数として、逆関数φ(|u'j|)の演算を行った演算結果D605(φ-1(|u'j|))を読み出して出力する。LUT600が出力する演算結果D605(φ-1(|u'j|))は、その最上位ビットに、入力ポートP601に供給されたメッセージD601(メッセージu'j)のうちの最上位ビット、つまりメッセージD601の符号ビットD604(sign(u'j))が付加されることにより、メッセージD606(チェックノードメッセージuj)とされ、セレクタ601のv端子に供給される。
セレクタ601は、上述したように、バリアブルノード演算時にはv端子を選択しており、そのv端子に供給されたメッセージD606(チェックノードメッセージuj)は、メッセージD607として、演算器602に供給される。
演算器602は、セレクタ601からのメッセージD607(メッセージuj)とレジスタ603に格納されている値D608とを加算することにより、メッセージD607を積算し、その結果得られる積算値を、レジスタ603に再格納する。なお、検査行列の1列に亘る全ての枝からの(メッセージu'jから得られた)メッセージD607が積算された場合、レジスタ603はリセットされる。
検査行列の1列に亘るメッセージD607が1つずつ読み込まれ、レジスタ603に1列分のメッセージD607が積算された値が格納された場合、即ち、レジスタ603に、検査行列の1列に亘る全ての枝からのメッセージD607(メッセージuj)が積算された積算値(j=1からdVまでのΣuj)が格納された場合、セレクタ604は、レジスタ603に格納されている値、即ち、検査行列の1列に亘る全ての枝からのメッセージD607(メッセージuj)が積算された積算値D608(j=1からdVまでのΣuj)を選択し、レジスタ605に出力して格納させる。
レジスタ605は、格納している値D608を、値D609として、セレクタ604と演算器612に供給する。レジスタ603に1列分のメッセージD607が積算された値が格納される直前までは、セレクタ604は、レジスタ605から供給された値D609を選択し、レジスタ605に出力し再格納させる。即ち、検査行列の1列に亘る全ての枝からのメッセージD607(メッセージuj)が積算されるまで、レジスタ605は、前回積算された値を、セレクタ604と演算器612に供給する。
一方、レジスタ605から新たな値D609(j=1からdVまでのΣuj)の出力が開始されると、即ち、レジスタ603に1列分のメッセージD607が積算された積算値(j=1からdVまでのΣuj)が格納された直後、メッセージ計算部211においては、メッセージD601(メッセージu'j)と同一のメッセージDD601、即ち、メッセージメモリ104からの2回目のメッセージu'jが、入力ポートPD601から1つずつ入力され、そのメッセージDD601(メッセージu'j)のうちの最上位ビットを除く下位ビット、つまり、メッセージDD601の絶対値D613(|u'j|)が、LUT610に供給される。
LUT610は、絶対値D613(|u'j|)を引数として、逆関数φ(|u'j|)の演算を行った演算結果D615(φ-1(|u'j|))を読み出して出力する。LUT600が出力する演算結果D605(φ-1(|u'j|))は、その最上位ビットに、入力ポートPD601に供給されたメッセージDD601(メッセージu'j)のうちの最上位ビット、つまりメッセージDD601の符号ビットD304(sign(u'j))が付加されることにより、メッセージD616(チェックノードメッセージuj)とされ、セレクタ611のv端子に供給される。
セレクタ611は、上述したように、バリアブルノード演算時にはv端子を選択しており、そのv端子に供給されたメッセージD616(チェックノードメッセージuj)は、メッセージD617として、演算器612に供給される。
演算器612は、レジスタ605から供給された積算値D609(j=1からdVまでのΣuj)から、セレクタ611からのメッセージD617(j=dVのメッセージuj)を減算する。即ち、演算器612では、検査行列の1列に亘る全ての枝からのメッセージD607(メッセージuj)の積算値D609(j=1からdvまでのΣuj)から、求めたい枝からのメッセージuj(j=dvのuj)としてのメッセージD617を減算して、減算値D618(j=1からdv−1までのΣuj)を求め、演算器613に供給する。
演算器613は、入力ポートP101からの受信データD101と、演算器612からの減算値D618(j=1からdv−1までのΣuj)とを加算することにより、メッセージD619(バリアブルノードメッセージvi)を求め、セレクタ615のv端子に供給する。
セレクタ615は、バリアブルノード演算時にはv端子を選択しており、そのv端子に供給される演算器613からのメッセージD619(バリアブルノードメッセージvi)を、メッセージD622として、出力ポートP622から出力する。
以上のように、セレクタ601,611、および615がv端子を選択しているメッセージ計算部211では、式(9)のバリアブルノード演算が行われ、その結果得られるメッセージ(バリアブルノードメッセージ)viが、出力ポートP622から出力される。
次に、図30は、図28右側に示したチェックノード演算時の図27のメッセージ計算部211の実質的な構成例を示している。
なお、上述したように、チェックノード演算時には、セレクタ601,611、および615はc端子を選択するが、図30では、図27に図示した構成のうちの、セレクタ601,611、および615がc端子を選択することによってチェックノード演算時に機能しない部分(チェックノード演算に関係がない部分)の図示を省略してある。
チェックノード演算時においては、入力ポートP601には、メッセージメモリ104から1つずつ読み出された、検査行列の各列に対応するバリアブルノードからのバリアブルノードメッセージviが、順次、メッセージD601として供給される。
入力ポートP601に供給されたメッセージD601(メッセージvi)のうちの最上位ビットを除く下位ビット、つまり、メッセージD601の絶対値D603(|vi|)は、LUT600に供給され、最上位ビット、つまりメッセージD601の符号ビットD604は、EXOR回路606に供給される。
LUT600は、絶対値D603(|vi|)を引数として、非線形関数φ(|vi|)の演算を行った演算結果D605(φ(|vi|))を読み出し、セレクタ601のc端子に供給する。
セレクタ601は、チェックノード演算時にはc端子を選択しており、そのc端子に供給されるLUT600からの演算結果D605(φ(|vi|))を、演算結果D607(φ(|vi|))として、演算器602に供給する。
演算器602は、演算結果D607(φ(|vi|))とレジスタ603に格納されている値D608とを加算することにより、演算結果D607を積算し、その結果得られる積算値をレジスタ603に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD601の絶対値D603(|vi|)に対する演算結果D607(φ(|vi|))が積算された場合、レジスタ603はリセットされる。
検査行列の1行に亘るメッセージD601が1つずつ読み込まれ、レジスタ603に1行分の演算結果D607が積算された積算値が格納された場合、セレクタ604は、レジスタ603に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD601(メッセージvi)から求められたφ(|vi|)が積算された積算値D608(i=1からi=dcまでのΣφ(|vi|))を選択し、レジスタ605に出力して格納させる。レジスタ605は、格納している積算値D608を、値D609として、セレクタ604と演算器612に供給する。
レジスタ603に1行分の演算結果D607が積算された積算値が格納される直前までは、セレクタ604は、レジスタ605から供給された値D609を選択し、レジスタ605に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD601(メッセージvi)から求められたφ(|vi|)が積算されるまで、レジスタ605は、前回積算されたφ(|vi|)の積算値を、セレクタ604と演算器612に供給する。
一方、レジスタ605から新たな値D609(i=1からi=dcまでのΣφ(|vi|))の出力が開始されると、即ち、レジスタ605に1行分の演算結果D607が積算された積算値(i=1からi=dcまでのΣφ(|vi|))が格納された直後、メッセージ計算部211において、メッセージD601(メッセージvi)と同一のメッセージDD601、即ち、メッセージメモリ104からの2回目のメッセージvi(1回目のメッセージviと同一のメッセージ)が、入力ポートPD601から1つずつ入力され、そのメッセージDD601のうちのその最上位ビットを除く下位ビット、つまり、メッセージDD601の絶対値D613(|vi|)が、LUT610に供給されるとともに、最上位ビット、つまりメッセージDD601の符号ビットD614が、EXOR回路614に供給される。
LUT610は、メッセージDD601の絶対値D613(|vi|)を引数として、非線形関数φ(|vi|)の演算を行った演算結果D615(φ(|vi|))を読み出し、セレクタ611のc端子に供給する。
セレクタ611は、チェックノード演算時にはc端子を選択しており、そのc端子に供給されるLUT610からの演算結果D615(φ(|vi|))を、演算結果D617(φ(|vi|))として、演算器612に供給する。
演算器612は、レジスタ605から供給された値D609から、セレクタ611から供給された値D617を減算し、その減算結果を、減算値D618として出力する。即ち、演算器612は、検査行列の1行に亘る全ての枝からのメッセージD601(メッセージvi)から求められたφ(|vi|)の積算値D609(i=1からi=dcまでのΣφ(|vi|))から、求めたい枝からのメッセージDD601(メッセージvi)から求められたφ(|vi|)の値D617を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を減算値D618として出力する。
以上の処理と並行して、EXOR回路606は、レジスタ607に格納されている値D611と、1回目のメッセージD601(メッセージvi)の最上位ビットである符号ビットD604との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、乗算結果D610を、レジスタ607に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD601の符号ビットD604が乗算された場合、レジスタ607はリセットされる。
検査行列の1行に亘る全ての枝からのメッセージD601の符号ビットD604が乗算された乗算結果D610(i=1からdcまでのΠsign(vi))がレジスタ607に格納された場合、セレクタ608は、レジスタ607に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD601の符号ビットD604が乗算された値D611(i=1からi=dcまでのΠsign(vi))を選択し、レジスタ609に出力して格納させる。レジスタ609は、格納している値D612を、セレクタ608とEXOR回路614に供給する。
検査行列の1行に亘る全ての枝からのメッセージD601の符号ビットD604が乗算された乗算結果D610(i=1からdcまでのΠsign(vi))がレジスタ607に格納される直前までは、セレクタ608は、レジスタ609から供給された値D612を選択し、レジスタ609に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD601(メッセージvi)の符号ビットD604が乗算されるまで、レジスタ609は、前回格納した値を、セレクタ608とEXOR回路614に供給する。
一方、レジスタ609から新たな値D612(i=1からi=dcまでのΠsign(vi))がEXOR回路614に供給されたとき、即ち、レジスタ607に1行に亘る全ての枝からのメッセージD601の符号ビットD604が乗算された値D611(i=1からi=dcまでのΠsign(vi))が格納されたとき、レジスタ605には、上述したように、1行分の演算結果D607が積算された積算値(i=1からi=dcまでのΣφ(|vi|))が格納される。
レジスタ605に1行分の演算結果D607が積算された積算値(i=1からi=dcまでのΣφ(|vi|))が格納されると、上述したように、メッセージ計算部211において、メッセージD601(メッセージvi)と同一のメッセージDD601、即ち、メッセージメモリ104からの2回目のメッセージviが、入力ポートPD601から1つずつ入力され、そのメッセージDD601のうちのその最上位ビットを除く下位ビット、つまり、メッセージDD601の絶対値(|vi|)が、LUT610に供給されるとともに、最上位ビット、つまりメッセージDD601の符号ビットD614が、EXOR回路614に供給される。
EXOR回路614は、レジスタ609から供給された値D612と、入力ポートPD601からのメッセージDD601の符号ビットとの排他的論理和を演算することにより、値D612を、メッセージDD601の符号ビットで除算し、除算結果を除算値D620として出力する。即ち、EXOR回路614は、検査行列の1行に亘る全ての枝からのメッセージD601の符号ビットD604の乗算値(i=1からi=dcまでのΠsign(vi))を、求めたい枝からのメッセージviとしてのメッセージDD601の符号ビットD614(i=dcのsign(vi))で除算して、その除算値(i=1からi=dc−1までのΠsign(vi))を除算値D620として出力する。
そして、メッセージ計算部211では、演算器612から出力された演算結果D618を下位ビットとするとともに、EXOR回路614から出力された除算値D620を最上位ビット(符号ビット)とするビット列D621(メッセージu'j)が、セレクタ615のc端子に供給される。
セレクタ615は、チェックノード演算時にはc端子を選択しており、そのc端子に供給されるビット列D621(メッセージu'j)を、メッセージD622として、出力ポートP622から出力する。
以上のように、セレクタ601,611、および615がc端子を選択しているメッセージ計算部211では、式(10)のチェックノード演算が行われ、その結果得られるメッセージ(メッセージ)u'jが、出力ポートP622から出力される。
なお、図26の復号装置では、復号の最終段において、式(9)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が、最終的な復号結果として出力される。
また、図26の復号装置において、制御部212は、メッセージメモリ104に対するメッセージ(データ)の読み書き制御として、図15のフローチャートで説明したように、図12の復号装置の制御部174と同様の読み書き制御を行う。
さらに、図26の復号装置のメッセージメモリ104に対するメッセージの読み書きのタイミングも、図12の復号装置について説明した図16の場合と同様であり、図26の復号装置についても、多少の高速動作が必要となるが、遅延メモリを設ける必要がない分、装置規模を低減することができる。さらに、図26の復号装置では、メッセージ計算部211において、バリアブルノードの演算を行う回路と、チェックノードの演算を行う回路との一部(LUT600、演算器602、レジスタ603、セレクタ604、レジスタ605、LUT610、および演算器612)が共有化されているので、その共有化の分だけ、図12の復号装置よりも規模を削減することができる。
また、図26の復号装置のメッセージ計算部211では、ノードに入力される入力データxの絶対値|x|を引数として、同一の演算結果が得られる逆関数φ-1(x)と非線形関数φ(x)の演算をそれぞれ含む式(9)と式(10)にそれぞれしたがって、バリアブルノード演算とチェックノード演算が行われる。
従って、メッセージ計算部211には、図27に示したように、入力ポートP601から供給される1回目のメッセージに対して、逆関数φ-1(x)および非線形関数φ(x)の演算を行うLUT600と、入力ポートPD601から供給される2回目のメッセージに対して、逆関数φ-1(x)および非線形関数φ(x)の演算を行うLUT610との2つのLUTがあれば済み、図22に示したように、1回目のメッセージに対して非線形関数φ(x)の演算を行うLUT300、2回目のメッセージに対して非線形関数φ(x)の演算を行うLUT310、および逆関数φ-1(x)の演算を行うLUT314の3つのLUTを必要とするメッセージ計算部201よりも、規模を削減することができる。
次に、図31は、本発明を適用した復号装置の第4実施の形態の構成例を示すブロック図である。なお、図中、図21の復号装置の場合と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。即ち、図31の復号装置は、メッセージ計算部201に代えて、メッセージ計算部221が設けられているとともに、制御部202に代えて、制御部222が設けられている他は、図21の復号装置と同様に構成されている。
図31の復号装置では、メッセージ計算部221が、バリアブルノード演算を行う回路と、チェックノード演算を行う回路との一部を共有する構成となっており、さらに、遅延メモリを設けずに構成されている。
図31の復号装置では、メッセージメモリ104に記憶されているメッセージが1つずつ読み出され、メッセージ計算部221に供給される。メッセージ計算部221は、メッセージメモリ104からのメッセージを用いて演算が行われ、その演算によって求められたメッセージが、メッセージメモリ104に格納される。図31の復号装置では、以上の処理が繰り返し行われ、フルシリアルの繰り返し復号が行われる。
即ち、受信データメモリ105には、送信されてきたLDPC符号を受信することにより得られる、符号の0(または1)らしさを表す対数尤度比である受信データ(LDPC符号)D100が供給され、受信データメモリ105は、その受信データD100を記憶する。
バリアブルノード演算時には、受信データメモリ105は、制御部222から供給される制御信号にしたがって、記憶している受信データを読み出し、受信データD101として、メッセージ計算部221に供給する。
また、バリアブルノード演算時には、メッセージメモリ104は、制御部222から供給される制御信号にしたがい、記憶している同一のメッセージを2回読み出して、1回目に読み出したメッセージをメッセージD701として、メッセージ計算部221に供給し、2回目に読み出したメッセージをメッセージDD701として、メッセージ計算部221に供給する。さらに、制御部222が、バリアブルノード演算を指示する制御信号D703を、メッセージ計算部221に供給する。メッセージ計算部221は、メッセージメモリ104から供給されるメッセージD701とDD701、および受信データメモリ105から供給される受信データD101を用い、制御部222から供給される制御信号D703にしたがって、バリアブルノード演算を行い、そのバリアブルノード演算の結果得られたメッセージを、メッセージD722として、メッセージメモリ104に供給する。
そして、メッセージメモリ104は、制御部222から供給される制御信号にしたがい、メッセージ計算部221から供給されるメッセージD722を記憶する。
一方、チェックノード演算時には、メッセージメモリ104は、制御部222から供給される制御信号にしたがって、記憶している同一のメッセージを2回読み出して、1回目に読み出したメッセージをメッセージD701として、メッセージ計算部221に供給し、2回目に読み出したメッセージをメッセージDD701として、メッセージ計算部221に供給する。さらに、制御部222が、チェックノード演算を指示する制御信号D703を、メッセージ計算部221に供給する。
メッセージ計算部221は、メッセージメモリ104から供給されるメッセージD701とDD701を用い、制御部222からの制御信号D703にしたがって、チェックノード演算を行い、そのチェックノード演算によって求められたメッセージを、メッセージD722として、メッセージメモリ104に供給する。
そして、メッセージメモリ104は、制御部222から供給される制御信号にしたがい、メッセージ計算部221から供給されるメッセージD722を記憶する。
ここで、図31のメッセージ計算部221で行われる演算について説明する。
いま、バリアブルノードに接続している枝のうちのi番目の枝から出力されるメッセージ(データ)として、式v'i=φ(|vi|)×sign(vi)で表されるメッセージv'iを導入すると、式(1)および式(7)は、式(11)乃至式(13)に書き直すことができる。
Figure 0004807063
・・・(11)
Figure 0004807063
・・・(12)
Figure 0004807063
・・・(13)
ここで、式(1)のバリアブルノード演算は、式(11)および式(12)の演算に対応し、式(7)のチェックノード演算は、式(13)の演算に対応する。
式(11)および式(12)のバリアブルノード演算では、バリアブルノードに入力される入力データ(メッセージ)ujを、符号sign(uj)を含めて積算し(Σuj)、さらに、受信データu0iを加算して、その結果得られる加算値vi(=u0i+Σuj)の絶対値|vi|を引数とする非線形関数φ(|vi|)の演算を行うことにより、メッセージv'iが求められる。
また、式(13)のチェックノード演算では、チェックノードに入力される入力データ(メッセージ)v'iの絶対値|v'i|を積算し(Σ|v'i|)、その積算値Σ|v'i|を引数とする逆関数φ-1(Σ|v'i|)の演算を行う一方で、それとは別に、入力データv'iの符号ビットの相乗積(Πsign(v'i))を求め、逆関数φ-1(Σ|v'i|)の演算結果と、入力データv'iの符号ビットの相乗積Πsign(v'i)とを乗算して、メッセージujが求められる。
ここで、上述したように、非線形関数φ(x)とその逆関数φ-1(x)とは、x>0において等しい。従って、式(11)および式(12)のバリアブルノード演算と、式(13)のチェックノード演算のいずれでも、出力データxの絶対値|x|を引数として、関数φ(x)(φ-1(x))の演算が行われることになる。
図31のメッセージ計算部221では、以上のような式(11)および式(12)のバリアブルノード演算と、式(13)のチェックノード演算とが行われる。
図32は、図31のメッセージ計算部221の構成例を示している。
メッセージ計算部221は、図22のメッセージ計算部201と同様に、遅延メモリを設けずに構成されている。また、メッセージ計算部221には、入力ポートP101,P701,PD701,P703と、出力ポートP722が設けられている。
入力ポートP101には、受信データメモリ105から読み出された受信データD101が供給(入力)される。入力ポートP701には、メッセージメモリ104から2回読み出される同一のメッセージD701およびDD701のうちの1回目に読み出されるメッセージ(1回目のメッセージ)D701が供給(入力)され、入力ポートPD701には、2回目に読み出されるメッセージ(2回目のメッセージ)DD701が供給される。また、入力ポートP703には、制御部222(図31)からの制御信号D703が供給される。
メッセージ計算部221は、入力ポートP701から入力される1回目のメッセージD701と、入力ポートPD701から入力される2回目のメッセージDD701、さらには、必要に応じて、入力ポートP101から入力されるメッセージ(受信データ)D101を用い、入力ポートP703から入力される制御信号D703にしたがって、式(11)および式(12)のバリアブルノード演算、または式(13)のチェックノード演算を行い、その結果得られるメッセージD722を、出力ポートP722から出力する。
ここで、図33を参照して、図32のメッセージ計算部221で行われるバリアブルノード演算とチェックノード演算について説明する。
図33左側は、式(1)のバリアブルノード演算を行うバリアブルノードと、式(7)のチェックノード演算を行うチェックノードとを模式的に示しており、図23右側と同一の図である。
図33左側では、図23右側で説明したように、チェックノードに入力される入力データに、非線形関数φ(x)の演算を施してから、その演算結果が、チェックノードに入力され、チェックノードにおいて、非線形関数φ(x)の演算結果が積算されている。さらに、チェックノードから出力された出力データ(逆関数φ-1(x)の演算が施される前の、非線形関数φ(x)の演算結果の積算値)に、逆関数φ-1(x)の演算が施され、これにより、メッセージujが求められている。
上述したように、図33左側において、バリアブルノードから出力された出力データとしてのメッセージviは、チェックノードに入力される入力データxとして、非線形関数φ(x)の演算が施されてから、チェックノードに入力される。
従って、図33左側に示したように、チェックノードに入力される入力データxに、非線形関数φ(x)の演算を施す代わりに、図33右側に示すように、バリアブルノードから出力された出力データx(バリアブルノードメッセージvi)に、非線形関数φ(x)の演算を施しても、バリアブルノード演算とチェックノード演算を行うことができる。
即ち、図33右側では、式(11)および式(12)で説明したように、バリアブルノードにおいて、そのバリアブルノードに入力される入力データujが積算されることにより、メッセージviが求められ、出力データとして出力されている。そして、バリアブルノードから出力された(メッセージvi)に、非線形関数φ(x)の演算が施され、メッセージv'iが求められている。このメッセージv'i(メッセージviに、非線形関数φ(x)の演算を施した演算結果)は、チェックノードに入力され、式(13)で説明したように積算されて、出力データとして出力される。そして、その出力データ(メッセージviに、非線形関数φ(x)の演算を施した演算結果の積算値)に、逆関数φ-1(x)の演算が施されることにより、メッセージujが求められる。
図32のメッセージ計算部221では、図33右側に示したようにメッセージv'iとujを求める式(11)および式(12)のバリアブルノード演算と式(13)のチェックノード演算が行われる。
このように、メッセージ計算部221は、図33右側に示したメッセージv'iとujを求める式(11)および式(12)のバリアブルノード演算と式(13)のチェックノード演算の両方を行うため、メッセージ計算部221には、バリアブルノードから出力された出力データxに対して、逆関数φ-1(x)と同一の演算結果が得られる非線形関数φ(x)の演算結果を出力するとともに、チェックノードから出力された出力データxに対して、逆関数φ-1(x)の演算結果を出力するLUT713が設けられている。
そして、メッセージ計算部221は、入力ポートP703に供給された制御信号D703にしたがって、その実質的な構成を変えて、式(11)および式(12)のバリアブルノード演算と式(13)のチェックノード演算を選択的に行う。
即ち、メッセージ計算部221は、セレクタ700,705,712、および715を有しており、入力ポートP703に供給された制御信号D703は、セレクタ700,705,712、および715に供給される。
セレクタ700,705,712、および715は、v端子とc端子とを有し、制御信号D703にしたがい、v端子またはc端子のうちのいずれかに供給される値を選択して、後段に出力する。即ち、セレクタ700,705,712、および715は、制御信号D703がバリアブルノード演算を指示する制御信号である場合には、v端子に供給される値を選択して後段に出力し、制御信号D703がチェックノード演算を指示する制御信号である場合には、c端子に供給される値を選択して後段に出力する。
その結果、図32のメッセージ計算部221では、制御信号D703がバリアブルノード演算を指示しているときには、バリアブルノード演算が行われ、制御信号D703がチェックノード演算を指示しているときには、チェックノード演算が行われる。
即ち、図34は、図33右側に示したバリアブルノード演算時の図32のメッセージ計算部221の実質的な構成例を示している。
なお、上述したように、バリアブルノード演算時には、セレクタ700,705,712、および715はv端子を選択するが、図34では、図32に図示した構成のうちの、セレクタ700,705,712、および715がv端子を選択することによってバリアブルノード演算時に機能しない部分(バリアブルノード演算に関係がない部分)の図示を省略してある。
メッセージ計算部221は、入力ポートP101,P701,PD701それぞれから入力されるメッセージを用いて、式(11)および式(12)のバリアブルノード演算を行い、その結果得られるメッセージD722を、出力ポートP722から出力する。
即ち、入力ポートP101には、受信データメモリ105から読み出された受信データD101が供給される。また、入力ポートP701には、メッセージメモリ104から1つずつ読み出された、検査行列の各行に対応するチェックノードからの1回目のメッセージD701(メッセージuj)が供給される。
入力ポートP101に供給された受信データD101は、演算器711に供給される。
また、入力ポートP701に供給されたメッセージD701(メッセージuj)は、セレクタ700のv端子に供給される。
セレクタ700は、上述したように、バリアブルノード演算時にはv端子を選択しており、そのv端子に供給されたメッセージD701(チェックノードメッセージuj)は、メッセージD705として、演算器701に供給される。
演算器701は、セレクタ700からのメッセージD705(メッセージuj)とレジスタ702に格納されている値D706とを加算することにより、メッセージD705を積算し、その結果得られる積算値を、レジスタ702に再格納する。なお、検査行列の1列に亘る全ての枝からのメッセージD705(メッセージuj)が積算された場合、レジスタ702はリセットされる。
検査行列の1列に亘るメッセージD701(メッセージuj)が1つずつ読み込まれ、これにより、レジスタ702に1列分のメッセージD705(メッセージuj)が積算された値が格納された場合、即ち、レジスタ702に、検査行列の1列に亘る全ての枝からのメッセージD705(メッセージuj)が積算された積算値(j=1からdVまでのΣuj)が格納された場合、セレクタ703は、レジスタ702に格納されている値、即ち、検査行列の1列に亘る全ての枝からのメッセージD705(メッセージuj)が積算された積算値D706(j=1からdVまでのΣuj)を選択し、レジスタ704に出力して格納させる。
レジスタ704は、格納している値D706を、値D707として、セレクタ703と演算器710に供給する。レジスタ702に1列分のメッセージD705(メッセージuj)が積算された値が格納される直前までは、セレクタ703は、レジスタ704から供給された値D707を選択し、レジスタ704に出力し再格納させる。即ち、検査行列の1列に亘る全ての枝からのメッセージD705(メッセージuj)が積算されるまで、レジスタ704は、前回積算された値を、セレクタ703と演算器710に供給する。
一方、レジスタ704から新たな値D707(j=1からdVまでのΣuj)の出力が開始されると、即ち、レジスタ702に1列分のメッセージD705(メッセージuj)が積算された積算値(j=1からdVまでのΣuj)が格納された直後、メッセージ計算部221においては、メッセージD701(メッセージuj)と同一のメッセージDD701、即ち、メッセージメモリ104からの2回目のメッセージujが、入力ポートPD701から1つずつ入力され、そのメッセージDD701(メッセージuj)が、セレクタ705のv端子に供給される。
セレクタ705は、上述したように、バリアブルノード演算時にはv端子を選択しており、そのv端子に供給されたメッセージDD701(チェックノードメッセージuj)は、メッセージD713として、演算器710に供給される。
演算器710は、レジスタ704から供給された積算値D707(j=1からdVまでのΣuj)から、セレクタ705からのメッセージD713(チェックノードメッセージuj)を減算する。即ち、演算器710では、検査行列の1列に亘る全ての枝からのメッセージD705(メッセージuj)の積算値D707(j=1からdvまでのΣuj)から、求めたい枝からのメッセージuj(j=dvのuj)としてのメッセージD713を減算して、減算値D714(j=1からdv−1までのΣuj)を求め、演算器711に供給する。
演算器711は、入力ポートP101からの受信データD101と、演算器710からの減算値D714(j=1からdv−1までのΣuj)とを加算することにより、メッセージD715(バリアブルノードメッセージvi)を求めて出力する。
即ち、以上により、式(11)の演算が行われ、演算器711からバリアブルノードメッセージviが出力される。
演算器711が出力するメッセージD715(メッセージvi)のうちの最上位ビットを除く下位ビット、つまり、メッセージD715の絶対値D716(|vi|)は、セレクタ712のv端子に供給され、最上位ビット、つまりメッセージD715(メッセージvi)の符号ビットD717(sign(vi))は、セレクタ715のv端子に供給される。
セレクタ712は、バリアブルノード演算時にはv端子を選択しており、そのv端子に供給される演算器711が出力するメッセージD715(メッセージvi)の絶対値D716(|vi|)を、絶対値D718として、LUT713に供給する。
LUT713は、セレクタ712からの絶対値D718(|vi|)を引数として、非線形関数φ(|vi|)の演算を行った演算結果D719(φ(|vi|))を読み出して出力する。
セレクタ715も、バリアブルノード演算時にはv端子を選択しており、そのv端子に供給される演算器711が出力するメッセージD715(メッセージvi)の符号ビットD717(sign(vi))を、符号ビットD721(sign(vi))として出力する。
メッセージ計算部211は、セレクタ715が出力する符号ビットD721(sign(vi))を、LUT713が出力する演算結果D719(φ(|vi|))の符号ビットとして最上位ビットに付加することにより、メッセージD722(メッセージv'i)を得て、出力ポートP722から出力する。
以上により、式(12)の演算が行われ、メッセージv'iが求められる。
以上のように、セレクタ700,705,712、および715がv端子を選択しているメッセージ計算部221では、式(11)および式(12)のバリアブルノード演算が行われ、その結果得られるメッセージv'iが、出力ポートP722から出力される。
次に、図35は、図33右側に示したチェックノード演算時の図32のメッセージ計算部221の実質的な構成例を示している。
なお、上述したように、チェックノード演算時には、セレクタ700,705,712、および715はc端子を選択するが、図35では、図32に図示した構成のうちの、セレクタ700,705,712、および715がc端子を選択することによってチェックノード演算時に機能しない部分(チェックノード演算に関係がない部分)の図示を省略してある。
チェックノード演算時においては、入力ポートP701には、メッセージメモリ104から1つずつ読み出された、検査行列の各列に対応するバリアブルノードからのバリアブルノードメッセージviから得られたメッセージ(式(11)および式(12)のバリアブルノード演算によって求められたメッセージ)v'iが、順次、メッセージD701として供給される。
入力ポートP701に供給されたメッセージD701(メッセージv'i)のうちの最上位ビットを除く下位ビット、つまり、メッセージD701の絶対値D703(|v'i|)は、セレクタ700のc端子に供給され、最上位ビット、つまりメッセージD701の符号ビットD704は、EXOR回路706に供給される。
セレクタ700は、チェックノード演算時にはc端子を選択しており、そのc端子に供給される、メッセージD701の絶対値D703(|v'i|)を、絶対値D705(|v'i|)として、演算器701に供給する。
演算器701は、絶対値D705(|v'i|)とレジスタ702に格納されている値D706とを加算することにより、絶対値D705を積算し、その結果得られる積算値をレジスタ702に再格納する。なお、検査行列の1行に亘る全ての枝からの(メッセージviから得られた)メッセージD701(v'i)の絶対値D705(D703)(|v'i|)が積算された場合、レジスタ702はリセットされる。
検査行列の1行に亘る(メッセージviから得られた)メッセージD701が1つずつ読み込まれ、レジスタ702に1行分の絶対値D705が積算された積算値が格納された場合、セレクタ703は、レジスタ702に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD701(メッセージv'i)が積算された積算値D706(i=1からi=dcまでのΣ|v'i|)を選択し、レジスタ704に出力して格納させる。レジスタ704は、格納している積算値D706を、値D707として、セレクタ703と演算器710に供給する。
レジスタ702に1行分の絶対値D705が積算された積算値が格納される直前までは、セレクタ703は、レジスタ704から供給された値D707を選択し、レジスタ704に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD701(メッセージv'i)の絶対値|v'i|が積算されるまで、レジスタ704は、前回積算された絶対値|v'i|の積算値を、セレクタ703と演算器710に供給する。
一方、レジスタ704から新たな値D707(i=1からi=dcまでのΣ|v'i|)の出力が開始されると、即ち、レジスタ704に1行分の絶対値D705(|v'i|)が積算された積算値(i=1からi=dcまでのΣ|v'i|)が格納された直後、メッセージ計算部221において、メッセージD701(メッセージv'i)と同一のメッセージDD701、即ち、メッセージメモリ104からの2回目のメッセージv'i(1回目のメッセージv'iと同一のメッセージ)が、入力ポートPD701から1つずつ入力され、そのメッセージDD701(v'i)のうちのその最上位ビットを除く下位ビット、つまり、メッセージDD701の絶対値D711(|v'i|)が、セレクタ705のc端子に供給されるとともに、最上位ビット、つまりメッセージDD701(v'i)の符号ビットD712(sign(v'i))が、EXOR回路714に供給される。
セレクタ705は、チェックノード演算時にはc端子を選択しており、そのc端子に供給されるメッセージDD701(v'i)の絶対値D711(|v'i|)を、絶対値D713(|v'i|)として、演算器710に供給する。
演算器710は、レジスタ704から供給された値D707(Σ|v'i|)から、セレクタ705から供給された値D713(|v'i|)を減算し、その減算結果を、減算値D714として出力する。即ち、演算器710は、検査行列の1行に亘る全ての枝からのメッセージD701(メッセージv'i)の絶対値|v'i|の積算値D707(i=1からi=dcまでのΣ|v'i|)から、求めたい枝からのメッセージDD701(i=dcのv'i)の絶対値D713(|v'i|)を減算して、その減算値(i=1からi=dc−1までのΣ|v'i|)を値D714として、セレクタ712のC端子に供給する。
セレクタ712は、チェックノード演算時には、c端子を選択しており、そのc端子に供給される値D714(i=1からi=dc−1までのΣ|v'i|)を、値D718として、LUT713に供給する。
LUT713は、セレクタ712からの値D718(Σ|v'i|)を引数として、逆関数φ-1(Σ|v'i|)の演算を行った演算結果D719(φ-1(Σ|v'i|))を読み出して出力する。
以上の処理と並行して、EXOR回路706は、レジスタ707に格納されている値D709と、1回目のメッセージD701(メッセージv'i)の最上位ビットである符号ビットD704(sign(v'i))との排他的論理和を演算することにより、符号ビットD704どうしの乗算を行い、乗算結果D708を、レジスタ707に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD701の符号ビットD704が乗算された場合、レジスタ707はリセットされる。
検査行列の1行に亘る全ての枝からのメッセージD701の符号ビットD704が乗算された乗算結果D708(i=1からdcまでのΠsign(v'i))がレジスタ707に格納された場合、セレクタ708は、レジスタ707に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD701の符号ビットD704が乗算された値D709(i=1からi=dcまでのΠsign(v'i))を選択し、レジスタ709に出力して格納させる。レジスタ709は、格納している値D710を、セレクタ708とEXOR回路714に供給する。
検査行列の1行に亘る全ての枝からのメッセージD701の符号ビットD704が乗算された乗算結果D708(i=1からdcまでのΠsign(v'i))がレジスタ707に格納される直前までは、セレクタ708は、レジスタ709から供給された値D710を選択し、レジスタ709に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD701(メッセージv'i)の符号ビットD704が乗算されるまで、レジスタ709は、前回格納した値を、セレクタ708とEXOR回路714に供給する。
一方、レジスタ709から新たな値D710(i=1からi=dcまでのΠsign(v'i))がEXOR回路714に供給されたとき、即ち、レジスタ707に1行に亘る全ての枝からのメッセージD701の符号ビットD704が乗算された値D709(i=1からi=dcまでのΠsign(v'i))が格納されたとき、レジスタ704には、上述したように、1行分の絶対値D705(|v'i|)が積算された積算値(i=1からi=dcまでのΣ|v'i|)が格納される。
レジスタ704に1行分の絶対値D705が積算された積算値(i=1からi=dcまでのΣ|v'i|)が格納されると、上述したように、メッセージ計算部221において、メッセージD701(メッセージv'i)と同一のメッセージDD701、即ち、メッセージメモリ104からの2回目のメッセージv'iが、入力ポートPD701から1つずつ入力され、そのメッセージDD701のうちのその最上位ビットを除く下位ビット、つまり、メッセージDD701の絶対値(|v'i|)が、セレクタ705のc端子に供給されるとともに、最上位ビット、つまりメッセージDD701の符号ビットD712(sign(v'i))が、EXOR回路714に供給される。
EXOR回路714は、レジスタ709から供給された値D710と、入力ポートPD701からのメッセージDD701の符号ビットD712との排他的論理和を演算することにより、値D710を、メッセージDD701の符号ビットD712で除算し、除算結果を除算値D720として、セレクタ715のc端子に供給する。即ち、EXOR回路714は、検査行列の1行に亘る全ての枝からのメッセージD701の符号ビットD704の乗算値(i=1からi=dcまでのΠsign(v'i))を、求めたい枝からのメッセージv'iとしてのメッセージDD701の符号ビットD712(i=dcのsign(v'i))で除算して、その除算値(i=1からi=dc−1までのΠsign(v'i))を除算値D720として、セレクタ715のc端子に供給する。
セレクタ715は、チェックノード演算時にはc端子を選択しており、そのc端子に供給される除算値D720(i=1からi=dc−1までのΠsign(v'i))を、符号ビットD721として出力する。
そして、メッセージ計算部221では、以上のようにしてセレクタ715から出力されたD721(Πsign(v'i))を、LUT713が出力する演算結果D719(φ-1(Σ|v'i|))に符号ビットとして付加(乗算)することにより、式(13)で表されるメッセージ(チェックノードメッセージ)ujを得て、メッセージD722として、出力ポートP722から出力する。
以上のように、セレクタ700,705,712、および715がc端子を選択しているメッセージ計算部221では、式(13)のチェックノード演算が行われ、その結果得られるメッセージujが、出力ポートP722から出力される。
なお、図31の復号装置では、復号の最終段において、式(11)および式(12)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が、最終的な復号結果として出力される。
また、図31の復号装置において、制御部222は、メッセージメモリ104に対するメッセージ(データ)の読み書き制御として、図15のフローチャートで説明したように、図12の復号装置の制御部174と同様の読み書き制御を行う。
さらに、図31の復号装置のメッセージメモリ104に対するメッセージの読み書きのタイミングも、図12の復号装置について説明した図16の場合と同様であり、図31の復号装置についても、多少の高速動作が必要となるが、遅延メモリを設ける必要がない分、装置規模を低減することができる。さらに、図31の復号装置では、メッセージ計算部221において、バリアブルノードの演算を行う回路と、チェックノードの演算を行う回路との一部(演算器701、レジスタ702、セレクタ703、レジスタ704、演算器710、およびLUT713)が共有化されているので、その共有化の分だけ、図12の復号装置よりも規模を削減することができる。
また、図31の復号装置のメッセージ計算部221では、ノードから出力された出力データxの絶対値|x|を引数として、同一の演算結果が得られる逆関数φ-1(x)と非線形関数φ(x)の演算をそれぞれ含む式(12)と式(13)をそれぞれ用いたバリアブルノード演算とチェックノード演算が行われる。
従って、メッセージ計算部221には、図32に示したように、出力データxの絶対値|x|に対して、逆関数φ-1(x)と非線形関数φ(x)の演算を行うLUT713の1つだけあれば済み、図22に示したLUT300,310、および314の3つのLUTを必要とするメッセージ計算部201、さらには、図27に示したLUT600および610の2つのLUTを必要とするメッセージ計算部211よりも、規模を削減することができる。
次に、図36は、本発明を適用した復号装置の第5実施の形態の構成例を示すブロック図である。なお、図中、図21の復号装置の場合と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。即ち、図36の復号装置は、メッセージ計算部201に代えて、メッセージ計算部231が設けられているとともに、制御部202に代えて、制御部232が設けられている他は、図21の復号装置と同様に構成されている。
図36の復号装置では、メッセージ計算部231が、図21の復号装置のメッセージ計算部201と同様に、バリアブルノード演算を行う回路と、チェックノード演算を行う回路との一部を共有する構成となっている。さらに、図36の復号装置は、バリアブルノード演算とチェックノード演算とを行うメッセージ計算部231が、遅延メモリを設けずに構成されている。
図36の復号装置では、メッセージメモリ104からメッセージ計算部231に、入力メッセージが1つずつ読み出され、メッセージ計算部231において、その入力メッセージを用いて、所望の枝に対応する出力メッセージが計算される。そして、その計算によって求められた出力メッセージが、メッセージメモリ104に格納されていく。図36の復号装置では、以上の処理が繰り返し行われ、フルシリアルの繰り返し復号が行われる。
即ち、受信データメモリ105には、送信されてきたLDPC符号を受信することにより得られる、符号の0(または1)らしさを表す対数尤度比である受信データ(LDPC符号)D100が供給され、受信データメモリ105は、その受信データD100を格納(記憶)する。
バリアブルノード演算時には、受信データメモリ105は、制御部232から供給される制御信号にしたがって、記憶している受信データを読み出し、受信データD101として、メッセージ計算部231に供給する。
また、バリアブルノード演算時には、メッセージメモリ104は、制御部232から供給される制御信号にしたがい、記憶している同一のメッセージを2回読み出して、1回目に読み出したメッセージをメッセージD801として、メッセージ計算部231に供給し、2回目に読み出したメッセージもメッセージD801として、メッセージ計算部231に供給する。メッセージ計算部231は、メッセージメモリ104から2回供給されるメッセージD801、および受信データメモリ105から供給される受信データD101を用い、制御部232から供給される制御信号D203にしたがって、式(1)のバリアブルノード演算を行い、そのバリアブルノード演算の結果得られたメッセージ(バリアブルノードメッセージ)viを、メッセージD802として、メッセージメモリ104に供給する。
そして、メッセージメモリ104は、制御部232から供給される制御信号にしたがい、メッセージ計算部231から供給されるメッセージD802(バリアブルノードメッセージvi)を記憶する。
一方、チェックノード演算時には、メッセージメモリ104は、制御部232から供給される制御信号にしたがって、記憶している同一のメッセージ(バリアブルノードメッセージvi)を2回読み出して、1回目に読み出したメッセージをメッセージD801として、メッセージ計算部231に供給し、2回目に読み出したメッセージもメッセージD801として、メッセージ計算部231に供給する。
メッセージ計算部231は、メッセージメモリ104から2回供給されるメッセージD801を用い、制御部232からの制御信号D203にしたがって、式(7)のチェックノード演算を行い、そのチェックノード演算によって求められたメッセージ(チェックノードメッセージ)ujを、メッセージD802として、メッセージメモリ104に供給する。
そして、メッセージメモリ104は、制御部232から供給される制御信号にしたがい、メッセージ計算部231から供給されるメッセージD802(チェックノードメッセージuj)を記憶する。
メッセージメモリ104が記憶したメッセージ計算部231からのメッセージD802、即ち、チェックノードメッセージujは、次のバリアブルノード演算時に、メッセージD801として2回読み出され、メッセージ計算部231に供給される。
図37は、図36のメッセージ計算部231の構成例を示している。
なお、図中、図22のメッセージ計算部201と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。
メッセージ計算部231は、図22のメッセージ計算部201と同様に、遅延メモリを設けずに構成されている。
また、図22のメッセージ計算部201は、入力ポートP101およびP203の他に、外部から1回目のメッセージが供給(入力)される入力ポートP201と、2回目のメッセージが供給される入力ポートPD201を有していたが、メッセージ計算部231では、その2つの入力ポートP201とPD201に代えて、1つの入力ポートP801が設けられており、1回目のメッセージおよび2回目のメッセージのいずれも、入力ポートP801から入力されるようになっている。
入力ポートP101には、受信データメモリ105から読み出された受信データD101が供給(入力)される。また、入力ポートP801には、メッセージメモリ104から2回読み出される同一のメッセージD801(1回目のメッセージと2回目のメッセージ)が供給される。
メッセージ計算部231は、入力ポートP801から入力される1回目のメッセージD801と2回目のメッセージD801、さらには、必要に応じて、入力ポートP101から入力されるメッセージ(受信データ)を用い、入力ポートP203から入力される制御信号D203にしたがって、式(1)のバリアブルノード演算または式(7)のチェックノード演算を行い、その結果得られるメッセージD802を、出力ポートP802から出力する。
即ち、入力ポートP101に供給された受信データD101は、演算器313に供給され、入力ポートP801に供給された1回目のメッセージD801は、セレクタ301のv端子に供給される。
さらに、入力ポートP801に供給された1回目のメッセージD801のうちの最上位ビットを除く下位ビット、即ち、メッセージD801の絶対値は、値D303として、LUT300に供給され、1回目のメッセージD801のうちの最上位ビット、即ち、メッセージD801の符号ビットは、値D304として、EXOR回路306に供給されるとともに、値D313として、EXOR回路315に供給される。
また、入力ポートPD801に供給された2回目のメッセージD801も、1回目のメッセージD801と同様に、メッセージ計算部231の各部に供給される。即ち、入力ポートP801に供給された2回目のメッセージD801は、セレクタ301のv端子に供給される。さらに、入力ポートP801に供給された2回目のメッセージD801の絶対値は、値D303として、LUT300に供給され、2回目のメッセージD801の符号ビットは、値D304として、EXOR回路306に供給されるとともに、値D313として、EXOR回路315に供給される。
また、入力ポートP203に供給された制御信号D203は、セレクタ301および316に供給される。
セレクタ301および316は、v端子とc端子とを有し、制御信号D203にしたがい、v端子またはc端子のうちのいずれかに供給される値を選択して、後段に出力する。即ち、セレクタ301および316は、制御信号D203がバリアブルノード演算を指示する制御信号である場合には、v端子に供給される値を選択して後段に出力し、制御信号D203がチェックノード演算を指示する制御信号である場合には、c端子に供給される値を選択して後段に出力する。
その結果、図37のメッセージ計算部231では、図22のメッセージ計算部201と同様に、制御信号D203がバリアブルノード演算を指示しているときには、バリアブルノード演算が行われ、制御信号D203がチェックノード演算を指示しているときには、チェックノード演算が行われる。
図38は、バリアブルノード演算時の図37のメッセージ計算部231の実質的な構成例を示している。
なお、上述したように、バリアブルノード演算時には、セレクタ301および316はv端子を選択するが、図38では、図37に図示した構成のうちの、セレクタ301および316がv端子を選択することによってバリアブルノード演算時に機能しない部分(バリアブルノード演算に関係がない部分)の図示を省略してある。
メッセージ計算部231は、入力ポートP101,P801それぞれから入力されるメッセージを用いて、式(1)のバリアブルノード演算を行い、その結果得られるメッセージD802を、出力ポートP802から出力する。
即ち、入力ポートP101には、受信データメモリ105から読み出された受信データD101が供給される。また、入力ポートP801には、メッセージメモリ104から1つずつ読み出された、検査行列の各行に対応するチェックノードからの1回目のメッセージD801(チェックノードメッセージuj)が供給される。
入力ポートP101に供給された受信データD101は、演算器313に供給される。
また、入力ポートP801に供給されたメッセージD801(メッセージuj)は、セレクタ301のv端子に供給され、バリアブルノード演算時にはv端子を選択しているセレクタ301から、メッセージD306として、演算器302(と演算器312)に供給される。
演算器302は、セレクタ301からのメッセージD306(メッセージuj)とレジスタ303に格納されている値D307とを加算することにより、メッセージD306を積算し、その結果得られる積算値を、レジスタ303に再格納する。なお、検査行列の1列に亘る全ての枝からのメッセージD306が積算された場合、レジスタ303はリセットされる。
検査行列の1列に亘るメッセージD801が1つずつ読み込まれ、レジスタ303に1列分のメッセージD306が積算された値が格納された場合、即ち、レジスタ303に、検査行列の1列に亘る全ての枝からのメッセージD306(メッセージuj)が積算された積算値(j=1からdVまでのΣuj)が格納された場合、セレクタ304は、レジスタ303に格納されている値、即ち、検査行列の1列に亘る全ての枝からのメッセージD306(メッセージuj)が積算された積算値D307(j=1からdVまでのΣuj)を選択し、レジスタ305に出力して格納させる。
レジスタ305は、格納している値D307を、値D308として、セレクタ304と演算器312に供給する。レジスタ303に1列分のメッセージD306が積算された値が格納される直前までは、セレクタ304は、レジスタ305から供給された値D308を選択し、レジスタ305に出力し再格納させる。即ち、検査行列の1列に亘る全ての枝からのメッセージD306(メッセージuj)が積算されるまで、レジスタ305は、前回積算された値を、セレクタ304と演算器312に供給する。
一方、レジスタ305から新たな値D308(j=1からdVまでのΣuj)の出力が開始されると、即ち、レジスタ303に1列分のメッセージD801(uj)が積算された積算値(j=1からdVまでのΣuj)が格納された直後、メッセージ計算部231においては、メッセージD801(メッセージuj)と同一のメッセージD801、即ち、メッセージメモリ104からの2回目のメッセージujが、入力ポートP801から1つずつ入力され、そのメッセージD801が、セレクタ301のv端子に供給される。
セレクタ301は、上述したように、v端子を選択しており、そのv端子に供給されるメッセージ(2回目のメッセージuj)D801を、メッセージD315として、演算器312に供給する(とともに、メッセージD306として演算器302に供給する)。
演算器312は、レジスタ305から供給された積算値D308から、入力ポートP801からセレクタ301を介して供給されたメッセージD315を減算する。即ち、演算器312では、検査行列の1列に亘る全ての枝からのメッセージD801(メッセージuj)の積算値D308(j=1からdvまでのΣuj)から、求めたい枝からのメッセージuj(j=dvのuj)としてのメッセージD315を減算して、減算値(j=1からdv−1までのΣuj)を求め、演算器313に供給する。
演算器313は、入力ポートP101からの受信データD101と、演算器312からの減算値(j=1からdv−1までのΣuj)とを加算し、その結果得られる加算値D317を、セレクタ316のv端子に供給する。
セレクタ316は、バリアブルノード演算時にはv端子を選択しており、そのv端子に供給される演算器313からの加算値D317を、メッセージD802(メッセージvi)として、出力ポートP802から出力する。
以上のように、セレクタ301および304がv端子を選択しているメッセージ計算部231では、式(1)のバリアブルノード演算が行われ、その結果得られるメッセージ(バリアブルノードメッセージ)viが、出力ポートP802から出力される。
図39は、チェックノード演算時の図37のメッセージ計算部231の実質的な構成例を示している。
なお、上述したように、チェックノード演算時には、セレクタ301および316はc端子を選択するが、図39では、図37に図示した構成のうちの、セレクタ301および316がc端子を選択することによってチェックノード演算時に機能しない部分(チェックノード演算に関係がない部分)の図示を省略してある。
チェックノード演算時においては、入力ポートP801には、メッセージメモリ104から1つずつ読み出された、検査行列の各列に対応するバリアブルノードからのバリアブルノードメッセージviが、順次、メッセージD801として供給される。
入力ポートP801に供給されたメッセージD801(メッセージuj)のうちの最上位ビットを除く下位ビット、つまり、メッセージD801の絶対値D303(|vi|)は、LUT300に供給され、最上位ビット、つまりメッセージD801の符号ビットは、符号ビットD304として、EXOR回路306に供給される(とともに、値D313として、EXOR回路315に供給される)。
LUT300は、絶対値D303(|vi|)を引数として、非線形関数φ(|vi|)の演算を行った演算結果D305(φ(|vi|))を読み出し、セレクタ301のc端子に供給する。
セレクタ301は、チェックノード演算時にはc端子を選択しており、そのc端子に供給されるLUT300からの演算結果D305(φ(|vi|))を、演算結果D306(φ(|vi|))として、演算器302に供給する(とともに、演算結果D315(φ(|vi|))として、演算器312に供給する)。
演算器302は、演算結果D306(φ(|vi|))とレジスタ303に格納されている値D307とを加算することにより、演算結果D306を積算し、その結果得られる積算値をレジスタ303に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD801の絶対値D303(|vi|)に対する演算結果D306(φ(|vi|))が積算された場合、レジスタ303はリセットされる。
検査行列の1行に亘るメッセージD801が1つずつ読み込まれ、レジスタ303に1行分の演算結果D306が積算された積算値が格納された場合、セレクタ304は、レジスタ303に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD801(メッセージvi)から求められたφ(|vi|)が積算された積算値D307(i=1からi=dcまでのΣφ(|vi|))を選択し、レジスタ305に出力して格納させる。レジスタ305は、格納している積算値D307を、値D308として、セレクタ304と演算器312に供給する。
レジスタ303に1行分の演算結果D306が積算された積算値が格納される直前までは、セレクタ304は、レジスタ305から供給された値D308を選択し、レジスタ305に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD801(メッセージvi)から求められたφ(|vi|)が積算されるまで、レジスタ305は、前回積算されたφ(|vi|)の積算値を、セレクタ304と演算器312に供給する。
一方、レジスタ305から新たな値D308(i=1からi=dcまでのΣφ(|vi|))の出力が開始されると、即ち、レジスタ305に1行分の演算結果D306が積算された積算値(i=1からi=dcまでのΣφ(|vi|))が格納された直後、メッセージ計算部231において、メッセージメモリ104からの2回目のメッセージD801(vi)が、入力ポートP801から1つずつ入力され、そのメッセージD801の絶対値D303(|vi|)が、LUT300に供給され、メッセージD801の符号ビットが、符号ビットD313として、EXOR回路315に供給される(とともに、符号ビットD304として、EXOR回路315に供給される)。
LUT300は、メッセージD801の絶対値D303(|vi|)を引数として、非線形関数φ(|vi|)の演算を行った演算結果D305(φ(|vi|))を読み出し、セレクタ301のc端子に供給する。
セレクタ301は、チェックノード演算時にはc端子を選択しており、そのc端子に供給されるLUT300からの演算結果D305(φ(|vi|))を、演算結果D315(φ(|vi|))として、演算器312に供給する(とともに、演算結果D306として、演算器302に供給する)。
演算器312は、レジスタ305から供給された値D308から、セレクタ301から供給された値D315を減算し、その減算結果を、減算値D316としてLUT314に供給する。即ち、演算器312は、検査行列の1行に亘る全ての枝からのメッセージD801(メッセージvi)から求められたφ(|vi|)の積算値D308(i=1からi=dcまでのΣφ(|vi|))から、求めたい枝からのメッセージD801(メッセージvi)から求められたφ(|vi|)の値D315を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を減算値D316としてLUT314に供給する。
LUT314は、演算器312からの減算値D316(i=1からi=dc−1までのΣφ(|vi|))を引数として、逆関数φ-1(Σφ(|vi|))の演算を行った演算結果D318(φ-1(Σφ(|vi|)))を出力する。
以上の処理と並行して、EXOR回路306は、レジスタ307に格納されている値D310と符号ビットD304との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、乗算結果D309を、レジスタ307に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD801の符号ビットD304が乗算された場合、レジスタ307はリセットされる。
検査行列の1行に亘る全ての枝からのメッセージD801の符号ビットD304が乗算された乗算結果D309(i=1からdcまでのΠsign(vi))がレジスタ307に格納された場合、セレクタ308は、レジスタ307に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD801の符号ビットD304が乗算された値D310(i=1からi=dcまでのΠsign(vi))を選択し、レジスタ309に出力して格納させる。レジスタ309は、格納している値D311を、セレクタ308とEXOR回路315に供給する。
検査行列の1行に亘る全ての枝からのメッセージD801の符号ビットD304が乗算された乗算結果D309(i=1からdcまでのΠsign(vi))がレジスタ307に格納される直前までは、セレクタ308は、レジスタ309から供給された値D311を選択し、レジスタ309に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD801(メッセージvi)の符号ビットD304が乗算されるまで、レジスタ309は、前回格納した値を、セレクタ308とEXOR回路315に供給する。
一方、レジスタ309から新たな値D311(i=1からi=dcまでのΠsign(vi))がEXOR回路315に供給されたとき、即ち、レジスタ307に1行に亘る全ての枝からのメッセージD801の符号ビットD304が乗算された値D310(i=1からi=dcまでのΠsign(vi))が格納されたとき、レジスタ305には、上述したように、1行分の演算結果D306(φ(|vi|))が積算された積算値(i=1からi=dcまでのΣφ(|vi|))が格納される。
レジスタ305に1行分の演算結果D306(φ(|vi|))が積算された積算値(i=1からi=dcまでのΣφ(|vi|))が格納されると、上述したように、メッセージ計算部231において、メッセージメモリ104からの2回目のメッセージD801(vi)が、入力ポートP801から1つずつ入力され、その2回目のメッセージD801のD303絶対値(|vi|)が、LUT300に供給され、2回目のメッセージD801の符号ビットが、符号ビットD313として、EXOR回路315に供給される(とともに、符号ビットD304として、EXOR回路306に供給される)。
EXOR回路315は、レジスタ309から供給された値D311と、入力ポートP801からの2回目のメッセージD801の符号ビットD313との排他的論理和を演算することにより、値D311を、符号ビットD313で除算し、除算結果を除算値D319として出力する。即ち、EXOR回路315は、検査行列の1行に亘る全ての枝からのメッセージD801の符号ビットD304の乗算値(i=1からi=dcまでのΠsign(vi))を、求めたい枝からのメッセージviの符号ビットD313(i=dcのsign(vi))で除算して、その除算値(i=1からi=dc−1までのΠsign(vi))を除算値D319として出力する。
そして、メッセージ計算部231では、LUT314から出力された演算結果D318を下位ビットとするとともに、EXOR回路315から出力された除算値D319を最上位ビット(符号ビット)とするビット列D320(メッセージuj)が、セレクタ316のc端子に供給される。
セレクタ316は、チェックノード演算時にはc端子を選択しており、そのc端子に供給されるビット列D320(メッセージuj)を、メッセージD802(メッセージvi)として、出力ポートP802から出力する。
以上のように、セレクタ301および316がc端子を選択しているメッセージ計算部231では、式(7)のチェックノード演算が行われ、その結果得られるメッセージ(チェックノードメッセージ)ujが、出力ポートP802から出力される。
なお、図示しないが、図36の復号装置では、復号の最終段において、式(1)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が、最終的な復号結果として出力される。
また、図36の復号装置において、制御部232は、メッセージメモリ104に対するメッセージ(データ)の読み書き制御として、図15のフローチャートで説明したように、図12の復号装置の制御部174と同様の読み書き制御を行う。
但し、図36の復号装置のメッセージメモリ104に対するメッセージの読み書きのタイミングは、メッセージ計算部231が、メッセージメモリ104からのメッセージを入力する入力ポートとして、1つの入力ポートP801しか有しないために、図12の復号装置について説明した図16の場合と異なる。
即ち、図40は、図36の復号装置のメッセージメモリ104に対するメッセージの読み書きのタイミングを示すタイミングチャートである。
図40のタイミングチャートは、図16のタイミングチャートと同様に、メッセージメモリ104を構成するRAM#AとRAM#Bのそれぞれに対する読み書きのタイミングを表している。
図40においては、まず最初に、あるノードnode#1からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Aからの1回目の読み出しが行われる(R1(node#1))。その読み出しの終了後、ノードnode#1からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Aからの2回目の読み出しが行われる(R2(node#1))。このとき、図16では、次のノードnode#2からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Bからの1回目の読み出しが行われる(R1(node#2))が、図36の復号装置のメッセージ計算部231は、(メッセージメモリ104からのメッセージを入力する入力ポートとして)1つの入力ポートP801しか有しないため、図40では、次のノードnode#2からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Bからの1回目の読み出し(R1(node#2))は、まだ行われない。
ノードnode#1からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Aからの2回目の読み出しが終了し、メッセージ計算部231において、ノードnode#1からの出力メッセージが求められると、そのノードnode#1からの出力メッセージがRAM#Aに書き込まれる(W(node#1))のと同時に、ノードnode#2からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Bからの1回目の読み出しが行われる(R1(node#2))。
ノードnode#2からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Bからの1回目の読み出しが終了すると、続けて、ノードnode#2からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Bからの1回目の読み出しが行われ(R2(node#2))、メッセージ計算部231において、ノードnode#2からの出力メッセージが求められる、そして、ノードnode#2からの出力メッセージが求められると、そのノードnode#2からの出力メッセージがRAM#Bに書き込まれる(W(node#2))のと同時に、次のノードnode#3からの出力メッセージを求めるのに必要な入力メッセージの、RAM#Aからの1回目の読み出しが行われる(R1(node#3))。
以下、同様にして、メッセージメモリ104を構成するRAM#AとRAM#Bのそれぞれに対するメッセージの読み書きが行われていく。
図16と図40とを比較してわかるように、図36の復号装置では、出力メッセージを求めるのに、図16の場合よりも時間を要することになるが、それでも、遅延メモリなしで復号を行うことができるので、復号装置の規模を削減することができる。
なお、メッセージ計算部231(図37)のように、メッセージメモリ104からの入力メッセージが入力される入力ポートを1ポートとする構成は、図12のメッセージ計算部171のバリアブルノード計算器172(図13)およびチェックノード計算器173(図14)や、図22のメッセージ計算部201、図27のメッセージ計算部211、図32のメッセージ計算部221でも採用することが可能である。
また、メッセージメモリ104は、RAM#AとRAM#Bとの2バンクで構成する他、3以上のRAMで3バンク以上に構成することも可能である。
次に、制御部174(図12)等が行う図15に示したメッセージメモリ104に対する読み書き制御の処理は、専用のハードウェアにより行うこともできるし、ソフトウェアにより行うこともできる。一連の処理をソフトウェアによって行う場合には、そのソフトウェアを構成するプログラムが、マイクロコンピュータ(いわゆるマイコン)等のコンピュータにインストールされる。
そこで、図41は、上述した一連の処理を実行するプログラムがインストールされるコンピュータの一実施の形態の構成例を示している。
プログラムは、コンピュータに内蔵されている記録媒体としての不揮発性メモリ905やROM903に予め記録しておくことができる。
あるいはまた、プログラムは、フレキシブルディスク、CD-ROM(Compact Disc Read Only Memory),MO(Magneto Optical)ディスク,DVD(Digital Versatile Disc)、磁気ディスク、半導体メモリなどのリムーバブル記録媒体に、一時的あるいは永続的に格納(記録)しておくことができる。
なお、プログラムは、上述したようなリムーバブル記録媒体911から、あるいはネットワークを経由してコンピュータにインストールすることができる。
コンピュータは、CPU(Central Processing Unit)902を内蔵している。CPU902には、バス901を介して、入出力インタフェース906が接続されており、CPU902は、ROM(Read Only Memory)903や不揮発性メモリ905にインストールされたプログラムを、RAM(Random Access Memory)904にロードして実行する。これにより、CPU902は、入出力インタフェース906を介して、メッセージメモリ104に対する読み書き制御を行う。
ここで、本明細書において、コンピュータに各種の処理を行わせるためのプログラムを記述する処理ステップは、必ずしもフローチャートとして記載された順序に沿って時系列に処理する必要はなく、並列的あるいは個別に実行される処理(例えば、並列処理あるいはオブジェクトによる処理)も含むものである。
また、プログラムは、1のコンピュータにより処理されるものであっても良いし、複数のコンピュータによって分散処理されるものであっても良い。
なお、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
LDPC符号の検査行列Hを説明する図である。 LDPC符号の復号手順を説明するフローチャートである。 メッセージの流れを説明する図である。 LDPC符号の検査行列の例を示す図である。 検査行列のタナーグラフを示す図である。 バリアブルノードを示す図である。 チェックノードを示す図である。 従来の復号装置の一例の構成を示すブロック図である。 メッセージを1つずつ計算するバリアブルノード計算器102の構成例を示すブロック図である。 メッセージを1つずつ計算するチェックノード計算器103の構成例を示すブロック図である。 メッセージメモリ104に対するメッセージの読み書きの従来のタイミングを示すタイミングチャートである。 本発明を適用した復号装置の第1実施の形態の構成例を示すブロック図である。 バリアブルノード計算器172の構成例を示すブロック図である。 チェックノード計算器173の構成例を示すブロック図である。 メッセージメモリ104に対する読み書き制御の処理を説明するフローチャートである。 メッセージメモリ104に対するメッセージの読み書きのタイミングを示すタイミングチャートである。 バリアブルノード演算を行う回路とチェックノード演算を行う回路との一部が共有化された復号装置の構成例を示すブロック図である。 メッセージ計算部191の構成例を示すブロック図である。 バリアブルノード演算時のメッセージ計算部191の実質的な構成を示すブロック図である。 チェックノード演算時のメッセージ計算部191の実質的な構成を示すブロック図である。 本発明を適用した復号装置の第2実施の形態の構成例を示すブロック図である。 メッセージ計算部201の構成例を示すブロック図である。 メッセージ計算部201が行うバリアブルノード演算とチェックノード演算を説明する図である。 バリアブルノード演算時のメッセージ計算部201の実質的な構成を示すブロック図である。 チェックノード演算時のメッセージ計算部201の実質的な構成を示すブロック図である。 本発明を適用した復号装置の第3実施の形態の構成例を示すブロック図である。 メッセージ計算部211の構成例を示すブロック図である。 メッセージ計算部211が行うバリアブルノード演算とチェックノード演算を説明する図である。 バリアブルノード演算時のメッセージ計算部211の実質的な構成を示すブロック図である。 チェックノード演算時のメッセージ計算部211の実質的な構成を示すブロック図である。 本発明を適用した復号装置の第4実施の形態の構成例を示すブロック図である。 メッセージ計算部221の構成例を示すブロック図である。 メッセージ計算部221が行うバリアブルノード演算とチェックノード演算を説明する図である。 バリアブルノード演算時のメッセージ計算部221の実質的な構成を示すブロック図である。 チェックノード演算時のメッセージ計算部221の実質的な構成を示すブロック図である。 本発明を適用した復号装置の第5実施の形態の構成例を示すブロック図である。 メッセージ計算部231の構成例を示すブロック図である。 バリアブルノード演算時のメッセージ計算部231の実質的な構成を示すブロック図である。 チェックノード演算時のメッセージ計算部231の実質的な構成を示すブロック図である。 メッセージメモリ104に対するメッセージの読み書きのタイミングを示すタイミングチャートである。 本発明を適用したコンピュータの一実施の形態の構成例を示すブロック図である。
符号の説明
104 メッセージメモリ, 105 受信データメモリ, 121 LUT, 122 演算器, 123 レジスタ, 124 セレクタ, 125 レジスタ, 126 演算器, 128 LUT, 129 EXOR回路, 130 レジスタ, 131 セレクタ, 132 レジスタ, 134 EXOR回路, 135 LUT, 151 演算器, 152 レジスタ, 153 セレクタ, 154 レジスタ, 156,157 演算器, 171 メッセージ計算部, 172 バリアブルノード計算器, 173 チェックノード計算器, 174 制御部, 191 メッセージ計算部, 192 制御部, 201 メッセージ計算部, 202 制御部, 211 メッセージ計算部, 212 制御部, 221 メッセージ計算部, 222 制御部, 231 メッセージ計算部, 232 制御部, 300 LUT, 301 セレクタ, 302 演算器, 303 レジスタ, 304 セレクタ, 305 レジスタ, 306 EXOR回路, 307 レジスタ, 308 セレクタ, 309 レジスタ, 310 LUT, 311 セレクタ, 312,313 演算器, 214 LUT, 315 EXOR回路, 316 セレクタ, 320 FIFOメモリ, 600 LUT, 601 セレクタ, 602 演算器, 603 レジスタ, 604 セレクタ, 605 レジスタ, 606 EXOR回路, 607 レジスタ, 608 セレクタ, 609 レジスタ, 610 LUT, 611 セレクタ, 612,613 演算器, 614 EXOR回路, 615 セレクタ, 700 セレクタ, 701 演算器, 702 レジスタ, 703 セレクタ, 704 レジスタ, 705 セレクタ, 706 EXOR回路, 707 レジスタ, 708 セレクタ, 709 レジスタ, 710,711 演算器, 712 セレクタ, 713 LUT, 714 EXOR回路, 715 セレクタ, 901 バス, 902 CPU, 903 ROM, 904 RAM, 905 不揮発性メモリ, 906 入出力インタフェース

Claims (8)

  1. LDPC(Low Density Parity Check)符号を復号する復号装置であって、
    供給されるメッセージを用いて、前記LDPC符号の復号のためのバリアブルノードの演算と、チェックノードの演算、選択的に行い、演算の結果得られるメッセージを出力するメッセージ計算手段と、
    前記メッセージを記憶する記憶手段と、
    前記メッセージ計算手段が出力するメッセージを前記記憶手段に書き込む書き込み制御と、前記メッセージ計算手段での演算に用いられる同一のメッセージを、前記記憶手段から2回読み出し、前記メッセージ計算手段に供給する読み出し制御とを行う制御手段と
    を備え
    前記メッセージ計算手段において、バリアブルノードの演算を行う回路と、チェックノードの演算を行う回路との一部が共有化されている
    号装置。
  2. 前記メッセージ計算手段は、前記記憶手段から2回読み出される同一のメッセージのうちの1回目に読み出されるメッセージが供給されるポートと、2回目に読み出されるメッセージが供給されるポートとの2つのポートを有する
    請求項1に記載の復号装置。
  3. 前記メッセージ計算手段は、
    チェックノードに入力される入力データxに対して、非線形関数φ(x)=-ln(tanh(x/2))の演算結果を出力する1のLUT(Look Up Table)と、
    チェックノードから出力された出力データxに対して、前記非線形関数の逆関数φ-1(x)=2tanh-1(e-x)の演算結果を出力する他の1のLUTと
    を有し、
    チェックノードの演算時には、データを、前記1のLUTと他の1のLUTを経由させ、
    バリアブルノードの演算時には、データを、前記1のLUTと他の1のLUTをバイパスさせる
    請求項に記載の復号装置。
  4. 前記メッセージ計算手段は、チェックノードに入力される入力データxに対して、逆関数φ-1(x)=2tanh-1(e-x)と同一の演算結果が得られる非線形関数φ(x)=-ln(tanh(x/2))の演算結果を出力するとともに、バリアブルノードに入力される入力データxに対して、前記逆関数φ-1(x)の演算結果を出力するLUT(Look Up Table)を有する
    請求項に記載の復号装置。
  5. 前記メッセージ計算手段は、バリアブルノードから出力された出力データxに対して、逆関数φ-1(x)=2tanh-1(e-x)と同一の演算結果が得られる非線形関数φ(x)=-ln(tanh(x/2))の演算結果を出力するとともに、チェックノードから出力された出力データxに対して、前記逆関数φ-1(x)の演算結果を出力するLUT(Look Up Table)を有する
    請求項に記載の復号装置。
  6. 前記記憶手段は、2以上のバンクを有する
    請求項1に記載の復号装置。
  7. LDPC(Low Density Parity Check)符号を復号する復号装置を制御する制御方法であって、
    前記復号装置は、
    供給されるメッセージを用いて、前記LDPC符号の復号のためのバリアブルノードの演算と、チェックノードの演算、選択的に行い、演算の結果得られるメッセージを出力するメッセージ計算手段と、
    前記メッセージを記憶する記憶手段と
    を備え、
    前記メッセージ計算手段において、バリアブルノードの演算を行う回路と、チェックノードの演算を行う回路との一部が共有化されており、
    前記メッセージ計算手段が出力するメッセージを前記記憶手段に書き込む書き込み制御と、前記メッセージ計算手段での演算に用いられる同一のメッセージを、前記記憶手段から2回読み出し、前記メッセージ計算手段に供給する読み出し制御とを行うステップを含む
    制御方法。
  8. LDPC(Low Density Parity Check)符号を復号する復号装置としてコンピュータを機能させるプログラムであって、
    LDPC(Low Density Parity Check)符号を復号する復号装置であって、
    供給されるメッセージを用いて、前記LDPC符号の復号のためのバリアブルノードの演算と、チェックノードの演算、選択的に行い、演算の結果得られるメッセージを出力するメッセージ計算手段と、
    前記メッセージを記憶する記憶手段と
    前記メッセージ計算手段が出力するメッセージを前記記憶手段に書き込む書き込み制御と、前記メッセージ計算手段での演算に用いられる同一のメッセージを、前記記憶手段から2回読み出し、前記メッセージ計算手段に供給する読み出し制御とを行う制御手段と
    して、コンピュータを機能させるためのプログラムであり、
    前記メッセージ計算手段において、バリアブルノードの演算を行う回路と、チェックノードの演算を行う回路との一部が共有化されている
    ログラム。
JP2005365909A 2005-12-20 2005-12-20 復号装置、制御方法、およびプログラム Expired - Fee Related JP4807063B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2005365909A JP4807063B2 (ja) 2005-12-20 2005-12-20 復号装置、制御方法、およびプログラム
EP06256425A EP1801981A3 (en) 2005-12-20 2006-12-18 Decoding device, control method, and program
US11/640,256 US7937648B2 (en) 2005-12-20 2006-12-18 Decoding device, control method, and program
CN2006100644521A CN101047390B (zh) 2005-12-20 2006-12-20 解码设备和控制方法
KR1020060130730A KR101283087B1 (ko) 2005-12-20 2006-12-20 복호장치, 제어 방법, 및 기록 매체

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005365909A JP4807063B2 (ja) 2005-12-20 2005-12-20 復号装置、制御方法、およびプログラム

Publications (2)

Publication Number Publication Date
JP2007174027A JP2007174027A (ja) 2007-07-05
JP4807063B2 true JP4807063B2 (ja) 2011-11-02

Family

ID=37944057

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005365909A Expired - Fee Related JP4807063B2 (ja) 2005-12-20 2005-12-20 復号装置、制御方法、およびプログラム

Country Status (5)

Country Link
US (1) US7937648B2 (ja)
EP (1) EP1801981A3 (ja)
JP (1) JP4807063B2 (ja)
KR (1) KR101283087B1 (ja)
CN (1) CN101047390B (ja)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8706968B2 (en) 2007-12-06 2014-04-22 Fusion-Io, Inc. Apparatus, system, and method for redundant write caching
US9104599B2 (en) 2007-12-06 2015-08-11 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for destaging cached data
KR101490327B1 (ko) 2006-12-06 2015-02-05 퓨전-아이오, 인크. 뱅크 인터리브를 이용한 솔리드-스테이트 스토리지의 명령 관리 장치, 시스템 및 방법
US8443134B2 (en) 2006-12-06 2013-05-14 Fusion-Io, Inc. Apparatus, system, and method for graceful cache device degradation
US8489817B2 (en) 2007-12-06 2013-07-16 Fusion-Io, Inc. Apparatus, system, and method for caching data
US9116823B2 (en) 2006-12-06 2015-08-25 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for adaptive error-correction coding
US9495241B2 (en) 2006-12-06 2016-11-15 Longitude Enterprise Flash S.A.R.L. Systems and methods for adaptive data storage
JP4780027B2 (ja) * 2007-04-27 2011-09-28 ソニー株式会社 復号装置、制御方法、及びプログラム
EP2203921A1 (en) 2007-10-18 2010-07-07 E. I. du Pont de Nemours and Company Lead-free conductive compositions and processes for use in the manufacture of semiconductor devices: flux materials
EP2191479A1 (en) 2007-10-18 2010-06-02 E. I. du Pont de Nemours and Company Conductive compositions and processes for use in the manufacture of semiconductor devices: flux materials
JP4626827B2 (ja) 2007-10-19 2011-02-09 ソニー株式会社 受信装置および方法、並びにプログラム
US8316277B2 (en) * 2007-12-06 2012-11-20 Fusion-Io, Inc. Apparatus, system, and method for ensuring data validity in a data storage process
US7836226B2 (en) 2007-12-06 2010-11-16 Fusion-Io, Inc. Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment
US9519540B2 (en) 2007-12-06 2016-12-13 Sandisk Technologies Llc Apparatus, system, and method for destaging cached data
US8370711B2 (en) 2008-06-23 2013-02-05 Ramot At Tel Aviv University Ltd. Interruption criteria for block decoding
JP5488472B2 (ja) * 2008-11-07 2014-05-14 日本電気株式会社 復号装置、この復号装置を有するデータ通信装置およびデータ記憶装置
JP5440836B2 (ja) * 2009-03-24 2014-03-12 ソニー株式会社 受信装置及び方法、プログラム、並びに受信システム
JP5999645B2 (ja) * 2009-09-08 2016-10-05 ロンギチュード エンタープライズ フラッシュ エスエイアールエル ソリッドステート記憶デバイス上にデータをキャッシングするための装置、システム、および方法
US9092337B2 (en) 2011-01-31 2015-07-28 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for managing eviction of data
WO2012116369A2 (en) 2011-02-25 2012-08-30 Fusion-Io, Inc. Apparatus, system, and method for managing contents of a cache
US9251052B2 (en) 2012-01-12 2016-02-02 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for profiling a non-volatile cache having a logical-to-physical translation layer
US8782344B2 (en) 2012-01-12 2014-07-15 Fusion-Io, Inc. Systems and methods for managing cache admission
US9767032B2 (en) 2012-01-12 2017-09-19 Sandisk Technologies Llc Systems and methods for cache endurance
US10102117B2 (en) 2012-01-12 2018-10-16 Sandisk Technologies Llc Systems and methods for cache and storage device coordination
US9251086B2 (en) 2012-01-24 2016-02-02 SanDisk Technologies, Inc. Apparatus, system, and method for managing a cache
US10019353B2 (en) 2012-03-02 2018-07-10 Longitude Enterprise Flash S.A.R.L. Systems and methods for referencing data on a storage medium
US9612903B2 (en) * 2012-10-11 2017-04-04 Micron Technology, Inc. Updating reliability data with a variable node and check nodes
KR101583242B1 (ko) * 2014-04-28 2016-01-08 고려대학교 산학협력단 바이패스 신호를 이용한 저밀도 패리티 검사 코드의 복호화 방법 및 그 방법에 따른 장치

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8341332B2 (en) * 2003-12-02 2012-12-25 Super Talent Electronics, Inc. Multi-level controller with smart storage transfer manager for interleaving multiple single-chip flash memory devices
US7383485B2 (en) * 2000-09-12 2008-06-03 Broadcom Corporation Fast min*- or max*-circuit in LDPC (low density parity check) decoder
US6938196B2 (en) 2001-06-15 2005-08-30 Flarion Technologies, Inc. Node processors for use in parity check decoders
US7673223B2 (en) 2001-06-15 2010-03-02 Qualcomm Incorporated Node processors for use in parity check decoders
KR100891782B1 (ko) * 2002-06-11 2009-04-07 삼성전자주식회사 고속 데이터 전송 시스템에서 순방향 오류 정정 장치 및방법
US7395487B2 (en) 2002-08-15 2008-07-01 Broadcom Corporation Common circuitry supporting both bit node and check node processing in LDPC (Low Density Parity Check) decoder
JP4062435B2 (ja) * 2002-12-03 2008-03-19 日本電気株式会社 誤り訂正符号復号装置
CN101567699B (zh) * 2003-05-13 2013-10-30 索尼株式会社 解码装置
JP4225163B2 (ja) * 2003-05-13 2009-02-18 ソニー株式会社 復号装置および復号方法、並びにプログラム
JP4288582B2 (ja) * 2003-08-08 2009-07-01 ソニー株式会社 復号装置および復号方法、並びにプログラム
JP4284600B2 (ja) * 2003-08-19 2009-06-24 ソニー株式会社 復号装置
JP4285148B2 (ja) * 2003-08-19 2009-06-24 ソニー株式会社 復号装置および復号方法、並びにプログラム
CN101924565B (zh) * 2004-04-02 2014-10-15 苹果公司 Ldpc编码器、解码器、***及方法
KR100762619B1 (ko) * 2004-05-21 2007-10-01 삼성전자주식회사 저밀도 패리티 검사 코드를 이용한 복호화 장치 및 방법
JP4282558B2 (ja) * 2004-06-30 2009-06-24 株式会社東芝 低密度パリティチェック符号復号器及び方法
BRPI0515948A (pt) * 2004-10-01 2008-08-12 Thomson Licensing decodificador de verificação de paridade de baixa densidade (ldpc)
KR20060032464A (ko) * 2004-10-12 2006-04-17 삼성전자주식회사 효율적인 저밀도 패리티 검사 코드 복호 방법 및 장치
KR100703271B1 (ko) * 2004-11-23 2007-04-03 삼성전자주식회사 통합노드 프로세싱을 이용한 저밀도 패리티 검사 코드복호 방법 및 장치
US8078933B2 (en) * 2005-05-18 2011-12-13 The Governors Of The University Of Alberta Decoder for low-density parity-check convolutional codes
JP2006339799A (ja) * 2005-05-31 2006-12-14 Toshiba Corp イレギュラー低密度パリティチェック符号復号器及び方法
US7398453B2 (en) * 2005-10-03 2008-07-08 Motorola, Inc. Method and apparatus for a low-density parity-check decoder
US20090013239A1 (en) * 2007-07-02 2009-01-08 Broadcom Corporation LDPC (Low Density Parity Check) decoder employing distributed check and/or variable node architecture

Also Published As

Publication number Publication date
US7937648B2 (en) 2011-05-03
EP1801981A2 (en) 2007-06-27
EP1801981A3 (en) 2008-08-27
KR20070065834A (ko) 2007-06-25
KR101283087B1 (ko) 2013-07-05
CN101047390A (zh) 2007-10-03
JP2007174027A (ja) 2007-07-05
US20070204197A1 (en) 2007-08-30
CN101047390B (zh) 2012-07-04

Similar Documents

Publication Publication Date Title
JP4807063B2 (ja) 復号装置、制御方法、およびプログラム
JP4595650B2 (ja) 復号装置および復号方法
JP4224777B2 (ja) 復号方法および復号装置、並びにプログラム
KR101090001B1 (ko) 복호 장치 및 복호 방법, 및 기록 매체
JP4487213B2 (ja) 復号装置および方法、並びにプログラム
JP4487212B2 (ja) 復号装置および方法、送受信システム、受信装置および方法、並びにプログラム
JP4622654B2 (ja) 復号装置および復号方法
JP4293172B2 (ja) 復号装置および復号方法
JP2008035527A (ja) ハードウェア共用および直列和積アーキテクチャを用いる低密度パリティ検査復号の方法および装置
Shimizu et al. Partially-parallel LDPC decoder based on high-efficiency message-passing algorithm
JP2007036776A (ja) 復号装置および復号方法
JP4285148B2 (ja) 復号装置および復号方法、並びにプログラム
JP2008301152A (ja) 復号装置および方法、並びにプログラム
JP4780027B2 (ja) 復号装置、制御方法、及びプログラム
JP4729964B2 (ja) 復号装置および復号方法
JP4284600B2 (ja) 復号装置
JP4288582B2 (ja) 復号装置および復号方法、並びにプログラム
JP4821724B2 (ja) 復号装置および復号方法
JP2010028408A (ja) 情報処理装置、情報処理方法、およびプログラム
JP4822071B2 (ja) 復号装置および復号方法
JP2007020068A (ja) 復号装置および復号方法
JP2007081602A (ja) 復号装置および復号方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080828

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100527

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100608

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110331

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110623

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20110630

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110719

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110801

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

Free format text: PAYMENT UNTIL: 20140826

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees