DFT拡散OFDMは、次世代(beyond third generation)(B3G)セルラネットワーク向けに第3世代パートナーシッププログラム(3GPP)によって発行された長期的発展型(LTE)標準規格において、(端末から基地局への)アップリンク送信のためのものとして指定されている。DFT拡散OFDMでは、変調シンボルは、従来のOFDM変調に先立ってDFTによって拡散され、ピーク対平均比(PAPR)を低くすることによる利益を得る。LETの命名規則に従ってプリコーディング変換とも呼ばれるこの拡散の目的は、端末の電力消費を削減することである。3GPP−LTE標準規格では、DFT拡散OFDMは、周波数分割多元接続(FDMA)技法と組み合わせられて、いわゆる単一搬送波周波数分割多元接続(SC−FDMA)技法を形成する。SC−FDMAでは、各ユーザには、送信時間間隔(TTI)にわたって、20MHz帯域幅の1つのサブバンドから110個のサブバンドまで、12個の連続した副搬送波で構成される所与の個数の連続したサブバンドが割り当てられる。DFTのハードウェア複雑度を低減するために、DFTサイズのサブセットのみが指定され、より具体的には、12の倍数の43個の異なるサイズN(12から1944まで)が指定される。ここで、N=2p×3r×5sであり、p、q、及びsは整数である。
DFTは、ジョセフ・フーリエによるフーリエ級数の導入にちなんで命名されたフーリエ変換の1つの特定の形態である。その定義は、John G. Proakis及びDimitris G. Manolakis著「Digital Signal Processing, principles, algorithms, and applications」(New-York: Macmillan Publishing Company, 1992, ch. 9)に見つけることができる。DFTは、有限時間の関数(N個の値)に適用され、その結果は、N個の等間隔の離散周波数の集合におけるフーリエ変換の値を求めることによって計算される。N個の複素数のシーケンス{xk,0≦k≦N−1}は、公式:
に従うDFTによってN個の複素数のシーケンス{Xn,0≦n≦N−1}に変換される。ここで、eは自然対数の底であり、iは複素数の虚数単位(i2=−1)である。DFTの特性の多くは、通例、ひねり因子(twiddle factor)と呼ばれる係数
が、1の原始累乗根であるということに依存する。その基本形態では、N点DFTアルゴリズムの計算は、O(N2)の複素乗算を必要とする。ハードウェアでは、DFTは通常、演算回数がより少ない高速フーリエ変換(FFT)と通例呼ばれる専用の変換を使用して計算される。FFTアルゴリズムの大部分は、クーリー−テューキーアルゴリズムから導出された方法、素因数アルゴリズム(PFA)から導出された方法、多項式因数分解法、及び畳み込み法の4つに分類することができる。これらの方法は互いに排他的なものではない。すなわち、これらの方法のうちの1つを別の方法の中で使用して、全体的な複雑度を削減することができる。
クーリー−テューキーアルゴリズムは、DFT変換を計算するための基準アルゴリズムである。その記載を、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のDFTをサイズN/2の2つの変換に再帰的に分割することに本質がある(分割統治手法)。クーリー−テューキーアルゴリズムを導出する単純な手法は、偶数番号の周波数サンプル及び奇数番号の周波数サンプルの計算を分けることである。同じ原理が各ステップで適用されるので、結果のFFTアルゴリズムは、周波数間引き変換(DIF、サンデ−テューキーアルゴリズムとも呼ばれる)と呼ばれる。本質的に2の累乗のサイズ(N=2n)に制限されるこの形態は、基数2のDIFクーリー−テューキーFFTアルゴリズムとして知られている。また、再帰的変換を時間サンプルに適用して、時間間引き(DIT)バージョンを得ることもできる。また、DFTは、以下ように、行列・ベクトル乗算として表すこともできる。
ここで、iは行のインデックスを示し、jは列のインデックスを示す。行列WNは、N次のDFT行列と呼ばれる。そうすると、FFTアルゴリズムは、WNを疎行列のシーケンスの積に因数分解することによって定義される。基本的な基数2のDIFクーリー−テューキーFFTアルゴリズムは、ジェントルマン−サンデアルゴリズムを使用して行列因数分解を通して得ることができる。DFTの計算では、クーリー−テューキーアルゴリズムを、log2(N)個のステージを表すグラフとして表すことが一般的である。ここで、各ステージは、N/2個のバタフライと呼ばれる基本的な2点DFTで構成される。各DIFバタフライは、加算及び減算に還元された後、ひねり因子による複素乗算を通して回転される。したがって、2の累乗のサイズNの場合、クーリー−テューキーDFTの複雑度は、(N/2)×log2(N)個の複素乗算、及びN×log2(N)個の複素加算に還元され、基本的なDFTのO(N2)の複雑度よりもはるかに低くなる。
クーリー−テューキーアルゴリズムの1つの利点は、バタフライのシーケンスであるコアアルゴリズムの計算を、インプレース(in-place)で実行することができる、すなわち、記憶装置を追加することなく実行することができるということである。確かに、バタフライの出力が計算されたとき、入力対を保存する必要はない。したがって、バタフライの結果は、2つの入力と同じロケーションに記憶することができる。コンピュータサイエンスでは、インプレースアルゴリズムは、少量且つ一定量の追加の記憶空間を使用してデータ構造を変換するアルゴリズムである。この定義によれば、クーリー−テューキーは、インプレースであるとみなすことができる。この利点は、クーリー−テューキーが自己整列型(self-sorting)でない、すなわち、出力サンプルが線形順序で生成されないことによって相殺される。ベクトルを操作する関数は、線形に順序付けられた入力から線形に順序付けられた出力を生成する場合に自己整列型であると言われる。クーリー−テューキーは、部分DFTの奇数番号のサンプル及び偶数番号のサンプルの再帰的計算に起因する間引きのために自己整列型ではない。したがって、複雑度及び/又はレイテンシが増加することを犠牲にして、変換を達成するためのスクランブル解除演算を実行することが必要となる。基数2のFFTの場合、この演算は、出力サンプルのアドレスのビット反転の形を取る。ビット反転は、数字b2b1b0(たとえば、N=8個の入力の3つの数字)を有する2進数で記述されたインデックスnのデータが、反転された数字b0b1b2を有するインデックスに変換される置換である。実際には、クーリー−テューキーアルゴリズムは、2の累乗のサイズに制約されない。クーリー−テューキーアルゴリズムは、任意のサイズの形N=Inに拡張することができる。ここで、Iは整数である。一般的な例は、3の累乗のサイズに適用可能な基数3のクーリー−テューキーFFT、及び4の累乗のサイズに適用可能な基数4のクーリー−テューキーFFTである。これらの場合にも、スクランブル解除ステップは、反転演算によって行うことができるが、基数3及び基数4で表されるアドレスに適用される。実際、クーリー−テューキーアルゴリズムは、サイズNから任意の整数の積N=n1×n2×n3×…×nLへの任意の因数分解に適用することができる。これによって、いわゆる混合基数FFTアルゴリズムがもたらされる。この場合、スクランブル解除ステージは、より複雑な数字反転の形を取り、それらのアルゴリズムの実際の実施は制限される。
1984年に、ジョンソン及びビュルスは、「An in-place in-order radix-2 FFT」(Proc. IEEE ICASSP, 1984, pp. 28A.2.1-4)において、自己整列型で且つインプレースのFFTアルゴリズムを得るように基数2のDITクーリー−テューキーアルゴリズムを書き換えることができることを示した。クライブ・テンパートンは、「Self-sorting in place fast Fourier transforms」(SIAM J. Sci. Stat. Comput., vol. 12, July 1991, pp. 808-823)において、インプレースで且つ自己整列型のクーリー−テューキーFFTを作成するのに使用される原理を、他の基底、たとえば基数3のアルゴリズム及び基数5のアルゴリズムに一般化することができることを示した。グラフでは、この変換は、インターリーブされた出力を有する複数のタイプ1バタフライ(従来のバタフライ)をグループ化するタイプ2バタフライで構成された連続した複数のステージで構成される。これはさらに、Nの因数分解が回文(palindrome)を形成していれば、混合基数FFTに拡張することができる。したがって、このアルゴリズムは、N=144=32×42の場合、因数が3、4、4、3の順序又は4、3、3、4の順序で使用されれば機能する。多くの変換長において、自己整列型インプレースクーリー−テューキーアルゴリズムに必要とされる対称形式で因数を配列することは不可能である。これらのサイズに対する代替手段は、回文として記述できない因数を因数分解の中央に配置することである。たとえば、N=6000=3×42×53の場合、因数を、次のように、すなわちN=6000=4×5×15×5×4のように配列することができる。
クーリー−テューキーアルゴリズムに加えて、この文書で説明する発明は、グッドによって、「The interaction algorithm and practical Fourier analysis」(J. Roy. Statist. Soc. Ser. B., vol. 20, 1958, pp. 361-372)において最初に紹介されたPFAアルゴリズムを使用する。素因数FFTアルゴリズムの掘り下げた説明は、ビュルスによって、「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)に与えられている。PFAは、互いに素な因数で構成された合成サイズにおけるクーリー−テューキーアルゴリズムの一変形とみなすことができる。このクーリー−テューキーアルゴリズムは、サイズN1×N2のDFTをサイズN1及びN2のより小さな多くのDFTに再帰的に分割することに本質がある。これらの演算は、入力サンプル及び出力サンプルの適切な再インデックスを通して形式化することができる。これは、インデックスk及びnを
と書き換えることによって達成される。第1の演算は、N1行N2列で構成される2次元アレイとして入力(k)を再インデックスすることとして解釈することができる。ここで、データのオリジナルセットは、このアレイの列に線形に記憶される。第2の演算は、N1行N2列で構成される2次元アレイとして出力(n)を再インデックスする。ここで、データの期待されるセットは、行に線形に記憶される。この再インデックスが、DFTの公式のnkに代入されると、残る項は
を与える。このクーリー−テューキーアルゴリズムは、合成サイズN=N1N2のDFTを
・アレイの列をシーケンシャルに満たして、入力をN1×N2アレイとして再インデックスすること。
・サイズN2のN1個のDFTを、アレイのN2個の列に対して実行すること。
・ひねり因子を乗算すること。
・サイズN1のN2個のDFTを、アレイのN1個の行に対して実行すること。
・アレイの行をシーケンシャルに読み出して、出力を再インデックスすること。
として、再帰的に表現し直していると見ることができる。PFAは、整数(k)及び(n)と、DFTアルゴリズムの2次元解釈の対応する整数対(k1,k2)及び(n1,n2)との間の特定のマッピングに依拠する。実際のところ、I. J. Good著「The relationship between two Fast Fourier Transforms」(IEEE Trans. Comp., vol. 20, 1971, pp. 310-317)に記載されているような、中国の剰余定理マップ(CRT)に基づくマッピング又はルリタニアマップ(Ruritanian map)(グッドのマップとも呼ばれる)に基づくマッピングのいずれかの少なくとも2つのマッピングを使用することができる。入力及び出力に異なるマッピングを使用することもできる。PFA変換は、ここでは入力及び出力の双方がルリタニアマップである場合について紹介される。このルリタニアマップは
によって定義される。ここで、整数p及びqは、N1とN2が互いに素である場合に
となるような整数p、q、r、sを見つけることができるとするCRT定理に従って規定される。逆マップは
によって与えられる。N=40(N1=8及びN2=5)の一例は、以下の表に示される。
ルリタニア式の解を見つける必要はなく、容易にマッピングを構築できることが見て取れる。第1列のエントリーは、0からN/N1(=N2)ずつ増加する。一方、第1行のエントリーは、0から(N/N2=N1)ずつ増加する。次に、残りの列(又は行)は、第1列(又は行)と同じ増分を使用しつつ、結果のモジュロNを取ることによって埋めることができる。このマッピングをDFTのオリジナルの式に適用することによって、
が与えられる。N1又はN2を指数部に乗算していることが見て取れるが、これを別にすると、この式はN1×N2の2次元DFTの形を取る。クーリー−テューキーアルゴリズムと同様に、長さN1のN2個のDFTを一方の次元で実行した後、他方の次元で長さN2のN1個のDFTを実行することによって、DFTを計算することができる。この変換は、他方の次元から開始して計算することもできる。しかしながら、これら2つのステージ間にひねり因子は存在せず、これによって、演算回数がクーリー−テューキーFFTの場合よりも少なくなることを強調しなければならない。指数部にN1及びN2を乗算することによって、入力サンプルに対して適用される回転方法が単純に変更される。ランクnを有する周波数サンプルは、0から開始して増分nで単位円の周囲を巡回する1の累乗根によって加重された時間サンプルの線形結合として計算される。因数Na(a=1又は2)を適用すると、増分は単純にnからn×Naへ変更される。フーリエ変換の特性に起因して、出力サンプルは、標準的なDFTの出力サンプルに対して循環シフトを単純に適用することによって得ることもできる。すなわち、長さNaの変換に回転rを適用することは、結果がオリジナルの順序0,1,…,Na−1で現れる代わりに、順序0,r,2r,…,(Na−1)で現れることを意味する。ここで、インデックスはモジュロNaで解釈される。入力及び出力の双方について同じマッピングを使用することによって、PFAをインプレース且つ自己整列型にすることができる。確かに、マッピングが同じであるので、出力サンプルは入力サンプルと同じ順序で現れる。1次元アレイからルリタニア2次元表現を形成する再インデックス演算が、暗黙的なアドレス変換を通して行われる場合、出力サンプルはワーキングアレイにおいて線形順序で現れる。すなわち、このアルゴリズムは自己整列型である。クーリー−テューキーアルゴリズムと同様に、PFA法を再帰的に適用することによって、サイズNを互いに素な因数N=n1×n2×n3×…×nLの積に分解することができる。この場合、PFAアルゴリズムを行列の形で表すことがより適切である。PFAアルゴリズムの原理を再帰的に適用することによって、行列WNの以下の因数分解が導かれる。
ここで、Rは、ルリタニアマップに従って整数nを対応するL次元空間(n1,n2,…,nL)にマッピングする置換行列であり、WN [r]は、行列WNのすべての要素がr乗されたものである。上述したように、実際のところ、置換行列との積を実際に計算する必要はない。必要とされるマッピングは、インデクシングロジックを介して暗黙的に実施することができる。
PFAの1つの問題は、サイズを互いに素な因数に分解すると、単純な基数変換による直接計算に適合しない大きな因数を含む場合があるということである。したがって、他のDFT変換のうちの1つを使用してこれらの変換を実施することが必要となる。一般的な合成サイズの場合には、クーリー−テューキーアルゴリズムを使用して、より小さなDFTを計算することができる。ジョンソン−ビュルス及び「Implementation of self-sorting in-place prime factor FFT algorithm」(J. Comput. Phys., vol. 58, 1985, pp. 283-299)におけるテンパートンの研究のおかげで、自己整列型で且つインプレースの形式でクーリー−テューキー変換を計算することが可能である。この拡張を、PFAアルゴリズムにおける合成因数(composite factor)の計算に適用することによって、一般化されたジョンソン−ビュルス(自己完結型インプレースクーリー−テューキー)変換の厳密な適用よりも低い計算複雑度で、自己整列型で且つインプレースのDFTアルゴリズムを定義することが可能になる。このアルゴリズムは、テンパートンによる「A generalized prime factor FFT algorithm for any 2p3q5r」(SIAM J. Sci. Stat. Comput., vol. 13, May 1992, pp. 676-686)において、一般化されたPFA(GPFA)アルゴリズムとして、N=2p×3q×5r(p、q、rは整数)の形のサイズの場合について記載されている。このアルゴリズムは、サイズが互いに素な整数の累乗の積である任意の分解に拡張することができる。これは、PFAアルゴリズムの回転因子を取り扱うようにクーリー−テューキーアルゴリズムを変更することによって可能になる。テンパートンは、以下の変更、すなわち
・回転r(モジュロp)を各基数pのモジュールに適用すること。
・すべてのひねり因子をr乗すること。
を適用することによって、
行列
を有する基数pのDFTを、
行列
を有するDFTのように計算することができることを示した。たとえば、
の場合、N=pmは、各基数5のモジュールをr’=4(9モジュロ5)だけ回転した後、すべてのひねり因子を9乗することによって実施することができる。これ以降、この変換が適用される変換の名称に「回転(rotated)」と付加することによって、この変化を識別する。
任意のN=2p×3q×5rに対して、一般化された自己整列型インプレースの素因数FFTアルゴリズムは、次のように構成される。
・ルリタニアマップを使用して、サイズ(2p,3q,5r)の3次元アレイとして入力サンプルを再インデックスする。
・一般化された回転ジョンソン−ビュルス法を使用して、長さ2p,3q,5rの1次元変換を計算する。したがって、より小さなDFTは、インプレース自己整列型形式で実施される。
・ルリタニアマップを使用して、サイズ2p,3q,5rの1次元変換として出力サンプルを再インデックスする。
PFAに適したNの値の場合、このアルゴリズムはPFAに還元され、同じ演算回数を有する。N=2p、3q、又は5rの場合、このアルゴリズムはクーリー−テューキーアルゴリズムの自己整列型インプレースの導出物に還元され、同じ演算回数を有する。Nが因数の混合を含むがPFAに適していない場合、このアルゴリズムは基本的なクーリー−テューキーアルゴリズムよりも少ない演算回数を有する。
この文書に提示される発明は、ディジタル集積回路上でのGPFAアルゴリズムのハードウェア実施を扱う。DFTの広範囲の適用に関連して、多くの解決法がFFTアルゴリズムの実施に利用可能である。これらの解決法の大部分は、プロセッサ上で実施する場合のクーリー−テューキーアルゴリズム及びその導出物に焦点を当てている。しかしながら、速度が極めて重要となる状況では、多くの場合、FFTアルゴリズムは集積回路上で実施される。DFTのクーリー−テューキー因数分解は、すべてのクーリー−テューキーFFT装置に何らかの形で適用されるが、これらのアルゴリズムを実施するための解決法には大きな多様性がある。集積回路によって、本来的に機能を並列化することが可能になる。したがって、所与のサイズのFFTのすべてのバタフライを、そのグラフ表現と同様に実施することが可能である。これによって、削減されたクロックサイクル数で結果を計算することが可能になるが、複雑度が高くなるという犠牲が伴う。実際、複雑度とレイテンシとの間のトレードオフは、FFTの種々の実施態様間の相違を生み出すものとなる。加えて、ハードウェア装置の仕様に応じて、解決法は、メモリ使用量、及びバタフライを実施するための乗算器の個数と加算器の個数と比の点からも異なる。
基数2のクーリー−テューキーFFTは、その人気及びかなり低い複雑度のために、DFTをハードウェアで実施するための圧倒的に最も広く使用されている技法のうちの1つである。多くの状況では、DFTのサイズはあまり重要ではない。したがって、余分な複雑度及び/又はレイテンシを犠牲にするものの、ゼロパディングによって2の累乗のFFTを使用することができる。OFDM送信のような他の状況では、システムの仕様は、多くの場合、この制約条件を考慮して規定される。基数2のクーリー−テューキーFFTアルゴリズムをハードウェア実施に適合させるものは、そのグラフ表現に示すようなモジュール性である。これは実際には、N/2個の同様のバタフライのlog2(N)個の連続したステージで構成される。上記で紹介したように、最も直接的な解決法は、グラフ表現と同様にすべてのバタフライを実施することである。これによって、低いレイテンシでDFTを計算することが可能になる。また、実際にはあまり一般的ではないが、データが並列に提示される場合には、連続したDFTをパイプライン化することも可能になる。この解決法の明らかな欠点は、各ステップの出力を記憶する必要があるので、計算資源(乗算器及び加算器)並びにメモリの双方の点で複雑度が高いことである。
排他的でない2つの異なる手法を使用して、全体的な複雑度を削減することができる。第1の手法は、同じハードウェア資源を再利用して、一時に1つのステージを計算することである(時に列FFT(column FFT)と呼ばれる解決法)。結果は、プロセス要素の同じセットにフィードバックされ、次のステージが計算される。これによって、メモリを節約することが可能になるが、レイテンシが長くなると共にルーティングアーキテクチャがより複雑になる犠牲が伴う。他方の手法は、各ステージ内において、異なるバタフライの計算をパイプライン化することによって、処理要素の個数を最終的には1つに削減することである(時にパイプライン化FFT(pipelined FFT)と呼ばれる解決法)。この解決法は、データがFFT装置にシリアルな方法で適用される状況に特に適している。この状況は、実際には非常に一般的な状況である。
基数2のFFTアルゴリズムの最も直接的なパイプライン化された実施態様は、L.R. Rabiner及びB. Gold著「Theory and Application of Digital Signal Processing」(Prentice-Hall, Inc., 1975)に記載されている基数2マルチパス遅延コミュテータ(R2MDC)である。入力シーケンスは、順方向に流れる2つの並列データストリームに分割され、ステップごとに一意のバタフライに入力されるデータ要素間の正確な「距離」が、適切な遅延によってスケジューリングされる。バタフライ及び乗算器の双方の利用率は50%である。この実施態様は、log2(N)−2個の乗算器、log2(N)個の基数2のバタフライ、及び3/2N−2個のレジスタを必要とする。各ステージ内において、単一のバタフライ及びN個の複素要素の単一のアレイによってFFTを実施することが実際に可能である。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の単一パス遅延フィードバック(R2SDF)は、バタフライの出力をフィードバックシフトレジスタに記憶することによって、レジスタをより効率的に使用する。単一のデータストリームは、すべてのステージの乗算器を通過する。このR2SDFは、R2MDC手法と同じ個数のバタフライユニット及び乗算器を有するが、メモリ所要量は大きく削減されている(N−1個のレジスタ)。この手法は、圧倒的に最も一般的なものであり、複雑度をさらに削減する基数4の導入によって多くの変形(R4MDC、R4SDF、R4SDC、R22SDC)を有する。
基数2又は基数4以外の他のステージ、たとえば基数3又は基数5を単純に追加することによって、パイプライン化クーリー−テューキーFFTアルゴリズムを、混合基数FFTを計算するように変更することができる。また、いくつかのステージをスキップすると共に異なるステージ間のルーティングを適切にアレンジすることによって、DFTのサイズを動的に変更することも可能である。しかしながら、基数2のバタフライは実施がかなり単純であるのに対して、他の基数のバタフライの複雑度は大幅に高くなる。したがって、基数2又は基数4以外のステージの個数に依存して、FFT装置の複雑度は扱いにくいものとなる。実際には、これらの解決法の主な制限は、それらの解決法が自己整列型でない基本的なクーリー−テューキーアルゴリズムを実施するということである。したがって、余分なメモリ及び/又はレイテンシのいずれかを消費するスクランブル解除ステージを実施することが必要となる。このスクランブル解除ステージも、混合基数FFTの場合には、かなり複雑になる可能性がある。
より高次の基数を使用することの別の制限は、基本的なDFTの実施及びひねり因子による回転の双方について、回転を実施する必要があるということである。上述したように、これらの場合には、入力データ及び出力データの適切なインデクシングを使用することによってひねり因子による乗算を除去するPFAアルゴリズムに依拠することがより優れている。PFAアルゴリズムの別の利点は、自己整列型で且つインプレースとなるようにPFAアルゴリズムを実施でき、したがって、クロックサイクル及びメモリの双方を節約することができるということである。問題は、PFAアルゴリズムが、互いに素な因数に因数分解できるサイズでないと適用できないということである。これは、1つの所与の長さのDFTの計算を必要とするアプリケーションにとっては問題ではない。
L. Zou及びX. Huangによる2005年8月の欧州特許出願第05300651.6号「3780-point Discrete Fourier Transformation processor」に記載されているように、3780点DFTの場合の解決法は、互いに素な因数に対応する異なるDFTモジュールをパイプライン化することであり、ここでは140点DFT及び27点DFTをパイプライン化する。140点DFTは、4点DFTモジュール、5点DFTモジュール、及び7点DFTモジュールに分解された、ネストウィノグラード変換(nested Winograd transform)を使用して計算される。一方、27点DFTは、9点DFTモジュール及び3点DFTモジュールに分解されたクーリー−テューキーアルゴリズムを使用して計算される。PFAアルゴリズムに依拠することの利点は、ひねり因子による乗算を回避することである。しかしながら、異なるステージをパイプライン化すると、いくつかのバッファが各ステージ間で必要とされるので、PFAアルゴリズムのインプレース性を活用することができない。加えて、クーリー−テューキーアルゴリズムとパイプライン化手法とを組み合わせることによって、スクランブル解除ステージを実施することが必要となる。
特に、サイズを動的に変更することを取り扱う場合には、PFAアルゴリズムにおいてパイプライン化手法を使用することの利点から利益を得ることはかなり難しいように見える。
関心のある解決法は、FFTの列手法を使用することである。この手法は、単一の記憶要素をループすることによって、処理要素の同じセットを使用して異なるステージを処理することに本質がある。この解決法は、R. S. Buchert、S. M. Sharier、及びP. Beckerによる2006年4月の米国特許第7,028,064号「Optimized discrete Fourier transform method and apparatus using prime factor algorithm」で実施されている。ここでは、「PFA回路」と呼ばれる単一の処理要素が、互いに素な因数へのサイズ分解に関連付けられる部分DFTを実行するのに使用される。この装置は、プログラマブル乗算・加算(MAC)ユニットの一種を使用して部分DFTを実施する。実際には、この装置では、ひねり因子の本来的な対称性を活用するために、互いに結合されたこのような2つのMACユニットが組み込まれ、これによって全体的な複雑度が削減される。この解決法は、サイズを比較的小さな素因数に分解することができる限り(これは、PFAアルゴリズムの本来的な制限である)非常に魅力的である。確かに、分解がNi=2mという形の因数を含む場合、2m点DFTはMACユニットを使用して計算され、これは計算効率がよくない。加えて、PFA装置は自己整列型形式で実施されないため、出力置換ステージが必要となる。
本発明においてDFTコアとして説明される装置は、ディジタル集積回路上において、サイズN=2p×3q×5rの複素数値のセットに対するDFTの計算を必要とする、任意のシステムで使用することができる。ここで、p、q、rは、変換ごとに変化する可能性がある整数である。この装置はGPFAアルゴリズムのハードウェア実施を実現する。その文脈において、この装置を互いに素な数の積に因数分解することができる任意の合成サイズに容易に拡張することができる。ここで、これらの数のうちのいくつか又はすべては、所与の基数の累乗として表すことができる。DFTコアは、ユーザクロックとして示される同一のクロック周波数で機能するデータ元とデータ宛先との間で動作するものと仮定される。DFTコアの以降の説明は、図1に示される3つの主要独立部分から成る。これらの主要独立部分は、データマネージャモジュール1.1、DFTエンジンモジュール1.2、及びマルチ基数バタフライモジュール1.3である。DFTコアのこれら3つの部分は、協働するように設計されていることに加えて独立している。すなわち、それらを異なるフレームワークで実施することができる。データマネージャ1.1は、ユーザシステムとのインターフェースである。これは、データマネージャ1.1が、データ元からデータ値を受信し、結果値をデータ宛先へ送信することを意味する。DFTエンジンモジュール1.2は、基本DFTステージをシーケンスし、データマネージャモジュール1.1がマルチ基数バタフライモジュール1.3にデータ値を適切に供給して結果値を保存できるようにする。DFTエンジンモジュール1.2は、マルチ基数バタフライモジュール1.3の制御も行う。
単一のマルチ基数バタフライモジュールを使用して種々のサイズのすべてのバタフライを計算することは、少ない資源を使用して種々のサイズのDFTを計算すると共にインプレースであることを可能にする柔軟な設計の問題に対処するための重要なポイントである。GPFAのソフトウェア実施では、基数計算の異なるステップに異なる関数を使用するのに対して、本発明は、DFTを計算するいくつかの異なる基数モジュールに依拠せず、単一の再コンフィギュレーション可能なユニットに依拠する。
第1のステップにおいて、マルチ基数バタフライモジュール1.3は、r次の複素行列と複素データ値の列ベクトルとの積を計算する。ここで、rは現在の基数である。第2のステップにおいて、マルチ基数バタフライモジュール1.3は、第1のステップの計算結果から得られる列ベクトルのすべての要素に対して回転を適用する。複素行列は、r次のDFT行列に対応する。追加の回転は、ひねり因子の回転を適用するために使用される。サイズrのDFTの複素行列公式は、以下の式に示される。
ここで、iは複素数の虚数単位(i2=−1)である。
実際には、マルチ基数バタフライモジュール1.3は、カルテシアン表現に従って実数値にのみ作用する。2つの複素数の乗算は、2次の行列と列ベクトルとの積として見ることができる。マルチ基数バタフライモジュール1.3は、2次の実行列とr個の列ベクトルとのr個の積を作成する前に、2r次の実行列と1つの列ベクトルとの積を実行する。図2Aは、r=5のバタフライ行列によって計算される実数積を示している。以下の式は、bk,l及びtk,lの値を示している。
第1の最適化は、行列T及びBの特性を利用することによって、資源、すなわちエネルギーを消費する乗算の個数を削減することに本質がある。係数b2k,0、b2k+1,1、b0,2l、及びb1,2l+1は1に等しく、係数b2k,1、b2k+1,0、b1,2l、及びb0,2l+1はヌル(null)である。同様に、係数t0,0値及びt1,1値は1に等しく、係数t1,0値及びt0,1値はヌルである。これらの係数に乗算は必要とされない。図2Bは、簡単化した後のバタフライ行列によって計算される積を示している。
図17は、基数3のバタフライの説明図である。この図は、3つのエントリーa、b、及びcを示している。また、この図は、ひねり因子及び回転を求めるために適用される角度も示している。この図で分かるように、第1の値aは角度0による影響を常に受ける。角度0は、この第1の値aが各出力の計算において値1と常に乗算されることを意味する。また、第1の出力Aの計算では、すべての値が角度0による影響を受けること、及び、0乗されている回転項WN 0が常に1に等しく、これは第1の出力の計算に乗算が必要とされないことを意味することにも留意することができる。この注意点は、すべての基数について正しいことが証明される。
実施のための残る解決法は、基本計算ユニットによって行列の各行を独立且つ並列に取り扱うことである。通常、1つの基本ユニットは、複素数の各実部に1つずつの合計2つのMACユニットを備える。以下では、実行列について考える。上記で解説したように加算器のみを必要とする最初の2つの行を除いて、MACユニットは、行列B又はTの1つの行の各要素をデータ値の列ベクトルの各要素と乗算し、中間結果を累積して最終的な列ベクトルを得るために使用される。基数5をサポートしなければならないので、8個のMACユニットが実施される。ただし、より大きい基数が必要とされる場合には、より多くのユニットを実施することができる。さらに、この実施では、それよりも小さい基数のバタフライを計算するときには、MACユニットを非アクティブ化することができる。したがって、エネルギーが節約される。図3は、マルチ基数バタフライモジュール1.3の第1の実施形態における加算器及びMACユニットのレイアウトを表している。MACユニットの一例は図4に示されている。入力X及びYは、乗算器4.6の前の2つのバッファ4.1及び4.2に接続されている。乗算器4.6の出力は、バッファ4.3に接続されている。バッファ4.3は、加算器4.7に接続されている。この加算器は、マルチプレクサ4.5の出力も取り込み、自身の出力をバッファ4.4に入れる。バッファ4.4は、マルチプレクサ4.5の一方の入力に戻って接続され、累算が実現される。累算器は、マルチプレクサの入力Cを使用して、Cにおいてヌル入力を選択することによってリセットすることができる。バッファ4.4の出力が、MACユニットの出力となる。図5Aは、中間結果X、X’、及びX”を提供するデータベクトルD、D’、及びD”に対する、MACユニット3.2の内部における3つの連続した基数3のバタフライ処理のタイミングシーケンスを示している。行列Bの第4行の要素及び列ベクトルの要素は、1つずつ乗算されて累算器に加えられる。累算器は、新たな各バタフライ計算の前に事前にリセットされてヌル値にされている。pi値は、di値とb3,i値との積の結果である。また、si値は、j≦iであるpj値の累算の結果である。中間結果x3が、最後の値siである。
マルチ基数バタフライモジュール1.3の最適化バージョンは、MACユニットの2つのステージ(バタフライ及び回転)を単一のステージに融合する。基数行列Bの1つの行の最初の2つの要素は、偶数行では常に(1,0)であり、奇数行では常に(0,1)である。そのため、偶数行に取り付けられたMACユニットには、列ベクトルの第1の値をプリロードすることができ、奇数行に取り付けられたMACユニットには、第2の値をプリロードすることができる。図5Bに示すように、各バタフライ計算間においてMACユニットの処理時間を解放することができる。図5Cに示すように、これらの時間は回転処理を挿入するために使用される。2つ一組の数値を再挿入するために、2つのステージ間のシリアル化が依然として必要であり、これは2つのMACユニットを連結することを必要とする。図5では、行列Bの第3行に取り付けられたMACユニットによって提供される中間結果x2が必要であり、この中間結果x2は中間結果x3で共に挿入される。yi値は、xi値とt3,i値との積の結果である。また、yiは、j≦iであるxjの累算の結果である。最終的な結果r3は、yi値の合計である。
MACユニットの減算を行う能力に依存する第2の最適化は、係数値bk,l及びtk,l(異なるパリティのk及びl)が負の極性をもっているときに、加算を減算に置き換えることである。したがって、値の符号を反転する必要はもはやなくなり、演算のタイプを示すフラグのみが必要となる。この最適化は、基数バタフライに対してπの回転を行わなければならない場合である対向角を考慮するとき、DFTが逆DFT(IDFT)としてコンフィギュレーションされるとき、又は、角度が区間[π;2π]に属するべきである(sin(−α)=−sin(α))ときに非常に役立つ。
マルチ基数バタフライモジュール1.3のこの実施形態は、データ値の種々の表現に適合しており、固定小数点又は浮動小数点を使用することができる。固定小数点を使用する場合、MACユニットの内部の余分なビットを、累算器を飽和させないようにするために使用することができる。この実施形態は、入力データ値をより多くのビットに拡張すること、及びデータを表すのに使用されるビットの数を制御するスケーリングモジュールが存在することを必要とする。上位ビットが除去されるとき、スケーリングは飽和の制御によって有利に達成される。下位ビットを除去するとき、スケーリングは最も近い値に丸め込むことで有利に達成される。スケーリングを行うときの問題は、動的性と精度との間に最適なトレードオフを適用することである。有利には、このスケーリングモジュールは動的であり、計算されているDFTのサイズに適合することができる。たとえば、これはマルチ基数バタフライの出力における結果をサイズ変更できる2つのスケーリングモジュールを使用して実現することができる。第1のスケーリングモジュールは、MACユニットの内部の結果を再挿入して回転を適用するために、MACユニットの出力をサイズ変更する。余分なビットが使用されるので飽和管理は必要とされない。第2のスケーリングモジュールは、誤った値を出力しないように飽和を管理しなければならず、好ましくは、出力値のダイナミクス範囲と精度との間を調整するためにサイズ変更ウィンドウを動的に制御する能力を有する。
最後に、マルチ基数バタフライモジュール1.3は、その最後の実施形態において、ひねり因子がヌルの場合に出力利得を調整する能力を伴う。この能力は、最後のステージ中に回転が必要とされないDFTでは非常に役立つものとなる。したがって、DFTの全体的な利得を、計算のまさに最後で調整することができる。この新しい機能は、もはや行列Tを使用するのではなく対角行列Gを使用すると共に、加算器(たとえば3.1)の入力を使用されていないMACユニットへ逸らすことによって行われる。ここで、対角行列Gは係数gk;lが所望の利得調整に等しい行列であり、加算器(たとえば3.1)の入力を使用されていないMACユニットへ逸らすことは、マルチ基数バタフライモジュール1.3のサイズが最大基数rに合わせられており、最後のステージがrよりも小さい基数r’を使用する場合に行われる。図6は、マルチ基数バタフライモジュール1.3の実施態様の一例をその最適化バージョンで提示している。入力データdiは、複素データベクトルの実部及び虚部を交互にして挿入される。係数bk,l、tk,l、及びgk,lも挿入される。マルチプレクサ6.3a、6.3b、及び6.4は、乗算が必要とされるので、利得を調整するために、B行列の最初の2つの行の計算を加算器から最後のMACユニットへ逸らすのに使用される。この実施態様では、実部r2i及び虚部r2i+1は、加算器モジュール6.1及びMACユニット(たとえば6.2)の対の出力においてシーケンシャルに現れるが、同時に現れるようにすることもできる。加算器の対は、行列Bの最初の2つの行の実部及び虚部を個別に加算し、それら2つの結果をシリアル化してスケーリングし、MACユニットの対のレイテンシと適合するようにそれら2つの結果を遅延させる。MACユニットの対は残りの計算を行う。シリアラル化モジュール6.5は、加算器及びMACユニットからの結果をシリアル化し、結果riの複素数値の実部及び虚部を交互に出力する。ただし、別の実施態様では、1/2の低い周波数で複素数値の実部及び虚部を同時に出力することもできる。図7は、2つ一組のMACユニットの内部のスケーリングモジュールの実施態様の一例を示している。マルチプレクサ7.4、7.5、7.6、及び7.7は、バタフライ計算のフェーズ及び回転計算のフェーズを交互に行うために使用される。モジュール7.1は、マルチプレクサ7.2及び7.3を介してMACユニットの累算器に入力データを挿入するために、入力データを遅延させる。マルチプレクサ7.2及び7.3は、累算器をヌル値でリセットすることもできる。結果がMACユニットの出力に最初に現れる時、それらの結果はバッファリングされて、モジュール7.8内にスケーリングされる。回転計算用の回転のウィンドウが現れると、2つの値はシーケンシャルに出力され、ひねり因子又は利得係数のいずれかと共にMAC内部に再入力される。この実施態様では、結果がMACユニットの出力に2度目に現れるとき、それらの結果は、単一のスケーリングモジュール7.11内にシーケンシャルに入力される前に、ブロッカ7.9及び7.10の内部にバッファリングされる。資源を使用していたであろう第2のスケーリングモジュールは省かれる。スケーリングモジュール7.11は、1/2の低い周波数で動作することもできる。
このマルチ基数バタフライを、実際の所望の計算に従う種々のアーキテクチャ設計に使用することができることに留意すべきである。このマルチ基数バタフライは、説明したDFT計算設計に特に適しているが、このDFT計算設計に限定されるものではない。
DFTエンジンモジュール1.2は、DFTコアモジュールの第2の主要要素であり、別の節で説明されるデータマネージャモジュール1.1とマルチ基数バタフライモジュール1.3との間に配置される。その役割は、他の2つの主要要素の設定、実行、及び調整を行うことである。このモジュールは、DFTをそのサイズに従って基本バタフライのシーケンスで表現する表現手段を備える。また、このモジュールは、ネストされたループのシーケンスの形でDFTをスケジューリングすると共に、データマネージャにおける関連のある入力データアドレス及び出力データアドレスをバタフライごとに生成するスケジューリング手段も備える。さらに、このモジュールは、DFTのサイズに従ってネストされたループのシーケンスをカスタマイズするカスタマイズ手段も備える。
DFTコアに挿入されたDFTエンジンモジュールの詳細な図は、図8に示されている。このDFTエンジンモジュールは、6つの下位要素から構成される。基数選択モジュール8.1は、DFTステージをシーケンスする。グローバル設定モジュール8.2は、DFTエンジンの他のすべての下位要素を設定する。アドレス生成モジュール8.3は、下位要素の基数行列モジュール8.4及びひねり行列モジュール8.5を用いてデータマネージャモジュール1.1及びマルチ基数バタフライモジュール1.3を駆動することによって、DFTステージを構成する基本バタフライを実行する。これら2つの最後の下位要素は、インデックスをマルチ基数バタフライによって使用可能な係数に変換する。マルチ基数バタフライモジュール1.3の実施態様に応じて、スケーリングテーブルモジュール8.6はオプションとすることができる。固定小数点表現では、スケーリングテーブルモジュール8.6は、マルチ基数バタフライの内部の中間結果のスケーリングを設定する。本明細書で説明するDFTエンジンでは、データマネージャモジュール1.1は、1つの読み出しポート及び1つの書き込みポートを有する単一のメモリであると見なすことができる。
DFTエンジンは、データマネージャモジュールが入力データのセット全体を収容すると始動する。データマネージャはバッファとして動作するので、DFTエンジンは自身の独立したクロックで動作する。基数選択モジュール8.1は、DFTのサイズ(入力としてセットアップすることもできるし、格納期間中にカウンタを使用して計算することもできる)を知ると、DFTステージへの分解に対応する基数2、3、5(及び、いくつかの実施形態では最終的に4)のシーケンスを準備し、第1の基数をグローバル設定モジュール8.2へ送信する。グローバル設定モジュール8.2は、他のすべてのモジュールを設定する。アドレス生成モジュール8.2は、一旦設定されると始動し、他のすべてのモジュールを自動的に駆動する。アドレス生成モジュール8.2は、アドレスを使用することによって、データマネージャモジュール1.1がマルチ基数バタフライにデータを適切な順序で供給すると共に中間結果を正しい位置に保存することを可能にする。基数行列モジュール8.4及びひねり行列モジュール8.5は、インデックスを使用してバタフライの計算に必要とされる係数を生成する。アドレス生成モジュール8.3がその最後のバタフライに達すると、基数選択モジュール8.4は、最後の基数となるまで(アドレス生成モジュール8.3を再び始動させて)次の基数を選択する。基数選択モジュール8.4が終了すると、データマネージャモジュール1.1は、DFTの最終結果を正しい順序で収容することになる。
GPFAアルゴリズムは、サイズNのDFTを計算するとき、ルリタニアマップに従って、DFT
を連続して処理する。ここで、N=N2×N3×N5=2p×3q×5rである。再インデックス行列R及びR-1は、各機能の内部に取り込まれている。このシーケンスは、第1のループを規定し、サイズN2×(N3N5)、N3×(N2N5)、及びN5×(N2N3)の2次元DFTの計算をイニシエートする。第2のループで、サイズN2×(N3N5)、N3×(N2N5)、及びN5×(N2N3)の2次元DFTは、p個の基数2のステージ、q個の基数3のステージ、及びr個の基数5のステージにそれぞれ分解される。各基数は、GPFAアルゴリズムに従って、タイプ1又はタイプ2のいずれかとすることができる。
基数選択モジュール8.1は、これら2つのループを担当する。ここで説明する実施形態では、各基数のサイズ及びタイプに対応する複数のカウンタが、基数の個数を保持する。これらのカウンタは、基数ステージへのDFT分解によって初期化される(基数2 タイプ1、基数2 タイプ2、基数5 タイプ1、基数5 タイプ2、基数3 タイプ1、及び基数3 タイプ2)。代替的な一実施形態では、タイプ1及び2の基数4のステージが分解に入る。これらの分解は、計算することもできるし、表に記憶することもできる(取り扱われるDFTの個数が、記憶されている分解の個数に制限される)。新しい基数ステージを開始すると、対応するカウンタがデクリメントされる。GFPAアルゴリズムに従って基数のサイズ及びタイプをシーケンスするために、カウンタ間に優先順位が設定される。たとえば、基数2のステージに関連付けられるカウンタは、基数5のステージに関連付けられるカウンタよりも高い優先順位を有し、基数5のステージに関連付けられるカウンタは、基数3のステージに関連付けられるカウンタよりも高い優先順位を有する。代替的な一実施形態では、たとえば、基数4及び基数2のシーケンスは、回文を形成しなければならない。
最後に、基数選択モジュール8.1は、グローバル設定モジュール8.2を駆動する。基数選択モジュール8.1は、選択された基数をサイズ及びタイプと共に出力し、
の計算内部の進行度を出力する。この進行度は、同じ素因数のステージ内部のステージ番号(stage number)によって定義される。同じ素因数のステージの個数は、素因数の累乗に対応する。基数のサイズと素因数との間の区別は、基数2及び基数4をシーケンスするのに必要である。代替的な一実施形態では、基数4を選択すると、ステージ番号が2だけインクリメントされる。
グローバル設定モジュール8.2は、DFTエンジンモジュール1.2の他のサブモジュールへの有用なグローバルパラメータを生成するために使用される。
アドレス生成器モジュール8.3は、6つの瓦状のループ(imbricate loop)から成る。グローバル設定モジュール8.2は、ループの最大繰り返し数及びアドレス計算のインクリメント値を生成する。以下の表は、基数2、3、5の外側から内側へのループをリストしている。No及びNiは、サイズNo×Ni=Nとなるようになっている。ここで、NはDFTのサイズであり、Niは現在の基数の累乗である。これら2つの値は、計算することもできるし、記憶することもできる。値radix、stage、及びpowerは、基数選択モジュール8.1から得られたものである。
すべてのひねり因子は単一の角度の倍数であるので、グローバル設定モジュール8.2は、ひねり因子を生成するための開始角も計算する。この開始角は、DFTサイズ及びステージ番号に依存する。開始角は2つの因子の積である。第1の因子はステージ番号及び基数サイズにのみ依存し、その値は2π/prime_factorstage-1(1≦stage≦power)である。ここで説明する実施形態では、角度を記憶するためにインデックス付きの表が使用される(ひねり行列モジュール8.5を参照)。この表は、2iπ/prime_factormax_power(0≦i≦prime_factormax_power−1)の値を含む。ここで、max_powerは、取り扱われるDFTの中の累乗の最大値である。それ故、インデックスprime_factormax_powerは角度2πに対応する。演算時には、スケーリングが適用されて、インデックスprime_factorpowerが角度2πに確実に対応するようにされる。したがって、第1の因子の値は、prime_factorstage-1+max_power-power(1≦stage≦power)になる。第2の因子は、商No=N/prime_factorpowerである。prime_factorpowerは角度2πに対応するので、値(No mod prime_factorpower)のみが使用される。これによって、角度を区間[0,2π]に維持することが可能になる。
GPFAアルゴリズムでは、マルチ基数バタフライの説明で導入されたバタフライ行列Bに対して回転を適用しなければならない。回転を適用することによって、行列は顕著に変更される。回転バタフライ行列は、列の転置若しくは置換又はその双方によって基準の行列から導き出すことができる。有利には、これらの転置及び置換は、参照表のアドレス指定を適合させることによって得られる。必要とされる演算は、値((No modulo Ni) modulo Radix)に依存する。ここで、Niは現在の基数の累乗であり、積No×NiはDFTのサイズである。基数2について可能な値は1つあり、基数3について可能な値は2つあり、基数4について可能な値は2つあり、基数5について可能な値は4つある。各可能な値は異なる行列に対応する。以下の表は、可能な値と演算との間の関係を示している。グローバル設定モジュール8.2は、転置行列の場合にマルチ基数バタフライのサイン値を反転するためのフラグ、及び基数行列モジュール8.4用の列を置換するためのフラグを生成する。
基数行列モジュール8.4は、マルチ基数バタフライモジュール1.3に対して、マルチ基数バタフライの説明で導入されたバタフライ行列Bの係数を提供する。ここで説明する実施形態では、マルチ基数バタフライは、係数が列ごとに生成される必要がある。したがって、基数行列モジュールは入力として、現在の基数、出力する列番号(column number)、及び列を置換するためのフラグを取り込む。係数bk,lは、計算することもできるし、表に記憶することもできる。表に記憶する場合、列全体が記憶され、インデックスは現在の基数及び要求される列インデックスによって形成される。マルチ基数バタフライは実数に作用するので、基数行列モジュール8.4は、複素係数の実部及び虚部を交互にして実数の列を形成しなければならない。基数行列モジュール8.4は、複素行列の列を生成するように要求されると、最初に列のすべての複素係数について符号を有するサイン値の対(コサイン,サイン)を生成し、次に反対の符号を有する対(サイン,コサイン)を生成する。この符号は、サイン値に対して加算又は減算のいずれを行わなければならないのかをマルチ基数バタフライモジュール1.3に伝える。
ひねり行列モジュール8.5は、マルチ基数バタフライモジュ1.3に対して、マルチ基数バタフライの説明で導入された行列Tの係数を提供する。ひねり行列モジュール8.5は入力として、現在の基数及びバタフライの第2の要素の回転の角度を取り込む。出力は、係数の列及び符号の列である。バタフライの第2の要素を回転するために求められたひねり因子αが与えられると、ひねり行列モジュール8.5は、バタフライのすべての要素を回転するのに必要なひねり因子0、α、2α、…のシーケンスを生成する。ここで説明する実施形態では、マルチ基数バタフライは列ごとに係数を必要とし、実数を扱う。ひねり行列モジュール8.5は、ひねり因子を生成するように要求されると、最初に列のすべての複素係数について符号を有するサイン値の対(コサイン,サイン)を生成し、次に反対の符号を有する対(サイン,コサイン)を生成する。この符号は、サイン値に対して加算又は減算のいずれを行わなければならないのかをマルチ基数バタフライモジュール1.3に伝える。
コサイン値及びサイン値は、計算することもできるし、表に記憶することもできる。表に記憶する場合、すべての値を記憶するためには、素因数ごとに単一の表で十分である。各表のサイズは、取り扱われるDFTの中での素因数に付随する最大累乗に依存する。角度2iπ/prime_factormax_power(0≦i≦prime_factormax_power−1)のコサイン値及びサイン値を含む表の粒度は、2π/prime_factormax_powerになる。表のサイズを削減する第1の最適化は、サイン関数の特性を使用することである。角度i及びprime_factormax_power−i(0≦i≦prime_factormax_power)はモジュロπで等しく、等しいコサイン値及び反転したサイン値を有する。πよりも小さい角度のみが必要であり、表のサイズは、素因数2、3、5についてそれぞれ
となる。要求される角度αが
よりも大きい場合、新しく考えられる角度は
であり、フェッチされたサインの符号は反転される。
アドレス生成モジュール8.3は、3つの主要部分に分解することができる。第1の部分はループの管理に専用化され、第2の部分はデータマネージャモジュール1.1のアドレスを生成するのに使用される累算器に専用化され、第3の部分はコマンドに専用化されている。
GPFAアルゴリズムでは、バタフライの入力及び出力を求めるために、ループが使用される。ここで説明する実施形態では、アドレス生成モジュール8.3は、6つのカスケードされたループを使用する。これらのループは、グローバル設定モジュール8.2によって初期設定される。第1のループTRANSVERSE(最も外側のループ)は、2次元DFTを多数の1次元DFTに分解する。第2のループDIVISIONは、クーリー−テューキーアルゴリズムの分割統治手法に対応する分割の回数をカウントする。タイプ2の基数の場合、第3のループSUBDIVISIONが使用される。第4のループBUTTERFLYは、インターリーブされたバタフライをシーケンスする。タイプ2の基数の場合、第5のループSUB-BUTTERFLYが、タイプ1の基本バタフライをシーケンスする。最後に、第6のループI/O(最も内側のループ)は、バタフライの入力及び出力をシーケンスする。ここで説明する実施形態では、ループは繰り返し回数を記憶するカウンタを使用して実施される。図9にモジュール9A.1によって表された最大繰り返し回数でループが設定されると、最も内側のループ9A.2のカウンタがカウントを開始する。このカウンタは、最後の繰り返しに達するか又は終了すると、外側のループ9A.3のカウンタをインクリメントすると共に自身をリセットする。9A.4のような他のすべてのカウンタも、自身の内側のループ9A.2及び9A.3が最後の繰り返しに達するという条件の下で、自身の外側のループのカウンタに対して同じことを行う。アドレス生成モジュール8.5は、すべてのカウンタが最後の繰り返しに達したときに終了する。
データマネージャモジュール1.1への宛先のアドレスは、各ループの繰り返し回数の線形結合である。この線形結合の係数は、グローバル設定モジュール8.2によって最初に初期化されたインクリメント値又はJTN値である。ここで説明する実施形態では、複雑度を削減するために乗算は行われず、データアドレスの計算は各ループの中間累算器を使用する。ループのカウンタがリセットされるとき、そのループに取り付けられた累算器は、カウンタがリセットされていない最も外側のループに取り付けられた累算器で自身の値を更新する。ループのカウンタがインクリメントされるとき、ループに付随したJTN値が対応する累算器に加算される。図9Bは、最も内側のループI/Oに取り付けられた累算器9B.7を示している。内側のカウンタ9A.2〜9A.6の終了条件に応じて、マルチプレクサ9B.2〜9B.6は、最も外側の9B.12を優先して内側の累算器9B.8〜9B.12の値のうちの1つで累算器を再初期化するか、又はマルチプレクサ9B.1の値を使用する。このマルチプレクサは、JTN値の加算の許可/不許可を行い、第1の内側ループの終了条件によって駆動される。最も内側のループの場合、このマルチプレクサ9B.1は、JTN_INPUT値を使用するためにバイパスされる。同じ方式は、マルチプレクサの個数が少ない内側の累算器にも使用される。
モジュロNの最も内側の累算器9B.13は、データマネージャモジュール1.1への宛先の読み出しアドレスである。書き込みアドレスは、2つの方法で生成することができる。第1の方法は、2つの最も内側のループに2つの追加の累算器を使用する。これら2つの累算器は、読み出しアドレスと同じであるが、JTN値の順序が並べ替えられている読み出しアドレスである。第2の方法は、行及び列の個数が基数のサイズに等しい2次元アレイを使用する。生成された読み出しアドレスは、行ごとにアレイに書き込まれる。一旦満杯になると、アレイを列ごとに読み出すことによって、書き込まれたアドレスが得られる。カウンタCNT_IOは、列番号を待っている基数行列モジュール8.4を直接駆動するために使用することができる。計算は基数計算で開始するので、このアドレス信号に対する遅延は必要とされない。ひねり因子生成に適用される角度は、グローバル設定モジュール8.2によって生成された基準角とCNT_BUTTERFLYとの積として与えられる。その後、結果の角度は0と2πとの間に適合するように補正され、ひねり行列モジュール8.5へ送信される。各コマンドは、マルチ基数バタフライへの宛先のデータ及び係数が一致して生じるように送信されなければならない。
この第1の実施形態では、サイズN=N2×N3×N5=2p×3q×5rのすべてのDFTが利用可能である。基数4は、基数2のステージの個数及び計算時間を同時に削減するために使用することができる。それでもなお、いくつかのDFTは、ジョンソン及びビュルスによって示されたように、それらのDFTが回文として分解されることによって計算が不可能になる。N=N128・N3がDFTのサイズであると仮定する。N128=(4×2×4×4)は、正しく分解することができない。N128=(4×8×4)を作成するには、基数8が必要になる。
マルチ基数バタフライモジュール1.3のアーキテクチャを考えると、基数8のバタフライの計算は、16個のMACユニットを必要とする。DFT複雑度を低く維持するために、基数8のバタフライは、基数2のバタフライの第1のステージ及び基数4のバタフライの第2のステージをシーケンスすることによって行うことができる。したがって、追加のMACユニットは必要ない。ジェントルマン−サンデアルゴリズムの第1の部分を使用すると、基数8の行列を積:
に容易に分解することができる。
この基数8は、DFTのサイズに応じて、1、3、5、又は7だけ引き上げる必要がある。DFTの回転に使用される補助定理によって、
が与えられる。ここにはひねり因子の適用がないので、この基数8モジュールは依然として不完全である。
であると仮定する。ひねり因子を有する完全な基数8のモジュールは
となる。最後に、次数N=pqの対角行列D'p q,tを
によって定義する。前の式は
となる。
この式の主な関心は、基数2のバタフライの結果及び基数4のバタフライの結果の双方の第1の要素に適用されるひねり因子が常に1であるということである。その結果、基数4の乗算のいくつかが基数2の計算内で行われる。したがって、第1の要素の計算は乗算器を必要とせず、加算器のみを必要とする。これによって、2つ一組の加算器をマルチ基数バタフライモジュール1.3の内部に維持することが可能になる。最後に、第1のステージは、特定のひねり因子を有する通常の基数2のステージであり、第2のステージは、インターリーブされた出力を有する通常の基数4のステージである。主要な変更は必要とされない。
回文を形成するために、基数選択モジュール8.1は、最初にタイプ1の基数4のステージ、オプションのタイプ1の基数2又は基数8のステージ、及び最後にタイプ2の基数4のステージをシーケンスするように更新される。基数8のステージは、基数の2のステージ及び基数4のステージで構成され、それらのステージを標準のステージと区別するフラグが作成される。さらに、累乗値が素因数2pに付随するので、基数4についてステージカウンタを2だけ増加しなければならない。グローバル設定モジュール8.2においては、基数が4である場合、アドレス生成モジュール8.3のループの設定は、すべての値stage-1をstage-2に置き換えることによって得られる。基数8のバタフライの2つの部分は、タイプ2の基数バタフライと非常に類似しているので、ループ設定は容易に実施される。以下の表は、基数8に付随したループの設定を要約したものである。
基数行列モジュール8.4では、係数を記憶している場合には、基数4の行列の係数がこの表に挿入される。ひねり行列モジュール8.5では、生成されたひねり因子に角度オフセットを加算することが、基数8の内部の基数2のバタフライの計算に課せられる。このオフセットは、基数8の内部の基数2のランクに依存し、その値は
である。
データマネージャモジュール1.1は、データのロード及びダンプを含めて、データにアクセスするためのすべての演算をサポートする。また、データマネージャモジュール1.1は、ロード、DFT計算、及びダンプをチェックする状態マシンも伴っている。図10に示すこの状態マシンは、モジュールの機能を示している。図11aに示すそのまさに基本の機能では、データマネージャモジュール1.1は、サイズNmax(Nmaxは取り扱われるDFTの最大サイズであると仮定する)の1つのダブルポートメモリ(1つのポートは読み出し用であり、もう1つのポートは書き込み用)と、データ及びアドレスをルーティングするマルチプレクサとから成る。ロード演算は、入力サンプルをメモリの書き込みポートにリンクし、たとえばカウンタによってメモリを線形にアドレス指定することによって行われる。計算中、データはメモリの読み出しポートから取り出され、結果は書き込みポートを通して書き込まれる。この時、DFTエンジンからのアドレスが使用される。マルチ基数バタフライモジュール1.3のレイテンシは、特にバタフライの入力及び出力が異なるタイプ2の基数の期間中、読み出し/書き込みのオーバーラップに対する保護の働きをする。完了すると、最終結果は読み出しポートから線形にダンプされる。ロード及びダンプは線形演算であるので、新しいロードはダンプの開始直後に開始することができる。図11bは、この処理のタイミングシーケンスを示している。
レイテンシを削減し、さらには、一定フローの入力サンプルの計算を可能にするために、いくつかの独立した最適化を適用することができる。
第1の最適化は、ユーザクロックから独立したDFTコア駆動クロックを増加させることに本質がある。この第1の最適化は、レイテンシを大幅に削減することができる。
第2の最適化は、ロード、計算、及びダンプの演算をパイプライン化するものであり、図11Aに示されている。このパイプラインは、第1のメモリと同一の第2のメモリを使用することによって作成される。一方のメモリのサンプルに対して計算を行っている間、他方のメモリはロード及びダンプに利用可能になる。2つの異なるメモリは、入力/出力演算のためのメモリ及びワーキングメモリとして交互に使用される。新たなDFTのロードが現在のDFTの計算よりも多くの時間を要するという条件下では、この最適化によってレイテンシが削減され、連続したDFTをシーケンスすることが可能になる。先に述べた最適化と組み合わせることによって、より幅広いパネルのDFTをシーケンスすることが可能になる。図11B及び図11Cは、第1の最適化を伴わない処理及び第1の最適化を伴った処理を示している。
第3の最適化は、DFT内部クロックを増加させることなく計算時間を削減するものである。これは、クロック周波数がターゲット装置の限界に達しているときに非常に役立つ。この解決法は、並列性を活用するものであり、実際のマルチ基数バタフライユニットから独立している。この解決法は、任意のバタフライ計算ユニットに使用することができる。また、この解決法は、たとえばマルチコアプロセッサ上でソフトウェアにおいて実施することもできる。計算中、サンプルの前半がマルチ基数バタフライモジュール1.3の内部で扱われる。一方、サンプルの後半はインスタンス化された新しいマルチ基数バタフライモジュール内で扱われる。この切り取りは、ルリタニアマップの偶数番号の行及び基数番号の行に従って行われる。DFTエンジンは変更されないが、この場合、現在の基数に付随したルリタニアマップの偶数行上にある(figuring)点に関連するアドレスのみを出力する。偶数行をアドレス指定するとき、次の行(奇数)のアドレスが導き出され、双方の行からの点を2つの独立した計算ユニットの内部で同時に扱うことができる。この切り取りの利点は、行に対して行われる厳密な同一の演算のために、行を容易に並列計算することができるということである。いくつかの解決法が存在するが、すべての解決法は、予測された基数に付随したルリタニアマップの偶数行及び奇数行上にある点が2つの別々のメモリ内に常に置かれるように点を分散させなければならない。これは、ルリタニアマップが異なるので、基数が変化するごとに、点を再分散することを暗に意味する。したがって、4つの分散が予測される。第1の分散はロードの場合であり、第2の分散は或る基数から同じ基数に変化する場合であり、第3の分散は或る基数から別の基数に変化する場合であり、最後の分散はダンプの場合である。
以下で詳細に説明する解決法は、サイズNmax/2の2つのメモリへのデータの分散及び記憶の問題を解決する。ここで、Nmaxは、取り扱われるDFTの最大サイズである。基数を変更すると読み出しアドレス及び書き込みアドレスが異なるものになるので、さらに2つの同一のメモリが、読み出し/書き込みのオーバーラップを防止するために使用される。さらに、特定の基数シーケンス(4,3,5)が、実施の可能な最適化及び容易化のために使用される。図12A及び図12Bは、全体的な解決法をその処理の時間シーケンスと共に示している。既存のアーキテクチャを最大限維持するために、抽象レイヤが4つのメモリをカプセル化する。これにより、DFTエンジンは、あたかもサイズNmaxの単一のメモリが存在するかのようにメモリにアクセスする。このレイヤによって、データが存在すべきアドレスに対応する仮想アドレス及びデータが実際に記憶されるアドレスに対応する物理アドレスが導入される。このレイヤは、ルリタニアマップの圧縮に基づく自己構築型アドレス変換表と、データを再編成するためのロジックとから成る。
圧縮によって、素因数に付随した2次元ルリタニアマップが、2行の新しいルリタニアマップに変換される。第1行は、オリジナルのルリタニアマップの偶数行からのすべての点を含む。第2行は、奇数行からのすべての点を含む。使用されるアルゴリズムは、次のとおりである。
NがDFTのサイズであると仮定する。点は0からN−1まで1つずつ新しいアレイに挿入される。点は、挿入されるときに、列0から行に挿入される。点は、ルリタニアマップの偶数行に属する場合には第1行に挿入され、そうでない場合には第2行に挿入される。完了すると、循環回転が第2行に適用されて点Niが点0の下に配置される。奇数の行数を含むルリタニアマップに対しては例外が設けられ、この例外は、No個の点が挿入されるごとに第2行にパディング点(padding point)を追加することに本質がある。しかしながら、基数3及び基数5に付随した圧縮されたルリタニアマップは、常に、それらの第1行には偶数点を含み、それらの第2行には奇数点を含む。
この圧縮されたルリタニアマップは、2つのメモリの内部のデータの位置を表す。NがDFTサイズであると仮定すると、抽象レイヤで使用されるアドレス変換表は、圧縮されたルリタニアマップの内部のデータ0からデータN−1の座標である行及び列を含む。常に同じである基数3及び基数5に付随した変換表を除いて、異なるルリタニアマップと同数の変換表が存在する(前のパラグラフ参照)。このことが、DFTを処理する前に基数4の変換表を構築しなければならない理由である。NがDFTサイズであり、RrがサイズNi行×No列のルリタニアマップであり、CTTが変換表であると仮定する。ここで、Niはrの累乗であり、No=N/Niである。完全な変換表を再生成するために、ルリタニアマップにおいて1番目の点が配置される行R1、及び圧縮されたルリタニアマップにおいてNi番目の点が配置される最終列FCNiのような事前に計算された値が必要である。累算器Rxは、ルリタニアマップの内部でx番目の点が配置される行を含む。カウンタJumpが、パディング要素を加えるのに使用される。
データロード中、データは、図13に示すように、その後の基数4のバタフライ用にデータに容易にアクセスすることができるように、2つのメモリの内部に分散される。取り扱われるDFTサイズの分解は、常に基数4のバタフライを暗に意味するので、基数4のバタフライが最初に計算され、データロードの最適化が可能になる(同じ引数が、常に基数3の後に来るダンプに使用される)。ロード及びアドレス変換表構築の双方は直線的(linearly)に行われるので、基数4アドレス変換表構築の開始直後にロードを開始することができる。
バタフライの計算中、DFTエンジンからの読み出しアドレスを変換し、その結果を4つのメモリの読み出しアドレスポートに適用することによって、入力データが2つのメモリからフェッチされる。図14Aに示すように、マルチプレクサ14.1及び14.2が、データバス出力において使用され、データを含むメモリが選択される。マルチ基数バタフライモジュールの結果を、DFTエンジンからの書き込みアドレスで記憶するには、次の基数が現在の基数と異なる(基数2は基数4とみなされる)ときは読み出し/書き込みのオーバーラップを防止し、基数がシーケンスの最後のものであるときはロードデータ及びダンプデータが決して同じメモリ内にないように、メモリ対を変更することがまず必要になる。マルチプレクサ14.3によって、これを行うことが可能になる。その場合、より多くの演算が場合に応じて適用される。第1の演算はデータに作用する。双方のマルチ基数バタフライからのデータは、図14.4に従って8つの要素から成るセットによって独立に再編成される。シーケンス(d(0),d(1),d(2),d(3),d(4),d(5),d(6),d(7))は、(d(0),d(4),d(1),d(5),d(2),d(6),d(3),d(7))となる。これは、双方の信号を一致して保持するためにアドレスに適用されるレイテンシを暗に意味する。この演算は、現在の基数がタイプ2であるとき又は基数が4であるときに行わなければならず、基数8の計算に属する。第1のメモリに達するデータ又は第2のメモリに達するデータを交互にすることが必要である。第2の演算もデータに作用する。この時、双方のマルチ基数バタフライからのデータは、2つの要素から成るセットによってそれらのデータ間でスクランブルされる。シーケンス(d(0),d(1))が第1のバタフライから来たものであり、シーケンス(e(0),e(1))がそれと同時に第2のバタフライから来たものであると仮定すると、このスクランブルによって、図14B(要素14.5)によって示されるように、4つ1組がスクランブルされて、シーケンス(d(0),e(0))が第1のメモリへ、シーケンス(d(1),e(1))が第2のメモリへ、同時に出力される。これも、アドレスに渡されるレイテンシを暗に意味する。この演算は、図14.6に示すDFTエンジンからの2つの書き込みアドレスから成るセットに作用する第3の演算を伴っている。シーケンス(a(0),a(1))は、(a(0),a(0)+Ni)となる。ここで、Niは、サイズNのDFTの分解における現在の基数の累乗である。これら最後の2つの演算は、素因数4から別の素因数に変化するときに必要であり、2つのメモリの内部でデータを再分散する。最後の演算は変換されたアドレスに作用するが、第2のメモリに付随したアドレスにのみ作用する。No(=N/Ni)番目の点が次の素因数に付随した圧縮されたルリタニアマップの内部に配置される列番号に対応するオフセットが、加算器14.7によってアドレスに加算される。これは、0番目の点と同時に来る点がNo番目の点であるので必要であり、素因数5がNの分解に属するときに適用されなければならない。最後に、図15に示される表は、これらの演算を適用しなければならない場合を要約している。
結果のダンプの前に、基数シーケンス(4,5,3)のために、また3の累乗に付随した変換表の特定の形のために、偶数番目の点は第1のメモリの内部に線形に記憶され、奇数番目の点はN3番目の点からではあるが第2のメモリの内部に線形に記憶される。1番目の点の位置は、第2のメモリのアドレスを補正するために知られていなければならない。次に、点は、第1のメモリ又は第2のメモリのいずれかから交互に出力される。図16は、データダンプのブロック図を表している。加算器16.1は、第2のメモリのアドレスを補正するために使用される。マルチプレクサモジュール16.2は、双方のメモリの出力を交互にするために使用される。