(57)【要約】      （修正有）【課題】計算を加速するために、２つの計算コアを並列に使用してＤＦＴを計算することを提供する。【解決手段】データは、ＰＦＡルリタニアマッピング行列の偶数行及び奇数行に従って、２つのコアのいずれかに送られる。コアごとに別個の記憶手段が使用され、基数計算ステップと基数計算ステップとの間に２つの別個の記憶手段間でデータを交換する。【選択図】図１４Ａ
2010016832.tif 000002
【特許請求の範囲】
【請求項１】
ルリタニアマップを用いるＰＦＡアルゴリズムに従って種々のサイズのＤＦＴを計算する装置であって、
−  フロー上の種々のサイズを有するすべてのバタフライを計算する２つのバタフライ計算ユニットと、
−  前記ＤＦＴのサイズの半分に等しいサイズを有するデータを記憶する２つの別個の記憶手段と、
−  前記ルリタニアマップの偶数行及び奇数行に従って、前記２つの別個の記憶手段内に入力データを送る手段と、
−  ルリタニアマップが異なることに起因して、基数が変化するごとに、データを再分配する手段と、
−  前記２つの別個の記憶手段から出力データを取り出す手段と、
を備えることを特徴とする、ルリタニアマップを用いるＰＦＡアルゴリズムに従って種々のサイズのＤＦＴを計算する装置。
【請求項２】
前記記憶手段のそれぞれは、基数サイズが変化するときに入力演算及び出力演算のために交互に使用される２つの異なるメモリをさらに備えることを特徴とする、請求項１に記載の装置。
【請求項３】
トランスペアレントなアクセスのために前記２つの記憶手段をカプセル化する仮想化手段をさらに備えることを特徴とする、請求項１又は２に記載の装置。
【請求項４】
前記ルリタニアマップの変更に基づくアドレス変換手段をさらに備えることを特徴とする、請求項３に記載の装置。
【請求項５】
データの再分配は、各バタフライユニットからの前記出力データに対して同様の再配列を適用すると共に、該２つの再配列されたストリームにおいて対交換を行うことによって達成されることを特徴とする、請求項１に記載の装置。
【請求項６】
ルリタニアマップを用いるＰＦＡアルゴリズムに従って種々のサイズのＤＦＴを計算する方法であって、
−  ２つのバタフライ計算ユニット上で、フロー上の種々のサイズを有するすべてのバタフライを計算するステップと、
−  前記ＤＦＴのサイズの半分に等しいサイズを有するデータを、２つの別個の記憶手段内に記憶するステップと、
−  前記ルリタニアマップの偶数行及び奇数行に従って、前記２つの別個の記憶手段内に入力データを送るステップと、
−  ルリタニアマップが異なることに起因して、基数が変化するごとに、データを再分配するステップと、
−  前記２つの別個の記憶手段から出力データを取り出すステップと、
を含むことを特徴とする、ルリタニアマップを用いるＰＦＡアルゴリズムに従って種々のサイズのＤＦＴを計算する方法。
【請求項７】
前記データを記憶するステップは、基数サイズが変化するときに入力演算及び出力演算のために交互に使用される２つの異なるメモリ内の各記憶手段内に交互にデータを記憶するステップをさらに含むことを特徴とする、請求項６に記載の方法。
【請求項８】
トランスペアレントなアクセスのために前記２つの記憶手段をカプセル化する仮想化ステップをさらに含むことを特徴とする、請求項６又は７に記載の方法。
【請求項９】
前記ルリタニアマップの変更に基づくアドレス変換ステップをさらに含むことを特徴とする、請求項８に記載の方法。
【請求項１０】
データの再分配は、各バタフライユニットからの前記出力データに対して同様の再配列を適用すると共に、該２つの再配列されたストリームにおいて対交換を行うステップによって達成されることを特徴とする、請求項６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、包括的には、離散フーリエ変換（ＤＦＴ）に関する。より具体的には、本発明は、ＤＦＴ拡散直交周波数分割多重（ＤＦＴ拡散ＯＦＤＭ）変調技法のディジタル回路上でのハードウェア実施（実装）に関する。
【背景技術】
【０００２】
ＤＦＴ拡散ＯＦＤＭは、次世代（beyond third generation）（Ｂ３Ｇ）セルラネットワーク向けに第３世代パートナーシッププログラム（３ＧＰＰ）によって発行された長期的発展型（ＬＴＥ）標準規格において、（端末から基地局への）アップリンク送信のためのものとして指定されている。ＤＦＴ拡散ＯＦＤＭでは、変調シンボルは、従来のＯＦＤＭ変調に先立ってＤＦＴによって拡散され、ピーク対平均比（ＰＡＰＲ）を低くすることによる利益を得る。ＬＥＴの命名規則に従ってプリコーディング変換とも呼ばれるこの拡散の目的は、端末の電力消費を削減することである。３ＧＰＰ−ＬＴＥ標準規格では、ＤＦＴ拡散ＯＦＤＭは、周波数分割多元接続（ＦＤＭＡ）技法と組み合わせられて、いわゆる単一搬送波周波数分割多元接続（ＳＣ−ＦＤＭＡ）技法を形成する。ＳＣ−ＦＤＭＡでは、各ユーザには、送信時間間隔（ＴＴＩ）にわたって、２０ＭＨｚ帯域幅の１つのサブバンドから１１０個のサブバンドまで、１２個の連続した副搬送波で構成される所与の個数の連続したサブバンドが割り当てられる。ＤＦＴのハードウェア複雑度を低減するために、ＤＦＴサイズのサブセットのみが指定され、より具体的には、１２の倍数の４３個の異なるサイズＮ（１２から１９４４まで）が指定される。ここで、Ｎ＝２p×３r×５sであり、ｐ、ｑ、及びｓは整数である。
【０００３】
ＤＦＴは、ジョセフ・フーリエによるフーリエ級数の導入にちなんで命名されたフーリエ変換の１つの特定の形態である。その定義は、John G. Proakis及びDimitris G. Manolakis著「Digital Signal Processing, principles, algorithms, and applications」（New-York: Macmillan Publishing Company, 1992, ch. 9）に見つけることができる。ＤＦＴは、有限時間の関数（Ｎ個の値）に適用され、その結果は、Ｎ個の等間隔の離散周波数の集合におけるフーリエ変換の値を求めることによって計算される。Ｎ個の複素数のシーケンス｛ｘk，０≦ｋ≦Ｎ−１｝は、公式：
【０００４】
【数１】
2010016832.tif 000003
【０００５】
に従うＤＦＴによってＮ個の複素数のシーケンス｛Ｘn，０≦ｎ≦Ｎ−１｝に変換される。ここで、ｅは自然対数の底であり、ｉは複素数の虚数単位（ｉ2＝−１）である。ＤＦＴの特性の多くは、通例、ひねり因子（twiddle factor）と呼ばれる係数
【０００６】
【数２】
2010016832.tif 000004
【０００７】
が、１の原始累乗根であるということに依存する。その基本形態では、Ｎ点ＤＦＴアルゴリズムの計算は、Ｏ（Ｎ2）の複素乗算を必要とする。ハードウェアでは、ＤＦＴは通常、演算回数がより少ない高速フーリエ変換（ＦＦＴ）と通例呼ばれる専用の変換を使用して計算される。ＦＦＴアルゴリズムの大部分は、クーリー−テューキーアルゴリズムから導出された方法、素因数アルゴリズム（ＰＦＡ）から導出された方法、多項式因数分解法、及び畳み込み法の４つに分類することができる。これらの方法は互いに排他的なものではない。すなわち、これらの方法のうちの１つを別の方法の中で使用して、全体的な複雑度を削減することができる。
【０００８】
クーリー−テューキーアルゴリズムは、ＤＦＴ変換を計算するための基準アルゴリズムである。その記載を、James W. Cooley及びJohn W. Tukey著「An algorithm for the machine calculation of complex Fourier series」（Math. Comput., vol. 19, 1965, pp. 297-301）に見つけることができる。その最もポピュラーな形態では、クーリー−テューキーアルゴリズムは、サイズＮのＤＦＴをサイズＮ／２の２つの変換に再帰的に分割することに本質がある（分割統治手法）。クーリー−テューキーアルゴリズムを導出する単純な手法は、偶数番号の周波数サンプル及び奇数番号の周波数サンプルの計算を分けることである。同じ原理が各ステップで適用されるので、結果のＦＦＴアルゴリズムは、周波数間引き変換（ＤＩＦ、サンデ−テューキーアルゴリズムとも呼ばれる）と呼ばれる。本質的に２の累乗のサイズ（Ｎ＝２n）に制限されるこの形態は、基数２のＤＩＦクーリー−テューキーＦＦＴアルゴリズムとして知られている。また、再帰的変換を時間サンプルに適用して、時間間引き（ＤＩＴ）バージョンを得ることもできる。また、ＤＦＴは、以下ように、行列・ベクトル乗算として表すこともできる。
【０００９】
【数３】
2010016832.tif 000005
【００１０】
ここで、ｉは行のインデックスを示し、ｊは列のインデックスを示す。行列ＷNは、Ｎ次のＤＦＴ行列と呼ばれる。そうすると、ＦＦＴアルゴリズムは、ＷNを疎行列のシーケンスの積に因数分解することによって定義される。基本的な基数２のＤＩＦクーリー−テューキーＦＦＴアルゴリズムは、ジェントルマン−サンデアルゴリズムを使用して行列因数分解を通して得ることができる。ＤＦＴの計算では、クーリー−テューキーアルゴリズムを、ｌｏｇ2（Ｎ）個のステージを表すグラフとして表すことが一般的である。ここで、各ステージは、Ｎ／２個のバタフライと呼ばれる基本的な２点ＤＦＴで構成される。各ＤＩＦバタフライは、加算及び減算に還元された後、ひねり因子による複素乗算を通して回転される。したがって、２の累乗のサイズＮの場合、クーリー−テューキーＤＦＴの複雑度は、（Ｎ／２）×ｌｏｇ2（Ｎ）個の複素乗算、及びＮ×ｌｏｇ2（Ｎ）個の複素加算に還元され、基本的なＤＦＴのＯ（Ｎ2）の複雑度よりもはるかに低くなる。
【００１１】
クーリー−テューキーアルゴリズムの１つの利点は、バタフライのシーケンスであるコアアルゴリズムの計算を、インプレース（in-place）で実行することができる、すなわち、記憶装置を追加することなく実行することができるということである。確かに、バタフライの出力が計算されたとき、入力対を保存する必要はない。したがって、バタフライの結果は、２つの入力と同じロケーションに記憶することができる。コンピュータサイエンスでは、インプレースアルゴリズムは、少量且つ一定量の追加の記憶空間を使用してデータ構造を変換するアルゴリズムである。この定義によれば、クーリー−テューキーは、インプレースであるとみなすことができる。この利点は、クーリー−テューキーが自己整列型（self-sorting）でない、すなわち、出力サンプルが線形順序で生成されないことによって相殺される。ベクトルを操作する関数は、線形に順序付けられた入力から線形に順序付けられた出力を生成する場合に自己整列型であると言われる。クーリー−テューキーは、部分ＤＦＴの奇数番号のサンプル及び偶数番号のサンプルの再帰的計算に起因する間引きのために自己整列型ではない。したがって、複雑度及び／又はレイテンシが増加することを犠牲にして、変換を達成するためのスクランブル解除演算を実行することが必要となる。基数２のＦＦＴの場合、この演算は、出力サンプルのアドレスのビット反転の形を取る。ビット反転は、数字ｂ2ｂ1ｂ0（たとえば、Ｎ＝８個の入力の３つの数字）を有する２進数で記述されたインデックスｎのデータが、反転された数字ｂ0ｂ1ｂ2を有するインデックスに変換される置換である。実際には、クーリー−テューキーアルゴリズムは、２の累乗のサイズに制約されない。クーリー−テューキーアルゴリズムは、任意のサイズの形Ｎ＝Ｉnに拡張することができる。ここで、Ｉは整数である。一般的な例は、３の累乗のサイズに適用可能な基数３のクーリー−テューキーＦＦＴ、及び４の累乗のサイズに適用可能な基数４のクーリー−テューキーＦＦＴである。これらの場合にも、スクランブル解除ステップは、反転演算によって行うことができるが、基数３及び基数４で表されるアドレスに適用される。実際、クーリー−テューキーアルゴリズムは、サイズＮから任意の整数の積Ｎ＝ｎ1×ｎ2×ｎ3×…×ｎLへの任意の因数分解に適用することができる。これによって、いわゆる混合基数ＦＦＴアルゴリズムがもたらされる。この場合、スクランブル解除ステージは、より複雑な数字反転の形を取り、それらのアルゴリズムの実際の実施は制限される。
【００１２】
１９８４年に、ジョンソン及びビュルスは、「An in-place in-order radix-2 FFT」（Proc. IEEE ICASSP, 1984, pp. 28A.2.1-4）において、自己整列型で且つインプレースのＦＦＴアルゴリズムを得るように基数２のＤＩＴクーリー−テューキーアルゴリズムを書き換えることができることを示した。クライブ・テンパートンは、「Self-sorting in place fast Fourier transforms」（SIAM J. Sci. Stat. Comput., vol. 12, July 1991, pp. 808-823）において、インプレースで且つ自己整列型のクーリー−テューキーＦＦＴを作成するのに使用される原理を、他の基底、たとえば基数３のアルゴリズム及び基数５のアルゴリズムに一般化することができることを示した。グラフでは、この変換は、インターリーブされた出力を有する複数のタイプ１バタフライ（従来のバタフライ）をグループ化するタイプ２バタフライで構成された連続した複数のステージで構成される。これはさらに、Ｎの因数分解が回文（palindrome）を形成していれば、混合基数ＦＦＴに拡張することができる。したがって、このアルゴリズムは、Ｎ＝１４４＝３2×４2の場合、因数が３、４、４、３の順序又は４、３、３、４の順序で使用されれば機能する。多くの変換長において、自己整列型インプレースクーリー−テューキーアルゴリズムに必要とされる対称形式で因数を配列することは不可能である。これらのサイズに対する代替手段は、回文として記述できない因数を因数分解の中央に配置することである。たとえば、Ｎ＝６０００＝３×４2×５3の場合、因数を、次のように、すなわちＮ＝６０００＝４×５×１５×５×４のように配列することができる。
【００１３】
クーリー−テューキーアルゴリズムに加えて、この文書で説明する発明は、グッドによって、「The interaction algorithm and practical Fourier analysis」（J. Roy. Statist. Soc. Ser. B., vol. 20, 1958, pp. 361-372）において最初に紹介されたＰＦＡアルゴリズムを使用する。素因数ＦＦＴアルゴリズムの掘り下げた説明は、ビュルスによって、「Index mappings for multidimensional formulation of the DFT and convolution」（IEEE Trans. Acoust. Speech Signal Process., vol. 25, 1977, pp. 239-242）、及び、「An in-place, in-order prime factor FFT algorithm」（IEEE Trans. Acoust. Speech Signal Process., vol. 29, 1981, pp. 806-817）に与えられている。ＰＦＡは、互いに素な因数で構成された合成サイズにおけるクーリー−テューキーアルゴリズムの一変形とみなすことができる。このクーリー−テューキーアルゴリズムは、サイズＮ1×Ｎ2のＤＦＴをサイズＮ1及びＮ2のより小さな多くのＤＦＴに再帰的に分割することに本質がある。これらの演算は、入力サンプル及び出力サンプルの適切な再インデックスを通して形式化することができる。これは、インデックスｋ及びｎを
【００１４】
【数４】
2010016832.tif 000006
【００１５】
と書き換えることによって達成される。第１の演算は、Ｎ1行Ｎ2列で構成される２次元アレイとして入力（ｋ）を再インデックスすることとして解釈することができる。ここで、データのオリジナルセットは、このアレイの列に線形に記憶される。第２の演算は、Ｎ1行Ｎ2列で構成される２次元アレイとして出力（ｎ）を再インデックスする。ここで、データの期待されるセットは、行に線形に記憶される。この再インデックスが、ＤＦＴの公式のｎｋに代入されると、残る項は
【００１６】
【数５】
2010016832.tif 000007
【００１７】
を与える。このクーリー−テューキーアルゴリズムは、合成サイズＮ＝Ｎ1Ｎ2のＤＦＴを
・アレイの列をシーケンシャルに満たして、入力をＮ1×Ｎ2アレイとして再インデックスすること。
・サイズＮ2のＮ1個のＤＦＴを、アレイのＮ2個の列に対して実行すること。
・ひねり因子を乗算すること。
・サイズＮ1のＮ2個のＤＦＴを、アレイのＮ1個の行に対して実行すること。
・アレイの行をシーケンシャルに読み出して、出力を再インデックスすること。
として、再帰的に表現し直していると見ることができる。ＰＦＡは、整数（ｋ）及び（ｎ）と、ＤＦＴアルゴリズムの２次元解釈の対応する整数対（ｋ1，ｋ2）及び（ｎ1，ｎ2）との間の特定のマッピングに依拠する。実際のところ、I. J. Good著「The relationship between two Fast Fourier Transforms」（IEEE Trans. Comp., vol. 20, 1971, pp. 310-317）に記載されているような、中国の剰余定理マップ（ＣＲＴ）に基づくマッピング又はルリタニアマップ（Ruritanian map）（グッドのマップとも呼ばれる）に基づくマッピングのいずれかの少なくとも２つのマッピングを使用することができる。入力及び出力に異なるマッピングを使用することもできる。ＰＦＡ変換は、ここでは入力及び出力の双方がルリタニアマップである場合について紹介される。このルリタニアマップは
【００１８】
【数６】
2010016832.tif 000008
【００１９】
によって定義される。ここで、整数ｐ及びｑは、Ｎ1とＮ2が互いに素である場合に
【００２０】
【数７】
2010016832.tif 000009
【００２１】
となるような整数ｐ、ｑ、ｒ、ｓを見つけることができるとするＣＲＴ定理に従って規定される。逆マップは
【００２２】
【数８】
2010016832.tif 000010
【００２３】
によって与えられる。Ｎ＝４０（Ｎ1＝８及びＮ2＝５）の一例は、以下の表に示される。
【００２４】
【表１】
2010016832.tif 000011
【００２５】
ルリタニア式の解を見つける必要はなく、容易にマッピングを構築できることが見て取れる。第１列のエントリーは、０からＮ／Ｎ1（＝Ｎ2）ずつ増加する。一方、第１行のエントリーは、０から（Ｎ／Ｎ2＝Ｎ1）ずつ増加する。次に、残りの列（又は行）は、第１列（又は行）と同じ増分を使用しつつ、結果のモジュロＮを取ることによって埋めることができる。このマッピングをＤＦＴのオリジナルの式に適用することによって、
【００２６】
【数９】
2010016832.tif 000012
【００２７】
が与えられる。Ｎ1又はＮ2を指数部に乗算していることが見て取れるが、これを別にすると、この式はＮ1×Ｎ2の２次元ＤＦＴの形を取る。クーリー−テューキーアルゴリズムと同様に、長さＮ1のＮ2個のＤＦＴを一方の次元で実行した後、他方の次元で長さＮ2のＮ1個のＤＦＴを実行することによって、ＤＦＴを計算することができる。この変換は、他方の次元から開始して計算することもできる。しかしながら、これら２つのステージ間にひねり因子は存在せず、これによって、演算回数がクーリー−テューキーＦＦＴの場合よりも少なくなることを強調しなければならない。指数部にＮ1及びＮ2を乗算することによって、入力サンプルに対して適用される回転方法が単純に変更される。ランクｎを有する周波数サンプルは、０から開始して増分ｎで単位円の周囲を巡回する１の累乗根によって加重された時間サンプルの線形結合として計算される。因数Ｎa（ａ＝１又は２）を適用すると、増分は単純にｎからｎ×Ｎaへ変更される。フーリエ変換の特性に起因して、出力サンプルは、標準的なＤＦＴの出力サンプルに対して循環シフトを単純に適用することによって得ることもできる。すなわち、長さＮaの変換に回転ｒを適用することは、結果がオリジナルの順序０，１，…，Ｎa−１で現れる代わりに、順序０，ｒ，２ｒ，…，（Ｎa−１）で現れることを意味する。ここで、インデックスはモジュロＮaで解釈される。入力及び出力の双方について同じマッピングを使用することによって、ＰＦＡをインプレース且つ自己整列型にすることができる。確かに、マッピングが同じであるので、出力サンプルは入力サンプルと同じ順序で現れる。１次元アレイからルリタニア２次元表現を形成する再インデックス演算が、暗黙的なアドレス変換を通して行われる場合、出力サンプルはワーキングアレイにおいて線形順序で現れる。すなわち、このアルゴリズムは自己整列型である。クーリー−テューキーアルゴリズムと同様に、ＰＦＡ法を再帰的に適用することによって、サイズＮを互いに素な因数Ｎ＝ｎ1×ｎ2×ｎ3×…×ｎLの積に分解することができる。この場合、ＰＦＡアルゴリズムを行列の形で表すことがより適切である。ＰＦＡアルゴリズムの原理を再帰的に適用することによって、行列ＷNの以下の因数分解が導かれる。
【００２８】
【数１０】
2010016832.tif 000013
【００２９】
ここで、Ｒは、ルリタニアマップに従って整数ｎを対応するＬ次元空間（ｎ1，ｎ2，…，ｎL）にマッピングする置換行列であり、ＷN[r]は、行列ＷNのすべての要素がｒ乗されたものである。上述したように、実際のところ、置換行列との積を実際に計算する必要はない。必要とされるマッピングは、インデクシングロジックを介して暗黙的に実施することができる。
【００３０】
ＰＦＡの１つの問題は、サイズを互いに素な因数に分解すると、単純な基数変換による直接計算に適合しない大きな因数を含む場合があるということである。したがって、他のＤＦＴ変換のうちの１つを使用してこれらの変換を実施することが必要となる。一般的な合成サイズの場合には、クーリー−テューキーアルゴリズムを使用して、より小さなＤＦＴを計算することができる。ジョンソン−ビュルス及び「Implementation of self-sorting in-place prime factor FFT algorithm」（J. Comput. Phys., vol. 58, 1985, pp. 283-299）におけるテンパートンの研究のおかげで、自己整列型で且つインプレースの形式でクーリー−テューキー変換を計算することが可能である。この拡張を、ＰＦＡアルゴリズムにおける合成因数（composite factor）の計算に適用することによって、一般化されたジョンソン−ビュルス（自己完結型インプレースクーリー−テューキー）変換の厳密な適用よりも低い計算複雑度で、自己整列型で且つインプレースのＤＦＴアルゴリズムを定義することが可能になる。このアルゴリズムは、テンパートンによる「A generalized prime factor FFT algorithm for any 2p3q5r」（SIAM J. Sci. Stat. Comput., vol. 13, May 1992, pp. 676-686）において、一般化されたＰＦＡ（ＧＰＦＡ）アルゴリズムとして、Ｎ＝２p×３q×５r（ｐ、ｑ、ｒは整数）の形のサイズの場合について記載されている。このアルゴリズムは、サイズが互いに素な整数の累乗の積である任意の分解に拡張することができる。これは、ＰＦＡアルゴリズムの回転因子を取り扱うようにクーリー−テューキーアルゴリズムを変更することによって可能になる。テンパートンは、以下の変更、すなわち
・回転ｒ（モジュロｐ）を各基数ｐのモジュールに適用すること。
・すべてのひねり因子をｒ乗すること。
を適用することによって、
行列
【００３１】
【数１１】
2010016832.tif 000014
【００３２】
を有する基数ｐのＤＦＴを、
行列
【００３３】
【数１２】
2010016832.tif 000015
【００３４】
を有するＤＦＴのように計算することができることを示した。たとえば、
【００３５】
【数１３】
2010016832.tif 000016
【００３６】
の場合、Ｎ＝ｐｍは、各基数５のモジュールをｒ’＝４（９モジュロ５）だけ回転した後、すべてのひねり因子を９乗することによって実施することができる。これ以降、この変換が適用される変換の名称に「回転（rotated）」と付加することによって、この変化を識別する。
【００３７】
任意のＮ＝２p×３q×５rに対して、一般化された自己整列型インプレースの素因数ＦＦＴアルゴリズムは、次のように構成される。
・ルリタニアマップを使用して、サイズ（２p，３q，５r）の３次元アレイとして入力サンプルを再インデックスする。
・一般化された回転ジョンソン−ビュルス法を使用して、長さ２p，３q，５rの１次元変換を計算する。したがって、より小さなＤＦＴは、インプレース自己整列型形式で実施される。
・ルリタニアマップを使用して、サイズ２p，３q，５rの１次元変換として出力サンプルを再インデックスする。
【００３８】
ＰＦＡに適したＮの値の場合、このアルゴリズムはＰＦＡに還元され、同じ演算回数を有する。Ｎ＝２p、３q、又は５rの場合、このアルゴリズムはクーリー−テューキーアルゴリズムの自己整列型インプレースの導出物に還元され、同じ演算回数を有する。Ｎが因数の混合を含むがＰＦＡに適していない場合、このアルゴリズムは基本的なクーリー−テューキーアルゴリズムよりも少ない演算回数を有する。
【００３９】
この文書に提示される発明は、ディジタル集積回路上でのＧＰＦＡアルゴリズムのハードウェア実施を扱う。ＤＦＴの広範囲の適用に関連して、多くの解決法がＦＦＴアルゴリズムの実施に利用可能である。これらの解決法の大部分は、プロセッサ上で実施する場合のクーリー−テューキーアルゴリズム及びその導出物に焦点を当てている。しかしながら、速度が極めて重要となる状況では、多くの場合、ＦＦＴアルゴリズムは集積回路上で実施される。ＤＦＴのクーリー−テューキー因数分解は、すべてのクーリー−テューキーＦＦＴ装置に何らかの形で適用されるが、これらのアルゴリズムを実施するための解決法には大きな多様性がある。集積回路によって、本来的に機能を並列化することが可能になる。したがって、所与のサイズのＦＦＴのすべてのバタフライを、そのグラフ表現と同様に実施することが可能である。これによって、削減されたクロックサイクル数で結果を計算することが可能になるが、複雑度が高くなるという犠牲が伴う。実際、複雑度とレイテンシとの間のトレードオフは、ＦＦＴの種々の実施態様間の相違を生み出すものとなる。加えて、ハードウェア装置の仕様に応じて、解決法は、メモリ使用量、及びバタフライを実施するための乗算器の個数と加算器の個数と比の点からも異なる。
【００４０】
基数２のクーリー−テューキーＦＦＴは、その人気及びかなり低い複雑度のために、ＤＦＴをハードウェアで実施するための圧倒的に最も広く使用されている技法のうちの１つである。多くの状況では、ＤＦＴのサイズはあまり重要ではない。したがって、余分な複雑度及び／又はレイテンシを犠牲にするものの、ゼロパディングによって２の累乗のＦＦＴを使用することができる。ＯＦＤＭ送信のような他の状況では、システムの仕様は、多くの場合、この制約条件を考慮して規定される。基数２のクーリー−テューキーＦＦＴアルゴリズムをハードウェア実施に適合させるものは、そのグラフ表現に示すようなモジュール性である。これは実際には、Ｎ／２個の同様のバタフライのｌｏｇ2（Ｎ）個の連続したステージで構成される。上記で紹介したように、最も直接的な解決法は、グラフ表現と同様にすべてのバタフライを実施することである。これによって、低いレイテンシでＤＦＴを計算することが可能になる。また、実際にはあまり一般的ではないが、データが並列に提示される場合には、連続したＤＦＴをパイプライン化することも可能になる。この解決法の明らかな欠点は、各ステップの出力を記憶する必要があるので、計算資源（乗算器及び加算器）並びにメモリの双方の点で複雑度が高いことである。
【００４１】
排他的でない２つの異なる手法を使用して、全体的な複雑度を削減することができる。第１の手法は、同じハードウェア資源を再利用して、一時に１つのステージを計算することである（時に列ＦＦＴ（column FFT）と呼ばれる解決法）。結果は、プロセス要素の同じセットにフィードバックされ、次のステージが計算される。これによって、メモリを節約することが可能になるが、レイテンシが長くなると共にルーティングアーキテクチャがより複雑になる犠牲が伴う。他方の手法は、各ステージ内において、異なるバタフライの計算をパイプライン化することによって、処理要素の個数を最終的には１つに削減することである（時にパイプライン化ＦＦＴ（pipelined FFT）と呼ばれる解決法）。この解決法は、データがＦＦＴ装置にシリアルな方法で適用される状況に特に適している。この状況は、実際には非常に一般的な状況である。
【００４２】
基数２のＦＦＴアルゴリズムの最も直接的なパイプライン化された実施態様は、L.R. Rabiner及びB. Gold著「Theory and Application of Digital Signal Processing」（Prentice-Hall, Inc., 1975）に記載されている基数２マルチパス遅延コミュテータ（Ｒ２ＭＤＣ）である。入力シーケンスは、順方向に流れる２つの並列データストリームに分割され、ステップごとに一意のバタフライに入力されるデータ要素間の正確な「距離」が、適切な遅延によってスケジューリングされる。バタフライ及び乗算器の双方の利用率は５０％である。この実施態様は、ｌｏｇ2（Ｎ）−２個の乗算器、ｌｏｇ2（Ｎ）個の基数２のバタフライ、及び３／２Ｎ−２個のレジスタを必要とする。各ステージ内において、単一のバタフライ及びＮ個の複素要素の単一のアレイによってＦＦＴを実施することが実際に可能である。E. H. Wold及びA. M. Despain著「Pipeline and parallel-pipeline FFT processors for VLSI implementation」（IEEE Trans. Comput., vol. C-33(5), May 1984, pp. 414-426）に記載されているように、基数２の単一パス遅延フィードバック（Ｒ２ＳＤＦ）は、バタフライの出力をフィードバックシフトレジスタに記憶することによって、レジスタをより効率的に使用する。単一のデータストリームは、すべてのステージの乗算器を通過する。このＲ２ＳＤＦは、Ｒ２ＭＤＣ手法と同じ個数のバタフライユニット及び乗算器を有するが、メモリ所要量は大きく削減されている（Ｎ−１個のレジスタ）。この手法は、圧倒的に最も一般的なものであり、複雑度をさらに削減する基数４の導入によって多くの変形（Ｒ４ＭＤＣ、Ｒ４ＳＤＦ、Ｒ４ＳＤＣ、Ｒ２2ＳＤＣ）を有する。
【００４３】
基数２又は基数４以外の他のステージ、たとえば基数３又は基数５を単純に追加することによって、パイプライン化クーリー−テューキーＦＦＴアルゴリズムを、混合基数ＦＦＴを計算するように変更することができる。また、いくつかのステージをスキップすると共に異なるステージ間のルーティングを適切にアレンジすることによって、ＤＦＴのサイズを動的に変更することも可能である。しかしながら、基数２のバタフライは実施がかなり単純であるのに対して、他の基数のバタフライの複雑度は大幅に高くなる。したがって、基数２又は基数４以外のステージの個数に依存して、ＦＦＴ装置の複雑度は扱いにくいものとなる。実際には、これらの解決法の主な制限は、それらの解決法が自己整列型でない基本的なクーリー−テューキーアルゴリズムを実施するということである。したがって、余分なメモリ及び／又はレイテンシのいずれかを消費するスクランブル解除ステージを実施することが必要となる。このスクランブル解除ステージも、混合基数ＦＦＴの場合には、かなり複雑になる可能性がある。
【００４４】
より高次の基数を使用することの別の制限は、基本的なＤＦＴの実施及びひねり因子による回転の双方について、回転を実施する必要があるということである。上述したように、これらの場合には、入力データ及び出力データの適切なインデクシングを使用することによってひねり因子による乗算を除去するＰＦＡアルゴリズムに依拠することがより優れている。ＰＦＡアルゴリズムの別の利点は、自己整列型で且つインプレースとなるようにＰＦＡアルゴリズムを実施でき、したがって、クロックサイクル及びメモリの双方を節約することができるということである。問題は、ＰＦＡアルゴリズムが、互いに素な因数に因数分解できるサイズでないと適用できないということである。これは、１つの所与の長さのＤＦＴの計算を必要とするアプリケーションにとっては問題ではない。
【００４５】
L. Zou及びX. Huangによる２００５年８月の欧州特許出願第０５３００６５１．６号「3780-point Discrete Fourier Transformation processor」に記載されているように、３７８０点ＤＦＴの場合の解決法は、互いに素な因数に対応する異なるＤＦＴモジュールをパイプライン化することであり、ここでは１４０点ＤＦＴ及び２７点ＤＦＴをパイプライン化する。１４０点ＤＦＴは、４点ＤＦＴモジュール、５点ＤＦＴモジュール、及び７点ＤＦＴモジュールに分解された、ネストウィノグラード変換（nested Winograd transform）を使用して計算される。一方、２７点ＤＦＴは、９点ＤＦＴモジュール及び３点ＤＦＴモジュールに分解されたクーリー−テューキーアルゴリズムを使用して計算される。ＰＦＡアルゴリズムに依拠することの利点は、ひねり因子による乗算を回避することである。しかしながら、異なるステージをパイプライン化すると、いくつかのバッファが各ステージ間で必要とされるので、ＰＦＡアルゴリズムのインプレース性を活用することができない。加えて、クーリー−テューキーアルゴリズムとパイプライン化手法とを組み合わせることによって、スクランブル解除ステージを実施することが必要となる。
【００４６】
特に、サイズを動的に変更することを取り扱う場合には、ＰＦＡアルゴリズムにおいてパイプライン化手法を使用することの利点から利益を得ることはかなり難しいように見える。
【００４７】
関心のある解決法は、ＦＦＴの列手法を使用することである。この手法は、単一の記憶要素をループすることによって、処理要素の同じセットを使用して異なるステージを処理することに本質がある。この解決法は、R. S. Buchert、S. M. Sharier、及びP. Beckerによる２００６年４月の米国特許第７，０２８，０６４号「Optimized discrete Fourier transform method and apparatus using prime factor algorithm」で実施されている。ここでは、「ＰＦＡ回路」と呼ばれる単一の処理要素が、互いに素な因数へのサイズ分解に関連付けられる部分ＤＦＴを実行するのに使用される。この装置は、プログラマブル乗算・加算（ＭＡＣ）ユニットの一種を使用して部分ＤＦＴを実施する。実際には、この装置では、ひねり因子の本来的な対称性を活用するために、互いに結合されたこのような２つのＭＡＣユニットが組み込まれ、これによって全体的な複雑度が削減される。この解決法は、サイズを比較的小さな素因数に分解することができる限り（これは、ＰＦＡアルゴリズムの本来的な制限である）非常に魅力的である。確かに、分解がＮi＝２mという形の因数を含む場合、２m点ＤＦＴはＭＡＣユニットを使用して計算され、これは計算効率がよくない。加えて、ＰＦＡ装置は自己整列型形式で実施されないため、出力置換ステージが必要となる。
【先行技術文献】
【特許文献】
【００４８】
【特許文献１】米国特許第７，０２８，０６４号
【発明の概要】
【発明が解決しようとする課題】
【００４９】
いくつかのＤＦＴをシリアルに計算する目的でＤＦＴコアを実施するときの主な問題のうちの１つは、ＤＦＴ計算のレイテンシを制限することである。ＤＦＴ計算モジュールは、可能な限り高速であるべきである。目標は、データストリームのクロックにおけるフロー上の一連のＤＦＴ計算を、２つのＤＦＴ計算の間の遅延を低減して、又はさらに有利には一切遅延を発生させることなく達成することである。
【課題を解決するための手段】
【００５０】
本発明は、計算を加速するために、２つの計算コアを並列に使用してＤＦＴを計算することを提案する。データは、ＰＦＡルリタニアマッピング行列の偶数行及び奇数行に従って、２つのコアのいずれかに送られる。コアごとに別個の記憶手段が使用され、基数計算ステップと基数計算ステップとの間に２つの別個の記憶手段間でデータを交換する手段が提供される。
【００５１】
本発明は、種々のサイズのＤＦＴを計算する装置に関する。この装置は、フロー上の種々のサイズを有するすべてのバタフライを計算する２つのバタフライ計算ユニットと、ＤＦＴのサイズの半分に等しいサイズを有するデータを記憶する２つの別個の記憶手段と、ルリタニアマップの偶数行及び奇数行に従って、２つの別個の記憶手段内に入力データを送る手段と、ルリタニアマップが異なることに起因して、基数が変化するごとに、データを再分配する手段と、２つの別個の記憶手段から出力データを取り出す手段とを備える。
【００５２】
本発明の特定の実施の形態によれば、記憶手段のそれぞれは、基数サイズが変化するときに入力演算及び出力演算のために交互に使用される２つの異なるメモリをさらに備える。
【００５３】
本発明の特定の実施の形態によれば、上記装置は、トランスペアレントなアクセスのために２つの記憶手段をカプセル化する仮想化手段をさらに備える。
【００５４】
本発明の特定の実施の形態によれば、上記装置は、ルリタニアマップの変更に基づくアドレス変換手段をさらに備える。
【００５５】
本発明の特定の実施の形態によれば、データの再分配は、各バタフライユニットからの出力データに対して同様の再配列を適用すると共に、当該２つの再配列されたストリームにおいて対交換を行うことによって達成される。
【００５６】
また、本発明は、種々のサイズのＤＦＴを計算する方法にも関する。この方法は、２つのバタフライ計算ユニット上で、フロー上の種々のサイズを有するすべてのバタフライを計算するステップと、ＤＦＴのサイズの半分に等しいサイズを有するデータを、２つの別個の記憶手段内に記憶するステップと、ルリタニアマップの偶数行及び奇数行に従って、２つの別個の記憶手段内に入力データを送るステップと、ルリタニアマップが異なることに起因して、基数が変化するごとに、データを再分配するステップと、２つの別個の記憶手段から出力データを取り出すステップとを含む。
【００５７】
本発明の特定の実施の形態によれば、データを記憶するステップは、基数サイズが変化するときに入力演算及び出力演算のために交互に使用される２つの異なるメモリ内の各記憶手段内に交互にデータを記憶するステップをさらに含む。
【００５８】
本発明の特定の実施の形態によれば、上記方法は、トランスペアレントなアクセスのために２つの記憶手段をカプセル化する仮想化ステップをさらに含む。
【００５９】
本発明の特定の実施の形態によれば、上記方法は、ルリタニアマップの変更に基づくアドレス変換ステップをさらに含む。
【００６０】
本発明の特定の実施の形態によれば、データの再分配は、各バタフライユニットからの出力データに対して同様の再配列を適用すると共に、当該２つの再配列されたストリームにおいて対交換を行うステップによって達成される。
【００６１】
本発明の特徴は、一例の実施形態の以下の説明を読むことによってより明らかになる。当該説明は、添付図面に関して作成されている。
【図面の簡単な説明】
【００６２】
【図１】本発明の一例示の実施形態における、ＤＦＴコアアーキテクチャを示す。
【図２Ａ】本発明の一例示の実施形態において使用される、行列形式での基数５のバタフライの計算の原理を示す。
【図２Ｂ】本発明の一例示の実施形態において使用される、行列形式での基数５のバタフライの計算の原理を示す。
【図３】本発明の一例示の実施形態における、マルチ基数バタフライモジュールのアーキテクチャを示す。
【図４】本発明の一例示の実施形態において使用される、加算・累算（ＭＡＣ）ユニットのアーキテクチャを示す。
【図５Ａ】本発明の一例示の実施形態における、ＭＡＣユニットの制御の一変形を示す。
【図５Ｂ】本発明の一例示の実施形態における、ＭＡＣユニットの制御の一変形を示す。
【図５Ｃ】本発明の一例示の実施形態における、ＭＡＣユニットの制御の一変形を示す。
【図６】本発明の一実施形態における、マルチ基数バタフライモジュールの実施態様の一変形を示す。
【図７】本発明の一例示の実施形態における、２つのＭＡＣユニットを連結したものを示す。
【図８】本発明の一例示の実施形態における、ＤＦＴエンジンモジュールのアーキテクチャの一例を示す。
【図９Ａ】本発明の一例示の実施形態における、アドレス生成器で使用される累算器の一例を示す。
【図９Ｂ】本発明の一例示の実施形態における、アドレス生成器で使用される累算器の一例を示す。
【図１０】本発明の一例示の実施形態における、データマネージャの第１のバージョンの状態マシンを示す。
【図１１Ａ】本発明の代替的な一実施形態による、ＤＦＴのシーケンスを最適化するためのデータマネージャモジュールの一変形を示す。
【図１１Ｂ】本発明の代替的な一実施形態による、ＤＦＴのシーケンスを最適化するためのデータマネージャモジュールの一変形を示す。
【図１１Ｃ】本発明の代替的な一実施形態による、ＤＦＴのシーケンスを最適化するためのデータマネージャモジュールの一変形を示す。
【図１２Ａ】本発明の代替的な一実施形態による、レイテンシを削減するためのデータマネージャモジュールの一変形を示す。
【図１２Ｂ】本発明の代替的な一実施形態による、レイテンシを削減するためのデータマネージャモジュールの一変形を示す。
【図１３】本発明の最後の実施形態における、データマネージャモジュールのロードステップを詳細に示す。
【図１４Ａ】本発明の最後の実施形態における、データマネージャモジュールの計算ステップを詳細に示す。
【図１４Ｂ】本発明の最後の実施形態における、データマネージャモジュールの計算ステップを詳細に示す。
【図１５】本発明の最後の実施形態における、データマネージャモジュールの計算ステップ中にデータを再編成するために必要な演算を示す。
【図１６】本発明の最後の実施形態における、データマネージャモジュールのダンプステップを詳細に示す。
【図１７】基数３のバタフライの計算を示す。
【発明を実施するための形態】
【００６３】
本発明においてＤＦＴコアとして説明される装置は、ディジタル集積回路上において、サイズＮ＝２p×３q×５rの複素数値のセットに対するＤＦＴの計算を必要とする、任意のシステムで使用することができる。ここで、ｐ、ｑ、ｒは、変換ごとに変化する可能性がある整数である。この装置はＧＰＦＡアルゴリズムのハードウェア実施を実現する。その文脈において、この装置を互いに素な数の積に因数分解することができる任意の合成サイズに容易に拡張することができる。ここで、これらの数のうちのいくつか又はすべては、所与の基数の累乗として表すことができる。ＤＦＴコアは、ユーザクロックとして示される同一のクロック周波数で機能するデータ元とデータ宛先との間で動作するものと仮定される。ＤＦＴコアの以降の説明は、図１に示される３つの主要独立部分から成る。これらの主要独立部分は、データマネージャモジュール１．１、ＤＦＴエンジンモジュール１．２、及びマルチ基数バタフライモジュール１．３である。ＤＦＴコアのこれら３つの部分は、協働するように設計されていることに加えて独立している。すなわち、それらを異なるフレームワークで実施することができる。データマネージャ１．１は、ユーザシステムとのインターフェースである。これは、データマネージャ１．１が、データ元からデータ値を受信し、結果値をデータ宛先へ送信することを意味する。ＤＦＴエンジンモジュール１．２は、基本ＤＦＴステージをシーケンスし、データマネージャモジュール１．１がマルチ基数バタフライモジュール１．３にデータ値を適切に供給して結果値を保存できるようにする。ＤＦＴエンジンモジュール１．２は、マルチ基数バタフライモジュール１．３の制御も行う。
【００６４】
単一のマルチ基数バタフライモジュールを使用して種々のサイズのすべてのバタフライを計算することは、少ない資源を使用して種々のサイズのＤＦＴを計算すると共にインプレースであることを可能にする柔軟な設計の問題に対処するための重要なポイントである。ＧＰＦＡのソフトウェア実施では、基数計算の異なるステップに異なる関数を使用するのに対して、本発明は、ＤＦＴを計算するいくつかの異なる基数モジュールに依拠せず、単一の再コンフィギュレーション可能なユニットに依拠する。
【００６５】
第１のステップにおいて、マルチ基数バタフライモジュール１．３は、ｒ次の複素行列と複素データ値の列ベクトルとの積を計算する。ここで、ｒは現在の基数である。第２のステップにおいて、マルチ基数バタフライモジュール１．３は、第１のステップの計算結果から得られる列ベクトルのすべての要素に対して回転を適用する。複素行列は、ｒ次のＤＦＴ行列に対応する。追加の回転は、ひねり因子の回転を適用するために使用される。サイズｒのＤＦＴの複素行列公式は、以下の式に示される。
【００６６】
【数１４】
2010016832.tif 000017
【００６７】
ここで、ｉは複素数の虚数単位（ｉ2＝−１）である。
【００６８】
実際には、マルチ基数バタフライモジュール１．３は、カルテシアン表現に従って実数値にのみ作用する。２つの複素数の乗算は、２次の行列と列ベクトルとの積として見ることができる。マルチ基数バタフライモジュール１．３は、２次の実行列とｒ個の列ベクトルとのｒ個の積を作成する前に、２ｒ次の実行列と１つの列ベクトルとの積を実行する。図２Ａは、ｒ＝５のバタフライ行列によって計算される実数積を示している。以下の式は、ｂk,l及びｔk,lの値を示している。
【００６９】
【数１５】
2010016832.tif 000018
【００７０】
第１の最適化は、行列Ｔ及びＢの特性を利用することによって、資源、すなわちエネルギーを消費する乗算の個数を削減することに本質がある。係数ｂ2k,0、ｂ2k+1,1、ｂ0,2l、及びｂ1,2l+1は１に等しく、係数ｂ2k,1、ｂ2k+1,0、ｂ1,2l、及びｂ0,2l+1はヌル（null）である。同様に、係数ｔ0,0値及びｔ1,1値は１に等しく、係数ｔ1,0値及びｔ0,1値はヌルである。これらの係数に乗算は必要とされない。図２Ｂは、簡単化した後のバタフライ行列によって計算される積を示している。
【００７１】
図１７は、基数３のバタフライの説明図である。この図は、３つのエントリーａ、ｂ、及びｃを示している。また、この図は、ひねり因子及び回転を求めるために適用される角度も示している。この図で分かるように、第１の値ａは角度０による影響を常に受ける。角度０は、この第１の値ａが各出力の計算において値１と常に乗算されることを意味する。また、第１の出力Ａの計算では、すべての値が角度０による影響を受けること、及び、０乗されている回転項ＷN0が常に１に等しく、これは第１の出力の計算に乗算が必要とされないことを意味することにも留意することができる。この注意点は、すべての基数について正しいことが証明される。
【００７２】
実施のための残る解決法は、基本計算ユニットによって行列の各行を独立且つ並列に取り扱うことである。通常、１つの基本ユニットは、複素数の各実部に１つずつの合計２つのＭＡＣユニットを備える。以下では、実行列について考える。上記で解説したように加算器のみを必要とする最初の２つの行を除いて、ＭＡＣユニットは、行列Ｂ又はＴの１つの行の各要素をデータ値の列ベクトルの各要素と乗算し、中間結果を累積して最終的な列ベクトルを得るために使用される。基数５をサポートしなければならないので、８個のＭＡＣユニットが実施される。ただし、より大きい基数が必要とされる場合には、より多くのユニットを実施することができる。さらに、この実施では、それよりも小さい基数のバタフライを計算するときには、ＭＡＣユニットを非アクティブ化することができる。したがって、エネルギーが節約される。図３は、マルチ基数バタフライモジュール１．３の第１の実施形態における加算器及びＭＡＣユニットのレイアウトを表している。ＭＡＣユニットの一例は図４に示されている。入力Ｘ及びＹは、乗算器４．６の前の２つのバッファ４．１及び４．２に接続されている。乗算器４．６の出力は、バッファ４．３に接続されている。バッファ４．３は、加算器４．７に接続されている。この加算器は、マルチプレクサ４．５の出力も取り込み、自身の出力をバッファ４．４に入れる。バッファ４．４は、マルチプレクサ４．５の一方の入力に戻って接続され、累算が実現される。累算器は、マルチプレクサの入力Ｃを使用して、Ｃにおいてヌル入力を選択することによってリセットすることができる。バッファ４．４の出力が、ＭＡＣユニットの出力となる。図５Ａは、中間結果Ｘ、Ｘ’、及びＸ”を提供するデータベクトルＤ、Ｄ’、及びＤ”に対する、ＭＡＣユニット３．２の内部における３つの連続した基数３のバタフライ処理のタイミングシーケンスを示している。行列Ｂの第４行の要素及び列ベクトルの要素は、１つずつ乗算されて累算器に加えられる。累算器は、新たな各バタフライ計算の前に事前にリセットされてヌル値にされている。ｐi値は、ｄi値とｂ3,i値との積の結果である。また、ｓi値は、ｊ≦ｉであるｐj値の累算の結果である。中間結果ｘ3が、最後の値ｓiである。
【００７３】
マルチ基数バタフライモジュール１．３の最適化バージョンは、ＭＡＣユニットの２つのステージ（バタフライ及び回転）を単一のステージに融合する。基数行列Ｂの１つの行の最初の２つの要素は、偶数行では常に（１，０）であり、奇数行では常に（０，１）である。そのため、偶数行に取り付けられたＭＡＣユニットには、列ベクトルの第１の値をプリロードすることができ、奇数行に取り付けられたＭＡＣユニットには、第２の値をプリロードすることができる。図５Ｂに示すように、各バタフライ計算間においてＭＡＣユニットの処理時間を解放することができる。図５Ｃに示すように、これらの時間は回転処理を挿入するために使用される。２つ一組の数値を再挿入するために、２つのステージ間のシリアル化が依然として必要であり、これは２つのＭＡＣユニットを連結することを必要とする。図５では、行列Ｂの第３行に取り付けられたＭＡＣユニットによって提供される中間結果ｘ2が必要であり、この中間結果ｘ2は中間結果ｘ3で共に挿入される。ｙi値は、ｘi値とｔ3,i値との積の結果である。また、ｙiは、ｊ≦ｉであるｘjの累算の結果である。最終的な結果ｒ3は、ｙi値の合計である。
【００７４】
ＭＡＣユニットの減算を行う能力に依存する第２の最適化は、係数値ｂk,l及びｔk,l（異なるパリティのｋ及びｌ）が負の極性をもっているときに、加算を減算に置き換えることである。したがって、値の符号を反転する必要はもはやなくなり、演算のタイプを示すフラグのみが必要となる。この最適化は、基数バタフライに対してπの回転を行わなければならない場合である対向角を考慮するとき、ＤＦＴが逆ＤＦＴ（ＩＤＦＴ）としてコンフィギュレーションされるとき、又は、角度が区間［π；２π］に属するべきである（ｓｉｎ（−α）＝−ｓｉｎ（α））ときに非常に役立つ。
【００７５】
マルチ基数バタフライモジュール１．３のこの実施形態は、データ値の種々の表現に適合しており、固定小数点又は浮動小数点を使用することができる。固定小数点を使用する場合、ＭＡＣユニットの内部の余分なビットを、累算器を飽和させないようにするために使用することができる。この実施形態は、入力データ値をより多くのビットに拡張すること、及びデータを表すのに使用されるビットの数を制御するスケーリングモジュールが存在することを必要とする。上位ビットが除去されるとき、スケーリングは飽和の制御によって有利に達成される。下位ビットを除去するとき、スケーリングは最も近い値に丸め込むことで有利に達成される。スケーリングを行うときの問題は、動的性と精度との間に最適なトレードオフを適用することである。有利には、このスケーリングモジュールは動的であり、計算されているＤＦＴのサイズに適合することができる。たとえば、これはマルチ基数バタフライの出力における結果をサイズ変更できる２つのスケーリングモジュールを使用して実現することができる。第１のスケーリングモジュールは、ＭＡＣユニットの内部の結果を再挿入して回転を適用するために、ＭＡＣユニットの出力をサイズ変更する。余分なビットが使用されるので飽和管理は必要とされない。第２のスケーリングモジュールは、誤った値を出力しないように飽和を管理しなければならず、好ましくは、出力値のダイナミクス範囲と精度との間を調整するためにサイズ変更ウィンドウを動的に制御する能力を有する。
【００７６】
最後に、マルチ基数バタフライモジュール１．３は、その最後の実施形態において、ひねり因子がヌルの場合に出力利得を調整する能力を伴う。この能力は、最後のステージ中に回転が必要とされないＤＦＴでは非常に役立つものとなる。したがって、ＤＦＴの全体的な利得を、計算のまさに最後で調整することができる。この新しい機能は、もはや行列Ｔを使用するのではなく対角行列Ｇを使用すると共に、加算器（たとえば３．１）の入力を使用されていないＭＡＣユニットへ逸らすことによって行われる。ここで、対角行列Ｇは係数ｇk;lが所望の利得調整に等しい行列であり、加算器（たとえば３．１）の入力を使用されていないＭＡＣユニットへ逸らすことは、マルチ基数バタフライモジュール１．３のサイズが最大基数ｒに合わせられており、最後のステージがｒよりも小さい基数ｒ’を使用する場合に行われる。図６は、マルチ基数バタフライモジュール１．３の実施態様の一例をその最適化バージョンで提示している。入力データｄiは、複素データベクトルの実部及び虚部を交互にして挿入される。係数ｂk,l、ｔk,l、及びｇk,lも挿入される。マルチプレクサ６．３ａ、６．３ｂ、及び６．４は、乗算が必要とされるので、利得を調整するために、Ｂ行列の最初の２つの行の計算を加算器から最後のＭＡＣユニットへ逸らすのに使用される。この実施態様では、実部ｒ2i及び虚部ｒ2i+1は、加算器モジュール６．１及びＭＡＣユニット（たとえば６．２）の対の出力においてシーケンシャルに現れるが、同時に現れるようにすることもできる。加算器の対は、行列Ｂの最初の２つの行の実部及び虚部を個別に加算し、それら２つの結果をシリアル化してスケーリングし、ＭＡＣユニットの対のレイテンシと適合するようにそれら２つの結果を遅延させる。ＭＡＣユニットの対は残りの計算を行う。シリアラル化モジュール６．５は、加算器及びＭＡＣユニットからの結果をシリアル化し、結果ｒiの複素数値の実部及び虚部を交互に出力する。ただし、別の実施態様では、１／２の低い周波数で複素数値の実部及び虚部を同時に出力することもできる。図７は、２つ一組のＭＡＣユニットの内部のスケーリングモジュールの実施態様の一例を示している。マルチプレクサ７．４、７．５、７．６、及び７．７は、バタフライ計算のフェーズ及び回転計算のフェーズを交互に行うために使用される。モジュール７．１は、マルチプレクサ７．２及び７．３を介してＭＡＣユニットの累算器に入力データを挿入するために、入力データを遅延させる。マルチプレクサ７．２及び７．３は、累算器をヌル値でリセットすることもできる。結果がＭＡＣユニットの出力に最初に現れる時、それらの結果はバッファリングされて、モジュール７．８内にスケーリングされる。回転計算用の回転のウィンドウが現れると、２つの値はシーケンシャルに出力され、ひねり因子又は利得係数のいずれかと共にＭＡＣ内部に再入力される。この実施態様では、結果がＭＡＣユニットの出力に２度目に現れるとき、それらの結果は、単一のスケーリングモジュール７．１１内にシーケンシャルに入力される前に、ブロッカ７．９及び７．１０の内部にバッファリングされる。資源を使用していたであろう第２のスケーリングモジュールは省かれる���スケーリングモジュール７．１１は、１／２の低い周波数で動作することもできる。
【００７７】
このマルチ基数バタフライを、実際の所望の計算に従う種々のアーキテクチャ設計に使用することができることに留意すべきである。このマルチ基数バタフライは、説明したＤＦＴ計算設計に特に適しているが、このＤＦＴ計算設計に限定されるものではない。
【００７８】
ＤＦＴエンジンモジュール１．２は、ＤＦＴコアモジュールの第２の主要要素であり、別の節で説明されるデータマネージャモジュール１．１とマルチ基数バタフライモジュール１．３との間に配置される。その役割は、他の２つの主要要素の設定、実行、及び調整を行うことである。このモジュールは、ＤＦＴをそのサイズに従って基本バタフライのシーケンスで表現する表現手段を備える。また、このモジュールは、ネストされたループのシーケンスの形でＤＦＴをスケジューリングすると共に、データマネージャにおける関連のある入力データアドレス及び出力データアドレスをバタフライごとに生成するスケジューリング手段も備える。さらに、このモジュールは、ＤＦＴのサイズに従ってネストされたループのシーケンスをカスタマイズするカスタマイズ手段も備える。
【００７９】
ＤＦＴコアに挿入されたＤＦＴエンジンモジュールの詳細な図は、図８に示されている。このＤＦＴエンジンモジュールは、６つの下位要素から構成される。基数選択モジュール８．１は、ＤＦＴステージをシーケンスする。グローバル設定モジュール８．２は、ＤＦＴエンジンの他のすべての下位要素を設定する。アドレス生成モジュール８．３は、下位要素の基数行列モジュール８．４及びひねり行列モジュール８．５を用いてデータマネージャモジュール１．１及びマルチ基数バタフライモジュール１．３を駆動することによって、ＤＦＴステージを構成する基本バタフライを実行する。これら２つの最後の下位要素は、インデックスをマルチ基数バタフライによって使用可能な係数に変換する。マルチ基数バタフライモジュール１．３の実施態様に応じて、スケーリングテーブルモジュール８．６はオプションとすることができる。固定小数点表現では、スケーリングテーブルモジュール８．６は、マルチ基数バタフライの内部の中間結果のスケーリングを設定する。本明細書で説明するＤＦＴエンジンでは、データマネージャモジュール１．１は、１つの読み出しポート及び１つの書き込みポートを有する単一のメモリであると見なすことができる。
【００８０】
ＤＦＴエンジンは、データマネージャモジュールが入力データのセット全体を収容すると始動する。データマネージャはバッファとして動作するので、ＤＦＴエンジンは自身の独立したクロックで動作する。基数選択モジュール８．１は、ＤＦＴのサイズ（入力としてセットアップすることもできるし、格納期間中にカウンタを使用して計算することもできる）を知ると、ＤＦＴステージへの分解に対応する基数２、３、５（及び、いくつかの実施形態では最終的に４）のシーケンスを準備し、第１の基数をグローバル設定モジュール８．２へ送信する。グローバル設定モジュール８．２は、他のすべてのモジュールを設定する。アドレス生成モジュール８．２は、一旦設定されると始動し、他のすべてのモジュールを自動的に駆動する。アドレス生成モジュール８．２は、アドレスを使用することによって、データマネージャモジュール１．１がマルチ基数バタフライにデータを適切な順序で供給すると共に中間結果を正しい位置に保存することを可能にする。基数行列モジュール８．４及びひねり行列モジュール８．５は、インデックスを使用してバタフライの計算に必要とされる係数を生成する。アドレス生成モジュール８．３がその最後のバタフライに達すると、基数選択モジュール８．４は、最後の基数となるまで（アドレス生成モジュール８．３を再び始動させて）次の基数を選択する。基数選択モジュール８．４が終了すると、データマネージャモジュール１．１は、ＤＦＴの最終結果を正しい順序で収容することになる。
【００８１】
ＧＰＦＡアルゴリズムは、サイズＮのＤＦＴを計算するとき、ルリタニアマップに従って、ＤＦＴ
【００８２】
【数１６】
2010016832.tif 000019
【００８３】
を連続して処理する。ここで、Ｎ＝Ｎ2×Ｎ3×Ｎ5＝２p×３q×５rである。再インデックス行列Ｒ及びＲ-1は、各機能の内部に取り込まれている。このシーケンスは、第１のループを規定し、サイズＮ2×（Ｎ3Ｎ5）、Ｎ3×（Ｎ2Ｎ5）、及びＮ5×（Ｎ2Ｎ3）の２次元ＤＦＴの計算をイニシエートする。第２のループで、サイズＮ2×（Ｎ3Ｎ5）、Ｎ3×（Ｎ2Ｎ5）、及びＮ5×（Ｎ2Ｎ3）の２次元ＤＦＴは、ｐ個の基数２のステージ、ｑ個の基数３のステージ、及びｒ個の基数５のステージにそれぞれ分解される。各基数は、ＧＰＦＡアルゴリズムに従って、タイプ１又はタイプ２のいずれかとすることができる。
【００８４】
基数選択モジュール８．１は、これら２つのループを担当する。ここで説明する実施形態では、各基数のサイズ及びタイプに対応する複数のカウンタが、基数の個数を保持する。これらのカウンタは、基数ステージへのＤＦＴ分解によって初期化される（基数２  タイプ１、基数２  タイプ２、基数５  タイプ１、基数５  タイプ２、基数３  タイプ１、及び基数３  タイプ２）。代替的な一実施形態では、タイプ１及び２の基数４のステージが分解に入る。これらの分解は、計算することもできるし、表に記憶することもできる（取り扱われるＤＦＴの個数が、記憶されている分解の個数に制限される）。新しい基数ステージを開始すると、対応するカウンタがデクリメントされる。ＧＦＰＡアルゴリズムに従って基数のサイズ及びタイプをシーケンスするために、カウンタ間に優先順位が設定される。たとえば、基数２のステージに関連付けられるカウンタは、基数５のステージに関連付けられるカウンタよりも高い優先順位を有し、基数５のステージに関連付けられるカウンタは、基数３のステージに関連付けられるカウンタよりも高い優先順位を有する。代替的な一実施形態では、たとえば、基数４及び基数２のシーケンスは、回文を形成しなければならない。
【００８５】
最後に、基数選択モジュール８．１は、グローバル設定モジュール８．２を駆動する。基数選択モジュール８．１は、選択された基数をサイズ及びタイプと共に出力し、
【００８６】
【数１７】
2010016832.tif 000020
【００８７】
の計算内部の進行度を出力する。この進行度は、同じ素因数のステージ内部のステージ番号（stage number）によって定義される。同じ素因数のステージの個数は、素因数の累乗に対応する。基数のサイズと素因数との間の区別は、基数２及び基数４をシーケンスするのに必要である。代替的な一実施形態では、基数４を選択すると、ステージ番号が２だけインクリメントされる。
【００８８】
グローバル設定モジュール８．２は、ＤＦＴエンジンモジュール１．２の他のサブモジュールへの有用なグローバルパラメータを生成するために使用される。
【００８９】
アドレス生成器モジュール８．３は、６つの瓦状のループ（imbricate loop）から成る。グローバル設定モジュール８．２は、ループの最大繰り返し数及びアドレス計算のインクリメント値を生成する。以下の表は、基数２、３、５の外側から内側へのループをリストしている。Ｎo及びＮiは、サイズＮo×Ｎi＝Ｎとなるようになっている。ここで、ＮはＤＦＴのサイズであり、Ｎiは現在の基数の累乗である。これら２つの値は、計算することもできるし、記憶することもできる。値radix、stage、及びpowerは、基数選択モジュール８．１から得られたものである。
【００９０】
【表２】
2010016832.tif 000021
【００９１】
すべてのひねり因子は単一の角度の倍数であるので、グローバル設定モジュール８．２は、ひねり因子を生成するための開始角も計算する。この開始角は、ＤＦＴサイズ及びステージ番号に依存する。開始角は２つの因子の積である。第１の因子はステージ番号及び基数サイズにのみ依存し、その値は２π／prime_factorstage-1（１≦stage≦power）である。ここで説明する実施形態では、角度を記憶するためにインデックス付きの表が使用される（ひねり行列モジュール８．５を参照）。この表は、２ｉπ／prime_factormax_power（０≦ｉ≦prime_factormax_power−１）の値を含む。ここで、max_powerは、取り扱われるＤＦＴの中の累乗の最大値である。それ故、インデックスprime_factormax_powerは角度２πに対応する。演算時には、スケーリングが適用されて、インデックスprime_factorpowerが角度２πに確実に対応するようにされる。したがって、第１の因子の値は、prime_factorstage-1+max_power-power（１≦stage≦power）になる。第２の因子は、商Ｎo＝Ｎ／prime_factorpowerである。prime_factorpowerは角度２πに対応するので、値（Ｎo mod prime_factorpower）のみが使用される。これによって、角度を区間［０，２π］に維持することが可能になる。
【００９２】
ＧＰＦＡアルゴリズムでは、マルチ基数バタフライの説明で導入されたバタフライ行列Ｂに対して回転を適用しなければならない。回転を適用することによって、行列は顕著に変更される。回転バタフライ行列は、列の転置若しくは置換又はその双方によって基準の行列から導き出すことができる。有利には、これらの転置及び置換は、参照表のアドレス指定を適合させることによって得られる。必要とされる演算は、値（（Ｎo modulo Ｎi） modulo Radix）に依存する。ここで、Ｎiは現在の基数の累乗であり、積Ｎo×ＮiはＤＦＴのサイズである。基数２について可能な値は１つあり、基数３について可能な値は２つあり、基数４について可能な値は２つあり、基数５について可能な値は４つある。各可能な値は異なる行列に対応する。以下の表は、可能な値と演算との間の関係を示している。グローバル設定モジュール８．２は、転置行列の場合にマルチ基数バタフライのサイン値を反転するためのフラグ、及び基数行列モジュール８．４用の列を置換するためのフラグを生成する。
【００９３】
【表３】
2010016832.tif 000022
【００９４】
基数行列モジュール８．４は、マルチ基数バタフライモジュール１．３に対して、マルチ基数バタフライの説明で導入されたバタフライ行列Ｂの係数を提供する。ここで説明する実施形態では、マルチ基数バタフライは、係数が列ごとに生成される必要がある。したがって、基数行列モジュールは入力として、現在の基数、出力する列番号（column number）、及び列を置換するためのフラグを取り込む。係数ｂk,lは、計算することもできるし、表に記憶することもできる。表に記憶する場合、列全体が記憶され、インデックスは現在の基数及び要求される列インデックスによって形成される。マルチ基数バタフライは実数に作用するので、基数行列モジュール８．４は、複素係数の実部及び虚部を交互にして実数の列を形成しなければならない。基数行列モジュール８．４は、複素行列の列を生成するように要求されると、最初に列のすべての複素係数について符号を有するサイン値の対（コサイン，サイン）を生成し、次に反対の符号を有する対（サイン，コサイン）を生成する。この符号は、サイン値に対して加算又は減算のいずれを行わなければならないのかをマルチ基数バタフライモジュール１．３に伝える。
【００９５】
ひねり行列モジュール８．５は、マルチ基数バタフライモジュ１．３に対して、マルチ基数バタフライの説明で導入された行列Ｔの係数を提供する。ひねり行列モジュール８．５は入力として、現在の基数及びバタフライの第２の要素の回転の角度を取り込む。出力は、係数の列及び符号の列である。バタフライの第２の要素を回転するために求められたひねり因子αが与えられると、ひねり行列モジュール８．５は、バタフライのすべての要素を回転するのに必要なひねり因子０、α、２α、…のシーケンスを生成する。ここで説明する実施形態では、マルチ基数バタフライは列ごとに係数を必要とし、実数を扱う。ひねり行列モジュール８．５は、ひねり因子を生成するように要求されると、最初に列のすべての複素係数について符号を有するサイン値の対（コサイン，サイン）を生成し、次に反対の符号を有する対（サイン，コサイン）を生成する。この符号は、サイン値に対して加算又は減算のいずれを行わなければならないのかをマルチ基数バタフライモジュール１．３に伝える。
【００９６】
コサイン値及びサイン値は、計算することもできるし、表に記憶することもできる。表に記憶する場合、すべての値を記憶するためには、素因数ごとに単一の表で十分である。各表のサイズは、取り扱われるＤＦＴの中での素因数に付随する最大累乗に依存する。角度２ｉπ／prime_factormax_power（０≦ｉ≦prime_factormax_power−１）のコサイン値及びサイン値を含む表の粒度は、２π／prime_factormax_powerになる。表のサイズを削減する第１の最適化は、サイン関数の特性を使用することである。角度ｉ及びprime_factormax_power−ｉ（０≦ｉ≦prime_factormax_power）はモジュロπで等しく、等しいコサイン値及び反転したサイン値を有する。πよりも小さい角度のみが必要であり、表のサイズは、素因数２、３、５についてそれぞれ
【００９７】
【数１８】
2010016832.tif 000023
【００９８】
となる。要求される角度αが
【００９９】
【数１９】
2010016832.tif 000024
【０１００】
よりも大きい場合、新しく考えられる角度は
【０１０１】
【数２０】
2010016832.tif 000025
【０１０２】
であり、フェッチされたサインの符号は反転される。
【０１０３】
アドレス生成モジュール８．３は、３つの主要部分に分解することができる。第１の部分はループの管理に専用化され、第２の部分はデータマネージャモジュール１．１のアドレスを生成するのに使用される累算器に専用化され、第３の部分はコマンドに専用化されている。
【０１０４】
ＧＰＦＡアルゴリズムでは、バタフライの入力及び出力を求めるために、ループが使用される。ここで説明する実施形態では、アドレス生成モジュール８．３は、６つのカスケードされたループを使用する。これらのループは、グローバル設定モジュール８．２によって初期設定される。第１のループTRANSVERSE（最も外側のループ）は、２次元ＤＦＴを多数の１次元ＤＦＴに分解する。第２のループDIVISIONは、クーリー−テューキーアルゴリズムの分割統治手法に対応する分割の回数をカウントする。タイプ２の基数の場合、第３のループSUBDIVISIONが使用される。第４のループBUTTERFLYは、インターリーブされたバタフライをシーケンスする。タイプ２の基数の場合、第５のループSUB-BUTTERFLYが、タイプ１の基本バタフライをシーケンスする。最後に、第６のループI/O（最も内側のループ）は、バタフライの入力及び出力をシーケンスする。ここで説明する実施形態では、ループは繰り返し回数を記憶するカウンタを使用して実施される。図９にモジュール９Ａ．１によって表された最大繰り返し回数でループが設定されると、最も内側のループ９Ａ．２のカウンタがカウントを開始する。このカウンタは、最後の繰り返しに達するか又は終了すると、外側のループ９Ａ．３のカウンタをインクリメントすると共に自身をリセットする。９Ａ．４のような他のすべてのカウンタも、自身の内側のループ９Ａ．２及び９Ａ．３が最後の繰り返しに達するという条件の下で、自身の外側のループのカウンタに対して同じことを行う。アドレス生成モジュール８．５は、すべてのカウンタが最後の繰り返しに達したときに終了する。
【０１０５】
データマネージャモジュール１．１への宛先のアドレスは、各ループの繰り返し回数の線形結合である。この線形結合の係数は、グローバル設定モジュール８．２によって最初に初期化されたインクリメント値又はＪＴＮ値である。ここで説明する実施形態では、複雑度を削減するために乗算は行われず、データアドレスの計算は各ループの中間累算器を使用する。ループのカウンタがリセットされるとき、そのループに取り付けられた累算器は、カウンタがリセットされていない最も外側のループに取り付けられた累算器で自身の値を更新する。ループのカウンタがインクリメントされるとき、ループに付随したＪＴＮ値が対応する累算器に加算される。図９Ｂは、最も内側のループI/Oに取り付けられた累算器９Ｂ．７を示している。内側のカウンタ９Ａ．２〜９Ａ．６の終了条件に応じて、マルチプレクサ９Ｂ．２〜９Ｂ．６は、最も外側の９Ｂ．１２を優先して内側の累算器９Ｂ．８〜９Ｂ．１２の値のうちの１つで累算器を再初期化するか、又はマルチプレクサ９Ｂ．１の値を使用する。このマルチプレクサは、ＪＴＮ値の加算の許可／不許可を行い、第１の内側ループの終了条件によって駆動される。最も内側のループの場合、このマルチプレクサ９Ｂ．１は、JTN_INPUT値を使用するためにバイパスされる。同じ方式は、マルチプレクサの個数が少ない内側の累算器にも使用される。
【０１０６】
モジュロＮの最も内側の累算器９Ｂ．１３は、データマネージャモジュール１．１への宛先の読み出しアドレスである。書き込みアドレスは、２つの方法で生成することができる。第１の方法は、２つの最も内側のループに２つの追加の累算器を使用する。これら２つの累算器は、読み出しアドレスと同じであるが、ＪＴＮ値の順序が並べ替えられている読み出しアドレスである。第２の方法は、行及び列の個数が基数のサイズに等しい２次元アレイを使用する。生成された読み出しアドレスは、行ごとにアレイに書き込まれる。一旦満杯になると、アレイを列ごとに読み出すことによって、書き込まれたアドレスが得られる。カウンタCNT_IOは、列番号を待っている基数行列モジュール８．４を直接駆動するために使用することができる。計算は基数計算で開始するので、このアドレス信号に対する遅延は必要とされない。ひねり因子生成に適用される角度は、グローバル設定モジュール８．２によって生成された基準角とCNT_BUTTERFLYとの積として与えられる。その後、結果の角度は０と２πとの間に適合するように補正され、ひねり行列モジュール８．５へ送信される。各コマンドは、マルチ基数バタフライへの宛先のデータ及び係数が一致して生じるように送信されなければならない。
【０１０７】
この第１の実施形態では、サイズＮ＝Ｎ2×Ｎ3×Ｎ5＝２p×３q×５rのすべてのＤＦＴが利用可能である。基数４は、基数２のステージの個数及び計算時間を同時に削減するために使用することができる。それでもなお、いくつかのＤＦＴは、ジョンソン及びビュルスによって示されたように、それらのＤＦＴが回文として分解されることによって計算が不可能になる。Ｎ＝Ｎ128・Ｎ3がＤＦＴのサイズであると仮定する。Ｎ128＝（４×２×４×４）は、正しく分解することができない。Ｎ128＝（４×８×４）を作成するには、基数８が必要になる。
【０１０８】
マルチ基数バタフライモジュール１．３のアーキテクチャを考えると、基数８のバタフライの計算は、１６個のＭＡＣユニットを必要とする。ＤＦＴ複雑度を低く維持するために、基数８のバタフライは、基数２のバタフライの第１のステージ及び基数４のバタフライの第２のステージをシーケンスすることによって行うことができる。したがって、追加のＭＡＣユニットは必要ない。ジェントルマン−サンデアルゴリズムの第１の部分を使用すると、基数８の行列を積：
【０１０９】
【数２１】
2010016832.tif 000026
【０１１０】
に容易に分解することができる。
【０１１１】
この基数８は、ＤＦＴのサイズに応じて、１、３、５、又は７だけ引き上げる必要がある。ＤＦＴの回転に使用される補助定理によって、
【０１１２】
【数２２】
2010016832.tif 000027
【０１１３】
が与えられる。ここにはひねり因子の適用がないので、この基数８モジュールは依然として不完全である。
【０１１４】
【数２３】
2010016832.tif 000028
【０１１５】
であると仮定する。ひねり因子を有する完全な基数８のモジュールは
【０１１６】
【数２４】
2010016832.tif 000029
【０１１７】
となる。最後に、次数Ｎ＝ｐｑの対角行列Ｄ'pq,tを
【０１１８】
【数２５】
2010016832.tif 000030
【０１１９】
によって定義する。前の式は
【０１２０】
【数２６】
2010016832.tif 000031
【０１２１】
となる。
【０１２２】
この式の主な関心は、基数２のバタフライの結果及び基数４のバタフライの結果の双方の第１の要素に適用されるひねり因子が常に１であるということである。その結果、基数４の乗算のいくつかが基数２の計算内で行われる。したがって、第１の要素の計算は乗算器を必要とせず、加算器のみを必要とする。これによって、２つ一組の加算器をマルチ基数バタフライモジュール１．３の内部に維持することが可能になる。最後に、第１のステージは、特定のひねり因子を有する通常の基数２のステージであり、第２のステージは、インターリーブされた出力を有する通常の基数４のステージである。主要な変更は必要とされない。
【０１２３】
回文を形成するために、基数選択モジュール８．１は、最初にタイプ１の基数４のステージ、オプションのタイプ１の基数２又は基数８のステージ、及び最後にタイプ２の基数４のステージをシーケンスするように更新される。基数８のステージは、基数の２のステージ及び基数４のステージで構成され、それらのステージを標準のステージと区別するフラグが作成される。さらに、累乗値が素因数２pに付随するので、基数４についてステージカウンタを２だけ増加しなければならない。グローバル設定モジュール８．２においては、基数が４である場合、アドレス生成モジュール８．３のループの設定は、すべての値stage-1をstage-2に置き換えることによって得られる。基数８のバタフライの２つの部分は、タイプ２の基数バタフライと非常に類似しているので、ループ設定は容易に実施される。以下の表は、基数８に付随したループの設定を要約したものである。
【０１２４】
【表４】
2010016832.tif 000032
【０１２５】
基数行列モジュール８．４では、係数を記憶している場合には、基数４の行列の係数がこの表に挿入される。ひねり行列モジュール８．５では、生成されたひねり因子に角度オフセットを加算することが、基数８の内部の基数２のバタフライの計算に課せられる。このオフセットは、基数８の内部の基数２のランクに依存し、その値は
【０１２６】
【数２７】
2010016832.tif 000033
【０１２７】
である。
【０１２８】
データマネージャモジュール１．１は、データのロード及びダンプを含めて、データにアクセスするためのすべての演算をサポートする。また、データマネージャモジュール１．１は、ロード、ＤＦＴ計算、及びダンプをチェックする状態マシンも伴っている。図１０に示すこの状態マシンは、モジュールの機能を示している。図１１ａに示すそのまさに基本の機能では、データマネージャモジュール１．１は、サイズＮmax（Ｎmaxは取り扱われるＤＦＴの最大サイズであると仮定する）の１つのダブルポートメモリ（１つのポートは読み出し用であり、もう１つのポートは書き込み用）と、データ及びアドレスをルーティングするマルチプレクサとから成る。ロード演算は、入力サンプルをメモリの書き込みポートにリンクし、たとえばカウンタによってメモリを線形にアドレス指定することによって行われる。計算中、データはメモリの読み出しポートから取り出され、結果は書き込みポートを通して書き込まれる。この時、ＤＦＴエンジンからのアドレスが使用される。マルチ基数バタフライモジュール１．３のレイテンシは、特にバタフライの入力及び出力が異なるタイプ２の基数の期間中、読み出し／書き込みのオーバーラップに対する保護の働きをする。完了すると、最終結果は読み出しポートから線形にダンプされる。ロード及びダンプは線形演算であるので、新しいロードはダンプの開始直後に開始することができる。図１１ｂは、この処理のタイミングシーケンスを示している。
【０１２９】
レイテンシを削減し、さらには、一定フローの入力サンプルの計算を可能にするために、いくつかの独立した最適化を適用することができる。
【０１３０】
第１の最適化は、ユーザクロックから独立したＤＦＴコア駆動クロックを増加させることに本質がある。この第１の最適化は、レイテンシを大幅に削減することができる。
【０１３１】
第２の最適化は、ロード、計算、及びダンプの演算をパイプライン化するものであり、図１１Ａに示されている。このパイプラインは、第１のメモリと同一の第２のメモリを使用することによって作成される。一方のメモリのサンプルに対して計算を行っている間、他方のメモリはロード及びダンプに利用可能になる。２つの異なるメモリは、入力／出力演算のためのメモリ及びワーキングメモリとして交互に使用される。新たなＤＦＴのロードが現在のＤＦＴの計算よりも多くの時間を要するという条件下では、この最適化によってレイテンシが削減され、連続したＤＦＴをシーケンスすることが可能になる。先に述べた最適化と組み合わせることによって、より幅広いパネルのＤＦＴをシーケンスすることが可能になる。図１１Ｂ及び図１１Ｃは、第１の最適化を伴わない処理及び第１の最適化を伴った処理を示している。
【０１３２】
第３の最適化は、ＤＦＴ内部クロックを増加させることなく計算時間を削減するものである。これは、クロック周波数がターゲット装置の限界に達しているときに非常に役立つ。この解決法は、並列性を活用するものであり、実際のマルチ基数バタフライユニットから独立している。この解決法は、任意のバタフライ計算ユニットに使用することができる。また、この解決法は、たとえばマルチコアプロセッサ上でソフトウェアにおいて実施することもできる。計算中、サンプルの前半がマルチ基数バタフライモジュール１．３の内部で扱われる。一方、サンプルの後半はインスタンス化された新しいマルチ基数バタフライモジュール内で扱われる。この切り取りは、ルリタニアマップの偶数番号の行及び基数番号の行に従って行われる。ＤＦＴエンジンは変更されないが、この場合、現在の基数に付随したルリタニアマップの偶数行上にある（figuring）点に関連するアドレスのみを出力する。偶数行をアドレス指定するとき、次の行（奇数）のアドレスが導き出され、双方の行からの点を２つの独立した計算ユニットの内部で同時に扱うことができる。この切り取りの利点は、行に対して行われる厳密な同一の演算のために、行を容易に並列計算することができるということである。いくつかの解決法が存在するが、すべての解決法は、予測された基数に付随したルリタニアマップの偶数行及び奇数行上にある点が２つの別々のメモリ内に常に置かれるように点を分散させなければならない。これは、ルリタニアマップが異なるので、基数が変化するごとに、点を再分散することを暗に意味する。したがって、４つの分散が予測される。第１の分散はロードの場合であり、第２の分散は或る基数から同じ基数に変化する場合であり、第３の分散は或る基数から別の基数に変化する場合であり、最後の分散はダンプの場合である。
【０１３３】
以下で詳細に説明する解決法は、サイズＮmax／２の２つのメモリへのデータの分散及び記憶の問題を解決する。ここで、Ｎmaxは、取り扱われるＤＦＴの最大サイズである。基数を変更すると読み出しアドレス及び書き込みアドレスが異なるものになるので、さらに２つの同一のメモリが、読み出し／書き込みのオーバーラップを防止するために使用される。さらに、特定の基数シーケンス（４，３，５）が、実施の可能な最適化及び容易化のために使用される。図１２Ａ及び図１２Ｂは、全体的な解決法をその処理の時間シーケンスと共に示している。既存のアーキテクチャを最大限維持するために、抽象レイヤが４つのメモリをカプセル化する。これにより、ＤＦＴエンジンは、あたかもサイズＮmaxの単一のメモリが存在するかのようにメモリにアクセスする。このレイヤによって、データが存在すべきアドレスに対応する仮想アドレス及びデータが実際に記憶されるアドレスに対応する物理アドレスが導入される。このレイヤは、ルリタニアマップの圧縮に基づく自己構築型アドレス変換表と、データを再編成するためのロジックとから成る。
【０１３４】
圧縮によって、素因数に付随した２次元ルリタニアマップが、２行の新しいルリタニアマップに変換される。第１行は、オリジナルのルリタニアマップの偶数行からのすべての点を含む。第２行は、奇数行からのすべての点を含む。使用されるアルゴリズムは、次のとおりである。
ＮがＤＦＴのサイズであると仮定する。点は０からＮ−１まで１つずつ新しいアレイに挿入される。点は、挿入されるときに、列０から行に挿入される。点は、ルリタニアマップの偶数行に属する場合には第１行に挿入され、そうでない場合には第２行に挿入される。完了すると、循環回転が第２行に適用されて点Ｎiが点０の下に配置される。奇数の行数を含むルリタニアマップに対しては例外が設けられ、この例外は、Ｎo個の点が挿入されるごとに第２行にパディング点（padding point）を追加することに本質がある。しかしながら、基数３及び基数５に付随した圧縮されたルリタニアマップは、常に、それらの第１行には偶数点を含み、それらの第２行には奇数点を含む。
【０１３５】
この圧縮されたルリタニアマップは、２つのメモリの内部のデータの位置を表す。ＮがＤＦＴサイズであると仮定すると、抽象レイヤで使用されるアドレス変換表は、圧縮されたルリタニアマップの内部のデータ０からデータＮ−１の座標である行及び列を含む。常に同じである基数３及び基数５に付随した変換表を除いて、異なるルリタニアマップと同数の変換表が存在する（前のパラグラフ参照）。このことが、ＤＦＴを処理する前に基数４の変換表を構築しなければならない理由である。ＮがＤＦＴサイズであり、ＲrがサイズＮi行×Ｎo列のルリタニアマップであり、ＣＴTが変換表であると仮定する。ここで、Ｎiはｒの累乗であり、Ｎo＝Ｎ／Ｎiである。完全な変換表を再生成するために、ルリタニアマップにおいて１番目の点が配置される行Ｒ1、及び圧縮されたルリタニアマップにおいてＮi番目の点が配置される最終列ＦＣＮiのような事前に計算された値が必要である。累算器Ｒｘは、ルリタニアマップの内部でｘ番目の点が配置される行を含む。カウンタJumpが、パディング要素を加えるのに使用される。
【０１３６】
【数２８】
2010016832.tif 000034
【０１３７】
データロード中、データは、図１３に示すように、その後の基数４のバタフライ用にデータに容易にアクセスすることができるように、２つのメモリの内部に分散される。取り扱われるＤＦＴサイズの分解は、常に基数４のバタフライを暗に意味するので、基数４のバタフライが最初に計算され、データロードの最適化が可能になる（同じ引数が、常に基数３の後に来るダンプに使用される）。ロード及びアドレス変換表構築の双方は直線的（linearly）に行われるので、基数４アドレス変換表構築の開始直後にロードを開始することができる。
【０１３８】
バタフライの計算中、ＤＦＴエンジンからの読み出しアドレスを変換し、その結果を４つのメモリの読み出しアドレスポートに適用することによって、入力データが２つのメモリからフェッチされる。図１４Ａに示すように、マルチプレクサ１４．１及び１４．２が、データバス出力において使用され、データを含むメモリが選択される。マルチ基数バタフライモジュールの結果を、ＤＦＴエンジンからの書き込みアドレスで記憶するには、次の基数が現在の基数と異なる（基数２は基数４とみなされる）ときは読み出し／書き込みのオーバーラップを防止し、基数がシーケンスの最後のものであるときはロードデータ及びダンプデータが決して同じメモリ内にないように、メモリ対を変更することがまず必要になる。マルチプレクサ１４．３によって、これを行うことが可能になる。その場合、より多くの演算が場合に応じて適用される。第１の演算はデータに作用する。双方のマルチ基数バタフライからのデータは、図１４．４に従って８つの要素から成るセットによって独立に再編成される。シーケンス（ｄ（０），ｄ（１），ｄ（２），ｄ（３），ｄ（４），ｄ（５），ｄ（６），ｄ（７））は、（ｄ（０），ｄ（４），ｄ（１），ｄ（５），ｄ（２），ｄ（６），ｄ（３），ｄ（７））となる。これは、双方の信号を一致して保持するためにアドレスに適用されるレイテンシを暗に意味する。この演算は、現在の基数がタイプ２であるとき又は基数が４であるときに行わなければならず、基数８の計算に属する。第１のメモリに達するデータ又は第２のメモリに達するデータを交互にすることが必要である。第２の演算もデータに作用する。この時、双方のマルチ基数バタフライからのデータは、２つの要素から成るセットによってそれらのデータ間でスクランブルされる。シーケンス（ｄ（０），ｄ（１））が第１のバタフライから来たものであり、シーケンス（ｅ（０），ｅ（１））がそれと同時に第２のバタフライから来たものであると仮定すると、このスクランブルによって、図１４Ｂ（要素１４．５）によって示されるように、４つ１組がスクランブルされて、シーケンス（ｄ（０），ｅ（０））が第１のメモリへ、シーケンス（ｄ（１），ｅ（１））が第２のメモリへ、同時に出力される。これも、アドレスに渡されるレイテンシを暗に意味する。この演算は、図１４．６に示すＤＦＴエンジンからの２つの書き込みアドレスから成るセットに作用する第３の演算を伴っている。シーケンス（ａ（０），ａ（１））は、（ａ（０），ａ（０）＋Ｎi）となる。ここで、Ｎiは、サイズＮのＤＦＴの分解における現在の基数の累乗である。これら最後の２つの演算は、素因数４から別の素因数に変化するときに必要であり、２つのメモリの内部でデータを再分散する。最後の演算は変換されたアドレスに作用するが、第２のメモリに付随したアドレスにのみ作用する。Ｎo（＝Ｎ／Ｎi）番目の点が次の素因数に付随した圧縮されたルリタニアマップの内部に配置される列番号に対応するオフセットが、加算器１４．７によってアドレスに加算される。これは、０番目の点と同時に来る点がＮo番目の点であるので必要であり、素因数５がＮの分解に属するときに適用されなければならない。最後に、図１５に示される���は、これらの演算を適用しなければならない場合を要約している。
【０１３９】
結果のダンプの前に、基数シーケンス（４，５，３）のために、また３の累乗に付随した変換表の特定の形のために、偶数番目の点は第１のメモリの内部に線形に記憶され、奇数番目の点はＮ3番目の点からではあるが第２のメモリの内部に線形に記憶される。１番目の点の位置は、第２のメモリのアドレスを補正するために知られていなければならない。次に、点は、第１のメモリ又は第２のメモリのいずれかから交互に出力される。図１６は、データダンプのブロック図を表している。加算器１６．１は、第２のメモリのアドレスを補正するために使用される。マルチプレクサモジュール１６．２は、双方のメモリの出力を交互にするために使用される。
【図１】
2010016832.tif 000035
【図２Ａ】
2010016832.tif 000036
【図２Ｂ】
2010016832.tif 000037
【図３】
2010016832.tif 000038
【図４】
2010016832.tif 000039
【図５Ａ】
2010016832.tif 000040
【図５Ｂ】
2010016832.tif 000041
【図５Ｃ】
2010016832.tif 000042
【図６】
2010016832.tif 000043
【図７】
2010016832.tif 000044
【図８】
2010016832.tif 000045
【図９Ａ】
2010016832.tif 000046
【図９Ｂ】
2010016832.tif 000047
【図１０】
2010016832.tif 000048
【図１１Ａ】
2010016832.tif 000049
【図１１Ｂ】
2010016832.tif 000050
【図１１Ｃ】
2010016832.tif 000051
【図１２Ａ】
2010016832.tif 000052
【図１２Ｂ】
2010016832.tif 000053
【図１３】
2010016832.tif 000054
【図１４Ａ】
2010016832.tif 000055
【図１４Ｂ】
2010016832.tif 000056
【図１５】
2010016832.tif 000057
【図１６】
2010016832.tif 000058
【図１７】
2010016832.tif 000059
【外国語明細書】
2010016832.tif 000060
2010016832.tif 000061
2010016832.tif 000062
2010016832.tif 000063
2010016832.tif 000064
2010016832.tif 000065
2010016832.tif 000066
2010016832.tif 000067
2010016832.tif 000068
2010016832.tif 000069
2010016832.tif 000070
2010016832.tif 000071
2010016832.tif 000072
2010016832.tif 000073
2010016832.tif 000074
2010016832.tif 000075
2010016832.tif 000076
2010016832.tif 000077
2010016832.tif 000078
2010016832.tif 000079
2010016832.tif 000080
2010016832.tif 000081
2010016832.tif 000082
2010016832.tif 000083
2010016832.tif 000084
2010016832.tif 000085
2010016832.tif 000086
2010016832.tif 000087
2010016832.tif 000088
2010016832.tif 000089
2010016832.tif 000090
2010016832.tif 000091
2010016832.tif 000092
2010016832.tif 000093
2010016832.tif 000094
2010016832.tif 000095
2010016832.tif 000096
2010016832.tif 000097
2010016832.tif 000098
2010016832.tif 000099
2010016832.tif 000100
2010016832.tif 000101
2010016832.tif 000102
2010016832.tif 000103
2010016832.tif 000104
2010016832.tif 000105
2010016832.tif 000106
2010016832.tif 000107
2010016832.tif 000108
2010016832.tif 000109
2010016832.tif 000110
2010016832.tif 000111