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

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

Info

Publication number
JP4225163B2
JP4225163B2 JP2003294383A JP2003294383A JP4225163B2 JP 4225163 B2 JP4225163 B2 JP 4225163B2 JP 2003294383 A JP2003294383 A JP 2003294383A JP 2003294383 A JP2003294383 A JP 2003294383A JP 4225163 B2 JP4225163 B2 JP 4225163B2
Authority
JP
Japan
Prior art keywords
decoding
calculation
matrix
intermediate result
decoding intermediate
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
JP2003294383A
Other languages
English (en)
Other versions
JP2004364233A5 (ja
JP2004364233A (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
Priority to JP2003294383A priority Critical patent/JP4225163B2/ja
Application filed by Sony Corp filed Critical Sony Corp
Priority to US12/611,227 priority patent/USRE44420E1/en
Priority to EP04728265A priority patent/EP1624581B1/en
Priority to KR1020057000601A priority patent/KR101090001B1/ko
Priority to CN 200910147019 priority patent/CN101567699B/zh
Priority to ES10178046T priority patent/ES2426756T3/es
Priority to ES04728265T priority patent/ES2401577T3/es
Priority to EP10178046.8A priority patent/EP2270990B1/en
Priority to US10/521,054 priority patent/US7299397B2/en
Priority to PCT/JP2004/005562 priority patent/WO2004102811A1/ja
Priority to ES10178005T priority patent/ES2424463T3/es
Priority to EP10178005.4A priority patent/EP2270989B1/en
Publication of JP2004364233A publication Critical patent/JP2004364233A/ja
Publication of JP2004364233A5 publication Critical patent/JP2004364233A5/ja
Application granted granted Critical
Publication of JP4225163B2 publication Critical patent/JP4225163B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1148Structural properties of the code parity-check or generator matrix
    • H03M13/116Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices
    • H03M13/1168Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices wherein the sub-matrices have column and row weights greater than one, e.g. multi-diagonal sub-matrices
    • 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/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • 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/1114Merged schedule message passing algorithm with storage of sums of check-to-bit node messages or sums of bit-to-check node messages, e.g. in order to increase the memory efficiency
    • 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/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
    • H03M13/1145Pipelined decoding at code word level, e.g. multiple code words being decoded simultaneously
    • 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/1148Structural properties of the code parity-check or generator matrix
    • H03M13/118Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure
    • H03M13/1185Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure wherein the parity-check matrix comprises a part with a double-diagonal
    • H03M13/1188Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure wherein the parity-check matrix comprises a part with a double-diagonal wherein in the part with the double-diagonal at least one column has an odd column weight equal or greater than three
    • 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
    • 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/6577Representation or format of variables, register sizes or word-lengths and quantization

Landscapes

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

Description

本発明は、復号装置および復号方法、並びにプログラムに関し、特に、低密度パリティ検査符号(LDPC符号)による符号化が施された符号の復号を行う復号装置および復号方法、並びにプログラム
に関する。
近年、例えば、移動体通信や深宇宙通信といった通信分野、及び地上波又は衛星ディジタル放送といった放送分野の研究が著しく進められているが、それに伴い、誤り訂正符号化及び復号の効率化を目的として符号理論に関する研究も盛んに行われている。
符号性能の理論的限界としては、いわゆるシャノン(C. E. Shannon)の通信路符号化定理によって与えられるシャノン限界が知られている。符号理論に関する研究は、このシャノン限界に近い性能を示す符号を開発することを目的として行われている。近年では、シャノン限界に近い性能を示す符号化方法として、例えば、並列連接畳み込み符号(PCCC(Parallel Concatenated Convolutional Codes))や、縦列連接畳み込み符号(SCCC(Serially Concatenated Convolutional Codes))といった、いわゆるターボ符号化(Turbo coding)と呼ばれる手法が開発されている。また、これらのターボ符号が開発される一方で、古くから知られる符号化方法である低密度パリティ検査符号(Low Density Parity Check codes)(以下、LDPC符号という)が脚光を浴びつつある。
LDPC符号は、R. G. Gallagerによる「R. G. Gallager, "Low Density Parity Check Codes", Cambridge, Massachusetts: M. I. T. Press, 1963」において最初に提案されたものであり、その後、「D. J. C. MacKay, "Good error correcting codes based on very sparse matrices", Submitted to IEEE Trans. Inf. Theory, IT-45, pp. 399-431, 1999」や、「M. G. Luby, M. Mitzenmacher, M. A. Shokrollahi and D. A. Spielman, "Analysis of low density codes and improved designs using irregular graphs", in Proceedings of ACM Symposium on Theory of Computing, pp. 249-258, 1998」等において再注目されるに至ったものである。
LDPC符号は、近年の研究により、ターボ符号等と同様に、符号長を長くしていくにしたがって、シャノン限界に近い性能が得られることがわかりつつある。また、LDPC符号は、最小距離が符号長に比例するという性質があることから、その特徴として、ブロック誤り確率特性がよく、さらに、ターボ符号等の復号特性において観測される、いわゆるエラーフロア現象が殆ど生じないことも利点として挙げられる。
以下、このようなLDPC符号について具体的に説明する。なお、LDPC符号は、線形符号であり、必ずしも2元である必要はないが、ここでは、2元であるものとして説明する。
LDPC符号は、そのLDPC符号を定義する検査行列(parity check matrix)が疎なものであることを最大の特徴とするものである。ここで、疎な行列とは、行列のコンポーネントの"1"の個数が非常に少なく構成されるものであり、疎な検査行列をHで表すものとすると、そのような検査行列としては、例えば、図1に示すように、各列のハミング重み("1"の数)(weight)が"3"であり、且つ、各行のハミング重みが"6"であるもの等がある。
このように、各行及び各列のハミング重みが一定である検査行列Hによって定義されるLDPC符号は、レギュラーLDPC符号と称される。一方、各行及び各列のハミング重みが一定でない検査行列Hによって定義されるLDPC符号は、イレギュラーLDPC符号と称される。
このようなLDPC符号による符号化は、検査行列Hに基づいて生成行列Gを生成し、この生成行列Gを2元の情報メッセージに対して乗算することによって符号語を生成することで実現される。具体的には、LDPC符号による符号化を行う符号化装置は、まず、検査行列Hの転置行列HTとの間に、式GHT=0が成立する生成行列Gを算出する。ここで、生成行列Gが、k×n行列である場合には、符号化装置は、生成行列Gに対してkビットからなる情報メッセージ(ベクトルu)を乗算し、nビットからなる符号語c(=uG)を生成する。この符号化装置によって生成された符号語は、値が"0"の符号ビットが"+1"に、値が"1"の符号ビットが"−1"にといったようにマッピングされて送信され、所定の通信路を介して受信側において受信されることになる。
一方、LDPC符号の復号は、Gallagerが確率復号(Probabilistic Decoding)と称して提案したアルゴリズムであって、バリアブルノード(variable node(メッセージノード(message node)とも呼ばれる。))と、チェックノード(check node)とからなる、いわゆるタナーグラフ(Tanner graph)上での確率伝播(belief propagation)によるメッセージ・パッシング・アルゴリズムによって行うことが可能である。ここで、以下、適宜、バリアブルノードとチェックノードを、単に、ノードともいう。
しかしながら、確率復号においては、各ノード間で受け渡されるメッセージが実数値であることから、解析的に解くためには、連続した値をとるメッセージの確率分布そのものを追跡する必要があり、非常に困難を伴う解析を必要とすることになる。そこで、Gallagerは、LDPC符号の復号アルゴリズムとして、アルゴリズムA又はアルゴリズムBを提案している。
LDPC符号の復号は、一般的には、図2に示すような手順にしたがって行われる。なお、ここでは、受信値をU0(u0i)とし、チェックノードから出力されるメッセージをujとし、バリアブルノードから出力されるメッセージをviとする。また、ここでは、メッセージとは、値の"0"らしさを、いわゆる対数尤度比(log likelihood ratio)で表現した実数値である。
まず、LDPC符号の復号においては、図2に示すように、ステップS11において、受信値U0(u0i)が受信され、メッセージujが"0"に初期化されるとともに、繰り返し処理のカウンタとしての整数をとる変数kが"0"に初期化され、ステップS12に進む。ステップS12において、受信値U0(u0i)に基づいて、式(1)に示す演算を行うことによってメッセージviが求められ、さらに、このメッセージviに基づいて、式(2)に示す演算を行うことによってメッセージujが求められる。
Figure 0004225163
・・・(1)
Figure 0004225163
・・・(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 0004225163
・・・(3)
Figure 0004225163
・・・(4)
ステップS12では、さらに、変数kが"1"だけインクリメントされ、ステップS13に進む。ステップS13では、変数kが所定の繰り返し復号回数N以上であるか否かが判定される。ステップS13において、変数kがN以上ではないと判定された場合、ステップS12に戻り、以下、同様の処理が繰り返される。
また、ステップS13において、変数kがN以上であると判定された場合、ステップS14に進み、式(5)に示す演算を行うことによって最終的に出力する復号結果としてのメッセージvが求められて出力され、LDPC符号の復号処理が終了する。
Figure 0004225163
・・・(5)
ここで、式(5)の演算は、式(1)の演算とは異なり、バリアブルノードに接続している全ての枝からの入力メッセージを用いて行われる。
このようなLDPC符号の復号は、例えば(3,6)符号の場合には、図3に示すように、各ノード間でメッセージの授受が行われる。なお、図3における"="で示すノード(バリアブルノード)では、式(1)に示した演算が行われ、"+"で示すノード(チェックノード)では、式(2)に示した演算が行われる。特に、アルゴリズムAにおいては、メッセージを2元化し、"+"で示すノードにて、dc-1個の入力メッセージの排他的論理和演算を行い、"="で示すノードにて、受信値Rに対して、dv-1個の入力メッセージが全て異なるビット値であった場合には、符号を反転して出力する。
また、一方で、近年、LDPC符号の復号の実装法に関する研究も行われている。実装方法について述べる前に、まず、LDPC符号の復号を摸式化して説明する。
図4は、(3,6)LDPC符号(符号化率1/2、符号長12)の検査行列(parity check matrix)の例である。LDPC符号の検査行列は、図5のように、タナーグラフを用いて書き表すことができる。ここで、図5において、"+"で表わされるのが、チェックノードであり、"="で表わされるのが、バリアブルノードである。チェックノードとバリアブルノードは、それぞれ、検査行列の行と列に対応する。チェックノードとバリアブルノードとの間の結線は、枝(edge)であり、検査行列の"1"に相当する。即ち、検査行列の第j行第i列のコンポーネントが1である場合には、図5において、上からi番目のバリアブルノード("="のノード)と、上からj番目のチェックノード("+"のノード)とが、枝により接続される。枝は、バリアブルノードに対応する符号ビットが、チェックノードに対応する拘束条件を持つことを表わす。なお、図5は、図4の検査行列のタナーグラフとなっている。
LDPC符号の復号方法であるサムプロダクトアルゴリズム(Sum Product Algorithm)は、バリアブルノードの演算とチェックノードの演算とを繰り返し行う。
バリアブルノードでは、図6のように、式(1)の演算を行う。すなわち、図6において、計算しようとしている枝に対応するメッセージviは、バリアブルノードに繋がっている残りの枝からのメッセージu1およびu2と、受信情報u0iを用いて計算される。他の枝に対応するメッセージも同様に計算される。
チェックノードの演算について説明する前に、式(2)を、式a×b=exp{ln(|a|)+ln(|b|)}×sign(a)×sign(b)の関係を用いて、式(6)のように書き直す。但し、sign(x)は、x≧0のとき1であり、x<0のとき-1である。
Figure 0004225163
・・・(6)
更に、x≧0において、φ(x)=ln(tanh(x/2))と定義すると、φ-1(x)=2tanh-1(e-x)であるから、式(6)は、式(7)のように書くことができる。
Figure 0004225163
・・・(7)
チェックノードでは、図7のように、式(7)の演算を行う。すなわち、図7において、計算しようとしている枝に対応するメッセージujは、チェックノードに繋がっている残りの枝からのメッセージv1,v2,v3,v4,v5を用いて計算される。他の枝に対応するメッセージも同様に計算される。
なお、関数φ(x)は、φ(x)=ln((ex+1)/(ex-1))とも表すことができ、x>0において、φ(x)=φ-1(x)である。関数φ(x)およびφ-1(x)をハードウェアに実装する際には、LUT(Look Up Table)を用いて実装される場合があるが、両者共に同一のLUTとなる。
サムプロダクトアルゴリズムをハードウェアに実装する場合、式(1)で表わされるバリアブルノード演算および式(7)で表わされるチェックノード演算とを、適度な回路規模と動作周波数で繰り返し行うことが必要である。
復号装置の実装の例として、まず、単純に各ノードの演算を一つずつ順次行うことによって復号を行う場合(full serial decoding)の実装法について説明する。
なお、ここでは、例えば、図8の、30(行)×90(列)の検査行列で表現される符号(符号化率2/3、符号長90)を復号することとする。図8の検査行列の1の数は269であり、従って、そのタナーグラフでは、枝の数は269個となる。ここで、図8の検査行列では、0を、"."で表現している。
図9は、LDPC符号の1回復号を行う復号装置の構成例を示している。
図9の復号装置では、その動作する1クロック(clock)ごとに、1つの枝に対応するメッセージが計算される。
即ち、図9の復号装置は、2つの枝用メモリ100および102、1つのチェックノード計算器101、1つのバリアブルノード計算器103、1つの受信用メモリ104、1つの制御部105からなる。
図9の復号装置では、枝用メモリ100または102からメッセージデータが1つずつ読み出され、そのメッセージデータを用いて、所望の枝に対応するメッセージデータが計算される。そして、その計算によって求められたメッセージデータが1つずつ後段の枝用メモリ102または100に格納されていく。繰り返し復号を行う際には、この1回復号を行う図9の復号装置を複数個縦列に連接するか、もしくは図9の復号装置を繰り返し用いることによって、繰り返し復号を実現する。なお、ここでは、例えば、図9の復号装置が複数個接続されているものとする。
枝用メモリ100は、前段の復号装置(図示せず)のバリアブルノード計算器103から供給されるメッセージD100を、後段のチェックノード計算器101が読み出す順番に格納していく。そして、枝用メモリ100は、チェックノード計算のフェーズでは、メッセージD100を、格納してある順番通りに、メッセージD101として、チェックノード計算器101に供給する。
チェックノード計算器101は、制御部105から供給される制御信号D106に基づき、枝用メモリ100から供給されるメッセージD101を用いて、式(7)に従って演算を行い、その演算によって求められたメッセージD102を、後段の枝用メモリ102に供給する。
枝用メモリ102は、前段のチェックノード計算器101から供給されるメッセージD102を、後段のバリアブルノード計算器103が読み出す順番に格納していく。そして、枝用メモリ102は、バリアブルノード計算のフェーズでは、メッセージD102を、格納してある順番通りに、メッセージD103として、バリアブルノード計算器103に供給する。
さらに、バリアブルノード計算器103には、制御部105から制御信号D107が供給されるとともに、受信用メモリ104から受信データD104が供給される。バリアブルノード計算器103は、制御信号D107に基づき、枝用メモリ100から供給されるメッセージD103と受信用メモリ100から供給される受信データD104を用い、式(1)に従って演算を行い、その演算の結果得られるメッセージD105を、図示せぬ後段の復号装置の枝用メモリ100に供給する。
受信用メモリ104には、LDPC符号化された受信データ(LDPC符号)が格納される。制御部105は、バリアブルノード演算を制御する制御信号D106と、チェックノード演算を制御する制御信号D107を、それぞれチェックノード計算器101とバリアブルノード計算器103に供給する。制御部105は、枝用メモリ100に全ての枝のメッセージが格納されたとき、チェックノード計算器101に制御信号D106を供給し、枝用メモリ102に全ての枝のメッセーが格納されたとき、バリアブルノード計算器103に制御信号D107を供給する。
図10は、チェックノード演算を1つずつ行う図9のチェックノード計算器101の構成例を示している。
なお、図10では、各メッセージが符号ビットを合わせて合計6ビット(bit)に量子化されているものとして、チェックノード計算器101を表している。また、図10では、図8の検査行列で表わされるLDPC符号のチェックノード演算が行われる。さらに、図10のチェックノード演算器101には、クロックckが供給され、このクロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図10のチェックノード計算器101は、制御部105から供給される、例えば、1ビットの制御信号D106に基づき、枝用メモリ100から1つずつ読み込まれるメッセージD101を用いて、式(7)にしたがって演算を行う。
即ち、チェックノード計算器101では、検査行列の各列に対応するバリアブルノードからの6ビットのメッセージD101(メッセージvi)が1つずつ読み込まれ、その下位ビットである絶対値D122(|vi|)がLUT121に、その最上位ビットである符号ビットD121がEXOR回路129とFIFO(First In First Out)メモリ133にそれぞれ供給される。また、チェックノード計算器101には、制御部105から制御信号D106が供給され、その制御信号D106は、セレクタ124とセレクタ131に供給される。
LUT121は、絶対値D122(|vi|)に対して、式(7)におけるφ(|vi|)の演算を行った5ビットの演算結果D123(φ(|vi|))を読み出し、加算器122とFIFOメモリ127に供給する。
加算器122は、演算結果D123(φ(|vi|))とレジスタ123に格納されている9ビットの値D124とを加算することにより、演算結果D123を積算し、その結果得られる9ビットの積算値をレジスタ123に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD101の絶対値D122(|vi|)に対する演算結果が積算された場合、レジスタ123はリセットされる。
検査行列の1行に亘るメッセージD101が1つずつ読み込まれ、レジスタ123に1行分の演算結果D123が積算された積算値が格納された場合、制御部105から供給される制御信号D106は、0から1に変化する。例えば、行の重み(row weight)が「9」である場合、制御信号D106は、1から8クロック目までは、「0」となり、9クロック目では「1」となる。
制御信号D106が「1」の場合、セレクタ124は、レジスタ123に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD101(メッセージvi)から求められたφ(|vi|)が積算された9ビットの値D124(i=1からi=dcまでのΣφ(|vi|))を選択し、値D125として、レジスタ125に出力して格納させる。レジスタ125は、格納している値D125を、9ビットの値D126として、セレクタ124と加算器126に供給する。制御信号D106が「0」の場合、セレクタ124は、レジスタ125から供給された値D126を選択し、レジスタ125に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD101(メッセージvi)から求められたφ(|vi|)が積算されるまで、レジスタ125は、前回積算されたφ(|vi|)を、セレクタ124と加算器126に供給する。
一方、FIFOメモリ127は、レジスタ125から新たな値D126(i=1からi=dcまでのΣφ(|vi|))が出力されるまでの間、LUT121が出力した演算結果D123(φ(|vi|))を遅延し、5ビットの値D127として減算器126に供給する。減算器126は、レジスタ125から供給された値D126から、FIFOメモリ127から供給された値D127を減算し、その減算結果を、5ビットの減算値D128としてLUT128に供給する。即ち、減算器126は、検査行列の1行に亘る全ての枝からのメッセージD101(メッセージvi)から求められたφ(|vi|)の積算値から、求めたい枝からのメッセージD101(メッセージvi)から求められたφ(|vi|)を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を減算値D128としてLUT128に供給する。
LUT128は、減算値D128(i=1からi=dc−1までのΣφ(|vi|))に対して、式(7)におけるφ-1(Σφ(|vi|))の演算を行った5ビットの演算結果D129(φ-1(Σφ(|vi|)))を出力する。
以上の処理と並行して、EXOR回路129は、レジスタ130に格納されている1ビットの値D131と符号ビットD121との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、1ビットの乗算結果D130をレジスタ130に再格納する。なお、検査行列の1行に亘る全ての枝からのメッセージD101の符号ビットD121が乗算された場合、レジスタ130はリセットされる。
検査行列の1行に亘る全ての枝からのメッセージD101の符号ビットD121が乗算された乗算結果D130(i=1からdcまでのΠsign(vi))がレジスタ130に格納された場合、制御部105から供給される制御信号D106は、「0」から「1」に変化する。
制御信号D106が「1」の場合、セレクタ131は、レジスタ130に格納されている値、即ち、検査行列の1行に亘る全ての枝からのメッセージD101の符号ビットD121が乗算された値D131(i=1からi=dcまでのΠsign(vi))を選択し、1ビットの値D132としてレジスタ132に出力して格納させる。レジスタ132は、格納している値D132を、1ビットの値D133としてセレクタ131とEXOR回路134に供給する。制御信号D106が「0」の場合、セレクタ131は、レジスタ132から供給された値D133を選択し、レジスタ132に出力して再格納させる。即ち、検査行列の1行に亘る全ての枝からのメッセージD101(メッセージvi)の符号ビットD121が乗算されるまで、レジスタ132は、前回格納した値を、セレクタ131とEXOR回路134に供給する。
一方、FIFOメモリ133は、レジスタ132から新たな値D133(i=1からi=dcまでのΠsign(vi))がEXOR回路134に供給されるまでの間、符号ビットD121を遅延し、1ビットの値D134としてEXOR回路134に供給する。EXOR回路134は、レジスタ132から供給された値D133と、FIFOメモリ133から供給された値D134との排他的論理和を演算することにより、値D133を、値D134で除算し、1ビットの除算結果を除算値D135として出力する。即ち、EXOR回路134は、検査行列の1行に亘る全ての枝からのメッセージD101の符号ビットD121(sign(|vi|))の乗算値を、求めたい枝からのメッセージD101の符号ビットD121(sign(|vi|))で除算して、その除算値(i=1からi=dc−1までのΠsign(|vi|))を除算値D135として出力する。
チェックノード計算器101では、LUT128から出力された5ビットの演算結果D129を下位5ビットとするとともに、EXOR回路134から出力された1ビットの除算値D135を最上位ビットとする合計6ビットがメッセージD102(メッセージuj)として出力される。
以上のように、チェックノード計算器101では、式(7)の演算が行われ、メッセージujが求められる。
なお、図8の検査行列の行の重みの最大は9であるため、即ち、チェックノードに供給されるメッセージの最大数は9であるため、チェックノード計算器101は、9個のメッセージ(φ(|vi|))を遅延させるFIFOメモリ127とFIFOメモリ133を有している。行の重みが9未満の行のメッセージを計算するときには、FIFOメモリ127とFIFOメモリ133における遅延量が、その行の重みの値に減らされる。
図11は、バリアブルノード演算を1つずつ行う図9のバリアブルノード計算器103の構成例を示している。
なお、図11では、各メッセージが符号ビットを合わせて合計6ビット(bit)に量子化されているものとして、バリアブルノード計算器103を表している。また、図11では、図8の検査行列で表わされるLDPC符号のバリアブルノード演算が行われる。さらに、図11のバリアブルノード計算機103には、クロックckが供給され、クロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図11のバリアブルノード計算器103は、制御部105から供給される、例えば、1ビットの制御信号D107に基づき、枝用メモリ102から1つずつ読み込まれるメッセージD103と、受信用メモリ104から読み込まれる受信データD104を用いて、式(1)にしたがって演算を行う。
即ち、バリアブルノード計算器103では、検査行列の各行に対応するチェックノードからの6ビットのメッセージD103(メッセージuj)が1つずつ読み込まれ、そのメッセージD103が、加算器151とFIFOメモリ155に供給される。また、バリアブルノード計算器103では、受信用メモリ104から6ビットの受信データD104が1つずつ読み込まれ、加算器156に供給される。さらに、バリアブルノード計算器103には、制御部105から制御信号D107が供給され、その制御信号D107は、セレクタ153に供給される。
加算器151は、メッセージD103(メッセージuj)とレジスタ152に格納されている9ビットの値D151とを加算することにより、メッセージD103を積算し、その結果得られる9ビットの積算値を、レジスタ152に再格納する。なお、検査行列の1列に亘る全ての枝からのメッセージD103が積算された場合、レジスタ152はリセットされる。
検査行列の1列に亘るメッセージD103が1つずつ読み込まれ、レジスタ152に1列分のメッセージD103が積算された値が格納された場合、制御部105から供給される制御信号D107は、「0」から「1」に変化する。例えば、列の重みが「5」である場合、制御信号D107は、1から4クロック目までは「0」となり、5クロック目では「1」となる。
制御信号D107が「1」の場合、セレクタ153は、レジスタ152に格納されている値、即ち、検査行列の1列に亘る全ての枝からのメッセージD103(メッセージuj)が積算された9ビットの値D151(j=1からdVまでのΣuj)を選択し、レジスタ154に出力して格納させる。レジスタ154は、格納している値D151を、9ビットの値D152として、セレクタ153と加減算器156に供給する。制御信号D107が「0」の場合、セレクタ153は、レジスタ154から供給された値D152を選択し、レジスタ154に出力し再格納させる。即ち、検査行列の1列に亘る全ての枝からのメッセージD103(メッセージuj)が積算されるまで、レジスタ154は、前回積算された値を、セレクタ153と加減算器156に供給する。
一方、FIFOメモリ155は、レジスタ154から新たな値D152(j=1からdVまでのΣuj)が出力されるまでの間、チェックノードからのメッセージD103を遅延し、6ビットの値D153として加減算器156に供給する。加減算器156は、レジスタ154から供給された値D152から、FIFOメモリ155から供給された値D153を減算する。即ち、加減算器156は、検査行列の1列に亘る全ての枝からのメッセージD103(メッセージuj)の積算値から、求めたい枝からのメッセージujを減算して、その減算値(j=1からdv−1までのΣuj)を求める。さらに、加減算器156には、その減算値(j=1からdv−1までのΣuj)に、受信用メモリ104から供給された受信データD104を加算して、その結果得られる6ビットの値をメッセージD105(メッセージvi)として出力する。
以上のように、バリアブルノード計算器103では、式(1)の演算が行われ、メッセージviが求められる。
なお、図8の検査行列の列の重みの最大は5であるため、即ち、バリアブルノードに供給されるメッセージの最大数は5であるため、バリアブルノード計算器103は、5個のメッセージ(uj)を遅延させるFIFOメモリ155を有している。列の重みが5未満の列のメッセージを計算するときには、FIFOメモリ155における遅延量が、その列の重みの値に減らされる。
図9の復号装置では、検査行列の重みにしたがって、制御部105から制御信号が与えられる。そして、図9の復号装置によれば、枝用メモリ100および102、並びにチェックノード計算器101およびバリアブルノード計算器103のFIFOメモリ127,133,155の容量さえ足りれば、制御信号のみを変えることで様々な検査行列のLDPC符号を復号することができる。
なお、図示しないが、図9の復号装置において、復号の最終段においては、式(1)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が、最終的な復号結果として出力される。
図9の復号装置を繰り返し用いて、LDPC符号を復号する場合には、チェックノード演算とバリアブルノード演算とが交互に行われる。即ち、図9の復号装置では、チェックノード計算器101によるチェックノード演算の結果を用いて、バリアブルノード計算器103によりバリアブルノード演算が行われ、バリアブルノード計算器103によるバリアブルノード演算の結果を用いて、チェックノード計算器101によりチェックノード演算が行われる。
従って、269の枝を有する図8の検査行列を用いた1回の復号に、269×2=538クロック(clock)を必要とする。例えば、50回の繰り返し復号を行うためには、符号長である90個の符号(受信データ)を1フレームとして、その1フレームを受信する間に、538×50=26900クロック動作することが必要であり、受信周波数の約300(≒26900/90)倍の高速動作が必要になる。受信周波数が数十MHzであるとすると、GHz以上の速度での動作を要求されることになる
また、図9の復号装置を、例えば、50台連接して、LDPC符号を復号する場合には、1フレーム(frame)目のバリアブルノード演算を行っている間に、2フレーム目のチェックノード演算を行い、3フレーム目のバリアブルノード演算を行う、というように、複数のバリアブルノード演算とチェックノード演算とを同時に行うことができる。この場合、90個の符号を受信する間に、269個の枝を計算すればよいので、復号装置は、受信周波数の約3(≒269/90)倍の周波数で動作すればよいことになり、十分に実現可能である。しかしながら、この場合、回路規模が、単純には、図9の復号装置の50倍になる。
次に、全ノードの演算を同時に行うことによって復号を行う場合(full parallel decoding)の復号装置の実装法について説明する。
この実装法については、例えば、非特許文献1に記載されている。
図12は、図8の検査行列で表現される符号(符号化率2/3、符号長90)を復号する復号装置の一例の構成を示している。
図12の復号装置では、枝用メモリ202または206から、269個ある枝に対応するメッセージデータを全て同時に読み出し、そのメッセージデータを用いて、269個の枝に対応する新たなメッセージデータを演算する。さらに、その演算の結果求められた新たなメッセージデータが全て同時に後段の枝用メモリ206または202に格納されていく。そして、図12の復号装置を繰り返し用いることで繰り返し復号が実現される。
図12において、復号装置は、1つの受信用メモリ205、2つの枝入れ替え装置200および203、2つの枝用メモリ202および206、30個のチェックノード計算器2011乃至20130、90個のバリアブルノード計算器2041乃至20490からなる。以下、各部について詳細に説明する。
枝用メモリ206は、前段のバリアブルノード計算器2041乃至20490からのメッセージD2061乃至D20690を全て同時に格納し、次の時刻(次のクロックのタイミング)に、メッセージD2061乃至D20690を、メッセージD2071乃至D20790として読み出し、次段の枝入れ替え装置200に、メッセージD200(D2001乃至D20090)として供給する。枝入れ替え装置200は、枝用メモリ206から供給されたメッセージD2001乃至D20090の順番を、図8の検査行列にしたがって並び替え(入れ替え)、チェックノード計算器2011乃至20130に、メッセージD2011乃至D20130として供給する。
チェックノード計算器2011乃至20130は、枝入れ替え装置200から供給されるメッセージD2011乃至D20130を用いて式(7)にしたがって演算を行い、その演算の結果得られるメッセージD2021乃至D20230を、枝用メモリ202に供給する。
枝用メモリ202は、前段のチェックノード計算器2011乃至20130から供給されるメッセージD2021乃至D20230を全て同時に格納し、次の時刻に、そのすべてのメッセージD2021乃至D20230を、メッセージD2031乃至D20330として、次段の枝入れ替え装置203に供給する。
枝入れ替え装置203は、枝用メモリ202から供給されたメッセージD2031乃至D20330の順番を図8の検査行列にしたがって並び替え、バリアブルノード計算器2041乃至20490に、メッセージD2041乃至D20490として供給する。
バリアブルノード計算器2041乃至20490は、枝入れ替え装置203から供給されるメッセージD2041乃至D20490と、受信用メモリ205から供給される受信データD2051乃至D20590を用いて式(1)にしたがって演算を行い、その演算の結果得られるメッセージD2061乃至D20690を、次段の枝用メモリ206に供給する。
図13は、チェックノード演算を同時に行う図12のチェックノード計算器201m(m=1,2,・・・,30)の構成例を示している。
図13のチェックノード計算器201mでは、図10のチェックノード計算器101と同様にして、式(7)のチェックノード演算が行われるが、そのチェックノード演算が、すべての枝について同時に行われる。
即ち、図13のチェックノード計算器201mでは、枝入れ替え装置200から供給される図8の検査行列の各列に対応するバリアブルノードからのメッセージD2211乃至D2219(vi)が全て同時に読み込まれ、それぞれの下位5ビットである絶対値D2221乃至D2229(|vi|)がLUT2211乃至2219にそれぞれ供給される。また、メッセージD2211乃至D2219(vi)の最上位ビットである1ビットの符号ビットD2231乃至D2239が、EXOR回路2261乃至2269にそれぞれ供給されるとともに、EXOR回路225に供給される。
LUT2211乃至2219は、絶対値D2221乃至D2229(|vi|)に対して、式(7)におけるφ(|vi|)の演算を行った5ビットの演算結果D2241乃至D2249(φ(|vi|))をそれぞれ読み出し、それぞれを減算器2231乃至2239に供給する。また、LUT2211乃至2219は、演算結果D2241乃至D2249(φ(|vi|))を加算器222に供給する。
加算器222は、演算結果D2241乃至D2249(φ(|vi|))の値の総和(1行分の演算結果の総和)を演算し、9ビットの演算結果D225(i=1から9のΣφ(|vi|))を、減算器2231乃至2239に供給する。減算器2231乃至2239は、演算結果D225から、演算結果D2241乃至D2249(φ(|vi|))をそれぞれ減算し、5ビットの減算値D2271乃至D2279を、LUT2241乃至2249に供給する。即ち、減算器2231乃至2239は、全ての枝からのメッセージviから求められたφ(|vi|)の積算値から、求めたい枝からのメッセージviから求められたφ(|vi|)を減算して、その減算値D2271乃至D2279(i=1から8までのΣφ(|vi|))をLUT2241乃至2249にそれぞれ供給する。LUT2241乃至2249は、減算値D2271乃至D2279に対して、式(7)におけるφ-1(Σφ(|vi|))の演算を行った5ビットの演算結果D2281乃至D2289を読み出して出力する。
一方、EXOR回路225は、全ての符号ビットD2231乃至D2239の排他的論理和を演算することにより、符号ビットD2231乃至D2239の乗算を行い、1ビットの乗算値D226(1行分の符号ビットの乗算値(i=1から9までのΠsign(vi)))をEXOR回路2261乃至2269にそれぞれ供給する。EXOR回路2261乃至2269は、乗算値D226と符号ビットD2231乃至D2239それぞれとの排他的論理を演算することにより、乗算値D226を、符号ビットD2231乃至D2239それぞれで除算した1ビットの除算値D2291乃至D2299(i=1から8までのΠsign(vi))を求めて出力する。
チェックノード計算器201mでは、LUT2241乃至2249から出力された5ビットの演算結果D2281乃至D2289それぞれを下位5ビットとするとともに、EXOR回路2261乃至2269から出力された除算値D2291乃至D2299それぞれを最上位ビットとする合計6ビットが、チェックノード演算の結果得られるメッセージD2301乃至D2309として出力される。
以上のように、チェックノード計算器201mでは、式(7)の演算が行われ、メッセージujが求められる。
なお、図13では、各メッセージが符号ビットを合わせて合計6ビットに量子化されているものとして、チェックノード計算器201mを表している。また、図13の回路は1つのチェックノードに相当する。ここで処理の対象としている図8の検査行列については、その行数である30行のチェックノードが存在するため、図12の復号装置は、図13に示したようなチェックノード計算器201mを30個有している。
ここで、図13のチェックノード計算器201mでは、9個のメッセージを同時に計算することができる。そして、ここで処理の対象としている図8の検査行列の行の重みは、第1行が8で、第2乃至第30行が9であるため、即ち、チェックノードに供給されるメッセージの数が、8のケースが1つと、9のケースが29あるため、チェックノード計算器2011は、図13の回路と同様の8つのメッセージを同時に計算することができる回路構成となっており、残りのチェックノード計算器2012乃至20130は、図13の回路と同一構成となっている。
図14は、バリアブルノード演算を同時に行う図12のバリアブルノード計算器204p(p=1,2,・・・,90)の構成例を示している。
図14のバリアブルノード計算器204pでは、図11のバリアブルノード計算器103と同様にして、式(1)のバリアブルノード演算が行われるが、そのバリアブルノード演算が、すべての枝について同時に行われる。
即ち、図14のバリアブルノード計算器204pでは、枝入れ替え装置203から供給される、検査行列の各行に対応するチェックノードからの6ビットのメッセージD2511乃至D2515(メッセージuj)が全て同時に読み込まれ、それぞれ加算器2521乃至2525に供給されるとともに、加算器251に供給される。また、バリアブルノード計算器204pには、受信用メモリ205から受信データD271が供給され、その受信データD271は、加減算器2521乃至2525に供給される。
加算器251は、全てのメッセージD2511乃至D2515(メッセージuj)を積算し、9ビットの積算値D252(1列分のメッセージの総和値(j=1から5までのΣuj))を加減算器2521乃至2525に供給する。加減算器2521乃至2525は、加算値D252から、メッセージD2511乃至D2515(メッセージuj)をそれぞれ減算する。即ち、加減算器2521乃至2525は、全ての枝からのメッセージujの積算値D252から、求めたい枝からのメッセージD2511乃至D2515(メッセージuj)をそれぞれ減算して、その減算値(j=1から4までのΣuj)を求める。
さらに、加減算器2521乃至2525は、減算値(j=1から4までのΣuj)に、受信データD271(u0i)を加算して、6ビットの加算値D2531乃至D2535を、バリアブルノード演算の結果として出力する。
以上のように、バリアブルノード計算器204pでは、式(1)の演算が行われ、メッセージviが求められる。
なお、図14では、各メッセージが符号ビットを合わせて合計6ビットに量子化されているものとして、バリアブルノード計算器204pを表している。また、図14の回路は1つのバリアブルノードに相当する。ここで処理の対象としている図8の検査行列については、その列数である90列のバリアブルノードが存在するから、図12の復号装置は、図14に示したような回路を90個有している。
ここで、図14のバリアブルノード計算器204pでは、5個のメッセージを同時に計算することができる。そして、ここで処理の対象としている図8の検査行列は、重みが5,3,2,1の列が、それぞれ、15列、45列、29列、1列あるので、バリアブルノード計算器2041乃至20490のうちの15個は、図14の回路と同一構成となっており、残りの45個、29個、1個は、図14の回路と同様の3,2,1つのメッセージをそれぞれ同時に計算することができる回路構成となっている。
なお、図示しないが、図12の復号装置においても、図9における場合と同様に、復号の最終段においては、式(1)のバリアブルノード演算の代わりに、式(5)の演算が行われ、その演算結果が最終的な復号結果として出力される。
図12の復号装置によれば、269個ある枝に対応するメッセージすべてを1クロックで同時に計算することができる。
図12の復号装置を繰り返し用いて復号する場合には、チェックノード演算とバリアブルノード演算とを交互に行い、1回の復号を2クロックで行うことができる。従って、例えば、50回の復号を行うためには、符号長が90個の符号を1フレームとする受信データを受信する間に2×50=100クロック動作すれば良いことになり、ほぼ受信周波数と同一の動作周波数でよいことになる。一般的に、LDPC符号は、符号長が数千から数万と大きいことから、図12の復号装置を用いれば、復号回数を極めて多くすることができ、誤り訂正性能の向上を期待することができる。
しかしながら、図12の復号装置は、タナーグラフのすべての枝に対応するメッセージの演算を、並列で行うため、回路規模が、符号長に比例して大きくなる。また、図12の復号装置を、ある符号長の、ある符号化率の、ある検査行列を持つLDPC符号の復号を行う装置として構成した場合、その復号装置において、他の符号長や、他の符号化率、他の検査行列を持つLDPC符号の復号を行うことは困難となる。即ち、図12の復号装置は、図9の復号装置のように、制御信号を変えるだけでは、様々な符号を復号することに対処することが困難であり、符号依存性が高い。
図9および図12の復号装置の他に、一つでも全てでもなく、4つずつのメッセージの計算を同時に行う実装法について、例えば、非特許文献2に述べられているが、この場合、メモリの異なるアドレスからの同時読み出し、もしくは同時書き込みを避けることが一般的には容易でなく、メモリアクセス制御が困難であるという問題がある。
また、サムプロダクトアルゴリズムを近似して実装する方法なども提案されているが、この方法では、性能の劣化を招いてしまう。
C. Howland and A. Blanksby, "Parallel Decoding Architectures for Low Density Parity Check Codes", Symposium on Circuits and Systems, 2001 E. Yeo, P. Pakzad, B. Nikolic and V. Anantharam, "VLSI Architectures for iterative Decoders in Magnetic Recording Channels", IEEE Transactions on Magnetics, Vol. 37, No. 2, March 2001
サムプロダクトアルゴリズムをハードウェアに実装する場合には、上述したように、枝に対応するメッセージの演算(チェックノード演算とビットノード(bit node)計算)を、1つずつシリアル(serial)に行う方法、すべて並列(フルパラレル(full parallel))に行う方法、幾つかずつ並列(パラレル(parallel))に行う方法がある。
しかしながら、枝に対応するメッセージの演算を1つずつ行う方法では、高い動作周波数が必要となる。そこで、スループット(throughput)を上げる方法として、装置を、パイプライン(pipeline)化する方法があるが、この場合、回路規模、特にメモリ(の容量)が大きくなってしまう。
また、メッセージの演算を全て並列に行う方法では、ロジック(logic)の回路規模が大きくなるとともに、符号依存性が高くなる。
さらに、メッセージの演算を、幾つかずつ並列に行う方法では、メモリアクセスの制御が難しくなる。
本発明は、このような状況に鑑みてなされたものであり、ロジック、メモリ共に回路規模を抑制しつつ、動作周波数も十分実現可能な範囲に抑え、メモリアクセスの制御も容易に行うことができるようにするものである。
本発明の復号装置は、P×Pの単位行列、その単位行列のコンポーネントである1のうちの1個以上が0になった行列である準単位行列、単位行列もしくは準単位行列をサイクリックシフトした行列であるシフト行列、単位行列、準単位行列、もしくはシフト行列のうちの複数の和である和行列、またはP×Pの0行列を構成行列として、LDPC符号の検査行列が、複数の構成行列の組合せで表される場合において、LDPC符号の復号のためのP個のチェックノードの演算を同時に行う第1の演算手段と、LDPC符号の復号のためのP個のバリアブルノードの演算を同時に行う第2の演算手段とを備えることを特徴とする。
第1の演算手段は、チェックノードの演算を行うP個のチェックノード計算器を有し、第2の演算手段は、バリアブルノードの演算を行うP個のバリアブルノード計算器を有するようにすることができる。
P個のチェックノードの演算、またはP個のバリアブルノードの演算の結果得られるP個の枝に対応するメッセージデータを同時に読み書きするメッセージ記憶手段をさらに備えるようにすることができる。
メッセージ記憶手段は、チェックノードの演算時に読み出される枝に対応するメッセージデータを、検査行列の1を行方向に詰めるように格納するようにすることができる。
メッセージ記憶手段は、バリアブルノード演算時に読み出される枝に対応するメッセージデータを、検査行列の1を列方向に詰めるように格納するようにすることができる。
メッセージ記憶手段は、検査行列を表す構成行列のうちの、重みが2以上の構成行列について、その構成行列を、重みが1の単位行列、準単位行列、またはシフト行列の和の形で表現したときの、その重みが1の単位行列、準単位行列、またはシフト行列に属するP個の枝に対応するメッセージを、同一のアドレスに格納するようにすることができる。
メッセージ記憶手段は、行数/P個のFIFOと、列数/P個のFIFOとで構成され、行数/P個のFIFOと列数/P個のFIFOは、それぞれ、検査行列の行と列の重みに対応するワード数を有するようにすることができる。
メッセージ記憶手段は、RAM(Random Access Memory)で構成され、RAMは、メッセージデータを、読み出される順番に詰めて格納し、格納位置順に読み出すようにすることができる。
LDPC符号の受信情報を格納するとともに、P個の受信情報を同時に読み出す受信情報記憶手段をさらに備えるようにすることができる。
受信情報記憶手段は、受信情報を、バリアブルノードの演算に必要となる順番に読み出すことができるように格納するようにすることができる。
P個のチェックノードの演算、またはP個のバリアブルノードの演算の結果得られるメッセージを並べ替える並べ替え手段をさらに備えるようにすることができる。
第1の演算手段と第2の演算手段は、P個の枝に対応するメッセージを求めるようにすることができる。
第1の演算手段は、P個のチェックノードの演算とP個のバリアブルノードの演算の一部とを行い、第2の演算手段は、P個のバリアブルノードの演算の他の一部を行うようにすることができる。
第1の演算手段は、P個のチェックノードの演算とP個のバリアブルノードの演算の一部を行うP個の計算器を有し、第2の演算手段は、P個のバリアブルノードの演算の他の一部を行うP個の計算器を有するようにすることができる。
第1の演算手段がP個のチェックノードの演算とP個のバリアブルノードの演算の一部を行うことにより得られるP個の枝に対応する第1の復号途中結果を同時に読み書きする第1の復号途中結果記憶手段をさらに備えるようにすることができる。
第1の復号途中記憶手段は、P個のバリアブルノードの演算の他の一部を行う時に読み出される枝に対応する第1の復号途中結果を、検査行列の1を行方向に詰めるように格納するようにすることができる。
第1の復号途中結果記憶手段は、検査行列を表す構成行列のうちの、重みが2以上の構成行列について、その構成行列を、重みが1の単位行列、準単位行列、またはシフト行列の和の形で表現したときの、その重みが1の単位行列、準単位行列、またはシフト行列に属するP個の枝に対応する第1の復号途中結果を、同一のアドレスに格納するようにすることができる。
第2の演算手段がP個のバリアブルノードの演算の他の一部を行うことにより得られるP個の枝に対応する第2の復号途中結果を同時に読み書きする第2の復号途中結果記憶手段をさらに備えるようにすることができる。
LDPC符号の受信情報を格納するとともに、P個の受信情報を同時に読み出す受信情報記憶手段をさらに備えるようにすることができる。
第1の演算手段がP個のチェックノードの演算とP個のバリアブルノードの演算の一部を行うことにより得られる第1の復号途中結果、または第2の演算手段がP個のバリアブルノードの演算の他の一部を行うことにより得られる第2の復号途中結果を並べ替える並べ替え手段をさらに備えるようにすることができる。
並べ替え手段は、バレルシフタで構成されるようにすることができる。
第1の演算手段は、P個のチェックノードの演算の一部を行い、第2の演算手段は、P個のチェックノードの演算の他の一部と、P個のバリアブルノードの演算とを行うようにすることができる。
第1の演算手段は、P個のチェックノードの演算の一部を行うP個の計算器を有し、第2の演算手段は、P個のチェックノードの演算の他の一部と、P個のバリアブルノードの演算を行うP個の計算器を有することができる。
第1の演算手段がP個のチェックノードの演算の一部を行うことにより得られるP個の枝に対応する第1の復号途中結果を同時に読み書きする第1の復号途中結果記憶手段をさらに備えるようにすることができる。
第2の演算手段がP個のチェックノードの演算の他の一部と、P個のバリアブルノードの演算を行うことにより得られるP個の枝に対応する第2の復号途中結果を同時に読み書きする第2の復号途中結果記憶手段をさらに備えるようにすることができる。
第2の復号途中結果記憶手段は、P個のチェックノードの演算の他の一部と、P個のバリアブルノードの演算を行う時に読み出される枝に対応する第2の復号途中結果を、検査行列の1を列方向に詰めるように格納するようにすることができる。
第2の復号途中結果記憶手段は、検査行列を表す構成行列のうちの、重みが2以上の構成行列について、その構成行列を、重みが1の単位行列、準単位行列、またはシフト行列の和の形で表現したときの、その重みが1の単位行列、準単位行列、またはシフト行列に属するP個の枝に対応する第2の復号途中結果を、同一のアドレスに格納するようにすることができる。
LDPC符号の受信情報を格納するとともに、P個の受信情報を同時に読み出す受信情報記憶手段をさらに備えるようにすることができる。
第1の演算手段がP個のチェックノードの演算の一部を行うことにより得られる第1の復号途中結果、または第2の演算がP個のチェックノードの演算の他の一部と、P個のバリアブルノードの演算を行うことにより得られる第2の復号途中結果を並べ替える並べ替え手段をさらに備えるようにすることができる。
本発明の復号方法は、P×Pの単位行列、その単位行列のコンポーネントである1のうちの1個以上が0になった行列である準単位行列、単位行列もしくは準単位行列をサイクリックシフトした行列であるシフト行列、単位行列、準単位行列、もしくはシフト行列のうちの複数の和である和行列、またはP×Pの0行列を構成行列として、LDPC符号の検査行列が、複数の構成行列の組合せで表される場合において、LDPC符号の復号のためのP個のチェックノードの演算を同時に行う第1の演算ステップと、LDPC符号の復号のためのP個のバリアブルノードの演算を同時に行う第2の演算ステップとを含むことを特徴とする。
本発明のプログラムは、LDPC符号の復号のためのP個のチェックノードの演算を同時に行う第1の演算ステップと、LDPC符号の復号のためのP個のバリアブルノードの演算を同時に行う第2の演算ステップとを含むことを特徴とする。
本発明においては、P×Pの単位行列、その単位行列のコンポーネントである1のうちの1個以上が0になった行列である準単位行列、単位行列もしくは準単位行列をサイクリックシフトした行列であるシフト行列、単位行列、準単位行列、もしくはシフト行列のうちの複数の和である和行列、またはP×Pの0行列を構成行列として、LDPC符号の検査行列が、複数の構成行列の組合せで表される場合において、LDPC符号の復号のためのP個のチェックノードの演算が同時に行われ、LDPC符号の復号のためのP個のバリアブルノードの演算が同時に行われる。
本発明によれば、回路規模を抑制しつつ、動作周波数も十分実現可能な範囲に抑え、メモリアクセスの制御も容易に行うことが可能となる。また、LDPC符号の復号装置の回路規模を小さくすることができるので、コストを削減し、装置の消費電力を削減することができる。
以下に本発明の実施の形態を説明するが、請求項に記載の構成要件と、発明の実施の形態における具体例との対応関係を例示すると、次のようになる。この記載は、請求項に記載されている発明をサポートする具体例が、発明の実施の形態に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、構成要件に対応するものとして、ここには記載されていない具体例があったとしても、そのことは、その具体例が、その構成要件に対応するものではないことを意味するものではない。逆に、具体例が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その具体例が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
さらに、この記載は、発明の実施の形態に記載されている具体例に対応する発明が、請求項に全て記載されていることを意味するものではない。換言すれば、この記載は、発明の実施の形態に記載されている具体例に対応する発明であって、この出願の請求項には記載されていない発明の存在、すなわち、将来、分割出願されたり、補正により追加される発明の存在を否定するものではない。
請求項1に記載の復号装置は、LDPC(Low Density Parity Check)符号の復号装置であって、P×Pの単位行列、その単位行列のコンポーネントである1のうちの1個以上が0になった行列である準単位行列、前記単位行列もしくは準単位行列をサイクリックシフトした行列であるシフト行列、前記単位行列、準単位行列、もしくはシフト行列のうちの複数の和である和行列、またはP×Pの0行列を構成行列として、前記LDPC符号の検査行列が、複数の前記構成行列の組合せで表される場合において、前記LDPC符号の復号のためのP個のチェックノードの演算を同時に行う第1の演算手段(例えば、図16のチェックノード計算部313)と、前記LDPC符号の復号のためのP個のバリアブルノードの演算を同時に行う第2の演算手段(例えば、図16のバリアブルノード計算部319)とを備えることを特徴とする。
請求項2に記載の復号装置は、請求項1に記載の復号装置であって、前記第1の演算手段は、チェックノードの演算を行うP個のチェックノード計算器(例えば、図16のチェックノード計算器3131)を有し、前記第2の演算手段は、バリアブルノードの演算を行うP個のバリアブルノード計算器(例えば、図16のバリアブルノード計算器3191)を有することを特徴とする。
請求項3に記載の復号装置は、請求項1に記載の復号装置であって、前記P個のチェックノードの演算、または前記P個のバリアブルノードの演算の結果得られるP個の枝に対応するメッセージデータを同時に読み書きするメッセージ記憶手段(例えば、図16の枝データ格納メモリ311または316)をさらに備えることを特徴とする。
請求項9に記載の復号装置は、請求項1に記載の復号装置であって、LDPC符号の受信情報を格納するとともに、P個の前記受信情報を同時に読み出す受信情報記憶手段(例えば、図16の受信データ用メモリ318)をさらに備えることを特徴とする。
請求項11に記載の復号装置は、請求項1に記載の復号装置であって、前記P個のチェックノードの演算、または前記P個のバリアブルノードの演算の結果得られるメッセージを並べ替える並べ替え手段(例えば、図16のサイクリックシフト回路314または320)をさらに備えることを特徴とする。
請求項14に記載の復号装置は、請求項13に記載の復号装置であって、前記第1の演算手段は、前記P個のチェックノードの演算と前記P個のバリアブルノードの演算の一部を行うP個の計算器(例えば、計算器4121)を有し、前記第2の演算手段は、前記P個のバリアブルノードの演算の他の一部を行うP個の計算器(例えば、計算器4151)を有することを特徴とする。
請求項15に記載の復号装置は、請求項13に記載の復号装置であって、前記第1の演算手段が前記P個のチェックノードの演算と前記P個のバリアブルノードの演算の一部を行うことにより得られるP個の枝に対応する第1の復号途中結果を同時に読み書きする第1の復号途中結果記憶手段(例えば、図18の復号途中結果格納用メモリ413)をさらに備えることを特徴とする。
請求項18に記載の復号装置は、請求項13に記載の復号装置であって、前記第2の演算手段が前記P個のバリアブルノードの演算の他の一部を行うことにより得られるP個の枝に対応する前記第2の復号途中結果を同時に読み書きする第2の復号途中結果記憶手段(例えば、図18の復号途中結果格納用メモリ410)をさらに備えることを特徴とする。
請求項19に記載の復号装置は、請求項13に記載の復号装置であって、LDPC符号の受信情報を格納するとともに、P個の前記受信情報を同時に読み出す受信情報記憶手段(例えば、図18の受信用メモリ416)をさらに備えることを特徴とする。
請求項20に記載の復号装置は、請求項13に記載の復号装置であって、前記第1の演算手段が前記P個のチェックノードの演算と前記P個のバリアブルノードの演算の一部を行うことにより得られる第1の復号途中結果、または前記第2の演算手段が前記P個のバリアブルノードの演算の他の一部を行うことにより得られる第2の復号途中結果を並べ替える並べ替え手段(例えば、図18のサイクリックシフト回路411または414)をさらに備えることを特徴とする。
請求項23に記載の復号装置は、請求項22に記載の復号装置であって、前記第1の演算手段は、前記P個のチェックノードの演算の一部を行うP個の計算器(例えば、図26の計算器6121)を有し、前記第2の演算手段は、前記P個のチェックノードの演算の他の一部と、前記P個のバリアブルノードの演算を行うP個の計算器(例えば、図26の計算器6151)を有することを特徴とする。
請求項24に記載の復号装置は、請求項22に記載の復号装置であって、前記第1の演算手段が前記P個のチェックノードの演算の一部を行うことにより得られるP個の枝に対応する第1の復号途中結果を同時に読み書きする第1の復号途中結果記憶手段(例えば、図26の復号途中結果格納用メモリ613)をさらに備えることを特徴とする。
請求項25に記載の復号装置は、請求項22に記載の復号装置であって、前記第2の演算手段が前記P個のチェックノードの演算の他の一部と、前記P個のバリアブルノードの演算を行うことにより得られるP個の枝に対応する第2の復号途中結果を同時に読み書きする第2の復号途中結果記憶手段(例えば、図26の復号途中結果格納用メモリ610)をさらに備えることを特徴とする。
請求項28に記載の復号装置は、請求項22に記載の復号装置であって、LDPC符号の受信情報を格納するとともに、P個の前記受信情報を同時に読み出す受信情報記憶手段(例えば、図26の受信用メモリ616)をさらに備えることを特徴とする。
請求項29に記載の復号装置は、請求項22に記載の復号装置であって、前記第1の演算手段が前記P個のチェックノードの演算の一部を行うことにより得られる第1の復号途中結果、または前記第2の演算が前記P個のチェックノードの演算の他の一部と、前記P個のバリアブルノードの演算を行うことにより得られる第2の復号途中結果を並べ替える並べ替え手段(例えば、図26のサイクリックシフト回路611または614)をさらに備えることを特徴とする。
請求項30に記載の復号方法は、LDPC(Low Density Parity Check)符号の復号装置の復号方法であって、P×Pの単位行列、その単位行列のコンポーネントである1のうちの1個以上が0になった行列である準単位行列、前記単位行列もしくは準単位行列をサイクリックシフトした行列であるシフト行列、前記単位行列、準単位行列、もしくはシフト行列のうちの複数の和である和行列、またはP×Pの0行列を構成行列として、前記LDPC符号の検査行列が、複数の前記構成行列の組合せで表される場合において、前記LDPC符号の復号のためのP個のチェックノードの演算を同時に行う第1の演算ステップ(例えば、図17のステップS36)と、前記LDPC符号の復号のためのP個のバリアブルノードの演算を同時に行う第2の演算ステップ(例えば、図17のステップS31)とを含むことを特徴とする。
請求項31に記載のプログラムの各ステップの具体例も、請求項30に記載の復号方法の各ステップの発明の実施の形態における具体例と同様である。
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
図15は、5×5の行列の単位に間隔を空けた30×90の検査行列の例を示している。なお、図15の検査行列自体は、図8に示した検査行列と同一である。
図15においては、検査行列は、5×5の単位行列、その単位行列の1のうち1個以上が0になった行列(以下、適宜、準単位行列という)、単位行列または準単位行列をサイクリックシフト(cyclic shift)した行列(以下、適宜、シフト行列という)、単位行列、準単位行列、またはシフト行列のうちの2以上(複数)の和(以下、適宜、和行列という)、5×5の0行列の組合わせで表わされている。なお、図15の検査行列で表現されるLDPC符号は、符号化率2/3、符号長90である。
図15の検査行列は、5×5の単位行列、準単位行列、シフト行列、和行列、0行列で構成されているということができる。そこで、検査行列を構成する、これらの5×5の行列を、以下、適宜、構成行列という。
図16は、図15の検査行列で表現されるLDPC符号を復号する復号装置の一実施の形態の構成例を示している。
図16の復号装置300は、スイッチ310および315、6つのFIFO3111乃至3116からなる枝データ格納メモリ311、セレクタ312、5つのチェックノード計算器3131乃至3135からなるチェックノード計算部313、2つのサイクリックシフト回路314および320、18個のFIFO3161乃至31618からなる枝データ格納メモリ316、セレクタ317、受信情報を格納する受信データ用メモリ318、バリアブルノード計算部319、制御部321から構成される。
この復号装置300の各部について詳細に説明する前に、まず、枝データ格納メモリ311と316へのデータの格納方法について説明する。
枝データ格納メモリ311は、検査行列の行数30を構成行列の行数5で除算した数である6つのFIFO3111乃至3116から構成されている。FIFO311y(y=1,2,・・・,6)は、構成行列の行数および列数である5つの枝に対応するメッセージを同時に読み出しもしくは書き込むことができるようになっており、その長さ(段数)は、検査行列の行方向の1の数(ハミング重み)の最大数である9になっている。
FIFO3111には、図15の検査行列の第1行目から第5行目までの1の位置に対応するデータが、各行共に横方向(列方向)に詰めた形に(0を無視した形で)格納される。すなわち、第j行第i列を、(j,i)と表すこととすると、FIFO3111の第1の要素(第1段)には、検査行列の(1,1)から(5,5)の5×5の単位行列の1の位置に対応するデータが格納される。第2の要素には、検査行列の構成行列である(1,21)から(5,25)のシフト行列(5×5の単位行列を右方向に3つだけサイクリックシフトしたシフト行列)の1の位置に対応するデータが格納される。第3から第8の要素も同様に検査行列の構成行列と対応づけてデータが格納される。そして、第9の要素には、検査行列の(1,86)から(5,90)のシフト行列(5×5の単位行列のうちの1行目の1を0に置き換えて1つだけ左にサイクリックシフトしたシフト行列)の1の位置に対応するデータが格納される。ここで、検査行列の(1,86)から(5,90)のシフト行列においては、1行目に1がないため、FIFO3111の1行目のみ要素数は8、残りの行は要素数が9となる。
FIFO3112には、図15の検査行列の第6行目から第10行目までの1の位置に対応するデータが格納される。すなわち、FIFO3112の第1の要素には、検査行列の(6,1)から(10,5)の和行列(5×5の単位行列を右に1つだけサイクリックシフトした第1のシフト行列と、右に2つだけサイクリックシフトした第2のシフト行列の和である和行列)を構成する第1のシフト行列の1の位置に対応するデータが格納される。また、第2の要素には、検査行列の(6,1)から(10,5)の和行列を構成する第2のシフト行列の1の位置に対応するデータが格納される。
即ち、重みが2以上の構成行列については、その構成行列を、重みが1であるP×Pの単位行列、そのコンポーネントである1のうち1個以上が0になった準単位行列、または単位行列もしくは準単位行列をサイクリックシフトしたシフト行列のうちの複数の和の形で表現したときの、その重みが1の単位行列、準単位行列、またはシフト行列の1の位置に対応するデータ(単位行列、準単位行列、またはシフト行列に属する枝に対応するメッセージ)は、同一アドレス(FIFO3111乃至3116のうちの同一のFIFO)に格納される。
以下、第3から第9の要素についても、検査行列に対応づけてデータが格納される。FIFO3112は全行共に要素数は9となる。
FIFO3113乃至3116も同様に検査行列に対応づけてデータを格納し、各FIFO3113乃至3116それぞれの長さは9である。
枝データ格納メモリ316は、検査行列の列数90を、構成行列の列数である5で割った18個のFIFO3161乃至31618から構成されている。FIFO316x(x=1,2,・・・,18)は、構成行列の行数および列数である5つの枝に対応するメッセージを同時に読み出しもしくは書き込むことができるようになっている。
FIFO3161には、図15の検査行列の第1列目から第5列目までの1の位置に対応するデータが、各列共に縦方向(行方向)に詰めた形に(0を無視した形で)格納される。すなわち、FIFO3161の第1の要素(第1段)には、検査行列の(1,1)から(5,5)の5×5の単位行列の1の位置に対応するデータが格納される。第2の要素には、検査行列の(6,1)から(10,5)の和行列(5×5の単位行列を右に1つだけサイクリックシフトした第1のシフト行列と、右に2つだけサイクリックシフトした第2のシフト行列との和である和行列)を構成する第1のシフト行列の1の位置に対応するデータが格納される。また、第3の要素には、検査行列の(6,1)から(10,5)の和行列を構成する第2のシフト行列の1の位置に対応するデータが格納される。
即ち、重みが2以上の構成行列については、その構成行列を、重みが1であるP×Pの単位行列、そのコンポーネントである1のうち1個以上が0になった準単位行列、または単位行列もしくは準単位行列をサイクリックシフトしたシフト行列のうちの複数の和の形で表現したときの、その重みが1の単位行列、準単位行列、またはシフト行列の1の位置に対応するデータ(単位行列、準単位行列、またはシフト行列に属する枝に対応するメッセージ)は、同一アドレス(FIFO3161乃至31618のうちの同一のFIFO)に格納される。
以下、第4および第5の要素についても、検査行列に対応づけて、データが格納される。このFIFO3161の要素数(段数)は、検査行列の第1列から第5列における行方向の1の数(ハミング重み)の最大数である5になっている。
FIFO3162と3163も同様に検査行列に対応づけてデータを格納し、それぞれの長さ(段数)は、5である。FIFO3164乃至31612も同様に検査行列に対応づけてデータを格納し、それぞれの長さは3である。FIFO31613乃至31618も同様に検査行列に対応づけてデータを格納し、それぞれの長さは2である。但し、FIFO31618の第1の要素は、検査行列の(1,86)から(5,90)に相当し、第5列目(検査行列の(1,90)から(5,90))に1がないため、データは格納されない。
以下、図16の復号装置300の各部の動作について詳細に説明する。
スイッチ310には、サイクリックシフト回路320から5つのメッセージ(データ)D319が供給されるとともに、制御部321から検査行列のどの行に属するかの情報(Matrixデータ)を表す制御信号D320が供給される。制御信号D320にしたがって、5つのメッセージ(データ)D319を格納するFIFOを、FIFO3111乃至3116の中から選択し、選択したFIFOに5つのメッセージデータD319をまとめて順番に供給していく。
枝データ格納メモリ311は、6つのFIFO3111乃至3116からなる。枝データ格納メモリ311のFIFO3111乃至3116には、スイッチ310から、5つのメッセージD319がまとめて順番に供給され、FIFO3111乃至3116は、5つのメッセージD319をまとめて順番に(同時に)格納していく。また、枝データ格納メモリ311は、データを読み出す際には、FIFO3111から5つのメッセージ(データ)D3111を順番に読み出し、次段のセレクタ312に供給する。枝データ格納メモリ311は、FIFO3111からのメッセージD3111の読み出しの終了後、FIFO3112乃至3116からも、順番に、メッセージD3111乃至D3116をそれぞれ読み出し、セレクタ312に供給する。
セレクタ312には、制御部321から、FIFO3111乃至3116のうち、メッセージデータを読み出すFIFO(現在データが読み出されているFIFO)の選択を表す選択信号D321が供給されるとともに、枝データ格納メモリ311から5つのメッセージ(データ)D3111乃至D3116が供給される。セレクタ312は、選択信号D321にしたがって、FIFO3111乃至3116のうちの、現在データが読み出されているFIFOを選択し、その選択したFIFOから供給された5つのメッセージデータを、メッセージD312として、チェックノード計算部313に供給する。
チェックノード計算部313は、5つのチェックノード計算器3131乃至3135からなる。チェックノード計算部313には、セレクタ312を介して5つのメッセージD312が供給され、そのメッセージD312が、チェックノード計算器3131乃至3135のそれぞれに1つずつ供給される。また、チェックノード計算部313には、制御部321から制御信号D322が供給され、その制御信号D322が、チェックノード計算器3131乃至3135に供給される。チェックノード計算器3131乃至3135は、メッセージD312を用いて、式(7)にしたがって同時に演算を行い、その演算の結果、5個の枝に対応するメッセージD313を求める。チェックノード計算部313は、チェックノード計算器3131乃至3135による演算の結果得られる5つのメッセージD313をサイクリックシフト回路314に供給する。
ここで、制御部321からチェックノード計算部313に供給される制御信号D322は、図10の制御信号D106に対応するものであり、チェックノード計算部3131乃至3135それぞれは、図10に示したチェックノード計算器101と同様に構成される。
サイクリックシフト回路314には、チェックノード計算部313で計算された5つのメッセージD313が供給されるとともに、制御部321から、そのメッセージD313に対応する枝が検査行列において元となる単位行列などを幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D323が供給される。サイクリックシフト回路314は、制御信号D323を元に、5つのメッセージD313を並べ替えるサイクリックシフトを行い、その結果をメッセージD314として、スイッチ315に供給する。
スイッチ315には、サイクリックシフト回路314から供給される5つのメッセージ(データ)D314が検査行列のどの列に属するかの情報を表す制御信号D324が供給されるとともに、サイクリックシフト回路314から、メッセージD314が供給される。スイッチ315は、制御信号D324にしたがって、メッセージD314を格納するFIFOを、FIFO3161乃至31618の中から選択し、選択したFIFOに5つのメッセージD314をまとめて順番に供給していく。
枝データ格納メモリ316は、18個のFIFO3161乃至31618からなる。枝データ格納メモリ316のFIFO3161乃至31618には、スイッチ315から5つのメッセージD314がまとめて順番に(同時に)供給され、FIFO3161乃至31618は、その5つのメッセージD314をまとめて順番に格納していく。また、枝データ格納メモリ316は、データを読み出す際には、FIFO3161から5つのメッセージD3151を順番に読み出し、次段のセレクタ317に供給する。枝データ格納メモリ316は、FIFO3161からのデータの読み出しの終了後、FIFO3162乃至31618からも、順番に、メッセージD3152乃至D31318を読み出し、セレクタ317に供給する。
セレクタ317には、制御部321からFIFO3161乃至31618のうち、メッセージデータを読み出すFIFO(現在データが読み出されているFIFO)の選択を表す選択信号D325が供給されるとともに、枝データ格納メモリ316からメッセージデータD3151乃至D31318が供給される。セレクタ317は、選択信号D325にしたがって、FIFO3161乃至31618のうちの、現在データが読み出されているFIFOを選択し、その選択したFIFOから供給される5つのメッセージデータを、メッセージD316として、バリアブルノード計算部319と上述した式(5)の演算を行う不図示のブロックに供給する。
一方、受信データ用メモリ318は、通信路を通して受信した受信信号から、受信LLR(対数尤度比)を計算しており、その計算した受信LLRを5つまとめて(同時に)受信データD317(LDPC符号)としてバリアブルノード計算部319と、式(5)の演算を行う不図示のブロックに供給する。なお、受信データ用メモリ318は、バリアブルノード計算部319のバリアブルノード演算に必要となる順番に、受信データD317を読み出す。
バリアブルノード計算部319は、5つのバリアブルノード計算器3191乃至3195からなる。バリアブルノード計算部319には、セレクタ317を介して5つのメッセージD316が供給され、そのメッセージD316が、バリアブルノード計算器3191乃至3195のそれぞれに1つずつ供給される。また、バリアブルノード計算部319には、受信データ用メモリ318から5つの受信データD317が供給され、その受信データD317が、バリアブルノード計算器3191乃至3195のそれぞれに1つずつ供給される。さらに、バリアブルノード計算部319には、制御部321から制御信号D326が供給され、その制御信号D326がバリアブルノード計算器3191乃至3195に供給される。
バリアブルノード計算器3191乃至3195は、メッセージD316と、受信データD317を用いて、式(1)にしたがって同時に演算を行い、その演算の結果、5個の枝に対応するメッセージD318を求める。バリアブルノード計算部319は、バリアブルノード計算器3191乃至3195の結果得られる5つのメッセージD318を、サイクリックシフト回路320に供給する。
ここで、制御部521からバリアブルノード計算部319に供給される制御信号D326は、図11の制御信号D107に対応するものであり、バリアブルノード計算器3191乃至3195それぞれは、図11のバリアブルノード計算器103と同様に構成される。
サイクリックシフト回路320には、バリアブルノード計算部319から5つのメッセージD318が供給されるとともに、制御部321から、そのメッセージD318に対応する枝が検査行列において元となる単位行列などを幾つサイクリックシフトしたものであるかの情報を表す制御信号D327が供給される。サイクリックシフト回路320は、制御信号D327を元に、メッセージD327を並べ替えるサイクリックシフトを行い、その結果をメッセージD319として、スイッチ310に供給する。
なお、制御部321は、制御信号D320をスイッチ310に、選択信号D321をセレクタ312に供給することにより、それぞれを制御する。また制御部321は、制御信号D322をチェックノード計算部313に、制御信号D323をサイクリックシフト回路314に、制御信号D324をスイッチ315に供給することにより、それぞれを制御する。さらに、制御部321は、選択信号D325をセレクタ317、制御信号D326をバリアブルノード計算部319に、制御信号D327をサイクリックシフト回路320に供給することにより、それぞれを制御する。
以上の動作を1巡することで、LDPC符号の1回の復号を行うことができる。図16の復号装置300は、所定の回数だけLDPC符号を復号した後、図示しないが、式(5)にしたがって最終的な復号結果を求めて出力する。
なお、枝データ(枝に対応するメッセージ)が欠けている箇所に関しては、メモリ格納時(枝データ格納メモリ311と316へのデータ格納時)には、何のメッセージも格納せず、また、ノード演算時(チェックノード計算部313でのチェックノード演算時とバリアブルノード計算部319でのバリアブルノード演算時)にも何の演算も行わない。
図17は、図16の復号装置300の復号処理を説明するフローチャートである。この処理は、例えば、受信データ用メモリ318に復号すべき受信データが格納されたとき、開始される。
ステップS31において、バリアブルノード計算部319は、バリアブルノード演算を行う。
具体的には、バリアブルノード計算部319には、セレクタ317を介して、5つのメッセージD316(メッセージuj)が供給される。即ち、枝データ格納メモリ316は、後述するステップS39で格納されたFIFO3161から5つのメッセージD3161を順番に読み出し、その後、FIFO3162乃至31618からも、順番に、メッセージD3162乃至D31618を読み出して、セレクタ317に供給する。
セレクタ317には、制御部321からFIFO3161乃至31618のうち、メッセージ(データ)を読み出すFIFO(現在データが読み出されているFIFO)の選択を表す選択信号D307が供給されるとともに、枝データ格納メモリ316からメッセージデータD3161乃至D31618が供給される。セレクタ317は、選択信号D307にしたがって、FIFO3161乃至31618のうちの、現在データが読み出されているFIFOを選択し、その選択したFIFOから供給される5つのメッセージデータを、メッセージD316として、バリアブルノード計算部319に供給する。
なお、受信データ用メモリ306から供給された受信データD309に対して、まだチェックノード演算が行われておらず、枝データ格納メモリ316にメッセージD304が格納されていない場合、バリアブルノード計算部319は、バリアブルノード演算に用いるメッセージujを初期値に設定する。
また、バリアブルノード計算部319には、受信データ用メモリ318から5つの受信データD309(受信値u0i)が供給され、その受信データD309が、バリアブルノード計算器3191乃至3195のそれぞれに1つずつ供給される。さらに、バリアブルノード計算部319には、制御部321から制御信号D315が供給され、その制御信号D315がバリアブルノード計算器3191乃至3195に供給される。
バリアブルノード計算器3191乃至3195は、メッセージD316と、受信データD309を用いて、制御信号D315に基づいて、式(1)にしたがって同時に演算を行い、その演算の結果5つのメッセージD319を求める。
即ち、制御部321がバリアブルノード計算部319に供給する制御信号D315は、前述の図11で説明した制御信号D107に対応するものであり、バリアブルノード計算器3191乃至3195は、制御信号D309にしたがい、セレクタ317を介して、枝データ格納メモリ316から必要なメッセージD314(D316)を、それぞれ1つずつ読み出すとともに、受信データ用メモリ318から供給された5つの受信データD309を、それぞれ1つずつ読み出して、バリアブルノード演算を行い、その演算の結果5つのメッセージD319を同時に求める。
ステップS31の処理後は、ステップS32に進み、バリアブルノード計算部319は、バリアブルノード計算器3191乃至3195のバリアブルノード演算の結果得られる5つのメッセージD319(メッセージvi)をサイクリックシフト回路320に供給し、ステップS33に進む。
ステップS33において、サイクリックシフト回路320は、バリアブルノード計算部319から供給された5つのメッセージD318を、サイクリックシフトする(並べ替える)。
具体的には、サイクリックシフト回路320には、バリアブルノード計算部319からメッセージD318が供給されるとともに、制御部321から、そのメッセージD318に対応する枝が検査行列において元となる単位行列などを幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D327が供給される。サイクリックシフト回路320は、制御信号D327を元に、5つのメッセージD327をサイクリックシフトし、その結果をメッセージD319として、スイッチ310に供給する。
ステップS33の処理後は、ステップS34に進み、スイッチ310は、サイクリックシフト回路320から供給される5つのメッセージD319を枝データ格納メモリ311に供給する。
具体的には、スイッチ310には、サイクリックシフト回路320からメッセージ(データ)D304が供給されるとともに、そのメッセージD304が検査行列のどの行に属するかの情報を表す制御信号D312が供給される。スイッチ310は、制御信号D312にしたがって、メッセージD304を格納するFIFOを、枝データ格納メモリ311のFIFO3001乃至3006の中から選択し、選択したFIFOに5つのメッセージデータD304をまとめて順番に供給していく。
そして、枝データ格納メモリ311のFIFO3001乃至30018は、スイッチ310から供給された5つのメッセージデータD304をまとめて順番に格納していく。
ステップS34の処理後は、ステップS35に進み、制御部321は、バリアブルノード計算部319により、全枝数のメッセージが演算されたかどうかを判定し、全枝数のメッセージが演算されていないと判定した場合、ステップS31に戻り、上述した処理を繰り返す。
一方、ステップS35において、バリアブルノード計算部319は、全枝数のメッセージが演算されたと判定した場合、ステップS36に進み、チェックノード計算部313は、チェックノード演算を行う。
具体的には、チェックノード計算部313には、セレクタ312を介して、5つのメッセージD302が供給される。即ち、枝データ格納メモリ311は、ステップS34で格納されたFIFO3111から5つのメッセージD3111(メッセージvi)を順番に読み出し、その後、FIFO3112乃至3116からも、順番に、メッセージデータD3112乃至D3116を読み出し、セレクタ312に供給する。
セレクタ312には、制御部321からFIFO3111乃至3116のうち、メッセージデータを読み出すFIFO(現在データが読み出されているFIFO)の選択を表す選択信号D321が供給されるとともに、枝データ格納メモリ311からメッセージデータD3111乃至D3116が供給される。セレクタ301は、選択信号D321にしたがって、FIFO3111乃至3116のうちの、現在データが読み出されているFIFOを選択し、その選択したFIFOから供給される5つのメッセージデータを、メッセージD311として、チェックノード計算部313に供給する。
また、チェックノード計算部313には、制御部321から制御信号D322が供給される。チェックノード計算部313のチェックノード計算器3131乃至3135は、制御信号D322に基づいて、メッセージD302を用いて、上述した式(7)にしたがって同時にチェックノード演算を行い、その演算結果である5つのメッセージD303(メッセージuj)を求める。
即ち、制御部321がチェックノード計算部313に供給する制御信号D322は、前述の図10で説明した制御信号D106に対応するものであり、チェックノード計算器3131乃至3135は、制御信号D322にしたがい、セレクタ312を介して、枝データ格納メモリ311から必要なメッセージD311(D312)を、それぞれ1つずつ読み出しながら、チェックノード演算を行い、その演算の結果5つのメッセージD313を同時に求める。
ステップS37の処理後は、ステップS38に進み、チェックノード計算部313は、チェックノードの演算の結果得られる5つのメッセージD313をサイクリックシフト回路314に出力して、ステップS38に進む。
ステップS38において、サイクリックシフト回路314は、チェックノード計算部313から供給された5つのメッセージD313を、サイクリックシフトする。
具体的には、サイクリックシフト回路314には、チェックノード計算部313からメッセージD313が供給されるとともに、制御部321から、そのメッセージD313に対応する枝が検査行列において元となる単位行列などを幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D314が供給される。サイクリックシフト回路314は、制御信号D314を元に、5つのメッセージD313をサイクリックシフトし、その結果をメッセージD304として、スイッチ315に供給する。
ステップS38の処理後は、ステップS39に進み、スイッチ315は、サイクリックシフト回路314から供給される5つのメッセージD304を枝データ格納メモリ316に格納する。
具体的には、スイッチ316には、サイクリックシフト回路314から、5つのメッセージ(データ)D304が供給されるとともに、そのメッセージ(データ)D304が検査行列のどの列に属するかの情報を表す制御信号D324が供給される。スイッチ316は、制御信号D324にしたがって、メッセージD304を格納するFIFOを、枝データ格納メモリ316のFIFO3161乃至31618の中から選び、選んだFIFOに5つのメッセージデータD304をまとめて順番に供給していく。
そして、枝データ格納メモリ316のFIFO3161乃至31618は、スイッチ316から供給された5つのメッセージデータD304をまとめて順番に格納していく。
ステップS39の処理後は、ステップS40に進み、制御部321は、チェックノード計算部313により、全枝数のメッセージが演算されたかどうかを判定し、全枝数のメッセージが演算されていないと判定した場合、ステップS36に戻り、上述した処理を繰り返す。
一方、ステップS40において、制御部321は、チェックノード計算部313により、全枝数のメッセージが演算されたと判定した場合、処理を終了する。
なお、復号装置300は、復号回数だけ図17の復号処理を繰り返し行ない、チェックノード計算部313が、最後のチェックノード演算を行った場合、チェックノード演算の結果得られるメッセージD304が、枝データ格納メモリ316から、セレクタ317を介して、上述した式(5)の演算を行う不図示のブロックに供給される。不図示のブロックには、さらに受信データ用メモリ306から受信データD309が供給され、不図示のブロックは、メッセージD304と受信データD309を用いて、式(5)の演算を行い、その演算結果を最終的な復号結果として出力する。
上記説明には、枝データ格納にFIFOを用いたが(枝データ格納メモリ311と316をFIFOで構成するようにしたが)、FIFOの代わりにRAMを用いても構わない。その場合、RAMには、P個の枝情報(枝に対応するメッセージ)を同時に読み出すことの出来るビット幅と、枝総数/Pのワード(word)数が必要となる。さらに、RAMへの書き込みは、検査行列の情報から、書き込もうとしているデータが次に読み出される際に何番目に読み出されるかを求め、その位置に書き込む。また、RAMからの読み出しの際には、アドレスの先頭から順次データを読み出す。即ち、RAMは、メッセージデータを読み出される順番に詰めて格納し、格納位置順に読み出す。FIFOの代わりにRAMを用いると、セレクタ312および317は不要になる。
なお、FIFOやRAMの物理的なビット幅が足りない場合には、複数のRAMを用いて同じ制御信号を与えることで、論理的に1つのRAMとみなすことができる。
ところで、図16の復号装置300では、チェックノード演算の結果得られるメッセージujを用いて、バリアブルノード演算が行われ、その演算の結果得られるメッセージviを用いて、チェックノード演算が行われるため、チェックノード演算の結果得られる枝に対応するメッセージujとバリアブルノード演算の結果得られる枝に対応するメッセージviをすべて格納する枝データ格納メモリ311と枝データ格納メモリ316が必要である。即ち、復号装置では、検査行列Hの“1”の数の2倍のメッセージを格納するために必要な容量のメモリが必要である。
そこで、復号装置の回路規模さらに小さくするため、図16の復号装置300に比べて、さらにメモリの容量を減らした復号装置を以下に示す。
図18は、本発明を適用した図15の検査行列で表現されるLDPC符号を復号する復号装置の他の一実施の形態の構成例を示すブロック図である。
図18の復号装置400では、図16の枝データ格納メモリ311が、枝データ格納メモリ311に比べて容量の小さい復号途中結果格納用メモリ410になっている。
復号装置400は、復号途中結果格納用メモリ410、サイクリックシフト回路411、5つの計算器4121乃至計算器4125からなる計算部412、復号途中結果格納用メモリ413、サイクリックシフト回路414、5つの計算器4151乃至計算器4155からなる計算部415、受信用メモリ416、および制御部417から構成される。
ここで、図19乃至図22を用いて、図18の計算部412の計算器4121乃至計算器4125、および計算部415の計算器4151乃至計算器4155と図10のチェックノード計算器101と図11のバリアブルノード計算器103との関係について説明する。
図19と図20は、前述の図10のチェックノード計算器101と図11のバリアブルノード計算器103とそれぞれ同一の図である。また、図21は、計算部412k(k=1,2,・・・,5)の構成例を示しており、図22は、計算部415k(k=1,2,・・・,5)の構成例を示している。
図18の復号装置400では、計算器412kがチェックノード演算を行い、計算部415kが、バリアブルノード演算をおこなうのではなく、計算器412kがチェックノード演算とバリアブルノード演算の一部を、計算器415kがバリアブルノード演算の他の一部を行う。
即ち、図21の計算器412kは、ブロックA'とブロックB'から構成されている。ブロックA‘は、図19のチェックノード計算器101のチェックノード演算を行うブロックAと同様に構成されている。また、ブロックB’は、図20のバリアブルノード計算器103の一部である、検査行列の各列の全ての枝に対応するメッセージujの積算値から、求めたい枝に対応するメッセージujを減算するブロックBと同様に構成されている。一方、図22の計算器415kは、ブロックC'から構成されている。ブロックC'は、図20のバリアブルノード計算器103の他の一部である、検査行列の各列の枝に対応するメッセージujを積算し、その積算値に受信値u0iを加算するブロックCと同様に構成されている。
そして、図21の計算器412kは、ブロックAとブロックBによる演算の結果、即ち、チェックノード演算とバリアブルノード演算の一部を行った復号途中結果ujを復号途中結果格納用メモリ413に供給し、図22の計算器415kは、バリアブルノード演算の他の一部を行った復号途中結果vを復号途中結果格納用メモリ410に供給する。
従って、図18の復号装置400は、計算器412kの演算と計算器415kの演算とを交互に行うことにより、チェックノード演算とバリアブルノード演算を行い、復号を行うことができる。
なお、図22の計算器412kでは、復号途中結果格納用メモリ413に格納されている求めたい枝に対応する復号途中結果ujを用いて、ブロックBで、計算器415kの演算の結果得られる復号途中結果vから、求めたい枝に対応する復号途中結果ujを減算するので、図20のFIFOメモリ155が必要ない。
次に、計算器412kで行われる演算と、計算器415kで行われる演算について、式を用いて説明する。
具体的には、計算部412は、上述した式(7)と、以下に表す式(8)にしたがう第1の演算を行い、その第1の演算の結果である復号途中結果ujを復号途中結果格納用メモリ410に供給して格納させる。計算部415は、上述した式(5)にしたがう第2の演算を行い、その第2の演算の結果である復号途中結果vを復号途中結果格納用メモリ410に供給して格納させる。
Figure 0004225163
・・・(8)
なお、式(8)のudvは、検査行列Hのi列のメッセージを求めようとする枝からのチェックノード演算の途中結果(ここでは、チェックノード演算結果そのもの)を表している。即ち、udvは、求めたい枝に対応する復号途中結果である。
即ち、上述した式(5)にしたがう第2の演算の結果得られる復号途中結果vは、受信値u0iと検査行列Hのi列の各行の1に対応するすべての枝からのチェックノード演算の復号途中結果ujとを加算したものであるので、上述した式(7)に用いられる値viは、式(5)にしたがう第2の演算の結果得られる復号途中結果vから、検査行列Hのi列の、各行の1に対応する枝からのチェックノード演算の復号途中結果ujのうち、メッセージを求めようとする枝からのチェックノード演算の復号途中結果udvを引いた値となる。つまり、式(7)の演算に用いられる値viを求める式(1)の演算は、上述した式(5)と式(8)を組み合わせた演算である。
従って、復号装置400では、計算部412による式(7)および式(8)にしたがう第1の演算と、計算部415による式(5)にしたがう第2の演算とが交互に行われ、計算部415が、最後の第2の演算の結果を復号結果として出力することにより、LDPC符号の繰り返し復号を行うことができる。
なお、ここでは、式(7)と式(8)にしたがう第1の演算結果を復号途中結果ujと記載するが、この復号途中結果ujは、式(7)のチェックノード演算結果ujに等しい。
また、第2の演算により求められる式(5)のvは、式(1)のバリアブルノード演算結果viに対して、メッセージを求めようとする枝からのチェックノード演算結果ujを加算したものであるから、検査行列Hの1列(1つのバリアブルノード)に対して、1つだけ求められる。
復号装置400では、計算部412が、計算部415による第2の演算の結果である検査行列Hの列に対応する復号途中結果v(第2の復号途中結果)を用いて、第1の演算を行い、その演算の結果得られる検査行列Hのi列の、各行の1に対応する枝のメッセージ(各チェックノードが各枝に出力するメッセージ)の枝からのチェックノード演算の復号途中結果uj(第1の復号途中結果)を復号途中結果格納用メモリ413に格納する。従って、復号途中結果格納用メモリ413の容量は、チェックノード演算の結果を格納する図16の枝データ格納メモリ316と同様に、検査行列の1の数(全枝数)とメッセージの量子化ビット数とを乗算した値となる。一方、計算部415は、計算部412による第1の演算の結果である検査行列Hのi列の、各行の“1”に対応する復号途中結果ujと受信値u0iを用いて、第2の演算を行い、その演算の結果得られるi列に対応する復号途中結果vを復号途中結果格納用メモリ410に格納する。従って、復号途中結果格納用メモリ410に必要な容量は、検査行列の“1”の数より少ない検査行列の列数、即ち、LDPC符号の符号長と復号途中結果vの量子化ビット数とを乗算した値となる。
従って、検査行列Hにおける1が疎らなLDPC符号を復号する復号装置400では、図16の枝データ格納メモリ311に比べて、復号途中結果格納用メモリ410のメモリの容量を削減することができ、これにより、復号装置400の回路規模を小さくすることができる。
さらに、復号装置400では、計算部415が、式(5)にしたがう第2の演算を行うので、復号装置400は、図16の復号装置300において最終的な復号結果を演算する式(5)の演算を行う不図示のブロックを有する必要がなく、図16の復号装置300に比べて、図18の復号装置の回路規模を小さくすることができる。
以下、図18の復号装置400の各部の動作について詳細に説明する。
復号途中結果格納用メモリ410には、計算部415から、計算部415による第2の演算の結果である検査行列の5つの列に対応する5つの復号途中結果D415が供給され、復号途中結果格納用メモリ410は、計算部415から供給された5つの復号途中結果D415を、第1アドレスから順に格納(記憶)する。
即ち、復号途中結果格納用メモリ410の第1アドレスには、検査行列の列に対応する復号途中結果のうち、第1列目から第5列目の復号途中結果vが格納される。そして、同様に、第2アドレスには、第6列目から第10列目の復号途中結果vが格納され、第3アドレスには、第11列目から第15列目の復号途中結果が格納される。以後、同様に、第16列目から第90列目までの復号途中結果vが、5個ずつ、第4アドレスから第18アドレスまで格納され、計90個の復号途中結果vが復号途中結果格納用メモリ410に格納される。従って、復号途中結果格納用メモリ410のワード(word)数は、図15の検査行列Hの列数(LDPC符号の符号長)である90を、同時に読み書きする復号途中結果の数である5で割り算した18となる。
また、復号途中結果格納用メモリ410は、既に格納してある復号途中結果D415から、後段の計算部412が求めようとする復号途中結果ujの対応する検査行列Hの行において“1”になっている復号途中結果vを5つ同時に読み出し、復号途中結果D410として、サイクリックシフト回路411に供給する。
なお、復号途中結果格納用メモリ410は、例えば、5つの復号途中結果を同時に読み書き可能なシングルポートRAMで構成される。また、復号途中結果格納用メモリ410には、計算部415の第2の演算により演算された列に対応する復号途中結果vが格納されるので、復号途中結果格納用メモリ410に格納されるデータ量、即ち、復号途中結果格納用メモリ410に必要とされる記憶容量は、復号途中結果の量子化ビット数と、検査行列Hの列数(LDPC符号の符号長)との乗算値である。
サイクリックシフト回路411には、復号途中結果格納用メモリ410から5つの復号途中結果D410が供給されるとともに、制御部417から、その復号途中結果D410に対応する検査行列の1が、検査行列において元となる単位行列などを幾つサイクリックシフトであるかの情報(Matrixデータ)を表す制御信号D619が供給される。サイクリックシフト回路611は、制御信号D619を元に、5つの復号結果D410を並べ替えるサイクリックシフトを行い、その結果を復号途中結果D411として、計算部412に供給する。
計算部412は、5つの計算器4121乃至4125からなる。計算部412には、サイクリックシフト回路411から、計算部415による第2の演算の結果得られた5つの復号途中結果D411(第2の復号途中結果)vが供給されるとともに、復号途中結果格納用メモリ413から、前回、計算器4121乃至4125による第1の演算の結果得られた5つの復号途中結果D413(第1の復号途中結果)ujが供給され、その5つの復号途中結果D411と5つの復号途中結果D413が、計算器4121乃至4125にそれぞれ供給される。また、計算部412には、制御部417から制御信号D419が供給され、その制御信号D419が、計算器4121乃至4125に供給される。なお、制御信号D419は、5つの計算器4121乃至4125に共通の信号である。
計算器4121乃至4125は、それぞれ復号途中結果D411と復号途中結果D413を用いて、式(7)と式(8)にしたがって第1の演算を行い、復号途中結果D412(u j )を求める。計算部412は、計算器4121乃至4125による演算の結果得られる検査行列の5つの1に対応する5つの復号途中結果D412を復号途中結果格納用メモリ413に供給する。
復号途中結果格納用メモリ413は、例えば、5つの復号途中結果を同時に読み書き可能な、2つのシングルポートRAMから構成される。復号途中結果格納用メモリ413には、計算部412から5つの復号途中結果D412が供給されるとともに、制御部417から復号途中結果413の読み書きを制御する制御信号D420が供給される。
復号途中結果格納用メモリ413は、制御信号D420に基づいて、計算部412から供給される5つの復号途中結果D412をまとめて格納すると同時に、既に格納してある5つの復号途中結果D412を読み出し、復号途中結果D413として、計算部412とサイクリックシフト回路414に供給する。即ち、復号途中結果格納用メモリ413は、計算部412とサイクリックシフト回路414に供給する復号途中結果D413の読み出しと、計算部412から供給される復号途中結果D412の書き込みとを、同時に行う。
なお、復号途中結果格納用メモリ413には、計算部412の第1の演算により演算された検査行列Hのi列の、各行の1に対応する枝からのチェックノード演算の復号途中結果ujが格納されるので、復号途中結果格納用メモリ413に格納されるデータ量、即ち、復号途中結果格納用メモリ413に必要とされる記憶容量は、復号途中結果の量子化ビット数と、検査行列の1の数との乗算値となる。
サイクリックシフト回路414には、復号途中結果格納用メモリ413から5つの復号途中結果D413(復号途中結果uj)が供給されるとともに、制御部417から、その復号途中結果D413に対応する検査行列の1が検査行列において元となる単位行列などを幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D421が供給される。サイクリックシフト回路414は、制御信号D421を元に、5つの復号途中結果D413を並べ替えるサイクリックシフトを行い、その結果を復号途中結果D414として、計算部415に供給する。
計算部415は、5つの計算器4151乃至4155からなる。計算部415には、サイクリックシフト回路414から5つの復号途中結果D414が供給され、その復号途中結果D414が、計算器4151乃至4155のそれぞれに供給される。また、計算部415には、受信用メモリ417から5つの受信データD417(LDPC符号)が供給され、その受信データD417が、計算器4151乃至4155のそれぞれに供給される。さらに、計算部417には、制御部417から制御信号D422が供給され、その制御信号D422が計算器4151乃至4155に供給される。なお、制御信号D422は、5つの計算器4171乃至4175に共通の信号である。
計算器4151乃至4155は、それぞれ復号途中結果D414と受信データD417とを用いて、式(5)にしたがって、それぞれ第2の演算を行い、復号途中結果D415を求める。計算部415は、計算器4151乃至4155の第2の演算の結果得られる5つの復号途中結果D415(v)を、復号途中結果格納用メモリ410に供給する。また、計算部415は、いま行う演算が最後の第2の演算である場合、その演算の結果得られる5つの復号途中結果D415を、最終的な復号結果として出力する。
受信用メモリ416は、通信路を通して受信した受信値(符号ビット)D416から計算した符号ビットの0らしさの値である受信LLR(対数尤度比)を、受信データD417として格納する。
即ち、受信用メモリ416の第1のアドレスには、検査行列の列に対応する受信データD417のうち、検査行列の第1列目から第5列目までに対応する受信データD417が格納される。そして、第2のアドレスには、検査行列の第6列目から第10列目までに対応する受信データD417が格納され、第3アドレスには、検査行列の第11列目から第16列目までに対応する受信データD417が格納される。以後、同様に、第4アドレスから第18アドレスまでに、検査行列の第17列目から第90列目までに対応する受信データD417が、5つずつ格納される。
そして、受信用メモリ616は、既に格納している受信データD417を、バリアブルノード演算に必要となる順番に5つずつ読み出し、計算部415に供給する。
なお、受信用メモリ416は、例えば、5つの受信データを同時に読み書き可能なシングルポートRAMから構成される。また、受信用メモリ416に格納されるデータ量、即ち、受信用メモリ315に必要とされる記憶容量は、LDPC符号の符号長と、受信データの量子化ビット数との乗算値である。さらに、受信用メモリ416のワード(word)数は、LDPC符号の符号長、即ち、検査行列の列数である90を、同時に読み出す受信データD417の数である5で割り算した値の18である。
制御部417は、制御信号D418をサイクリックシフト回路411に、制御信号D419を計算部412に供給することにより、それぞれを制御する。また、制御部417は、制御信号D420を復号途中結果格納用メモリ413に、制御信号D421をサイクリックシフト回路414に、制御信号D421を計算部415にそれぞれ供給することにより、それぞれを制御する。
復号途中結果格納用メモリ410、サイクリックシフト回路411、計算部412、復号途中結果格納用メモリ413、サイクリックシフト回路414、計算部415の順で、データが一巡することで、復号装置400は、1回の復号を行うことができる。復号装置400では、所定の回数だけ繰り返して復号が行われた後、計算部415による第2の演算の結果である復号途中結果D415が、最終的な復号結果として出力される。
図21は、図18の計算部412の計算器4121の構成例を示すブロック図である。
なお、図21では、計算器4121について説明するが、計算器4122乃至計算器4125も同様に構成される。
また、図21では、前回の計算部412による第1の演算の結果得られる各復号途中結果(udv)が符号ビットを合わせて合計6ビット(bit)に量子化され、計算器415による第2の演算の結果得られる各復号途中結果(v)が9ビットに量子化されているものとして、計算器4121を表している。さらに、図21の計算器4121には、クロックckが供給され、このクロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図21の計算器4121は、制御部417から供給される制御信号D419に基づいて、復号途中結果格納用メモリ413から1つずつ読み込まれる、前回の計算部412による第1の演算の結果得られた復号途中結果D413(udv)と、サイクリックシフト回路411から1つずつ読み込まれる復号途中結果D411(v)とを用いて、式(7)と式(8)にしたがう第1の演算を行う。
即ち、計算器4121には、サイクリックシフト回路411から供給される5つの9ビットの復号途中結果D411(v)のうちの、1つの復号途中結果D411が供給されるとともに、復号途中結果格納用メモリ413から供給される、前回の計算部412による演算の結果である5つの6ビットの復号途中結果D413(uj)のうちの、前回の計算部412による演算の結果である1つの復号途中結果D413が供給され、その9ビットの復号途中結果D411(v)と6ビットの復号途中結果D413(udv)が、減算器431に供給される。また、計算器4121には、制御部417から制御信号D419が供給され、その制御信号D419がセレクタ435とセレクタ442に供給される。
減算器431は、9ビットの復号途中結果D411(v)から6ビットの復号途中結果D413(uj)を減算し、その6ビットの減算値D431を出力する。即ち、減算器431は、式(8)にしたがって演算を行い、その演算の結果である減算値D431(vi)を出力する。
減算器431により出力された6ビットの減算値D431のうち、最上位ビットの正負を示す符号ビットD432(sign(vi))がEXOR回路440に供給され、下位5ビットの絶対値D433(|vi|)がLUT432に供給される。
LUT432は、絶対値D433(|vi|)に対して、式(7)におけるφ(|vi|)の演算を行った5ビットの演算結果D434(φ(|vi|))を読み出し、加算器433とFIFOメモリ438に供給する。
加算器433は、演算結果D434(φ(|vi|))とレジスタ434に格納されている9ビットの値D435とを加算することにより、演算結果D434を積算し、その結果得られる9ビットの積算値をレジスタ434に再格納する。なお、検査行列の1行に亘る全ての1に対応する復号途中結果D411から求められた絶対値D433(|vi|)に対する演算結果が積算された場合、レジスタ434はリセットされる。
検査行列の1行に亘る復号途中結果D411が1つずつ読み込まれ、レジスタ434に1行分の演算結果D434が積算された積算値が格納された場合、制御部417から供給される制御信号D419は、0から1に変化する。例えば、行の重み(row weight)が「9」である場合、制御信号D419は、1から8クロック目までは、「0」となり、9クロック目では「1」となる。
制御信号D419が「1」の場合、セレクタ435は、レジスタ434に格納されている値、即ち、検査行列の1行に亘る全ての1に対応する復号途中結果D411(復号途中結果v)から求められたφ(|vi|)が積算された9ビットの値D435(i=1からi=dcまでのΣφ(|vi|))を選択し、値D436として、レジスタ436に出力して格納させる。レジスタ436は、格納している値D436を、9ビットの値D437として、セレクタ435と加算器437に供給する。制御信号D419が「0」の場合、セレクタ435は、レジスタ436から供給された値D437を選択し、レジスタ436に出力して再格納させる。即ち、検査行列の1行に亘る全ての1に対応する復号途中結果D411(復号途中結果v)から求められたφ(|vi|)が積算されるまで、レジスタ436は、前回積算されたφ(|vi|)を、セレクタ435と加算器437に供給する。
一方、FIFOメモリ438は、レジスタ436から新たな値D437(i=1からi=dcまでのΣφ(|vi|))が出力されるまでの間、LUT432が出力した演算結果D434(φ(|vi|))を遅延し、5ビットの値D438として減算器437に供給する。減算器437は、レジスタ436から供給された値D437から、FIFOメモリ438から供給された値D438を減算し、その減算結果を、5ビットの減算値D439としてLUT439に供給する。即ち、減算器437は、検査行列の1行に亘る全ての1に対応する復号途中結果D411(復号途中結果v)から求められたφ(|vi|)の積算値から、求めたい枝に対応する復号途中結果、即ち、検査行列の所定の1に対応する復号途中結果D411(復号途中結果v)から求められたφ(|vi|)を減算して、その減算値(i=1からi=dc−1までのΣφ(|vi|))を減算値D439としてLUT439に供給する。
LUT439は、減算値D439(i=1からi=dc−1までのΣφ(|vi|))に対して、式(7)におけるφ-1(Σφ(|vi|))の演算を行った5ビットの演算結果D440(φ-1(Σφ(|vi|)))を出力する。
以上の処理と並行して、EXOR回路440は、レジスタ441に格納されている1ビットの値D442と符号ビットD432との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、1ビットの乗算結果D441をレジスタ441に再格納する。なお、検査行列の1行に亘る全ての1に対応する復号途中結果D411から求められた符号ビットD432が乗算された場合、レジスタ441はリセットされる。
検査行列の1行に亘る全ての1に対応する復号途中結果D411から求められた符号ビットD432が乗算された乗算結果D441(i=1からdcまでのΠsign(vi))がレジスタ441に格納された場合、制御部417から供給される制御信号D419は、「0」から「1」に変化する。
制御信号D419が「1」の場合、セレクタ442は、レジスタ441に格納されている値、即ち、検査行列の1行に亘る全ての1に対応する復号途中結果D411から求められた符号ビットD432が乗算された値D442(i=1からi=dcまでのΠsign(vi))を選択し、1ビットの値D443としてレジスタ443に出力して格納させる。レジスタ443は、格納している値D443を、1ビットの値D444としてセレクタ442とEXOR回路445に供給する。制御信号D419が「0」の場合、セレクタ442は、レジスタ443から供給された値D444を選択し、レジスタ443に出力して再格納させる。即ち、検査行列の1行に亘る全ての1に対応する復号途中結果D411(復号途中結果v)から求められた符号ビットD432が乗算されるまで、レジスタ443は、前回格納した値を、セレクタ442とEXOR回路445に供給する。
一方、FIFOメモリ444は、レジスタ443から新たな値D444(i=1からi=dcまでのΠsign(vi))がEXOR回路445に供給されるまでの間、符号ビットD432を遅延し、1ビットの値D445としてEXOR回路445に供給する。EXOR回路445は、レジスタ443から供給された値D444と、FIFOメモリ444から供給された値D445との排他的論理和を演算することにより、値D444を、値D445で除算し、1ビットの除算結果を除算値D446として出力する。即ち、EXOR回路445は、検査行列の1行に亘る全ての1に対応する復号途中結果D411から求められた符号ビットD432(sign(vi))の乗算値を、検査行列の所定の1に対応する復号途中結果D411から求められた符号ビットD432(sign(vi))で除算して、その除算値(i=1からi=dc−1までのΠsign(vi))を除算値D446として出力する。
計算器4121では、LUT439から出力された5ビットの演算結果D440を下位5ビットとするとともに、EXOR回路445から出力された1ビットの除算値D446を最上位ビットとする合計6ビットが復号途中結果D412(復号途中結果uj)として出力される。
以上のように、計算器4121では、式(7)と式(8)の演算が行われ、復号途中結果ujが求められる。
なお、図15の検査行列の行の重みの最大は9であるため、即ち、計算器4121に供給される復号途中結果D411(v)と復号途中結果D413(udv)の最大数は9であるため、計算器4121は、9個の復号途中結果D411から求められる9個の演算結果D434(φ(|vi|))を遅延させるFIFOメモリ438と、9個の符号ビットD432を遅延させるFIFOメモリ444を有している。行の重みが9未満の行のメッセージを計算するときには、FIFOメモリ438とFIFOメモリ444における遅延量が、その行の重みの値に減らされる。
図22は、図18の計算部415の計算器4151の構成例を示すブロック図である。
なお、図22では、計算器4151について説明するが、計算器4152乃至計算器4155も同様に構成される。
また、図22では、計算器412による第1の演算の結果得られる各復号途中結果(uj)が符号ビットを合わせて合計6ビットに量子化されているものとして、計算器4151を表している。さらに、図22の計算器4151には、クロックckが供給され、このクロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図22の計算器4151は、制御部417から供給される制御信号D422に基づいて、受信用メモリ416から1つずつ読み込まれる受信データD417(受信値u0i)と、サイクリックシフト回路414から1つずつ読み込まれる復号途中結果D414(uj)とを用いて、式(5)にしたがう第2の演算を行う。
即ち、計算器4151では、サイクリックシフト回路414から、検査行列の各行の1に対応する6ビットの復号途中結果D414(復号途中結果uj)が1つずつ読み込まれ、その復号途中結果D414が、加算器471に供給される。また、計算器4151では、受信用メモリ416から6ビットの受信データD417が1つずつ読み込まれ、加算器475に供給される。さらに、計算器4151には、制御部417から制御信号D422が供給され、その制御信号D422は、セレクタ473に供給される。
加算器471は、復号途中結果D414(復号途中結果uj)とレジスタ472に格納されている9ビットの値D471とを加算することにより、復号途中結果D414を積算し、その結果得られる9ビットの積算値を、レジスタ472に再格納する。なお、検査行列の1列に亘る全ての1に対応する復号途中結果D414が積算された場合、レジスタ472はリセットされる。
検査行列の1列に亘る復号途中結果D414が1つずつ読み込まれ、レジスタ472に1列分の復号途中結果D414が積算された値が格納された場合、制御部417から供給される制御信号D422は、「0」から「1」に変化する。例えば、列の重みが「5」である場合、制御信号D422は、1から4クロック目までは「0」となり、5クロック目では「1」となる。
制御信号D422が「1」の場合、セレクタ473は、レジスタ472に格納されている値、即ち、検査行列の1列に亘る全ての枝からの復号途中結果D414(復号途中結果uj)が積算された9ビットの値D471(j=1からdVまでのΣuj)を選択し、レジスタ474に出力して格納させる。レジスタ474は、格納している値D471を、9ビットの値D472として、セレクタ471と加算器475に供給する。制御信号D422が「0」の場合、セレクタ473は、レジスタ474から供給された値D472を選択し、レジスタ474に出力し再格納させる。即ち、検査行列の1列に亘る全ての枝からの復号途中結果D414(復号途中結果uj)が積算されるまで、レジスタ474は、前回積算された値を、セレクタ473と加算器475に供給する。
加算器475は、9ビットの値D472と、受信用メモリ416から供給された6ビットの受信データD417とを加算して、その結果得られる6ビットの値を復号途中結果D415(復号途中結果v)として出力する。
以上のように、計算器4151では、式(5)の演算が行われ、復号途中結果vが求められる。
なお、図8の検査行列の列の重みの最大は5であるため、即ち、計算器4151に供給される復号途中結果ujの最大数は5であるため、計算器4151は、6ビットの復号途中結果ujを最大5個加算する。従って、計算器4151の出力は、9ビットの値となっている。
図23は、図18の復号途中結果格納用メモリ413の構成例を示すブロック図である。
復号途中結果格納用メモリ413は、スイッチ501と504、および2つのシングルポートRAMである復号途中結果格納用RAM502と503から構成される。
この復号途中結果格納用メモリ413の各部について詳細に説明する前に、まず、復号途中結果格納用RAM502と503へのデータの格納方法について説明する。
復号途中結果格納用RAM502と503は、計算部412による第1の演算の結果得られ、スイッチ501を介して供給された復号途中結果D412を格納する。
具体的には、復号途中結果格納用RAM502の第1アドレスから第9アドレスには、図15の検査行列Hの第1行目から第5行目までの1に対応する復号途中結果D412(D501)が、各行ともに横方向(列方向)に詰めた形に(0を無視した形で)格納される。
即ち、第j行第i列を、(j,i)と表すこととすると、復号途中結果格納用RAM502の第1アドレスには、図15の検査行列の構成行列である(1,1)から(5,5)の5×5の単位行列の1に対応するデータが、第2アドレスには、図15の検査行列の構成行列である(1,21)から(5,25)のシフト行列(5×5の単位行列を右方向に3つだけサイクリックシフトしたシフト行列)の1に対応するデータが格納される。第3アドレスから第8アドレスも同様に図15の検査行列の構成行列と対応づけてデータが格納される。そして、第9アドレスには、検査行列の(1,86)から(5,90)のシフト行列(5×5の単位行列のうちの1行目の1を0に置き換えて1つだけ左にサイクリックシフトしたシフト行列)の1に対応するデータが格納される。ここで、図15の検査行列の(1,86)から(5,90)のシフト行列においては、1行目に1がないため、第9アドレスにはデータが格納されない。
復号途中格納用RAM502の第10アドレスから第18アドレスには、図15の検査行列の第11行目から第15行目までの1に対応するデータが格納される。即ち、第10アドレスには、検査行列の(11,6)から(15,10)の5×5の単位行列を右に3つだけサイクリックシフトした行列の1に対応するデータが格納され、第11アドレスには、検査行列の(11,11)から(15,15)の和行列(5×5の単位行列と、5×5の単位行列を右に3つだけサイクリックシフトしたシフト行列との和である和行列)を構成するシフト行列の1に対応するデータが格納される。また、第12アドレスには、検査行列の(11,6)から(15,10)の和行列を構成する単位行列の1に対応するデータが格納される。以下、第13アドレスから第18アドレスについても、検査行列に対応づけてデータが格納される。
即ち、重みが2以上の構成行列については、その構成行列を、重みが1であるP×Pの単位行列、そのコンポーネントである1のうち1個以上が0になった準単位行列、または単位行列もしくは準単位行列をサイクリックシフトしたシフト行列のうちの複数の和の形で表現したときの、その重みが1の単位行列、準単位行列、またはシフト行列の1の位置に対応するデータ(単位行列、準単位行列、またはシフト行列に属する枝に対応するメッセージの復号途中結果)は、同一アドレスに格納される。
同様に、復号途中格納用RAM502の第19アドレスから第27アドレスには、図15の検査行列に対応づけて、第21行目から第25行目までの1に対応するデータが格納される。即ち、復号途中結果格納用RAM502のワード数は、27である。
復号途中結果格納用RAM503の第1アドレスから第9アドレスには、図15の検査行列Hの第6行目から第10行目までの1に対応する復号途中結果D412(D502)が、各行ともに横方向(列方向)に詰めた形に(0を無視した形で)格納される。
即ち、復号途中結果格納用RAM503の第1アドレスには、検査行列の構成行列である(6,1)から(10,5)の和行列(5×5の単位行列を右に1つだけサイクリックシフトした第1のシフト行列と、右に2つだけサイクリックシフトした第2のシフト行列の和である和行列)を構成する第1のシフト行列の1に対応するデータが、第2アドレスには、検査行列の構成行列である(6,1)から(10,5)の和行列を構成する第2のシフト行列の1に対応するデータが格納される。以下、第3アドレスから第9アドレスも同様に検査行列の構成行列と対応づけてデータが格納される。
同様に、復号途中格納用RAM503の第10アドレスから第18アドレスには、図15の検査行列の第16行目から第20行目までの1に対応するデータが、第19アドレスから第27アドレスには、検査行列の第26行目から第30行目までの1に対応するデータが、図15の検査行列に対応づけて格納される。即ち、復号途中結果格納用RAM503のワード数は、27である。
上述したように、復号途中結果格納用RAM502と503のワード(word)数は、27である。即ち、ワード数は、検査行列の行の重み(row weight)の9と行数の30とを乗算し、その乗算結果(検査行列の1の数)を、同時に読み出す復号途中結果D501の数の5で除算し、さらに、復号途中結果格納用メモリ413が有する復号途中結果格納用RAMの個数の2で除算した値となる。
以下、図23の復号途中結果格納用メモリ413の各部の動作について詳細に説明する。
復号途中結果格納用メモリ413には、計算部412により第1の演算が行われる場合、計算部412から第1の演算の結果得られる復号途中結果D412(uj)が供給され、その復号途中結果D412が復号途中結果格納用RAM502または復号途中結果格納用RAM503のうちの一方の所定のアドレスに書き込まれると同時に、他方から、前回の計算部412による第1の演算の結果得られた復号途中結果D412(uj)が読み出され、計算部412に出力される。一方、計算部415により第2の演算が行われる場合、復号途中結果格納用メモリ413は、復号途中結果格納用RAM502または復号途中結果格納用RAM503に書き込みを行わず、どちらか一方のRAMの所定のアドレスから復号途中結果を読み出して、サイクリックシフト回路414に供給する。
スイッチ501には、計算部412から5つの復号途中結果D412が供給されるとともに、その復号途中結果D412を書き込むメモリとして、復号途中結果格納用RAM502または復号途中結果格納用RAM503の一方の選択を表す制御信号D4201が制御部417から供給される。スイッチ501は、制御信号D4201に基づいて、復号途中結果格納用RAM502または復号途中結果格納用RAM503の一方を選択し、その選択した一方に、5つの復号途中結果D412を供給する。
復号途中結果格納用RAM502には、スイッチ501から5つの復号途中結果D412が、復号途中結果D501として供給されるとともに、制御部417からアドレスを表す制御信号D4202が供給される。復号途中結果格納用RAM502は、制御信号D4022が表すアドレスに既に格納されている前回の計算部412による第1の演算の結果得られた5つの復号途中結果D501を読み出し、復号途中結果D503としてスイッチ504に供給する。また、復号途中結果格納用RAM502は、制御信号D4022が表すアドレスに、スイッチ501から供給された5つの復号途中結果D501を格納する(書き込む)。
復号途中結果格納用RAM503には、スイッチ501から5つの復号途中結果D412が、復号途中結果D502として供給されるとともに、制御部417からアドレスを表す制御信号D4203が供給される。復号途中結果格納用RAM503は、制御信号D4203が表すアドレスに既に格納されている前回の計算部412による第1の演算の結果得られた5つの復号途中結果D502を読み出し、復号途中結果D504としてスイッチ504に供給する。また、復号途中結果格納用RAM502は、制御信号D4203が表すアドレスに、スイッチ501から供給された5つの復号途中結果D502を格納する(書き込む)。
スイッチ504には、復号途中結果格納用RAM502から復号途中結果D503が供給されるか、あるいは復号途中結果格納用RAM503から復号途中結果D504が供給される。また、制御部417から、復号途中結果格納用RAM502または復号途中結果格納用RAM503の一方の選択を表す制御信号D4204が供給される。スイッチ504は、制御信号D4201に基づいて、復号途中結果格納用RAM502または復号途中結果格納用RAM503の一方を選択し、その選択した一方から供給された5つの復号途中結果を、5つの復号途中結果D413として計算部412とサイクリックシフト回路414に供給する。
図24は、復号途中結果格納用メモリ413の復号途中結果格納用RAM502と復号途中結果格納用RAM503の読み出しと書き込みの動作を説明するタイミングチャートである。
なお、図24において、横軸は、時間(t)を表している。
復号途中結果格納用メモリ413では、計算部412により第1の演算が行われる場合、復号途中結果格納用RAM502が、制御信号D4202に基づいて、既に格納している、前回の計算部412の第1の演算の結果得られた復号途中結果D501のうち、同一アドレスに格納している検査行列の第1行目から第5行目までの1に対応する復号途中結果D501を、5つ単位で9回読み出し、スイッチ504を介して、計算部412に供給する。即ち、図15の検査行列Hの行重みは、9であるため、検査行列Hの各行の1に対応する復号途中結果は9つあり、復号途中結果格納用RAM502は、第1行目から第5行目までの1に対応する5つの復号途中結果D501を、5つ単位で9回読み出す。
次に、復号途中結果格納用RAM503は、制御信号D4203に基づいて、既に格納している、前回の計算部412による第1の演算の結果得られた復号途中結果D502のうち、同一アドレスに格納している検査行列の第6行目から第10行目までの1に対応する復号途中結果D502を、5つ単位で9回続けて読み出し、スイッチ504を介して、計算部412に供給する。それと同時に、復号途中結果格納用RAM502には、計算部412により、いま行われている第1の演算の結果得られる検査行列の第1行目から第5行目までの1に対応する5つの復号途中結果D412がスイッチ501を介して、復号途中結果D501として供給され、復号途中結果格納用RAM502は、その復号途中結果D501を、制御信号D4202に基づいて、既に読み出された復号途中結果D503が格納されていたアドレスに9回続けて格納する。
その後、復号途中結果格納用RAM502は、制御信号D4202に基づいて、既に格納している、前回の計算部412による第1の演算の結果得られた復号途中結果D501のうち、同一アドレスに格納している検査行列の第11行目から第15行目までの1に対応する復号途中結果D501を、5つ単位で9回続けて読み出し、スイッチ504を介して、計算部412に供給する。それと同時に、復号途中結果格納用RAM503には、計算部412により、いま行われている第1の演算の結果得られる検査行列の第6行目から第10行目までの1に対応する5つの復号途中結果D412がスイッチ501を介して、復号途中結果D502として供給され、復号途中結果格納用RAM503は、その復号途中結果D502を、制御信号D4203に基づいて、既に読み出された復号途中結果D504が格納されていたアドレスに9回続けて格納する。
以後、同様に、計算部412による第1の演算の結果得られる検査行列の全ての1に対応する復号途中結果が、復号途中結果格納用RAM502または復号途中結果格納用RAM503に格納されるまで、復号途中結果格納用RAM502と復号途中結果格納用RAM503は、9回ずつの読み出しまたは書き込みを交互に行う。
復号途中結果格納用メモリ413では、計算部415による第2の演算が行われる場合、制御信号D4202に基づいて、復号途中結果格納用RAM502から既に格納されている第1の演算の結果得られる復号途中結果D503を読み出すか、あるいは制御信号D4203に基づいて、復号途中結果格納用RAM503から、既に格納されている第1の演算の結果得られる復号途中結果D504を読み出し、その読み出した復号途中結果をスイッチ504を介して、サイクリックシフト回路414に供給する。
図25は、図18の復号装置400の復号処理を説明するフローチャートである。この処理は、例えば、受信用メモリ416に復号すべき受信データが格納されたとき、開始される。
ステップS50において、サイクリックシフト回路414は、復号途中結果格納用メモリ413から供給された後述するステップS56で格納される5つの復号途中結果D413を、サイクリックシフトし、計算部415に供給する。
具体的には、サイクリックシフト回路414には、復号途中結果格納用メモリ413から5つの復号途中結果D413が供給されるとともに、制御部417から、その復号途中結果D413に対応する検査行列の1が検査行列において元となる単位行列などを幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D421が供給される。サイクリックシフト回路414は、制御信号D421を元に、5つの復号途中結果D413をサイクリックシフトし(並べ替え)、その結果を復号途中結果D414として、計算部415に供給する。
なお、受信用メモリ416から供給された受信データD417に対して、まだ第1の演算が行われておらず、復号途中結果格納用メモリ413に復号途中結果D413が格納されていない場合、計算部415は、復号途中結果ujを初期値に設定する。
ステップS51において、計算部415は、第2の演算を行い、その演算の結果である復号途中結果D415を復号途中結果格納用メモリ410に供給する。
具体的には、計算部415には、ステップS50でサイクリックシフト回路414から5つの復号途中結果D414が供給されるとともに、受信データ用メモリ416から5つの受信データD417が供給され、復号途中結果D415と受信データD417が、計算部415の計算器4151乃至4155それぞれに1つずつ供給される。さらに、計算部415には、制御部417から制御信号D422が供給され、その制御信号D422が計算器4151乃至4155に供給される。
計算器4151乃至4155は、復号途中結果D414と受信データD417を用いて、制御信号D422に基づいて、式(5)にしたがって、それぞれ演算を行い、その演算の結果得られる検査行列の列に対応する復号途中結果D415(v)を復号途中結果格納用メモリ410に供給する。
ステップS51の処理後は、ステップS52に進み、復号途中結果格納用メモリ410は、ステップS51で計算部415から供給された復号途中結果D415を、同一アドレスに格納し、ステップS53に進む。
ステップS53において、制御部417は、計算部415により、検査行列の列に対応する全ての復号途中結果D415が演算されたかどうかを判定し、全ての復号途中結果D415が演算されていないと判定した場合、ステップS50に戻り、上述した処理を繰り返す。
一方、ステップS53において、制御部417は、計算部415により、検査行列の列に対応する全ての復号途中結果D415が演算されたと判定した場合、ステップS54に進み、サイクリックシフト回路411は、復号途中結果格納用メモリ410から供給される復号途中結果D410(v)をサイクリックシフトする。
具体的には、サイクリックシフト回路411には、復号途中結果格納用メモリ410から5つの復号途中結果D410が供給されるとともに、制御部417から、その復号途中結果D410に対応する検査行列の1が検査行列において元となる単位行列などを幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D418が供給される。サイクリックシフト回路411は、制御信号D418を元に、5つの復号途中結果D410をサイクリックシフトし(並べ替え)、その結果を復号途中結果D411として、計算部412に供給する。
ステップS54の処理後は、ステップS55に進み、計算部412は、第1の演算を行い、その演算結果である復号途中結果D412を復号途中結果格納用メモリ413に供給する。
具体的には、計算部412には、ステップS54でサイクリックシフト回路411から5つの復号途中結果D411(v)が供給されるとともに、後述するステップS56で既に格納された前回の計算部412による第1の演算の結果得られた5つの復号途中結果D412(D413)(uj)が供給され、その復号途中結果D411と復号途中結果D413が、計算部412の計算器4121乃至4125のそれぞれに1つずつ供給される。さらに、計算部412には、制御部417から制御信号D419が供給され、その制御信号D419が計算器4121乃至4125に供給される。
計算器4121乃至4125は、それぞれ復号途中結果D411と復号途中結果D413とを用いて、制御信号D419に基づいて、式(7)と式(8)にしたがって、それぞれ演算を行い、その演算の結果得られる復号途中結果D412(uj)を復号途中結果格納用メモリ413に供給する。
ステップS55の処理後は、ステップS56に進み、復号途中結果格納用メモリ413は、ステップS55で計算部412から供給された5つの復号途中結果D412を、同一のアドレスに格納し、ステップS57に進む。
ステップS57において、制御部417は、計算部412により、検査行列の全ての1に対応する復号途中結果D412が演算されたかどうかを判定し、全ての復号途中結果が演算されていないと判定した場合、ステップS54に戻り、上述した処理を繰り返す。
一方、ステップS57において、制御部417は、計算部412により、全ての1に対応する復号途中結果D412が演算されたと判定した場合、処理を終了する。
なお、復号装置400は、復号回数だけ図25の復号処理を繰り返し行ない、最後の第2の演算の結果得られるメッセージD415が、最終的な復号結果として出力される。
上述した説明では、復号途中結果格納用メモリ413は、2つのシングルポートRAMから構成にしたが、1つのRAMに対して読み出しと書き込みが同時に起こらないようにすれば、3つ以上のRAMから構成してもよい。例えば、RAMの物理的なビットが足りない場合には、複数のRAMを用いて同じ制御信号を与えることで、論理的に1つのRAMとみなすことができる。
また、枝データ(枝に対応するメッセージ)が欠けている箇所に関しては、メモリ格納時(復号途中結果格納用メモリ410と413へのデータ格納時)には、何のメッセージも格納せず、また、演算時(計算部412での第1の演算時と計算部415での第2の演算時)にも何の演算も行わない。
図26は、本発明を適用した図15の検査行列で表現されるLDPC符号を復号する復号装置の他の一実施の形態の構成例を示すブロック図である。
図26の復号装置600では、図16の枝データ格納メモリ316が、枝データ格納メモリ316に比べて容量の小さい復号途中結果格納用メモリ613になっている。
復号装置600は、復号途中結果格納用メモリ610、サイクリックシフト回路611、5つの計算器6121乃至計算器6125からなる計算部612、復号途中結果格納用メモリ613、サイクリックシフト回路614、5つの計算器6151乃至計算器6155からなる計算部615、受信用メモリ616、および制御部617から構成される。
ここで、図27乃至図30を用いて、図26の計算部612の計算器6121乃至計算器6125、および図30の計算部615の計算器6151乃至計算器6155と、図10のチェックノード計算器101および図11のバリアブルノード計算器103との関係について説明する。
図27と図28は、前述の図10のチェックノード計算器101と図11のバリアブルノード計算器103とそれぞれ同一の図である。また、図29は、計算器612k(k=1,2,・・・,5)の構成例を示しており、図30は、計算器615k(k=1,2,・・・,5)の構成例を示している。
図26の復号装置600では、計算器612kがチェックノード演算を行い、計算部615kが、バリアブルノード演算をおこなうのではなく、計算器612kがチェックノード演算の一部を、計算器615kがチェックノード演算の他の一部とバリアブルノード演算を行う。
即ち、図29の計算器612kは、ブロックD'とE'から構成される。ブロックD'は、図27のチェックノード計算器101の一部である、検査行列の各列の全ての枝に対応するメッセージviの絶対値に対してφの演算を行った値を積算するブロックDと同様に構成されている。また、ブロックE'は、検査行列の各列の全ての枝に対応するメッセージviの符号ビットを乗算するブロックEと同様に構成されている。
一方、図30の計算器615kは、ブロックF'、G'、H'とから構成される。ブロックF'は、図19のチェックノード計算器101の他の一部である、検査行列の各列の全ての枝に対応するメッセージviの符号ビットの乗算値から、求めたい枝に対応するメッセージviの符号ビットを除算するとともに、検査行列の各列の全ての枝に対応するメッセージviの絶対値に対してφの演算を行った値の積算値から、求めたい枝に対応するメッセージviの絶対値に対してφの演算を行った値を減算した値に対して、φ-1の演算を行うブロックFと同様に構成されている。また、ブロックG'は、メッセージviの絶対値に対してφの演算を行うブロックGと同様に構成され、ブロックH'は、図20のバリアブルノード計算器103のバリアブルノード演算を行うブロックHと同様に構成されている。
そして、図29の計算器612kは、ブロックAとブロックBによる演算の結果、即ち、チェックノード演算の一部を行った復号途中結果wを復号途中結果格納用メモリ613に供給し、図30の計算器615kは、チェックノード演算の他の一部とバリアブルノード演算を行った復号途中結果vi'を復号途中結果格納用メモリ610に供給する。
従って、図26の復号装置600は、計算器612kの演算と計算器615kの演算とを交互に行うことにより、チェックノード演算とバリアブルノード演算を行い、復号を行うことができる。
なお、図30の計算器615kでは、復号途中結果格納用メモリ610に格納されている求めたい枝に対応する復号途中結果vi'を用いて、ブロックCで、計算器612kの演算の結果得られる復号途中結果wの絶対値から、求めたい枝に対応する復号途中結果vi'を減算するとともに、復号途中結果wの符号ビットと、求めたい枝に対応する復号途中結果vi'の符号ビットを乗算するので、図27のFIFOメモリ127とFIFOメモリ133が必要ない。
次に、計算部612の計算器6121乃至計算器6125で行われる演算と、計算部615の計算器6151乃至計算器6155で行われる演算について、式を用いて説明する。
計算部612は、以下の式(9)にしたがう第1の演算を行い、その第1の演算の結果である復号途中結果wを復号途中結果格納用メモリ613に供給して格納させる。計算部615は、上述した式(1)と、以下の式(10)と(11)にしたがう第2の演算を行い、その第2の演算の結果である復号途中結果vi'を復号途中結果格納用メモリ610に供給して格納させる。
Figure 0004225163
・・・(9)
Figure 0004225163
・・・(10)
Figure 0004225163
・・・(11)
即ち、式(9)にしたがう第1の演算の結果得られる復号途中結果wは、式(1)、式(10)、式(11)にしたがう第2の演算の結果得られる検査行列Hのj行のすべての1に対応するチェックノード演算の復号途中結果vi'の絶対値|vi'|の総和と符号ビットsign(vi')の乗算値とを乗算したものであるので、上述した式(7)にしたがうチェックノード演算によって求められるujは、式(10)に示すように、式(9)にしたがう第1の演算の結果得られる復号途中結果wの絶対値|w|から、検査行列Hのj行の、各列の“1”(枝)に対応する(複数の)復号途中結果vi'のうち、メッセージを求めたい枝に対応する復号途中結果vi'の絶対値|vi'|を引いた値を用いて表すことができる。
復号装置600では、計算部612による式(9)にしたがう第1の演算と、計算部615による式(1)、式(10)、式(11)にしたがう第2の演算とが交互に行われ、計算部615が、最後の第1の演算の結果を用いて、式(5)にしたがう演算を行い、その演算結果を復号結果として出力することにより、LDPC符号の繰り返し復号を行う。
即ち、復号装置600では、計算部612が、計算部615による第2の演算の結果である検査行列Hのj行のすべての1に対応する復号途中結果vi'を用いて、第1の演算を行い、その演算の結果得られる検査行列の各行に対応する復号途中結果wを復号途中結果格納用メモリ613に格納する。従って、復号途中結果格納用メモリ613の容量は、検査行列の“1”の数より少ない検査行列の行数と復号途中結果wの量子化ビット数とを乗算した値となる。なお、計算部615は、計算部612による第1の演算の結果である検査行列Hのi列の各行に対応する復号途中結果wと受信値u0iを用いて、第2の演算を行い、その演算の結果得られる検査行列のi列の1(枝)に対応するチェックノード演算の復号途中結果vi'を復号途中結果格納用メモリ610に格納する。従って、復号途中結果格納用メモリ610に必要な容量は、バリアブルノード演算の結果を格納する図16の枝データ格納メモリ311と同様に、検査行列の1の数と復号途中結果vi'の量子化ビット数とを乗算した値となる。
従って、復号装置600では、図16の枝データ格納メモリ311に比べて、復号途中結果格納用メモリ610のメモリの容量を削減することができ、これにより、復号装置600の回路規模を小さくすることができる。
以下、図26の復号装置600の各部の動作について詳細に説明する。
復号途中結果格納用メモリ610は、制御信号D618に基づいて、計算部615から供給される5つの復号途中結果D615をまとめて格納すると同時に、既に格納してある5つの復号途中結果D615を読み出し、復号途中結果D610として、サイクリックシフト回路611と計算部615に供給する。即ち、復号途中結果格納用メモリ610は、サイクリックシフト回路611に供給する復号途中結果D610の読み出しと、計算部615から供給される復号途中結果D615の書き込みとを、同時に行う。
なお、復号途中結果格納用メモリ610には、計算部615の第2の演算により演算された検査行列の1(枝)に対応する復号途中結果vi'(第2の復号途中結果)が格納されるので、復号途中結果格納用メモリ610に格納されるデータ量、即ち、復号途中結果格納用メモリ610に必要とされる記憶容量は、復号途中結果の量子化ビット数と、検査行列の1の数(全枝数)との乗算値となる。
復号途中結果格納用メモリ610は、例えば、5つの復号途中結果を同時に読み書き可能な、2つのシングルポートRAMから構成される。復号途中結果格納用メモリ610には、計算部615から5つの復号途中結果D615が供給されるとともに、制御部617から復号途中結果D615の読み書きを制御する制御信号D618が供給される。
サイクリックシフト回路611には、復号途中結果格納用メモリ610から5つの復号途中結果D610が供給されるとともに、制御部617から、その復号途中結果D610に対応する検査行列の1が、検査行列において元となる単位行列などを幾つサイクリックシフトであるかの情報(Matrixデータ)を表す制御信号D619が供給される。サイクリックシフト回路611は、制御信号D619を元に、5つの復号結果D610を並べ替えるサイクリックシフトを行い、その結果を復号途中結果D611として、計算部612に供給する。
計算部612は、5つの計算器6121乃至6125からなる。計算部612には、サイクリックシフト回路611から5つの復号途中結果D611(第2の復号途中結果)(vi')が供給され、その5つの復号途中結果D611(第1の復号途中結果)(w)が、計算器6121乃至6125のそれぞれに供給される。また、計算部612には、制御部617から制御信号D620が供給され、その制御信号D620が、計算器6121乃至6125に供給される。なお、制御信号D620は、5つの計算器6121乃至6125に共通の信号である。
計算器6121乃至6125は、それぞれ復号途中結果D611を用いて、式(9)にしたがって第1の演算を行い、復号途中結果D612(w)を求める。計算部612は、計算器6121乃至6125による演算の結果得られる5つの復号途中結果D612を復号途中結果格納用メモリ613に供給する。
復号途中結果格納用メモリ613には、計算部612から、計算部612による第1の演算の結果である検査行列の行に対応する5つの復号途中結果D612が供給され、復号途中結果格納用メモリ613は、計算部612から供給された5つの復号途中結果D612を、第1アドレスから順に格納(記憶)する。
即ち、復号途中結果格納用メモリ613の第1アドレスには、検査行列の行に対応する復号途中結果のうち、第1行目から第5行目の復号途中結果wが格納される。そして、同様に、第2アドレスには、第6行目から第10行目の復号途中結果wが格納され、第3アドレスには、第11行目から第15行目の復号途中結果wが格納される。以後、同様に、第16行目から第30行目までの復号途中結果wが、5個ずつ、第4アドレスから第6アドレスまで格納され、計60個の復号途中結果wが復号途中結果格納用メモリ613に格納される。従って、復号途中結果格納用メモリ610のワード(word)数は、図15の検査行列Hの行数である30を、同時に読み書きする復号途中結果の数である5で割り算した6となる。
また、復号途中結果格納用メモリ613は、既に格納してある5つの復号途中結果D613から、計算部615が求めようとする復号途中結果vi'の対応する検査行列Hの列において“1”になっている復号途中結果wを5つ同時に読み出し、復号途中結果D613として、サイクリックシフト回路614に供給する。
なお、復号途中結果格納用メモリ613は、例えば、5つの復号途中結果を同時に読み書き可能な、シングルポートRAMで構成される。また、復号途中結果格納用メモリ613には、計算部612の第1の演算により演算された行に対応する復号途中結果wが格納されるので、復号途中結果格納用メモリ613に格納されるデータ量、即ち、復号途中結果格納用メモリ613に必要とされる記憶容量は、復号途中結果の量子化ビット数と、検査行列Hの行数との乗算値である。
サイクリックシフト回路614には、復号途中結果格納用メモリ613から5つの復号途中結果D613(復号途中結果w)が供給されるとともに、制御部617から、その復号途中結果D613に対応する検査行列の1が検査行列において元となる単位行列などを幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D621が供給される。サイクリックシフト回路614は、制御信号D621を元に、5つの復号途中結果D613を並べ替えるサイクリックシフトを行い、その結果を復号途中結果D614として、計算部615に供給する。
計算部615は、5つの計算器6151乃至6155からなる。バリアブルノード計算部615には、サイクリックシフト回路614から5つの復号途中結果D614(w)が供給されるとともに、復号途中結果格納用メモリ610から5つの復号途中結果D610(vi')が供給され、その復号途中結果D614と復号途中結果D610が、計算器6151乃至6155のそれぞれに供給される。また、計算部615には、受信用メモリ617から5つの受信データD617が供給され、その受信データD617が、計算器6151乃至6155のそれぞれに供給される。さらに、計算部617には、制御部617から制御信号D622が供給され、その制御信号D622が計算器6151乃至6155に供給される。なお、制御信号D622は、5つの計算器6171乃至6175に共通の信号である。
計算器6151乃至6155は、それぞれ復号途中結果D614とD611、受信データD617(LDPC符号)とを用いて、式(1)、式(10)、式(11)にしたがって、それぞれ第2の演算を行い、検査行列の各列の1に対応する5つの復号途中結果D615(vi')を求める。計算部615は、計算器6151乃至6155の第2の演算の結果得られる5つの復号途中結果D615を、復号途中結果格納用メモリ610に供給する。
受信用メモリ616は、通信路を通して受信した受信値(符号ビット)D616から計算した符号ビットの0らしさの値である受信LLR(対数尤度比)を、受信データD617として格納する。
即ち、受信用メモリ616の第1のアドレスには、検査行列の列に対応する受信データD617のうち、検査行列の第1列目から第5列目までに対応する受信データD617が格納される。そして、第2のアドレスには、検査行列の第6列目から第10列目までに対応する受信データD617が格納され、第3アドレスには、検査行列の第11列目から第16列目までに対応する受信データD617が格納される。以後、同様に、第4アドレスから第18アドレスまでに、検査行列の第17列目から第90列目までに対応する受信データD617が、5つずつ格納される。
そして、受信用メモリ616は、既に格納している受信データD617を計算部615による第2の演算に必要となる順番に5つずつ同時に読み出し、計算部615に供給する。
なお、受信用メモリ616は、例えば、シングルポートRAMから構成される。また、受信用メモリ616に格納されるデータ量、即ち、受信用メモリ616に必要とされる記憶容量は、LDPC符号の符号長と、受信データの量子化ビット数との乗算値である。さらに、受信用メモリ616のワード(word)数は、LDPC符号の符号長、即ち、検査行列の列数である90を、同時に読み出す受信データD617の数である5で割り算した値の18である。
制御部617は、制御信号D618を復号途中結果格納用メモリ610に、制御信号D619をサイクリックシフト回路611に供給することにより、それぞれを制御する。また、制御部617は、制御信号D620を計算部612に、制御信号D621をサイクリックシフト回路614に、制御信号D622を計算部615に供給することにより、それぞれを制御する。
復号途中結果格納用メモリ610、サイクリックシフト回路611、計算部612、復号途中結果格納用メモリ613、サイクリックシフト回路614、計算部615の順で、データが一巡することで、復号装置600は、1回の復号を行うことができる。復号装置600では、所定の回数だけ繰り返して復号が行われた後、計算部615が、式(5)にしたがう演算を行い、その演算結果が最終的な復号結果として出力される。
図29は、図26の計算部612の計算器6121の構成例を示すブロック図である。
なお、図29では、計算器6121について説明するが、計算器6122乃至計算器6125も同様に構成される。
また、図29では、計算器615による第2の演算の結果得られる各復号途中結果(vi')が6ビットに量子化されているものとして、計算器6121を表している。さらに、図29の計算器6121には、クロックckが供給され、このクロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図29の計算器6121は、制御部617から供給される制御信号D620に基づいて、サイクリックシフト回路611から1つずつ読み込まれる復号途中結果D611(vi')を用いて、式(9)にしたがう第1の演算を行う。
即ち、計算器6121には、サイクリックシフト回路611から供給される5つの6ビットの復号途中結果D611(vi')のうちの、1つの復号途中結果D611が供給され、最上位ビットの符号ビットD631がEXOR回路635に供給されるとともに、その6ビットの復号途中結果D611(vi')の下位5ビットの絶対値D632(|vi'|)が、加算器631に供給される。また、計算器6121には、制御部617から制御信号D620が供給され、その制御信号D620がセレクタ633とセレクタ637に供給される。
加算器631は、絶対値D632(|vi'|)とレジスタ632に格納されている9ビットの値D633とを加算することにより、絶対値D632(|vi'|)を積算し、その結果得られる9ビットの積算値をレジスタ632に再格納する。なお、検査行列の1行に亘る全ての1に対応する復号途中結果D611から求められた絶対値D632(|vi|)が積算された場合、レジスタ632はリセットされる。
検査行列の1行に亘る復号途中結果D611が1つずつ読み込まれ、レジスタ632に1行分の絶対値D632が積算された積算値が格納された場合、制御部617から供給される制御信号D620は、0から1に変化する。例えば、行の重み(row weight)が「9」である場合、制御信号D620は、1から8クロック目までは、「0」となり、9クロック目では「1」となる。
制御信号D620が「1」の場合、セレクタ633は、レジスタ632に格納されている値、即ち、検査行列の1行に亘る全ての1に対応する復号途中結果D611(復号途中結果vi')の絶対値D632(|vi'|)が積算された9ビットの値D633(i=1からi=dcまでのΣ|vi'|)を選択し、値D634として、レジスタ634に出力して格納させる。レジスタ634は、格納している値D634を、9ビットの値D635として、セレクタ633に供給するとともに、出力する。制御信号D620が「0」の場合、セレクタ633は、レジスタ634から供給された値D635を選択し、レジスタ634に出力して再格納させる。即ち、検査行列の1行に亘る全ての1に対応する復号途中結果D611(復号途中結果vi')の絶対値D632(|vi'|)が積算されるまで、レジスタ634は、前回積算された|vi'|を、セレクタ633に供給するとともに、出力する。
以上の処理と並行して、EXOR回路635は、レジスタ636に格納されている1ビットの値D637と符号ビットD631との排他的論理和を演算することにより、符号ビットどうしの乗算を行い、1ビットの乗算結果D636をレジスタ636に再格納する。なお、検査行列の1行に亘る全ての1に対応する復号途中結果D611の符号ビットD631が乗算された場合、レジスタ636はリセットされる。
検査行列の1行に亘る全ての1に対応する復号途中結果D611から求められた符号ビットD631が乗算された乗算結果D636(i=1からdcまでのΠsign(vi'))がレジスタ636に格納された場合、制御部617から供給される制御信号D620は、「0」から「1」に変化する。
制御信号D620が「1」の場合、セレクタ637は、レジスタ636に格納されている値、即ち、検査行列の1行に亘る全ての1に対応する復号途中結果D611の符号ビットD631が乗算された値D637(i=1からi=dcまでのΠsign(vi'))を選択し、1ビットの値D638としてレジスタ638に出力して格納させる。レジスタ638は、格納している値D638を、1ビットの値D639としてセレクタ637に供給するとともに、出力する。制御信号D620が「0」の場合、セレクタ637は、レジスタ638から供給された値D639を選択し、レジスタ638に出力して再格納させる。即ち、検査行列の1行に亘る全ての1に対応する復号途中結果D611(復号途中結果vi')の符号ビットD631が乗算されるまで、レジスタ638は、前回格納した値を、セレクタ637に供給するとともに、出力する。
計算器6121では、レジスタ634から出力された9ビットの値D635(i=1からi=dcまでのΣ|vi'|)を下位9ビットとするとともに、レジスタ638から出力された1ビットの値D639(sign(vi'))を最上位ビットとする合計10ビットが復号途中結果D612(復号途中結果w)として出力される。
以上のように、計算器6121では、式(9)の演算が行われ、復号途中結果wが求められる。
図30は、図26の計算部615の計算器6151の構成例を示すブロック図である。
なお、図30では、計算器6151について説明するが、計算器6152乃至計算器6155も同様に構成される。
また、図30では、計算器612による第1の演算の結果得られる各復号途中結果(w)が符号ビットを合わせて合計10ビットに量子化され、復号途中結果格納用メモリ610から供給される、前回の第2の演算の結果得られた各復号途中結果(uj)が符号ビットを合わせて6ビットに量子化されているものとして、計算器6151を表している。さらに、図30の計算器6151には、クロックckが供給され、このクロックckは、必要なブロックに供給されるようになっている。そして、各ブロックは、クロックckに同期して処理を行う。
図30の計算器6151は、制御部617から供給される制御信号D622に基づいて、受信用メモリ616から1つずつ読み込まれる受信データD617(受信値u0i)、サイクリックシフト回路614から1つずつ読み込まれる復号途中結果D614(w)、および復号途中結果格納用メモリ610から1つずつ読み込まれる前回の計算部615による第2の演算の結果得られた復号途中結果D610(vi')とを用いて、式(1)、式(10)、式(11)にしたがう第2の演算を行う。
即ち、計算器6151では、サイクリックシフト回路614から、検査行列の行に対応する10ビットの復号途中結果D614(復号途中結果w)が1つずつ読み込まれとともに、復号途中結果格納用メモリ610から、前回の計算部615による第2の演算の結果得られた6ビットの復号途中結果D610(復号途中結果vi')が1つずつ読み込まれ、その復号途中結果D614の最上位ビットの符号ビットD651(sign(w))と復号途中結果D610の最上位ビットの符号ビットD653(sign(uj))が、EXOR回路653に供給されるとともに、その復号途中結果D614の下位9ビットの絶対値D652(|w|))と復号途中結果D610の下位9ビットの符号ビットD653(|vi'|)が、減算器651に供給される。また、計算器6151では、受信用メモリ616から6ビットの受信データD617が1つずつ読み込まれ、加算器658に供給される。さらに、計算器6151には、制御部617から制御信号D622が供給され、その制御信号D622は、セレクタ656に供給される。
減算器651は、絶対値D652から絶対値D654を減算し、その5ビットの減算値D655をLUT652に供給する。LUT652は、その減算値D655に対して、φ-1の演算を行った5ビットの演算結果D656(φ-1(|w|−|vi'|))を出力する。
一方、EXOR回路653は、符号ビットD651(sign(w))と符号ビットD653(sign(vi'))との排他的論理和を演算することにより、符号ビットD651と符号ビットD653を乗算し、1ビットの乗結果を乗算値D657として出力する。そして、LUT652から供給される5ビットの演算結果D656を下位5ビット(φ-1(|w|−|vi'|))とするとともに、EXOR回路653から供給される1ビットの値D657(sign(w)×sign(vi'))を最上位ビットとした6ビットの値D658が、加算器654に供給されるとともに、FIFOメモリ659に供給される。
以上のように、式(10)にしたがう演算が行われ、その演算の結果である6ビットの値D658(uj)が、加算器654に供給されるとともに、FIFOメモリ659に供給される。
加算器654は、6ビットの値D658(uj)とレジスタ655に格納されている9ビットの値D659とを加算することにより、値D658を積算し、その結果得られる9ビットの積算値を、レジスタ655に再格納する。なお、検査行列の1列に亘る全ての1に対応する値D658が積算された場合、レジスタ655はリセットされる。
検査行列の1列に亘る値D658が1つずつ読み込まれ、レジスタ655に1列分の値D658が積算された値が格納された場合、制御部617から供給される制御信号D622は、「0」から「1」に変化する。例えば、列の重みが「5」である場合、制御信号D622は、1から4クロック目までは「0」となり、5クロック目では「1」となる。
制御信号D622が「1」の場合、セレクタ656は、レジスタ655に格納されている値、即ち、検査行列の1列に亘る1に対応する値D658(uj)が積算された9ビットの値D659(j=1からdVまでのΣuj)を選択し、レジスタ657に出力して格納させる。レジスタ657は、格納している値D659を、9ビットの値D660として、セレクタ471と加算器658に供給する。制御信号D622が「0」の場合、セレクタ656は、レジスタ657から供給された値D660を選択し、レジスタ657に出力し再格納させる。即ち、検査行列の1列に亘る1に対応する値D658(uj)が積算されるまで、レジスタ657は、前回積算された値を、セレクタ656と加算器658に供給する。
加算器658は、9ビットの値D660と、受信用メモリ616から供給された6ビットの受信データD617とを加算して、その結果得られる9ビットの値D661を供給する。
計算器615では、最後の演算を行う場合、加算器658が、9ビットの値D661を最終的な復号結果として出力する。即ち、計算部615は、式(5)にしたがって演算を行う。
一方、FIFOメモリ659は、レジスタ665から新たな値D660(j=1からj=dvまでのΣuj)が出力されるまでの間、6ビットの値D658(uj)を遅延し、6ビットの値D662として減算器660に供給する。減算器660は、9ビットの値D660から6ビットの値D662を減算し、その減算値D663を出力する。即ち、減算器660は、検査行列の1列に亘る1に対応する値D658の積算値から、求めたい枝に対応する値、即ち検査行列の所定の1に対応する値D658(uj)を減算して、その減算値(i=1からi=dv−1までのΣuj)を6ビットの減算値D663として出力する。
以上のように、式(1)にしたがう演算が行われ、その演算の結果である6ビットの減算値D663(vi)が出力される。そして、減算器660から出力された6ビットの減算値D663の下位5ビットの絶対値(|vi|)が、LUT661に供給されるとともに、最上位ビットの符号ビット(sign(vi))が値D665として出力される。
LUT661は、絶対値(|vi|)に対して、φの演算を行った5ビットの演算結果D666(φ(|vi|))を出力する。そして、LUT661から出力された5ビットの演算結果D666(φ(|vi|))を下位5ビットとするとともに、値D665(sign(vi))を最上位ビットとした合計6ビットを、復号途中結果(vi')として復号途中結果格納用メモリ610に供給する。
以上のように、計算器6151では、式(1)、式(10)、式(11)の演算が行われ、復号途中結果vi'が求められる。
なお、図15の検査行列の列の重みの最大は5であるため、即ち、計算器6151に供給される復号途中結果D614(w)と復号途中結果D610(vi')の最大数は5であるため、計算器6151は、5個の復号途中結果D614と復号途中結果D610から求められる5個の演算結果D658(uj)を遅延させるFIFOメモリ659を有している。列の重みが5未満の行のメッセージを計算するときには、FIFOメモリ659における遅延量が、その列の重みの値に減らされる。
図31は、図26の復号途中結果格納用メモリ610の構成例を示すブロック図である。
復号途中結果格納用メモリ610は、スイッチ701と704、および2つのシングルポートRAMである復号途中結果格納用RAM702と703から構成される。
この復号途中結果格納用メモリ610の各部について詳細に説明する前に、まず、復号途中結果格納用RAM702と703へのデータの格納方法について説明する。
復号途中結果格納用RAM702と703は、計算部612による第1の演算の結果得られ、スイッチ701を介して供給された復号途中結果D615を格納する。
具体的には、復号途中結果格納用RAM702の第1アドレスから第5アドレスには、図15の検査行列Hの第1列目から第5列目までの1に対応する復号途中結果D615(D701)が、各行ともに横方向(列方向)に詰めた形に(0を無視した形で)格納される。
即ち、第j行第i列を、(j,i)と表すこととすると、復号途中結果格納用RAM702の第1アドレスには、図15の検査行列の(1,1)から(5,5)の5×5の単位行列の1に対応するデータが、第2アドレスには、図15の検査行列の(6,1)から(10,5)の和行列(5×5の単位行列を右に1つだけサイクリックシフトした第1のシフト行列と、右に2つだけサイクリックシフトした第2のシフト行列との和である和行列)を構成する第1のシフト行列の1の位置に対応するデータが格納される。また、第3アドレスには、検査行列の(6,1)から(10,5)の和行列を構成する第2のシフト行列の1の位置に対応するデータが格納される。以下、第4アドレスおよび第5アドレスについても、図15の検査行列に対応づけて、データが格納される。
復号途中格納用RAM702の第6アドレスから第10アドレスには、図15の検査行列の第11列目から第15列目までの1に対応するデータが格納される。即ち、第6アドレスには、検査行列の(11,11)から(15,15)の和行列(5×5の単位行列と、5×5の単位行列を右に3つだけサイクリックシフトした第1のシフト行列との和である和行列)を構成する第1のシフト行列の1の位置に対応するデータが格納され、第7アドレスには、検査行列の(11,11)から(15,15)の和行列を構成する単位行列の1に対応するデータが格納される。以下、第8アドレスから第10アドレスについても、検査行列に対応づけてデータが格納される。
同様に、復号途中格納用RAM702の第10アドレスから第28アドレスには、図15の検査行列に対応づけて、第21列目から第25列目まで、第31列目から第35列目まで、第41列目から第45列目まで、第51列目から第55列目まで、第61列目から第65列目まで、第71列目から第75列目まで、第81列目から第85列目までの1に対応するデータが格納される。即ち、復号途中結果格納用RAM702のワード数は、28である。
復号途中結果格納用RAM703の第1アドレスから第5アドレスには、図15の検査行列Hの第6列目から第10列目までの1に対応する復号途中結果D615(D702)が、各行ともに横方向(列方向)に詰めた形に(0を無視した形で)格納される。
即ち、復号途中結果格納用RAM703の第1アドレスには、検査行列の構成行列である(6,1)から(10,5)の和行列(5×5の単位行列を右に1つだけサイクリックシフトした第1のシフト行列と、右に2つだけサイクリックシフトした第2のシフト行列の和である和行列)を構成する第1のシフト行列の1に対応するデータが、第2アドレスには、検査行列の構成行列である(6,1)から(10,5)の和行列を構成する第2のシフト行列の1に対応するデータが格納される。以下、第3アドレスから第5アドレスも同様に検査行列の構成行列と対応づけてデータが格納される。
同様に、復号途中格納用RAM703の第6アドレスから第26アドレスには、図15の検査行列の第16列目から第20列目まで、第26列目から第30列目まで、第36列目から第40列目まで、第46列目から第50列目まで、第56列目から第60列目まで、第66列目から第70列目まで、第76列目から第80列目まで、第86列目から第90列目までの1に対応するデータが、図15の検査行列に対応づけて格納される。即ち、復号途中結果格納用RAM703のワード数は、26である。
上述したように、復号途中結果格納用RAM702のワード(word)数は、28であり、復号途中結果格納用RAM703のワード数は、26である。
図32は、復号途中結果格納用メモリ610の復号途中結果格納用RAM702と復号途中結果格納用RAM703の読み出しと書き込みの動作を説明するタイミングチャートである。
なお、図32において、横軸は、時間(t)を表している。
復号途中結果格納用メモリ610では、計算部612による第1の演算が行われる場合、制御部617から供給される制御信号D7202に基づいて、復号途中結果格納用RAM702から既に格納されている第2の演算の結果得られる復号途中結果D703を読み出すか、あるいは制御部617から供給される制御信号D7203に基づいて、復号途中結果格納用RAM703から、既に格納されている第2の演算の結果得られる復号途中結果D704を読み出し、その読み出した復号途中結果をスイッチ704を介して、サイクリックシフト回路614に供給する。
復号途中結果格納用メモリ610には、計算部615により第2の演算が行われる場合、計算部615から第2の演算の結果得られる復号途中結果D615(vi')が供給され、その復号途中結果D615が復号途中結果格納用RAM702または復号途中結果格納用RAM703のうちの一方の所定のアドレスに書き込まれると同時に、他方から、前回の計算部615による第2の演算の結果得られた復号途中結果D610(vi')が読み出され、サイクリックシフト回路614を介して、計算部615に出力される。
スイッチ701には、計算部615から5つの復号途中結果D615が供給されるとともに、その復号途中結果D615を書き込むメモリとして、復号途中結果格納用RAM702または復号途中結果格納用RAM703の一方の選択を表す制御信号D7201が供給される。スイッチ701は、制御信号D7201に基づいて、復号途中結果格納用RAM702または復号途中結果格納用RAM703の一方を選択し、その選択した一方に、5つの復号途中結果D612を供給する。
復号途中結果格納用RAM702には、スイッチ701から5つの復号途中結果D612が、復号途中結果D701として供給されるとともに、制御部617からアドレスを表す制御信号D7022が供給される。復号途中結果格納用RAM702は、制御信号D7202が表すアドレスに既に格納されている前回の計算部615による第2の演算の結果得られた5つの復号途中結果D701を読み出し、復号途中結果D703としてスイッチ704に供給する。また、復号途中結果格納用RAM702は、制御信号D7202が表すアドレスに、スイッチ701から供給された5つの復号途中結果D702を格納する(書き込む)。
復号途中結果格納用RAM703には、スイッチ701から5つの復号途中結果D615が、復号途中結果D702として供給されるとともに、制御部617からアドレスを表す制御信号D7203が供給される。復号途中結果格納用RAM703は、制御信号D7203が表すアドレスに既に格納されている前回の計算部615による第2の演算の結果得られた5つの復号途中結果D702を読み出し、復号途中結果D704としてスイッチ704に供給する。また、復号途中結果格納用RAM702は、制御信号D7203が表すアドレスに、スイッチ701から供給された5つの復号途中結果D702を格納する(書き込む)。
スイッチ704には、復号途中結果格納用RAM702から復号途中結果D703が供給されるか、あるいは復号途中結果格納用RAM703から復号途中結果D704が供給される。また、制御部617から、復号途中結果格納用RAM702または復号途中結果格納用RAM703の一方の選択を表す制御信号D7204が供給される。スイッチ704は、制御信号D7204に基づいて、復号途中結果格納用RAM702または復号途中結果格納用RAM703の一方を選択し、その選択した一方から供給された5つの復号途中結果を、5つの復号途中結果D610として計算部615に供給する。
復号途中結果格納用メモリ610では、計算部615により第2の演算が行われる場合、復号途中結果格納用RAM702が、制御信号D7202に基づいて、既に格納している、前回の計算部615の第2の演算の結果得られた復号途中結果D701のうち、同一アドレスに格納している検査行列の第1列目から第5列目までの1に対応する復号途中結果D701を、5つ単位で、5回読み出し、スイッチ704を介して、計算部615に供給する。即ち、図15の検査行列Hの列重みは、5であるため、検査行列Hの各列の1に対応する復号途中結果は5つあり、復号途中結果格納用RAM702は、第1行列目から第5列目までの1に対応する復号途中結果D701を、5つ単位で5回読み出す。
次に、復号途中結果格納用RAM703は、制御信号D7203に基づいて、既に格納している、前回の計算部615による第2の演算の結果得られた復号途中結果D702のうち、同一アドレスに格納している検査行列の第6列目から第10列目までの1に対応する5つの復号途中結果D702を、5回続けて読み出し、スイッチ704とサイクリックシフト回路614を介して、計算部615に供給する。それと同時に、復号途中結果格納用RAM702には、計算部615により、いま行われている第2の演算の結果得られる検査行列の第1列目から第5列目までの1に対応する5つの復号途中結果D615がスイッチ701を介して、復号途中結果D701として供給され、復号途中結果格納用RAM702は、その復号途中結果D701を、制御信号D7202に基づいて、既に読み出された復号途中結果D703が格納されていたアドレスに5回続けて格納する。
その後、復号途中結果格納用RAM702は、制御信号D7202に基づいて、既に格納している、前回の計算部615による第2の演算の結果得られた復号途中結果D701のうち、同一アドレスに格納している検査行列の第11列目から第15列目までの1に対応する復号途中結果D701を、5つ単位で5回続けて読み出し、スイッチ704を介して、計算部615に供給する。それと同時に、復号途中結果格納用RAM703には、計算部615により、いま行われている第2の演算の結果得られる検査行列の第6列目から第10列目までの1に対応する5つの復号途中結果D612がスイッチ701を介して、復号途中結果D702として供給され、復号途中結果格納用RAM703は、その復号途中結果D702を、制御信号D7203に基づいて、既に読み出された復号途中結果D704が格納されていたアドレスに5回続けて格納する。
以後、同様に、計算部615による第2の演算の結果得られる検査行列の全ての1に対応する復号途中結果が、復号途中結果格納用RAM702または復号途中結果格納用RAM703に格納されるまで、復号途中結果格納用RAM702と復号途中結果格納用RAM703は、5回ずつの読み出しまたは書き込みを交互に行う。
図33は、図26の復号装置600の復号処理を説明するフローチャートである。この処理は、例えば、受信用メモリ616に復号すべき受信データが格納されたとき、開始される。
ステップS70において、サイクリックシフト回路614は、復号途中結果格納用メモリ613から供給された後述するステップS76で格納された5つの復号途中結果D613を、並べ替えてサイクリックシフトを行い、計算部615に供給する。
具体的には、サイクリックシフト回路614には、復号途中結果格納用メモリ613から5つの復号途中結果D613が供給されるとともに、制御部617から、その復号途中結果D613に対応する検査行列の1が検査行列において元となる単位行列などを幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D621が供給される。サイクリックシフト回路614は、制御信号D621を元に、5つの復号途中結果D613をサイクリックシフトし(並べ替え)、その結果を復号途中結果D614として、計算部615に供給する。
なお、受信用メモリ616から供給された受信データD617に対して、まだ第1の演算が行われておらず、復号途中結果格納用メモリ613に復号途中結果D612が格納されていない場合、計算部615は、初期値に設定する。
ステップS71において、計算部615は、第2の演算を行い、その演算の結果である復号途中結果D615を復号途中結果格納用メモリ610に供給する。
具体的には、計算部615には、ステップS70でサイクリックシフト回路614から5つの復号途中結果D614が供給されるとともに、直前の後述するステップS72で復号途中結果格納用メモリ610から復号途中結果D610が供給される。また、受信データ用メモリ616から5つの受信データD617が供給され、5つの復号途中結果D615とD610、受信データD617が、計算部615の計算器6151乃至6155のそれぞれに1つずつ供給される。さらに、計算部615には、制御部617から制御信号D622が供給され、その制御信号D622が計算器6151乃至6155に供給される。
計算器6151乃至6155は、復号途中結果D614とD610と、受信データD617とを用いて、制御信号D622に基づいて、式(1)、式(10)、式(11)にしたがって、それぞれ演算を行い、その演算の結果得られる検査行列の各列の1に対応する復号途中結果D615(vi')を復号途中結果格納用メモリ610に供給する。
ステップS71の処理後は、ステップS72に進み、復号途中結果格納用メモリ610は、ステップS71で計算部615から供給された復号途中結果D615を、同一アドレスに格納するとともに、既に格納している復号途中結果D615(D610)を読み出して、サイクリックシフト回路611と計算部615に供給する。
ステップS72の処理後は、ステップS73に進み、制御部617は、計算部615により、検査行列の各列の1に対応する全ての復号途中結果D615が演算されたかどうかを判定し、全ての復号途中結果D615が演算されていないと判定した場合、ステップS70に戻り、上述した処理を繰り返す。
一方、ステップS73において、制御部617は、計算部615により、全ての復号途中結果D615が演算されたと判定した場合、ステップS74に進み、サイクリックシフト回路611は、復号途中結果格納用メモリ610から供給される復号途中結果D610(vi')をサイクリックシフトする。
具体的には、サイクリックシフト回路611には、復号途中結果格納用メモリ610から5つの復号途中結果D610が供給されるとともに、制御部617から、その復号途中結果D610に対応する検査行列の1が検査行列において元となる単位行列などを幾つサイクリックシフトしたものであるかの情報(Matrixデータ)を表す制御信号D619が供給される。サイクリックシフト回路611は、制御信号D619を元に、5つの復号途中結果D610をサイクリックシフトし(並べ替え)、その結果を復号途中結果D611として、計算部612に供給する。
ステップS74の処理後は、ステップS75に進み、計算部612は、第1の演算を行い、その演算結果である復号途中結果D612をサイクリックシフト回路614に供給する。
具体的には、計算部612には、ステップS74でサイクリックシフト回路611から5つの復号途中結果D611(vi')が供給され、その復号途中結果D611が、計算部612の計算器6121乃至6125のそれぞれに1つずつ供給される。さらに、計算部612には、制御部617から制御信号D621が供給され、その制御信号D621が計算器6121乃至6125に供給される。
計算器6121乃至6125は、それぞれ復号途中結果D611を用いて、制御信号D619に基づいて、式(9)にしたがって、それぞれ演算を行い、その演算の結果得られる検査行列の行に対応する復号途中結果D612(w)を復号途中結果格納用メモリ613に供給する。
ステップS75の処理後は、ステップS76に進み、復号途中結果格納用メモリ613は、ステップS75で計算部612から供給された復号途中結果D612を、同一アドレスに格納し、ステップS77に進む。
ステップS77において、制御部617は、計算部612により、検査行列の全ての行に対応する復号途中結果D612が演算されたかどうかを判定し、全ての復号途中結果が演算されていないと判定した場合、ステップS74に戻り、上述した処理を繰り返す。
一方、ステップS77において、制御部617は、計算部612により、全ての行に対応する復号途中結果D612が演算されたと判定した場合、処理を終了する。
なお、復号装置600は、復号回数だけ図33の復号処理を繰り返し行ない、計算部621により上述した式(5)にしたが演算の結果得られる値D661が、最終的な復号結果として出力される。
上述した説明では、復号途中結果格納用メモリ610は、2つのシングルポートRAMから構成したが、1つのRAMに対して読み出しと書き込みが同時に起こらないようにすれば、3つ以上のRAMから構成してもよい。例えば、RAMの物理的なビットが足りない場合には、複数のRAMを用いて同じ制御信号を与えることで、論理的に1つのRAMとみなすことができる。
また、枝データ(枝に対応するメッセージ)が欠けている箇所に関しては、メモリ格納時(復号途中結果格納用メモリ610と613へのデータ格納時)には、何のメッセージも格納せず、また、演算時(計算部612での第1の演算時と計算部615での第2の演算時)にも何の演算も行わない。
また、図16のサイクリックシフト回路314および320、図18のサイクリックシフト回路411および414、図26のサイクリックシフト回路611および614には、バレルシフタを用いると回路規模を小さくしながら所望の操作を実現できる。
上述の場合には、説明を簡単にするために、Pが5の場合、即ち、検査行列を構成する構成行列の行数および列数が5の場合を例に挙げたが、構成行列の行数および列数Pは必ずしも5である必要はなく、検査行列によって異なる値を取ることもあり得る。例えば、Pは360や392であってもよい。
また、本実施の形態では、符号長90、符号化率2/3のLDPC符号を用いたが、LDPC符号の符号長や符号化率は、幾つであっても構わない。例えば、構成行列の行数および列数Pが5の場合、枝総数が5以下であれば、どんな符号長、符号化率のLDPC符号でも、制御信号を代えるだけで、図16の復号装置300、図18の復号装置400、図26の復号装置600を用いて復号可能である。
さらに、構成行列の行数および列数Pが所定の値で、枝の総数がある値以下、という条件を満たすあるLDPC符号の復号装置は、その条件を満たす、任意の符号長で、任意の符号化率のLDPC符号を復号することができる。
検査行列が、構成行列の行数および列数Pの倍数でない場合は、検査行列の端数の外側にすべて0(all 0)の成分を付けてPの倍数とみなして適用できることがある。
次に、上述した一連の処理は、ハードウェアにより行うこともできるし、ソフトウェアにより行うこともできる。一連の処理をソフトウェアによって行う場合には、そのソフトウェアを構成するプログラムが、汎用のコンピュータ等にインストールされる。
そこで、図34は、上述した一連の処理を実行するプログラムがインストールされるコンピュータの一実施の形態の構成例を示している。
プログラムは、コンピュータに内蔵されている記録媒体としてのハードディスク905やROM903に予め記録しておくことができる。
あるいはまた、プログラムは、フレキシブルディスク、CD-ROM(Compact Disc Read Only Memory),MO(Magneto Optical)ディスク,DVD(Digital Versatile Disc)、磁気ディスク、半導体メモリなどのリムーバブル記録媒体911に、一時的あるいは永続的に格納(記録)しておくことができる。このようなリムーバブル記録媒体911は、いわゆるパッケージソフトウエアとして提供することができる。
なお、プログラムは、上述したようなリムーバブル記録媒体911からコンピュータにインストールする他、ダウンロードサイトから、ディジタル衛星放送用の人工衛星を介して、コンピュータに無線で転送したり、LAN(Local Area Network)、インターネットといったネットワークを介して、コンピュータに有線で転送し、コンピュータでは、そのようにして転送されてくるプログラムを、通信部908で受信し、内蔵するハードディスク905にインストールすることができる。
コンピュータは、CPU(Central Processing Unit)902を内蔵している。CPU902には、バス901を介して、入出力インタフェース910が接続されており、CPU902は、入出力インタフェース910を介して、ユーザによって、キーボードや、マウス、マイク等で構成される入力部907が操作等されることにより指令が入力されると、それにしたがって、ROM(Read Only Memory)903に格納されているプログラムを実行する。あるいは、また、CPU902は、ハードディスク905に格納されているプログラム、衛星若しくはネットワークから転送され、通信部908で受信されてハードディスク905にインストールされたプログラム、またはドライブ909に装着されたリムーバブル記録媒体911から読み出されてハードディスク905にインストールされたプログラムを、RAM(Random Access Memory)904にロードして実行する。これにより、CPU902は、上述したフローチャートにしたがった処理、あるいは上述したブロック図の構成により行われる処理を行う。そして、CPU902は、その処理結果を、必要に応じて、例えば、入出力インタフェース910を介して、LCD(Liquid Crystal Display)やスピーカ等で構成される出力部906から出力、あるいは、通信部908から送信、さらには、ハードディスク905に記録等させる。
ここで、本明細書において、コンピュータに各種の処理を行わせるためのプログラムを記述する処理ステップは、必ずしもフローチャートとして記載された順序に沿って時系列に処理する必要はなく、並列的あるいは個別に実行される処理(例えば、並列処理あるいはオブジェクトによる処理)も含むものである。
また、プログラムは、1のコンピュータにより処理されるものであっても良いし、複数のコンピュータによって分散処理されるものであっても良い。さらに、プログラムは、遠方のコンピュータに転送されて実行されるものであっても良い。
以上のように、P×Pの単位行列、そのコンポーネントの1のうち1個以上が0になった準単位行列、単位行列もしくは準単位行列をサイクリックシフトしたシフト行列、単位行列、準単位行列、もしくはシフト行列の複数の和である和行列、P×Pの0行列の組合せで表わすことができる検査行列を持つLDPC符号の復号を、チェックノードとバリアブルノードの演算をP個同時に行うアーキテクチャ(architecture)を採用することにより、ノード演算を、P個同時に行うことで動作周波数を実現可能な範囲に抑えることができ、多数の繰り返し復号を行うことを可能にしつつ、メモリ(FIFOやRAM)への書き込みと読み出し時に、異なるアドレスへの同時アクセスが起きることを防止することができる。
さらに、図16の復号装置300を繰り返し用いて、図15の検査行列で表わされるLDPC符号を復号する場合には、269個の枝をチェックノード、バリアブルノード毎に5個ずつ演算することが可能であることから、1回の復号に、269/5×2≒108クロック動作すればよいことになる。50回の復号には、90個の符号情報を受信する間に、108×50=5400クロック動作すればよいことになり、受信周波数の約60倍の動作周波数でよいことになる。従って、図16の復号装置300によれば、各ノード演算を一つずつ行う図9の復号装置に比べて、1/5の動作周波数で済むことになる。また、回路規模の面から見ても、メモリの大きさは同じであるため、論理回路が多少大きくなっても全体への影響は小さいと言える。
さらに、図18の復号装置400と図26の復号装置600は、図16の復号装置300に比べて、メモリの容量が小さくなっている。
例えば、LDPC符号の検査行列が図15の検査行列であり、LDPC符号の量子化ビット数が6ビットである場合、図16の復号装置300では、枝データ格納メモリに、全枝数の269×6=1614ビットの容量を有するRAM2つ、即ち、2つのRAMで1614×2=3228ビットの容量が必要であった。これに対して、例えば、復号途中結果vの量子化ビット数が9ビットである場合、図18の復号装置400では、復号途中結果格納用メモリ413に、全枝数の1614ビットの容量を有するRAMと、復号途中結果格納用メモリ410に、LDPC符号の符号長(検査行列の列数)と復号途中結果vの量子化ビット数との乗算値、即ち90×9=810ビットの容量を有するRAMを備えればよく、復号装置の回路規模を小さくすることができる。さらに、図18の復号装置400では、第2の演算を行う計算部415において、FIFOメモリを有する必要がないので、ロジックの回路規模を小さくすることができる。
また、例えば、LDPC符号の検査行列が図15の検査行列で、復号途中結果vの量子化ビット数が10ビットである場合、図26の復号装置600では、復号途中結果格納用メモリ610に、全枝数の1614ビットの容量を有するRAMと、復号途中結果格納用メモリ613に、検査行列の行数と復号途中結果vとの乗算値、即ち30×10=300ビットの容量を有するRAMを備えればよく、復号装置の回路規模を小さくすることができる。さらに、図26の復号装置600では、第1の演算を行う計算部612において、FIFOメモリを有する必要がないので、ロジックの回路規模を小さくすることができる。
一般的に、LDPC符号は符号長が数千から数万と大きいため、Pの値も数百の大きさを持つものが使われる。その場合には、更に本発明に係る復号装置を用いる効果は大きくなる。
また、本発明に係る復号装置は、サムプロダクトアルゴリズムを忠実に実装するものであるため、メッセージの量子化以外の復号損失が起きることはない。
以上の観点から、本発明に係る復号装置を用いることで、高性能な復号が可能になる。
LDPC符号の検査行列Hを説明する図である。 LDPC符号の復号手順を説明するフローチャートである。 メッセージの流れを説明する図である。 LDPC符号の検査行列の例を示す図である。 検査行列のタナーグラフを示す図である。 バリアブルノードを示す図である。 チェックノードを示す図である。 LDPC符号の検査行列の例を示す図である。 ノード演算を一つずつ行うLDPC符号の復号装置の構成例を示すブロック図である。 メッセージを一つずつ計算するチェックノード計算器の構成例を示すブロック図である。 メッセージを一つずつ計算するバリアブルノード計算器の構成例を示すブロック図である。 ノード演算を全て同時に行うLDPC符号の復号装置の構成例を示すブロック図である。 メッセージを同時に計算するチェックノード計算器の構成例を示すブロック図である。 メッセージを同時に計算するバリアブルノード計算器の構成例を示すブロック図である。 5×5単位に分割した検査行列を示す図である。 本発明を適用した復号装置の一実施の形態の構成例を示すブロック図である。 図16の復号装置の復号処理を説明するフローチャートである。 本発明を適用した復号装置の一実施の形態の構成例を示すブロック図である。 チェックノード計算器の構成例を示すブロック図である。 バリアブルノード計算器の構成例を示すブロック図である。 図18の計算器の構成例を示すブロック図である。 図18の計算器の構成例を示すブロック図である。 図18の復号途中結果格納用メモリの構成例を示すブロック図である。 図18の復号途中結果格納用RAMの動作を説明するタイミングチャートである。 図18の復号装置の復号処理を説明するフローチャートである。 本発明を適用した復号装置の一実施の形態の構成例を示すブロック図である。 チェックノード計算器の構成例を示すブロック図である。 バリアブルノード計算器の構成例を示すブロック図である。 図26の計算器の構成例を示すブロック図である。 図26の計算器の構成例を示すブロック図である。 図26の復号途中結果格納用メモリの構成例を示すブロック図である。 図31の復号途中結果格納用RAMの動作を説明するタイミングチャートである。 図26の復号装置の復号処理を説明するフローチャートである。 本発明を適用したコンピュータの一実施の形態の構成例を示すブロック図である。
符号の説明
300 スイッチ,311 枝データ格納用メモリ, 312 セレクタ, 313 チェックノード計算部, 314 サイクリックシフト回路, 315 スイッチ, 316 枝データ格納用メモリ, 317 セレクタ, 318 受信データ用メモリ, 319 バリアブルノード計算部, 320 サイクリックシフト回路, 901 バス, 902 CPU, 903 ROM, 904 RAM, 905 ハードディスク, 906 出力部, 907 入力部, 908 通信部, 909 ドライブ, 910 入出力インタフェース, 911 リムーバブル記録媒体

Claims (31)

  1. LDPC(Low Density Parity Check)符号の復号装置であって、
    P×Pの単位行列、その単位行列のコンポーネントである1のうちの1個以上が0になった行列である準単位行列、前記単位行列もしくは準単位行列をサイクリックシフトした行列であるシフト行列、前記単位行列、準単位行列、もしくはシフト行列のうちの複数の和である和行列、またはP×Pの0行列を構成行列として、前記LDPC符号の検査行列が、複数の前記構成行列の組合せで表される場合において、
    前記LDPC符号の復号のためのP個のチェックノードの演算を同時に行う第1の演算手段と、
    前記LDPC符号の復号のためのP個のバリアブルノードの演算を同時に行う第2の演算手段と
    を備えることを特徴とする復号装置。
  2. 請求項1に記載の復号装置であって、
    前記第1の演算手段は、チェックノードの演算を行うP個のチェックノード計算器を有し、
    前記第2の演算手段は、バリアブルノードの演算を行うP個のバリアブルノード計算器を有する
    ことを特徴とする復号装置。
  3. 請求項1に記載の復号装置であって、
    前記P個のチェックノードの演算、または前記P個のバリアブルノードの演算の結果得られるP個の枝に対応するメッセージデータを同時に読み書きするメッセージ記憶手段をさらに備える
    ことを特徴とする復号装置。
  4. 請求項3に記載の復号装置であって、
    前記メッセージ記憶手段は、チェックノードの演算時に読み出される枝に対応するメッセージデータを、検査行列の1を行方向に詰めるように格納する
    ことを特徴とする復号装置。
  5. 請求項3に記載の復号装置であって、
    前記メッセージ記憶手段は、バリアブルノード演算時に読み出される枝に対応するメッセージデータを、検査行列の1を列方向に詰めるように格納する
    ことを特徴とする復号装置。
  6. 請求項3に記載の復号装置であって、
    前記メッセージ記憶手段は、前記検査行列を表す構成行列のうちの、重みが2以上の構成行列について、その構成行列を、重みが1の単位行列、準単位行列、またはシフト行列の和の形で表現したときの、その重みが1の単位行列、準単位行列、またはシフト行列に属するP個の枝に対応するメッセージを、同一のアドレスに格納する
    ことを特徴とする復号装置。
  7. 請求項3に記載の復号装置であって、
    前記メッセージ記憶手段は、行数/P個のFIFOと、列数/P個のFIFOとで構成され、
    前記行数/P個のFIFOと列数/P個のFIFOは、それぞれ、前記検査行列の行と列の重みに対応するワード数を有する
    ことを特徴とする復号装置。
  8. 請求項3に記載の復号装置であって、
    前記メッセージ記憶手段は、RAM(Random Access Memory)で構成され、
    前記RAMは、前記メッセージデータを、読み出される順番に詰めて格納し、格納位置順に読み出す
    ことを特徴とする復号装置。
  9. 請求項1に記載の復号装置であって、
    LDPC符号の受信情報を格納するとともに、P個の前記受信情報を同時に読み出す受信情報記憶手段をさらに備える
    ことを特徴とする復号装置。
  10. 請求項9に記載の復号装置であって、
    前記受信情報記憶手段は、前記受信情報を、前記バリアブルノードの演算に必要となる順番に読み出すことができるように格納する
    ことを特徴とする復号装置。
  11. 請求項1に記載の復号装置であって、
    前記P個のチェックノードの演算、または前記P個のバリアブルノードの演算の結果得られるメッセージを並べ替える並べ替え手段をさらに備える
    ことを特徴とする復号装置。
  12. 請求項1に記載の復号装置であって、
    前記第1の演算手段と前記第2の演算手段は、P個の枝に対応するメッセージを求める
    ことを特徴とする復号装置。
  13. 請求項1に記載の復号装置であって、
    前記第1の演算手段は、前記P個のチェックノードの演算と前記P個のバリアブルノードの演算の一部とを行い、
    前記第2の演算手段は、前記P個のバリアブルノードの演算の他の一部を行う
    ことを特徴とする復号装置。
  14. 請求項13に記載の復号装置であって、
    前記第1の演算手段は、前記P個のチェックノードの演算と前記P個のバリアブルノードの演算の一部を行うP個の計算器を有し、
    前記第2の演算手段は、前記P個のバリアブルノードの演算の他の一部を行うP個の計算器を有する
    ことを特徴とする復号装置。
  15. 請求項13に記載の復号装置であって、
    前記第1の演算手段が前記P個のチェックノードの演算と前記P個のバリアブルノードの演算の一部を行うことにより得られるP個の枝に対応する第1の復号途中結果を同時に読み書きする第1の復号途中結果記憶手段をさらに備える
    ことを特徴とする復号装置。
  16. 請求項15に記載の復号装置であって、
    前記第1の復号途中記憶手段は、前記P個のバリアブルノードの演算の他の一部を行う時に読み出される枝に対応する前記第1の復号途中結果を、検査行列の1を行方向に詰めるように格納する
    ことを特徴とする復号装置。
  17. 請求項15に記載の復号装置であって、
    前記第1の復号途中結果記憶手段は、前記検査行列を表す構成行列のうちの、重みが2以上の構成行列について、その構成行列を、重みが1の単位行列、準単位行列、またはシフト行列の和の形で表現したときの、その重みが1の単位行列、準単位行列、またはシフト行列に属するP個の枝に対応する前記第1の復号途中結果を、同一のアドレスに格納する
    ことを特徴とする復号装置。
  18. 請求項13に記載の復号装置であって、
    前記第2の演算手段が前記P個のバリアブルノードの演算の他の一部を行うことにより得られるP個の枝に対応する前記第2の復号途中結果を同時に読み書きする第2の復号途中結果記憶手段をさらに備える
    ことを特徴とする復号装置。
  19. 請求項13に記載の復号装置であって、
    LDPC符号の受信情報を格納するとともに、P個の前記受信情報を同時に読み出す受信情報記憶手段をさらに備える
    ことを特徴とする復号装置。
  20. 請求項13に記載の復号装置であって、
    前記第1の演算手段が前記P個のチェックノードの演算と前記P個のバリアブルノードの演算の一部を行うことにより得られる第1の復号途中結果、または前記第2の演算手段が前記P個のバリアブルノードの演算の他の一部を行うことにより得られる第2の復号途中結果を並べ替える並べ替え手段をさらに備える
    ことを特徴とする復号装置。
  21. 請求項20に記載の復号装置であって、
    前記並べ替え手段は、バレルシフタで構成される
    ことを特徴とする復号装置。
  22. 請求項1に記載の復号装置であって、
    前記第1の演算手段は、前記P個のチェックノードの演算の一部を行い、
    前記第2の演算手段は、前記P個のチェックノードの演算の他の一部と、前記P個のバリアブルノードの演算とを行う
    ことを特徴とする復号装置。
  23. 請求項22に記載の復号装置であって、
    前記第1の演算手段は、前記P個のチェックノードの演算の一部を行うP個の計算器を有し、
    前記第2の演算手段は、前記P個のチェックノードの演算の他の一部と、前記P個のバリアブルノードの演算を行うP個の計算器を有する
    ことを特徴とする復号装置。
  24. 請求項22に記載の復号装置であって、
    前記第1の演算手段が前記P個のチェックノードの演算の一部を行うことにより得られるP個の枝に対応する第1の復号途中結果を同時に読み書きする第1の復号途中結果記憶手段をさらに備える
    ことを特徴とする復号装置。
  25. 請求項22に記載の復号装置であって、
    前記第2の演算手段が前記P個のチェックノードの演算の他の一部と、前記P個のバリアブルノードの演算を行うことにより得られるP個の枝に対応する第2の復号途中結果を同時に読み書きする第2の復号途中結果記憶手段をさらに備える
    ことを特徴とする復号装置。
  26. 請求項25に記載の復号装置であって、
    前記第2の復号途中結果記憶手段は、前記P個のチェックノードの演算の他の一部と、前記P個のバリアブルノードの演算を行う時に読み出される枝に対応する前記第2の復号途中結果を、検査行列の1を列方向に詰めるように格納する
    ことを特徴とする復号装置。
  27. 請求項25に記載の復号装置であって、
    前記第2の復号途中結果記憶手段は、前記検査行列を表す構成行列のうちの、重みが2以上の構成行列について、その構成行列を、重みが1の単位行列、準単位行列、またはシフト行列の和の形で表現したときの、その重みが1の単位行列、準単位行列、またはシフト行列に属するP個の枝に対応する前記第2の復号途中結果を、同一のアドレスに格納する
    ことを特徴とする復号装置。
  28. 請求項22に記載の復号装置であって、
    LDPC符号の受信情報を格納するとともに、P個の前記受信情報を同時に読み出す受信情報記憶手段をさらに備える
    ことを特徴とする復号装置。
  29. 請求項22に記載の復号装置であって、
    前記第1の演算手段が前記P個のチェックノードの演算の一部を行うことにより得られる第1の復号途中結果、または前記第2の演算が前記P個のチェックノードの演算の他の一部と、前記P個のバリアブルノードの演算を行うことにより得られる第2の復号途中結果を並べ替える並べ替え手段をさらに備える
    ことを特徴とする復号装置。
  30. LDPC(Low Density Parity Check)符号の復号装置の復号方法であって、
    P×Pの単位行列、その単位行列のコンポーネントである1のうちの1個以上が0になった行列である準単位行列、前記単位行列もしくは準単位行列をサイクリックシフトした行列であるシフト行列、前記単位行列、準単位行列、もしくはシフト行列のうちの複数の和である和行列、またはP×Pの0行列を構成行列として、前記LDPC符号の検査行列が、複数の前記構成行列の組合せで表される場合において、
    前記LDPC符号の復号のためのP個のチェックノードの演算を同時に行う第1の演算ステップと、
    前記LDPC符号の復号のためのP個のバリアブルノードの演算を同時に行う第2の演算ステップと
    を含むことを特徴とする復号方法。
  31. LDPC(Low Density Parity Check)符号の復号をコンピュータに行わせるプログラムであって、
    前記LDPC符号の復号のためのP個のチェックノードの演算を同時に行う第1の演算ステップと、
    前記LDPC符号の復号のためのP個のバリアブルノードの演算を同時に行う第2の演算ステップと
    を含むことを特徴とするプログラム。
JP2003294383A 2003-05-13 2003-08-18 復号装置および復号方法、並びにプログラム Expired - Fee Related JP4225163B2 (ja)

Priority Applications (12)

Application Number Priority Date Filing Date Title
JP2003294383A JP4225163B2 (ja) 2003-05-13 2003-08-18 復号装置および復号方法、並びにプログラム
ES10178005T ES2424463T3 (es) 2003-05-13 2004-04-19 Aparato de decodificación, método de decodificación y programa
KR1020057000601A KR101090001B1 (ko) 2003-05-13 2004-04-19 복호 장치 및 복호 방법, 및 기록 매체
CN 200910147019 CN101567699B (zh) 2003-05-13 2004-04-19 解码装置
ES10178046T ES2426756T3 (es) 2003-05-13 2004-04-19 Aparato de decodificación, método de decodificación y programa
ES04728265T ES2401577T3 (es) 2003-05-13 2004-04-19 Dispositivo de decodificación, método de decodificación y programa
US12/611,227 USRE44420E1 (en) 2003-05-13 2004-04-19 Decoding apparatus, decoding method, and program to decode low density parity check codes
US10/521,054 US7299397B2 (en) 2003-05-13 2004-04-19 Decoding apparatus, decoding method, and program to decode low density parity check codes
PCT/JP2004/005562 WO2004102811A1 (ja) 2003-05-13 2004-04-19 復号装置および復号方法、並びにプログラム
EP04728265A EP1624581B1 (en) 2003-05-13 2004-04-19 Decoding device, decoding method, and program
EP10178005.4A EP2270989B1 (en) 2003-05-13 2004-04-19 Decoding apparatus, decoding method, and program
EP10178046.8A EP2270990B1 (en) 2003-05-13 2004-04-19 Decoding apparatus, decoding method, and program

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2003133941 2003-05-13
JP2003294383A JP4225163B2 (ja) 2003-05-13 2003-08-18 復号装置および復号方法、並びにプログラム

Publications (3)

Publication Number Publication Date
JP2004364233A JP2004364233A (ja) 2004-12-24
JP2004364233A5 JP2004364233A5 (ja) 2006-05-18
JP4225163B2 true JP4225163B2 (ja) 2009-02-18

Family

ID=33455446

Family Applications (1)

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

Country Status (6)

Country Link
US (2) USRE44420E1 (ja)
EP (3) EP1624581B1 (ja)
JP (1) JP4225163B2 (ja)
KR (1) KR101090001B1 (ja)
ES (3) ES2424463T3 (ja)
WO (1) WO2004102811A1 (ja)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7409628B2 (en) * 2002-08-15 2008-08-05 Broadcom Corporation Efficient design to implement LDPC (Low Density Parity Check) decoder
US8140931B2 (en) * 2003-07-03 2012-03-20 Dtvg Licensing, Inc. Method and system for generating parallel decodable low density parity check (LDPC) codes
US7296208B2 (en) * 2003-07-03 2007-11-13 The Directv Group, Inc. Method and system for generating parallel decodable low density parity check (LDPC) codes
KR20050118056A (ko) * 2004-05-12 2005-12-15 삼성전자주식회사 다양한 부호율을 갖는 Block LDPC 부호를 이용한이동 통신 시스템에서의 채널부호화 복호화 방법 및 장치
FR2871975B1 (fr) * 2004-06-22 2006-08-11 St Microelectronics Sa Decodeur ldpc
EP1800408A1 (en) * 2004-10-01 2007-06-27 Thomson Licensing A low density parity check (ldpc) decoder
US7634710B2 (en) * 2005-03-25 2009-12-15 Teranetics, Inc. Efficient decoding
JP4729964B2 (ja) * 2005-04-25 2011-07-20 ソニー株式会社 復号装置および復号方法
JP4617985B2 (ja) * 2005-04-25 2011-01-26 ソニー株式会社 符号装置および符号化方法
JP4595650B2 (ja) * 2005-04-25 2010-12-08 ソニー株式会社 復号装置および復号方法
JP4622654B2 (ja) 2005-04-25 2011-02-02 ソニー株式会社 復号装置および復号方法
JP2006339799A (ja) * 2005-05-31 2006-12-14 Toshiba Corp イレギュラー低密度パリティチェック符号復号器及び方法
KR100727316B1 (ko) * 2005-06-01 2007-06-12 삼성전자주식회사 저밀도채리티체크 채널 디코딩 방법 및 장치
JP4730592B2 (ja) * 2005-07-11 2011-07-20 ソニー株式会社 復号装置および復号方法
KR100983692B1 (ko) * 2005-07-13 2010-09-24 미쓰비시덴키 가부시키가이샤 통신 장치 및 복호 방법
JP4293172B2 (ja) 2005-09-13 2009-07-08 ソニー株式会社 復号装置および復号方法
WO2007064325A1 (en) 2005-12-01 2007-06-07 Thomson Licensing Apparatus and method for decoding low density parity check coded signals
US7661055B2 (en) * 2005-12-05 2010-02-09 Broadcom Corporation Partial-parallel implementation of LDPC (Low Density Parity Check) decoders
JP4807063B2 (ja) 2005-12-20 2011-11-02 ソニー株式会社 復号装置、制御方法、およびプログラム
US7617433B2 (en) * 2006-01-03 2009-11-10 Broadcom Corporation Implementation of LDPC (low density parity check) decoder by sweeping through sub-matrices
US7530002B2 (en) * 2006-01-03 2009-05-05 Broadcom Corporation Sub-matrix-based implementation of LDPC (Low Density Parity Check) decoder
JP4739086B2 (ja) * 2006-04-05 2011-08-03 三菱電機株式会社 誤り訂正復号装置および誤り訂正復号方法
US7647548B2 (en) * 2006-07-31 2010-01-12 Agere Systems Inc. Methods and apparatus for low-density parity check decoding using hardware-sharing and serial sum-product architecture
JP4780027B2 (ja) * 2007-04-27 2011-09-28 ソニー株式会社 復号装置、制御方法、及びプログラム
JP4743156B2 (ja) 2007-04-27 2011-08-10 ソニー株式会社 復号装置
US8418023B2 (en) 2007-05-01 2013-04-09 The Texas A&M University System Low density parity check decoder for irregular LDPC codes
JP4487212B2 (ja) * 2007-10-19 2010-06-23 ソニー株式会社 復号装置および方法、送受信システム、受信装置および方法、並びにプログラム
JP4487213B2 (ja) * 2007-10-19 2010-06-23 ソニー株式会社 復号装置および方法、並びにプログラム
CN101431337A (zh) * 2007-11-09 2009-05-13 松下电器产业株式会社 提高编码并行度实现降低编码时延的方法
JP2009271956A (ja) * 2008-04-30 2009-11-19 Toshiba Corp データ復号装置,データ再生装置,およびデータ復号方法
US8443033B2 (en) * 2008-08-04 2013-05-14 Lsi Corporation Variable node processing unit
US8145986B2 (en) * 2008-09-22 2012-03-27 Broadcom Corporation Multi-CSI (Cyclic Shifted Identity) sub-matrix based LDPC (Low Density Parity Check) codes
JP5320964B2 (ja) * 2008-10-08 2013-10-23 ソニー株式会社 サイクリックシフト装置、サイクリックシフト方法、ldpc復号装置、テレビジョン受像機、及び、受信システム
JP5536155B2 (ja) * 2012-08-03 2014-07-02 トムソン ライセンシング 誤り訂正を実行する装置及び方法
KR102068030B1 (ko) 2012-12-11 2020-01-20 삼성전자 주식회사 메모리 컨트롤러 및 그 동작방법
RU2546070C1 (ru) * 2013-11-12 2015-04-10 Открытое акционерное общество "Калужский научно-исследовательский институт телемеханических устройств" Способ мягкого декодирования помехоустойчивого кода
US9553608B2 (en) * 2013-12-20 2017-01-24 Sandisk Technologies Llc Data storage device decoder and method of operation
KR102433645B1 (ko) * 2015-11-09 2022-08-18 삼성전자주식회사 무선 통신 시스템에서 복호화 방법 및 장치
WO2021171506A1 (ja) * 2020-02-27 2021-09-02 三菱電機株式会社 復号方法、復号装置、制御回路およびプログラム記憶媒体

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6539367B1 (en) 2000-05-26 2003-03-25 Agere Systems Inc. Methods and apparatus for decoding of general codes on probability dependency graphs
JP4389373B2 (ja) * 2000-10-11 2009-12-24 ソニー株式会社 2元巡回符号を反復型復号するための復号器
US6567465B2 (en) 2001-05-21 2003-05-20 Pc Tel Inc. DSL modem utilizing low density parity check codes
US6633856B2 (en) * 2001-06-15 2003-10-14 Flarion Technologies, Inc. Methods and apparatus for decoding LDPC codes
US6938196B2 (en) * 2001-06-15 2005-08-30 Flarion Technologies, Inc. Node processors for use in parity check decoders
US6801919B2 (en) 2001-07-27 2004-10-05 Hewlett-Packard Development Company, L.P. Object oriented database interface encapsulation that allows for chronologically overlapping transactions in a multi-threaded environment
WO2003021440A1 (en) 2001-09-01 2003-03-13 Bermai, Inc. Decoding architecture for low density parity check codes
JP2003269302A (ja) 2002-03-18 2003-09-25 Hitachi Ltd スタータ
US20040019845A1 (en) * 2002-07-26 2004-01-29 Hughes Electronics Method and system for generating low density parity check codes
US7178080B2 (en) 2002-08-15 2007-02-13 Texas Instruments Incorporated Hardware-efficient low density parity check code for digital communications
US6961888B2 (en) * 2002-08-20 2005-11-01 Flarion Technologies, Inc. Methods and apparatus for encoding LDPC codes
US6785863B2 (en) 2002-09-18 2004-08-31 Motorola, Inc. Method and apparatus for generating parity-check bits from a symbol set
US6957375B2 (en) * 2003-02-26 2005-10-18 Flarion Technologies, Inc. Method and apparatus for performing low-density parity-check (LDPC) code operations using a multi-level permutation

Also Published As

Publication number Publication date
US20050240853A1 (en) 2005-10-27
EP2270989B1 (en) 2013-07-03
EP2270990B1 (en) 2013-07-10
EP2270990A2 (en) 2011-01-05
KR101090001B1 (ko) 2011-12-05
USRE44420E1 (en) 2013-08-06
ES2401577T3 (es) 2013-04-22
KR20060007362A (ko) 2006-01-24
EP1624581A1 (en) 2006-02-08
US7299397B2 (en) 2007-11-20
ES2424463T3 (es) 2013-10-02
WO2004102811A1 (ja) 2004-11-25
EP2270989A2 (en) 2011-01-05
ES2426756T3 (es) 2013-10-25
EP1624581B1 (en) 2013-01-02
EP1624581A4 (en) 2008-07-09
EP2270989A3 (en) 2011-06-22
JP2004364233A (ja) 2004-12-24
EP2270990A3 (en) 2011-06-22

Similar Documents

Publication Publication Date Title
JP4225163B2 (ja) 復号装置および復号方法、並びにプログラム
JP4622654B2 (ja) 復号装置および復号方法
JP4224777B2 (ja) 復号方法および復号装置、並びにプログラム
JP4487213B2 (ja) 復号装置および方法、並びにプログラム
JP4487212B2 (ja) 復号装置および方法、送受信システム、受信装置および方法、並びにプログラム
JP4285148B2 (ja) 復号装置および復号方法、並びにプログラム
JP4729964B2 (ja) 復号装置および復号方法
CN101567699B (zh) 解码装置
JP4284600B2 (ja) 復号装置
JP4822071B2 (ja) 復号装置および復号方法
JP4730592B2 (ja) 復号装置および復号方法
JP2008301152A (ja) 復号装置および方法、並びにプログラム
JP4821724B2 (ja) 復号装置および復号方法
JP4288582B2 (ja) 復号装置および復号方法、並びにプログラム

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060323

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060323

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080812

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

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

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

Free format text: PAYMENT UNTIL: 20111205

Year of fee payment: 3

R151 Written notification of patent or utility model registration

Ref document number: 4225163

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

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

Free format text: PAYMENT UNTIL: 20111205

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20111205

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20121205

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

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

Free format text: PAYMENT UNTIL: 20121205

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20131205

Year of fee payment: 5

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

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees