(57)【要約】高速フーリエ変換（ＦＦＴ）を実行するための技法が、説明される。一部の態様においては、高速フーリエ変換を計算することは、メモリ（６１０）と、１つまたは複数のレジスタ（６５０）および無遅延パイプライン（６３０）を有する高速フーリエ変換エンジン（ＦＦＴｅ）と、を有する装置を用いて達成され、ＦＦＴｅは、メインメモリ（６１０）からのマルチポイント入力を受け取り、１つまたは複数のレジスタ（６５０）のうちの少なくとも１つに受け取られた入力を記憶し、そして無遅延パイプラインを使用して入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように、構成されている。
2009535678.tif 000002
【特許請求の範囲】
【請求項１】
メモリと、
１つまたは複数のレジスタおよび無遅延パイプラインを有し、前記メインメモリからのマルチポイント入力を受け取り、前記１つまたは複数のレジスタのうちの少なくとも１つに前記受け取られた入力を記憶し、そして前記無遅延パイプラインを使用して前記入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように構成された高速フーリエ変換エンジン（ＦＦＴｅ）と、
を備える装置。
【請求項２】
前記パイプラインは、ギャップレスである、請求項１に記載の装置。
【請求項３】
前記ＦＦＴｅは、基数８のバタフライコアである、請求項１に記載の装置。
【請求項４】
前記ＦＦＴｅは、基数４のバタフライコアである、請求項１に記載の装置。
【請求項５】
前記ＦＦＴｅは、少なくとも６４個のレジスタを有する、請求項１に記載の装置。
【請求項６】
複素乗算器をさらに備え、前記少なくとも６４個のレジスタのうちの５６個のレジスタは、前記複素乗算器からの入力を受け取る、請求項５に記載の装置。
【請求項７】
前記少なくとも６４個のレジスタのうちの３２個のレジスタは、前記メインメモリからの入力を受け取る、請求項５に記載の装置。
【請求項８】
前記ＦＦＴｅは、ｚポイントのマルチポイント入力を受け取るように構成され、ｚは、５１２の倍数である、請求項１に記載の装置。
【請求項９】
前記ＦＦＴｅは、さらに、前記計算された変換を出力するように構成されている、請求項１に記載の装置。
【請求項１０】
前記ＦＦＴｅは、前記第１の入力を読み取った後に前記出力をｘサイクル書き込むことを開始するように構成され、ｘは、８とパイプライン遅延を加えたものである、請求項９に記載の装置。
【請求項１１】
前記ＦＦＴｅは、前記第１の入力を読み取った後に前記出力をｙサイクル書き込むことを完了するように構成され、ｙは、１６とパイプライン遅延を加えたものである、請求項９に記載の装置。
【請求項１２】
前記ＦＦＴｅは、第１の組の入力を読み取るように構成された第１の組の加算器を含み、前記第１の入力は、前記第１の組の加算器による前記読取りに先立ってビット反転される、請求項１に記載の装置。
【請求項１３】
メインメモリからのマルチポイント入力を受け取るように、
１つまたは複数のレジスタのうちの少なくとも１つに前記受け取られた入力を記憶するように、そして
無遅延パイプラインを使用して前記入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように、
構成された高速フーリエ変換エンジン（ＦＦＴｅ）。
【請求項１４】
前記ＦＦＴｅは、さらに、ギャップレスパイプラインを使用して前記入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように構成されている、請求項１３に記載のＦＦＴｅ。
【請求項１５】
前記ＦＦＴｅは、さらに、基数８のバタフライコアを使用して高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように構成されている、請求項１３に記載のＦＦＴｅ。
【請求項１６】
前記ＦＦＴｅは、さらに、基数４のバタフライコアを使用して高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように構成されている、請求項１３に記載のＦＦＴｅ。
【請求項１７】
前記ＦＦＴｅは、さらに、少なくとも６４個のレジスタに前記受け取られた入力を記憶するように構成されている、請求項１３に記載のＦＦＴｅ。
【請求項１８】
前記ＦＦＴｅは、さらに、複素乗算器からの前記受け取られた入力を記憶するように構成され、前記少なくとも６４個のレジスタのうちの５６個のレジスタは、前記複素乗算器からの入力を受け取る、請求項１７に記載のＦＦＴｅ。
【請求項１９】
前記ＦＦＴｅは、前記少なくとも６４個のレジスタのうちの３２個のレジスタにメインメモリからの前記受け取られた入力を記憶するように構成されている、請求項１７に記載のＦＦＴｅ。
【請求項２０】
前記ＦＦＴｅは、さらに、ｚポイントのマルチポイント入力を受け取るように構成され、ｚは、５１２の倍数である、請求項１３に記載のＦＦＴｅ。
【請求項２１】
前記ＦＦＴｅは、さらに、前記計算された変換を出力するように構成されている、請求項１３に記載のＦＦＴｅ。
【請求項２２】
前記ＦＦＴｅは、さらに、前記第１の入力を読み取った後に、前記出力をｘサイクル書き込むことを開始するように構成され、ｘは、８とパイプライン遅延を加えたものである、請求項２１に記載のＦＦＴｅ。
【請求項２３】
前記ＦＦＴｅは、さらに、前記第１の入力を読み取った後に、前記出力をｙサイクル書き込むことを完了するように構成され、ｙは、１６とパイプライン遅延を加えたものである、請求項２１に記載のＦＦＴｅ。
【請求項２４】
前記ＦＦＴｅは、第１の組の入力を読み取るように構成される第１の組の加算器を含み、前記第１の入力は、前記第１の組の加算器による前記読取りに先立ってビット反転される、請求項１３に記載のＦＦＴｅ。
【請求項２５】
メモリを提供することと、
１つまたは複数のレジスタおよび無遅延パイプラインを有する高速フーリエ変換エンジン（ＦＦＴｅ）を提供することと、
前記ＦＦＴｅを前記メインメモリからのマルチポイント入力を受け取るように構成することと、
前記１つまたは複数のレジスタのうちの少なくとも１つに前記受け取られた入力を記憶することと、
前記無遅延パイプラインを使用して前記入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算することと、
を備える方法。
【請求項２６】
前記ＦＦＴｅを提供することは、ギャップレスパイプラインを提供することをさらに備える、請求項２５に記載の方法。
【請求項２７】
前記ＦＦＴｅを提供することは、基数８のバタフライコアを提供することを備える、請求項２５に記載の方法。
【請求項２８】
前記ＦＦＴｅを提供することは、基数４のバタフライコアを提供することを備える、請求項２５に記載の方法。
【請求項２９】
前記ＦＦＴｅを提供することは、少なくとも６４個のレジスタを提供することを備える、請求項２５に記載の方法。
【請求項３０】
前記ＦＦＴｅを提供することは、複素乗算器を提供することをさらに備え、前記少なくとも６４個のレジスタのうちの５６個のレジスタは、前記複素乗算器からの入力を受け取る、請求項２９に記載の方法。
【請求項３１】
前記ＦＦＴｅを提供することは、前記メインメモリからの入力を受け取るように、前記少なくとも６４個のレジスタのうちの３２個のレジスタを提供することを備える、請求項２９に記載の方法。
【請求項３２】
マルチポイント入力を受け取るように前記ＦＦＴｅを構成することは、ｚポイントのマルチポイント入力を受け取るように前記ＦＦＴｅを構成することを備え、ｚは、５１２の倍数である、請求項２５に記載の方法。
【請求項３３】
前記ＦＦＴｅを構成することは、前記計算された変換を出力することをさらに備える、請求項２５に記載の方法。
【請求項３４】
前記ＦＦＴｅを構成することは、前記第１の入力を読み取った後に前記出力をｘサイクル書き込むことを開始することを備え、ｘは、８とパイプライン遅延を加えたものである、請求項３３に記載の方法。
【請求項３５】
前記ＦＦＴｅを構成することは、前記第１の入力を読み取った後に前記出力をｙサイクル書き込むことを完了することを備え、ｙは、１６とパイプライン遅延を加えたものである、請求項３３に記載の方法。
【請求項３６】
前記ＦＦＴｅを構成することは、第１の組の入力を読み取るように構成される第１の組の加算器を含むことをさらに備え、前記第１の入力は、前記第１の組の加算器による前記読取りに先立ってビット反転される、請求項２５に記載の方法。
【請求項３７】
第１のデータを記憶するための手段と、
前記第１のデータを記憶するための前記手段よりも高速に、第２のデータを記憶するための１つまたは複数の手段と、
前記第１のデータを記憶するための前記手段から、マルチポイント入力を受け取るための手段と、
第２のデータを記憶するための前記１つまたは複数の手段のうちの少なくとも１つに、前記受け取られた入力を記憶するための手段と、
無遅延パイプラインを使用して、前記入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するための手段と、
を備える処理システム。
【請求項３８】
ギャップレスパイプラインを使用して、前記入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するための手段、
をさらに備える請求項３７に記載の処理システム。
【請求項３９】
基数８のバタフライコアを使用して、前記データを処理するための手段、
をさらに備える請求項３７に記載の処理システム。
【請求項４０】
基数４のバタフライコアを使用して、前記データを処理するための手段、
をさらに備える、請求項３７に記載の処理システム。
【請求項４１】
第２のデータを記憶するための前記手段のうちの少なくとも６４個に、前記受け取られた入力を記憶するための手段、
をさらに備える請求項３７に記載の処理システム。
【請求項４２】
複素乗数を計算するための手段をさらに備え、第２のデータを記憶するための前記手段のうちの前記少なくとも６４個のうちの５６個は、複素乗数を計算するための前記手段からの入力を受け取る、請求項４１に記載の処理システム。
【請求項４３】
第１のデータを記憶するための前記手段からの入力を受け取るための手段をさらに備え、前記手段のうちの３２個は、第２のデータを記憶するための前記１つまたは複数の手段のうちの少なくとも１つに前記受け取られた入力を記憶するためのものである、請求項４１に記載の処理システム。
【請求項４４】
前記第１のデータを記憶するための前記手段から５１２ポイントの入力を受け取るための手段、
をさらに備える請求項３７に記載の処理システム。
【請求項４５】
前記計算された変換を出力するための手段、
をさらに備える請求項３７に記載の処理システム。
【請求項４６】
無遅延パイプラインを使用して前記入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するための手段、をさらに備え、前記ＦＦＴｅは、前記第１の入力を読み取った後に前記出力をｘサイクル書き込むことを開始するように構成され、ｘは、８とパイプライン遅延を加えたものである、請求項４５に記載の処理システム。
【請求項４７】
無遅延パイプラインを使用して前記入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するための手段、をさらに備え、前記ＦＦＴｅは、前記第１の入力を読み取った後に前記出力をｙサイクル書き込むことを完了するように構成され、ｙは、１６とパイプライン遅延を加えたものである、請求項４５に記載の処理システム。
【請求項４８】
無遅延パイプラインを使用して前記入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するための手段、をさらに備え、前記ＦＦＴｅは、第１の組の入力を読み取るように構成される第１の組の加算器を含むように構成され、前記第１の入力は、前記第１の組の加算器による前記読取りに先立ってビット反転される、請求項３７に記載の処理システム。
【請求項４９】
Ｉ／ＦＦＴプロセッサがＩ／ＦＦＴを計算する方法を実行するための１組の命令、を含むコンピュータ可読媒体であって、前記命令は、
メインメモリからのマルチポイント入力を受け取るルーチンと、
１つまたは複数のレジスタのうちの少なくとも１つに前記受け取られた入力を記憶するルーチンと、
無遅延パイプラインを使用して前記入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するルーチンと、
を備える、
コンピュータ可読媒体。
【請求項５０】
前記ＦＦＴｅは、さらに、ギャップレスパイプラインを使用して前記入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように構成されている、請求項４９に記載のコンピュータ可読媒体。
【請求項５１】
前記ＦＦＴｅは、さらに、基数８のバタフライコアを使用して高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように構成されている、請求項４９に記載のコンピュータ可読媒体。
【請求項５２】
前記ＦＦＴｅは、さらに、基数４のバタフライコアを使用して高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように構成されている、請求項４９に記載のコンピュータ可読媒体。
【請求項５３】
前記ＦＦＴｅは、さらに、少なくとも６４個のレジスタに前記受け取られた入力を記憶するように構成されている、請求項４９に記載のコンピュータ可読媒体。
【請求項５４】
前記ＦＦＴｅは、さらに、複素乗算器からの前記受け取られた入力を記憶するように構成され、前記少なくとも６４個のレジスタのうちの５６個のレジスタは、前記複素乗算器からの入力を受け取る、請求項５３に記載のコンピュータ可読媒体。
【請求項５５】
前記ＦＦＴｅは、さらに、前記少なくとも６４個のレジスタのうちの３２個のレジスタに、メインメモリからの前記受け取られた入力を記憶するように構成されている、請求項５３に記載のコンピュータ可読媒体。
【請求項５６】
前記ＦＦＴｅは、さらに、ｚポイントのマルチポイント入力を受け取るように構成され、ｚは、５１２の倍数である、請求項４９に記載のコンピュータ可読媒体。
【請求項５７】
前記ＦＦＴｅは、さらに、前記計算された変換を出力するように構成されている、請求項４９に記載のコンピュータ可読媒体。
【請求項５８】
前記ＦＦＴｅは、さらに、前記第１の入力を読み取った後に前記出力をｘサイクル書き込むことを開始するように構成され、ｘは、８とパイプライン遅延を加えたものである、請求項５７に記載のコンピュータ可読媒体。
【請求項５９】
前記ＦＦＴｅは、さらに、前記第１の入力を読み取った後に前記出力をｙサイクル書き込むことを完了するように構成され、ｙは、１６とパイプライン遅延を加えたものである、請求項５７に記載のコンピュータ可読媒体。
【請求項６０】
前記ＦＦＴｅは、第１の組の入力を読み取るように構成された第１の組の加算器を含み、前記第１の入力は、前記第１の組の加算器による前記読取りに先立ってビット反転される、請求項４９に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【優先権主張】
【０００１】
本特許出願は、ここでの譲受人に譲渡され、ここにおける参照によりここに明示的に組み込まれる、２００６年４月４日に出願され「キーパーＦＦＴブロック(KEEPER FFT BLOCK)」と題された仮出願第６０／７８９，４５３号の優先権を主張する。
【背景】
【０００２】
（技術分野）
本開示された実施形態は、一般に信号処理に関し、より詳細には、高速フーリエ変換(Fast Fourier Transform)（ＦＦＴ）の効率的な計算のための装置および方法に関する。
【０００３】
（背景）
フーリエ変換(Fourier Transform)は、時間ドメイン信号(time domain signal)をその周波数ドメインの対応するもの(frequency domain counterpart)に対してマッピングする(map)ために使用されることができる。逆に、逆フーリエ変換(Inverse Fourier Transform)は、周波数ドメイン信号をその時間ドメインの対応するものに対してマッピングするために使用されることができる。フーリエ変換は、時間ドメイン信号のスペクトル解析(spectral analysis)のためにとりわけ有用である。さらに、直交周波数分割多重化(orthogonal Frequency Division Multiplexing)（ＯＦＤＭ）をインプリメントする(implementing)システムなどの通信システムは、線形に間隔の空けられたトーンから複数の時間ドメインシンボル(multiple time domain symbols)を生成するために、そしてそれらのシンボルから周波数を回復する(recover)ために、フーリエ変換の特性を使用することができる。
【０００４】
サンプリングされたデータシステムは、プロセッサが、あらかじめ決定された数のサンプルに対して変換を実行することができるようにするために離散フーリエ変換(Discrete Fourier Transform)（ＤＦＴ）をインプリメント(implement)することができる。しかしながら、ＤＦＴは、計算集約的であり、実行するために途方もない量の処理能力を必要とする。ＮポイントのＤＦＴを実行するために必要とされる計算の回数は、およそＮ２の程度であり、Ｏ（Ｎ２）と示される。多数のシステムにおいては、ＤＦＴを実行することに専用にされる処理能力の量は、他のシステムオペレーションのために使用可能な処理の量を低減させてしまう可能性がある。さらに、リアルタイムシステムとして動作するように構成されるシステムは、計算のために割り付けられる時間内に望ましいサイズのＤＦＴを実行するために十分な処理能力を有さない可能性がある。
【０００５】
高速フーリエ変換（ＦＦＴ）は、ＤＦＴインプリメンテーション(DFT implementation)と比較してかなり少ないオペレーションの形でフーリエ変換が実行されることを可能にするフーリエ変換の離散的インプリメンテーションである。特定のインプリメンテーションに応じて、基数ｒのＦＦＴを実行するために必要とされる計算の回数は、一般的におよそＮ×ｌｏｇｒ（Ｎ）の程度であり、Ｏ（Ｎｌｏｇｒ（Ｎ））として示される。
【０００６】
電気通信における１つの典型的なＦＦＴは、基数８のＦＦＴである。ＦＦＴ計算は、多くの場合にバタフライコア(butterfly core)の使用を必要とするので、様々なポイントのＦＦＴが、基数８のＦＦＴに基づいた計算を使用して導き出されることができる。その後、基数８のＦＦＴ計算がより効率的に計算されることができる場合には、その利点は、基数８のＦＦＴバタフライコアを使用する他のＦＦＴに対して引き継がれる。
【０００７】
過去においては、ＦＦＴをインプリメントするシステムは、ＦＦＴを実行するために汎用プロセッサ、またはスタンドアロンのデジタル信号プロセッサ(Digital Signal Processor)（ＤＳＰ）を使用している可能性がある。しかしながら、システムは、ますます、デバイスについて必要とされる機能の大部分をインプリメントするように特に設計された特定用途向け集積回路(Application Specific Integrated Circuit)（ＡＳＩＣ）を組み込むようになっている。ＡＳＩＣ内にシステム機能をインプリメントすることは、チップカウントと、複数の(multiple)集積回路にインターフェースするために必要とされるグルーロジック(glue logic)とを最小限にする。低減させられたチップカウントは、一般的に機能のうちのどれも犠牲にすることなしにデバイスについてのより小さな物理フットプリント(physical footprint)を可能にする。
【０００８】
ＡＳＩＣダイ内部の面積の量は、限られており、ＡＳＩＣ内にインプリメントされる機能ブロックは、全体的なＡＳＩＣ設計の機能を改善するために、サイズと、速度と、電力が最適化される必要がある。ＦＦＴに専用にされるリソースの量は、ＦＦＴに専用にされる使用可能なリソースのパーセンテージを制限するために最小にされることができる。変換が、システム要件をサポートするために十分な速度で実行されることができることを保証するために、さらに十分なリソースが、ＦＦＴに専用にされる必要がある。さらに、ＦＦＴモジュールによって消費される電力の量は、電源要件と、関連する熱放散を最小にするために最小にされる必要がある。さらに、ＦＦＴ計算速度は、一般的な電気通信アプリケーションが、計算がリアルタイムで完了されることを必要とするので、最適化される必要がある。
【０００９】
したがって、当技術分野においては、ＡＳＩＣなどの集積回路内へのインプリメンテーションのためのＦＦＴアーキテクチャを最適化する技法についての必要性が存在する。
【発明の開示】
【００１０】
［概要］
高速フーリエ変換（ＦＦＴ）および逆高速フーリエ変換(Inverse Fast Fourier Transform)（ＩＦＦＴ）の効率的な計算のための技法が、ここにおいて説明される。
【００１１】
一部の態様においては、Ｉ／ＦＦＴの計算は、メモリと、１つまたは複数のレジスタおよび無遅延パイプラインを有する高速フーリエ変換エンジン(Fast Fourier Transform engine)（ＦＦＴｅ）と、を有する装置(apparatus)を用いて達成され、このＦＦＴｅは、メインメモリからのマルチポイント入力(multi-point input)を受け取り、１つまたは複数のレジスタのうちの少なくとも１つに受け取られた入力を記憶し、そして無遅延パイプラインを使用して入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように、構成される。入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方の計算は、ギャップレスパイプライン(gapless pipeline)を使用することができる。ＦＦＴｅは、基数８のバタフライコア(radix-8 butterfly core)を有することができる。ＦＦＴｅは、基数４のバタフライコアを有することができる。ＦＦＴｅは、少なくとも６４個のレジスタを有することができる。ＦＦＴｅは、複素乗算器(complex multiplier)をさらに含むことができ、ここで少なくとも６４個のレジスタのうちの５６個のレジスタは、それらの複素乗算器から入力を受け取る。少なくとも６４個のレジスタのうちの３２個のレジスタは、メインメモリからの入力をうけ取ることができる。ＦＦＴｅは、ｚポイントのマルチポイント入力を受け取るように構成されることができ、ここでｚは、５１２の倍数である。ＦＦＴｅは、さらに、計算された変換を出力するように構成されることができる。ＦＦＴｅは、第１の入力を読み取った後に出力をｘサイクル書き込むこと(writing the output x cycles)を開始するように構成されることができ、ここでｘは、８とパイプライン遅延を加えたもの(8 plus a pipeline delay)である。ＦＦＴｅは、第１の入力を読み取った後に出力をｙサイクル書き込むことを完了するように構成されることができ、ここでｙは、１６とパイプライン遅延を加えたものである。ＦＦＴｅは、第１の組の入力を読み取るように構成される第１の組の加算器を含むことができ、それらの第１の入力は、第１の組の加算器による読取りに先立ってビット反転される(bit-reversed)。
【００１２】
他の態様においては、Ｉ／ＦＦＴの計算は、メインメモリからマルチポイント入力を受け取り、１つまたは複数のレジスタのうちの少なくとも１つに受け取られた入力を記憶し、無遅延パイプラインを使用して入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように構成された高速フーリエ変換エンジン（ＦＦＴｅ）を用いて達成される。ＦＦＴｅは、さらに、ギャップレスパイプラインを使用して入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように構成されることもできる。ＦＦＴｅは、さらに、基数８のバタフライコアを使用して高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように構成されることもできる。ＦＦＴｅは、さらに、基数４のバタフライコアを使用して高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように構成されることもできる。ＦＦＴｅは、さらに少なくとも６４個のレジスタに受け取られた入力を記憶するように構成されることもできる。ＦＦＴｅは、さらに複素乗算器からの受け取られた入力を記憶するように構成されることもでき、ここで少なくとも６４個のレジスタのうちの５６個のレジスタは、複素乗算器から入力を受け取る。ＦＦＴｅは、さらに少なくとも６４個のレジスタのうちの３２個のレジスタにメインメモリからの受け取られた入力を記憶するように構成されることもできる。ＦＦＴｅは、さらにｚポイントのマルチポイント入力を受け取るように構成されることもでき、ここでｚは、５１２の倍数である。ＦＦＴｅは、さらに、計算された変換を出力するように構成されることもできる。ＦＦＴｅは、さらに、第１の入力を読み取った後に出力をｘサイクル書き込むことを開始するように構成されることもでき、ここでｘは、８とパイプライン遅延を加えたものである。ＦＦＴｅは、さらに、第１の入力を読み取った後に出力をｙサイクル書き込むことを完了するように構成されることもでき、ここでｙは、１６とパイプライン遅延を加えたものである。ＦＦＴｅは、第１の組の入力を読み取るように構成された第１の組の加算器を含むことができ、それらの第１の入力は、第１の組の加算器による読取りに先立ってビット反転される。
【００１３】
さらに他の態様においては、Ｉ／ＦＦＴの計算は、メモリを提供することと、１つまたは複数のレジスタと無遅延パイプラインとを有する高速フーリエ変換エンジン（ＦＦＴｅ）を提供することと、メインメモリからのマルチポイント入力を受け取るようにＦＦＴｅを構成することと、１つまたは複数のレジスタのうちの少なくとも１つに受け取られた入力を記憶することと、無遅延パイプラインを使用して入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算することと、を含む方法を用いて達成される。ＦＦＴｅは、さらにギャップレスパイプラインを提供することを含むこともできる。ＦＦＴｅは、基数８のバタフライコアを提供することを含むことができる。ＦＦＴｅは、基数４のバタフライコアを提供することを含むことができる。ＦＦＴｅは、少なくとも６４個のレジスタを提供することを含むことができる。ＦＦＴｅは、さらに複素乗算器を提供することも含むことができ、ここで少なくとも６４個のレジスタのうちの５６個のレジスタは、複素乗算器からの入力を受け取る。ＦＦＴｅは、メインメモリから入力を受け取る、少なくとも６４個のレジスタのうちの３２個のレジスタを提供することを含むことができる。ＦＦＴｅは、ｚポイントのマルチポイント入力を受け取るようにＦＦＴｅを構成することを備えるマルチポイント入力を受け取るように構成されることができ、ここでｚは、５１２の倍数である。ＦＦＴｅは、計算された変換を出力することをさらに含むように構成されることができる。ＦＦＴｅは、第１の入力を読み取った後に出力をｘサイクル書き込むことを開始することを含むことができ、ここでｘは、８とパイプライン遅延を加えたものである。ＦＦＴｅは、第１の入力を読み取った後に出力をｙサイクル書き込むことを完了すること、を含むことができ、ここでｙは、１６とパイプライン遅延を加えたものである。ＦＦＴｅは、さらに、第１の組の入力を読み取るように構成される第１の組の加算器を含むことができ、第１の入力は、第１の組の加算器による読取りに先立ってビット反転される。
【００１４】
一部の態様においては、Ｉ／ＦＦＴの計算は、第１のデータを記憶するための手段と、第１のデータを記憶するための手段よりも高速に第２のデータを記憶するための１つまたは複数の手段と、第１のデータを記憶するための手段からのマルチポイント入力を受け取るための手段と、第２のデータを記憶するための１つまたは複数の手段のうちの少なくとも１つにその受け取られた入力を記憶するための手段と、無遅延パイプラインを使用して入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するための手段と、を有する処理システムを用いて達成される。本処理システムは、ギャップレスパイプラインを使用して入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するための手段を、さらに含むこともできる。本処理システムは、基数８のバタフライコアを使用してデータを処理するための手段を、さらに含むこともできる。本処理システムは、基数４のバタフライコアを使用してデータを処理するための手段を、さらに含むこともできる。本処理システムは、第２のデータを記憶するための少なくとも６４個の手段にその受け取られた入力を記憶するための手段を、さらに含むこともできる。本処理システムは、複素乗数(complex multiplier)を計算するための手段を、さらに含むこともでき、ここで第２のデータを記憶するための少なくとも６４個の手段のうちの５６個は、複素乗数を計算するための手段から、入力を受け取る。本処理システムは、第１のデータを記憶するための手段から入力を受け取るための手段を、さらに含むこともでき、ここでこれらの手段のうちの３２個は、第２のデータを記憶するための１つまたは複数の手段のうちの少なくとも１つに、その受け取られた入力を記憶するためのものである。本処理システムは、第１のデータを記憶するための手段から５１２ポイントの入力を受け取るための手段を、さらに含むこともできる。本処理システムは、計算された変換を出力するための手段を、さらに含むこともできる。本処理システムは、無遅延パイプラインを使用して入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するための手段を、さらに含むこともでき、ＦＦＴｅは、第１の入力を読み取った後に出力をｘサイクル書き込むことを開始するように構成され、ここでｘは、８とパイプライン遅延を加えたものである。本処理システムは、無遅延パイプラインを使用して入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するための手段を、さらに含むこともでき、ＦＦＴｅは、第１の入力を読み取った後に出力をｙサイクル書き込むことを完了するように構成され、ここでｙは、１６とパイプライン遅延を加えたものである。本処理システムは、無遅延パイプラインを使用して入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するための手段を、さらに含むこともでき、ＦＦＴｅは、第１の組の入力を読み取るように構成された第１の組の加算器を含むように構成され、それらの第１の入力は、第１の組の加算器によ���読取りに先立って、ビット反転される。
【００１５】
さらに他の態様においては、Ｉ／ＦＦＴの計算は、Ｉ／ＦＦＴプロセッサがＩ／ＦＦＴを計算する方法を実行するための１組の命令(a set of instructions)を含むコンピュータ可読媒体(computer readable media)を用いて達成され、該命令は、メインメモリからのマルチポイント入力を受け取るルーチンと、１つまたは複数のレジスタのうちの少なくとも１つに、受け取られた入力を記憶するルーチンと、無遅延パイプラインを使用して入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するルーチンと、を含む。ＦＦＴｅは、さらに、ギャップレスパイプラインを使用して入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように構成されることもできる。ＦＦＴｅは、さらに、基数８のバタフライコアを使用して高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように構成されることもできる。ＦＦＴｅは、さらに、基数４のバタフライコアを使用して高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するように構成されることもできる。ＦＦＴｅは、さらに少なくとも６４個のレジスタに、受け取られた入力を記憶するように構成されることもできる。ＦＦＴｅは、さらに複素乗算器からの受け取られた入力を記憶するように構成されることもでき、ここで少なくとも６４個のレジスタのうちの５６個のレジスタは、複素乗算器から入力を受け取る。ＦＦＴｅは、さらに、少なくとも６４個のレジスタのうちの３２個のレジスタにメインメモリからの受け取られた入力を記憶するように構成されることもできる。ＦＦＴｅは、さらに、ｚポイントのマルチポイント入力を受け取るように構成されることもでき、ここでｚは、５１２の倍数である。ＦＦＴｅは、さらに、計算された変換を出力するように構成されることもできる。ＦＦＴｅは、さらに、第１の入力を読み取った後に出力をｘサイクル書き込むことを開始するように構成されることもでき、ここでｘは、８とパイプライン遅延を加えたものである。ＦＦＴｅは、さらに、第１の入力を読み取った後に出力をｙサイクル書き込むことを完了するように構成されることもでき、ここでｙは、１６とパイプライン遅延を加えたものである。ＦＦＴｅは、第１の組の入力を読み取るように構成された第１の組の加算器を、含むことができ、それらの第１の入力は、第１の組の加算器による読取りに先立ってビット反転される。
【００１６】
本発明の様々な態様および実施形態は、以下にさらに詳細に説明される。
【００１７】
［詳細な説明］
「例示の(exemplary)」という言葉は、ここにおいて、「例、インスタンス、または例証としての役割を果たしている」を意味するように使用される。ここにおいて「例示の」として説明されるどの実施形態あるいは設計も、他の実施形態または設計よりも好ましい、あるいは有利であるとして必ずしも解釈されるべきではない。
【００１８】
ここにおいて説明されるＦＦＴ技法は、通信システム、信号のフィルタおよび増幅、信号処理、光学処理、地震波反射、画像処理など、様々なアプリケーションのために使用されることができる。ここにおいて説明されるＦＦＴ技法はまた、セルラシステム、ブロードキャストシステム、ワイヤレスローカルエリアネットワーク(wireless local area network)（ＷＬＡＮ）システムなどのワイヤレス通信システムのために使用されることもできる。セルラシステムは、符号分割多元接続(Code Division Multiple Access)（ＣＤＭＡ）システム、時分割多元接続(Time Division Multiple Access)（ＴＤＭＡ）システム、周波数分割多元接続(Frequency Division Multiple Access)（ＦＤＭＡ）システム、直交周波数分割多元接続(Orthogonal Frequency Division Multiple Access)（ＯＦＤＭＡ）システム、単一キャリアＦＤＭＡ(Single-Carrier FDMA)（ＳＣ−ＦＤＭＡ）システムなどとすることができる。ブロードキャストシステムは、ＭｅｄｉａＦＬＯシステム、ハンドヘルド用デジタルビデオブロードキャスティング(Digital Video Broadcasting for Handhelds)（ＤＶＢ−Ｈ）システム、地上波テレビジョンブロードキャスティング用統合サービスデジタルブロードキャスティング(Integrated Services Digital Broadcasting for Terrestrial Television Broadcasting)（ＩＳＤＢ−Ｔ）システムなどとすることができる。ＷＬＡＮシステムは、ＩＥＥＥ８０２．１１システム、Ｗｉ−Ｆｉシステム、ＷｉＭａｘシステムなどとすることができる。これらの様々なシステムは、当技術分野において知られている。
【００１９】
ここにおいて説明されるＦＦＴ技法は、単一サブキャリアを有するシステム、ならびに複数の(multiple)サブキャリアを有するシステムのために使用されることができる。複数のサブキャリアは、ＯＦＤＭ技法、ＳＣ−ＦＤＭＡ技法、または何らかの他の変調技法を用いて取得されることができる。ＯＦＤＭおよびＳＣ−ＦＤＭＡは、周波数帯域（例えば、システム帯域）を複数の直交サブキャリアへと区分し、これらの直交サブキャリアは、トーン(tone)、ビン(bin)などとも呼ばれる。各サブキャリアは、データで変調されることができる。一般に、変調シンボルは、ＯＦＤＭを有する周波数ドメインにおいて、そしてＳＣ−ＦＤＭＡを有する時間ドメインにおいてサブキャリア上で送信される。ＯＦＤＭは、ＭｅｄｉａＦＬＯシステム、ＤＶＢ−Ｈシステム、ＩＳＤＢ−Ｔブロードキャストシステム、ＩＥＥＥ８０２．１１ａ／ｇ  ＷＬＡＮシステム、一部のセルラシステムなど、様々なシステムにおいて使用される。ＡＧＣ技法のある種の態様および実施形態は、ＯＦＤＭ、例えば、ＭｅｄｉａＦＬＯシステムを使用するブロードキャストシステムについて以下で説明される。
【００２０】
ここにおいて説明されるブロック図は、計算ロジックをインプリメントするための知られている任意の方法を使用してインプリメントされることができる。計算ロジックをインプリメントするための方法の例は、フィールドプログラマブルゲートアレイ(field-programmable gate array)（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、複素プログラマブルロジックデバイス(complex programmable logic devices)（ＣＰＬＤ）、集積光回路(integrated optical circuit)（ＩＯＣ）、マイクロプロセッサなどを含む。
【００２１】
ＦＦＴまたは逆ＦＦＴ（ＩＦＦＴ）のための適切なハードウェアアーキテクチャと、ＦＦＴモジュールを組み込んだデバイスと、ＦＦＴまたはＩＦＦＴを実行する方法が、開示される。ＦＦＴアーキテクチャは、基数８のＦＦＴモジュールの使用を介して８ｎポイント（ｎは、自然数）のＦＦＴのインプリメンテーションを可能にするために一般化されることができる。例えば、ＦＦＴアーキテクチャは、５１２ポイントのＦＦＴ（８３）のインプリメンテーションを可能にするために一般化されることができる。ＦＦＴアーキテクチャは、小さなチップ面積を維持しながら、基数８のＦＦＴを実行するために使用されるサイクルの回数が最小化されることを可能にする。とりわけ、ＦＦＴアーキテクチャは、所定の位置にあるＦＦＴ(in place FFT)中に実行されるメモリアクセスの回数を最適化するようにメモリおよびレジスタスペースを構成する。
【００２２】
やはりこの開示の範囲内にあるこのＦＦＴアーキテクチャの一般化は、他のステージの順序および組合せを組み込むことができる。例えば、ＦＦＴアーキテクチャの一部の実施形態は、第３ステージのＩ／ＦＦＴ処理をバイパスすることにより、基数４のＦＦＴを提供する(deliver)ことができる。これにより、ＦＦＴｅは、２０４８ポイントのＦＦＴ（８×８×８×４）を実行することができるようになる。さらに他の実施形態においては、ＦＦＴＩアーキテクチャは、第２ステージおよび第３ステージのＩ／ＦＦＴ処理をバイパスすることにより、基数２の結果を提供することもできる。基数８よりも少ない結果が使用され、後続のＦＦＴオペレーションが実行されることになる場合には、ひねり係数(twiddle coefficient)は、異なる組合せを組み込むことになる。例えば、２０４８ポイントのＦＦＴを生成する１つの組合せは、基数８によって追随され、別の基数８によって追随され、そして基数４によって追随される基数８である。オペレーションが、異なる順序で、例えば、基数８、次いで基数８、次いで基数４、次いで基数８で行われた場合、２０４８ポイントのＦＦＴは、その場合にも起こることになるが、ひねり係数は、第３ステージおよび第４ステージのオペレーションにおける基数４のオペレーションと、基数８のオペレーションでは異なることになる。
【００２３】
図１は、ワイヤレス通信システム１００の一部の実施形態についての、そしてＦＦＴパイプラインの一部の実施形態を示す簡略化された機能ブロック図である。本システムは、ユーザ端末１１０と通信することができる１つまたは複数の固定された要素を含んでいる。ユーザ端末１１０は、例えば、１つまたは複数の通信規格に応じて動作するように構成されるワイヤレス電話とすることができる。例えば、ユーザ端末１１０は、第１の通信ネットワークからワイヤレス電話信号を受信するように構成されることができ、そして第２の通信ネットワークからデータおよび情報を受信するように構成されることができる。
【００２４】
ユーザ端末１１０は、ポータブルユニット、モバイルユニット、または静止ユニットとすることができる。ユーザ端末１１０は、モバイルユニット、モバイル端末、移動局、ユーザ装置、ポータブル、電話などと称されることもできる。単一のユーザ端末だけが、図１において示されているが、典型的なワイヤレス通信システム１００は、複数の(multiple)ユーザ端末１１０と通信する能力を有することが理解される。
【００２５】
ユーザ端末１１０は、一般的に、ここでセクタ化されたセルラタワー(cellular tower)として示される１つまたは複数の基地局１２０ａまたは１２０ｂと通信する。ユーザ端末１１０は、一般的に、ユーザ端末１１０内のレシーバにおいて最強の信号強度を提供する基地局、例えば１２０ｂと通信することになる。
【００２６】
基地局１２０ａおよび１２０ｂのおのおのは、適切な基地局１２０ａおよび１２０ｂに対して、そしてそれらの基地局から通信信号を経路指定する基地局コントローラ(Base Station Controller)（ＢＳＣ）１３０へと結合されることができる。ＢＳＣ１３０は、ユーザ端末１１０と、公衆交換電話網(Public Switched Telephone Network)（ＰＳＴＮ）１５０との間のインターフェースとして動作するように構成されることができるモバイルスイッチングセンタ(Mobile Switching Center)（ＭＳＣ）１４０に結合される。ＭＳＣ１４０は、ユーザ端末１１０と、ネットワーク１６０との間のインターフェースとして動作するように構成されることもできる。ネットワーク１６０は、例えば、ローカルエリアネットワーク(Local Area Network)（ＬＡＮ）またはワイドエリアネットワーク(Wide Area Network)（ＷＡＮ）とすることができる。一部の実施形態においては、ネットワーク１６０は、インターネットを含んでいる。したがって、ＭＳＣ１４０は、ＰＳＴＮ１５０およびネットワーク１６０に結合される。ＭＳＣ１４０は、１つまたは複数のメディアソース１７０に結合されることもできる。メディアソース１７０は、例えば、ユーザ端末１１０によってアクセスされることができる、システムプロバイダによって提供されるメディア(media)のライブラリとすることができる。例えば、システムプロバイダは、オンデマンドでユーザ端末１１０によってアクセスされることができるビデオまたは他の形態のメディアを提供することができる。ＭＳＣ１４０は、システム間ハンドオフ(inter-system handoff)を他の通信システム（図示されず）と調整するように構成されることもできる。
【００２７】
ワイヤレス通信システム１００は、ユーザ端末１１０に対して信号を送信するように構成されるブロードキャストトランスミッタ１８０を含むこともできる。一部の実施形態においては、ブロードキャストトランスミッタ１８０は、基地局１２０ａおよび１２０ｂに関連づけられることができる。他の実施形態においては、ブロードキャストトランスミッタ１８０は、基地局１２０ａおよび１２０ｂを含むワイヤレス電話システムとは異なり、そしてそれから独立したものとすることができる。ブロードキャストトランスミッタ１８０は、それだけには限定されないが、オーディオトランスミッタ、ビデオトランスミッタ、ラジオトランスミッタ、テレビジョントランスミッタなど、あるいはトランスミッタの何らかの組合せとすることができる。１つのブロードキャストトランスミッタ１８０だけが、ワイヤレス通信システム１００の中に示されるが、ワイヤレス通信システム１００は、複数のブロードキャストトランスミッタ１８０をサポートするように構成されることができる。
【００２８】
複数のブロードキャストトランスミッタ１８０は、オーバーラップするカバレージエリア(coverage area)において信号を送信することができる。ユーザ端末１１０は、複数のブロードキャストトランスミッタ１８０から信号を同時に受信することができる。複数のブロードキャストトランスミッタ１８０は、同一のブロードキャスト信号、異なるブロードキャスト信号、または類似したブロードキャスト信号をブロードキャストするように構成されることができる。例えば、第１のブロードキャストトランスミッタのカバレージエリアとオーバーラップするカバレージエリアを有する第２のブロードキャストトランスミッタはまた、第１のブロードキャストトランスミッタによってブロードキャストされる情報のサブセットをブロードキャストすることができる。
【００２９】
ブロードキャストトランスミッタ１８０は、ブロードキャストメディアソース１８２からデータを受信するように構成されることができ、そしてデータを符号化し、その符号化されたデータに基づいて信号を変調し、そしてその変調されたデータを、それがユーザ端末１１０によって受信されることができるサービスエリア(service area)に対してブロードキャストするように構成されることができる。
【００３０】
一部の実施形態においては、１つまたは複数の基地局１２０ａおよび１２０ｂとブロードキャストトランスミッタ１８０は、直交周波数分割多重化(Orthogonal Frequency Division Multiplex)（ＯＦＤＭ）信号を送信する。ＯＦＤＭ信号は、あらかじめ決定された動作帯域における１つまたは複数のキャリアへと変調される複数のＯＦＤＭシンボルを含むことができる。
【００３１】
ＯＦＤＭ通信システムは、データおよびパイロットの送信のためにＯＦＤＭを利用する。ＯＦＤＭは、オーバーオールシステム帯域幅を複数の（Ｋ個の）直交周波数サブバンドへと区分するマルチキャリア変調技法である。これらのサブバンドは、トーン、キャリア、サブキャリア、ビン、および周波数チャネルとも呼ばれる。ＯＦＤＭでは、各サブバンドは、データで変調されることができるそれぞれのサブキャリアに関連づけられる。
【００３２】
ブロードキャストトランスミッタ１８０など、ＯＦＤＭシステムにおけるトランスミッタは、ワイヤレスデバイスに対して同時に複数のデータストリームを送信することができる。これらのデータストリームは、本質的に連続しており、またはバースティであるものとすることができ、固定されたデータレート、または可変なデータレートを有することができ、そして同じ、または異なった符号化スキームと変調スキームとを使用することができる。トランスミッタはまた、ワイヤレスデバイスが、時間同期化、周波数トラッキング、チャネル推定などいくつかのファンクションを実行することを支援するパイロットを送信することもできる。パイロットは、トランスミッタとレシーバの両方によって先験的に知られている送信である。
【００３３】
ブロードキャストトランスミッタ１８０は、インタレースサブバンド構造に応じてＯＦＤＭシンボルを送信することができる。ＯＦＤＭインタレース構造は、全部でＫ個のサブバンドを含み、ここでＫ＞１である。Ｕ個のサブバンドが、データとパイロットの送信のために使用されることができ、使用可能サブバンドと呼ばれ、ここでＵ≦Ｋである。残りのＧ個のサブバンドは、使用されておらず、保護サブバンド(guard subband)と呼ばれ、ここでＧ＝Ｋ−Ｕである。一例として、システムは、全部でＫ＝４０９６個のサブバンドと、Ｕ＝４０００個の使用可能サブバンドと、Ｇ＝９６個の保護サブバンドを有するＯＦＤＭ構造を利用することができる。簡単にするために、以下の説明は、全部でＫ個のすべてのサブバンドが使用可能であり、０からＫ−１のインデックスが割り当てられ、その結果、Ｕ＝Ｋであり、Ｇ＝０であることを仮定している。
【００３４】
全部でＫ個のサブバンドは、Ｍ個のインタレース、またはオーバーラップしていないサブバンドセットに構成されることができる。Ｍ個のインタレースは、全部でＫ個のサブバンドのおのおのが、１つのインタレースに属する点において、オーバーラップしておらず、あるいは交わっていない。各インタレースは、Ｐ個のサブバンドを含み、ここでＰ＝Ｋ／Ｍである。各インタレースにおけるＰ個のサブバンドは、インタレースにおける連続したサブバンドが、Ｍ個のサブバンドによって間隔が空けられるように、全部でＫ個のサブバンドにまたがって一様に分散されることができる。例えば、インタレース０は、サブバンド０、Ｍ、２Ｍなどを含むことができ、インタレース１は、サブバンド１、Ｍ＋１、２Ｍ＋１などを含むことができ、インタレースＭ−１は、サブバンドＭ−１、２Ｍ−１、３Ｍ−１などを含むことができる。Ｋ＝４０９６を有する上記される例示のＯＦＤＭ構造では、Ｍ＝８個のインタレースが形成されることができ、各インタレースは、８個のサブバンドによって均一に間隔の空けられたＰ＝５１２個のサブバンドを含むことができる。それ故に、各インタレースにおけるＰ個のサブバンドは、他のＭ−１個のインタレースのおのおのにおいてＰ個のサブバンドを用いてインタレースされる。
【００３５】
一般に、ブロードキャストトランスミッタ１８０は、任意の数の全部のサブバンド、使用可能サブバンド、および保護サブバンドを用いて任意のＯＦＤＭ構造をインプリメントすることができる。任意の数のインタレースが、形成されることもできる。各インタレースは、任意の数のサブバンドと、全部でＫ個のサブバンドのうちの任意の１つを含むことができる。インタレースは、同じ数のサブバンド、または異なる数のサブバンドを含むことができる。簡単にするために、以下の説明の多くは、Ｍ＝８個のインタレースを有するインタレースサブバンド構造と、Ｐ＝５１２個の一様に分散されたサブバンドを含む各インタレースについてである。このサブバンド構造は、いくつかの利点を提供する。第１に、各インタレースは、全体のシステム帯域幅にまたがってそれから取得されたサブバンドを含むので、周波数ダイバーシティ(frequency diversity)が達成される。第２に、ワイヤレスデバイスは、全面的ＫポイントＦＦＴの代わりに、部分的Ｐポイント高速フーリエ変換（ＦＦＴ）を実行することにより、与えられたインタレース上で送信されるデータまたはパイロットを回復することができ、これは、ワイヤレスデバイスにおける処理を簡略化することができる。
【００３６】
ブロードキャストトランスミッタ１８０は、ワイヤレスデバイスが、チャネル推定、周波数トラッキング、時間トラッキングなど、様々なファンクションを実行することを可能にする、１つまたは複数のインタレース上の周波数分割多重化(frequency division multiplexed)（ＦＤＭ）されたパイロットを送信することができる。そのパイロットは、基地局とワイヤレスデバイスの両方によって先験的に知られている変調シンボルから構成されており、これらの変調シンボルは、パイロットシンボルとも呼ばれる。ユーザ端末１１０は、受信パイロットシンボルと知られている送信パイロットシンボルとに基づいてワイヤレスチャネルの周波数応答を推定することができる。ユーザ端末１１０は、パイロット送信のために使用される各サブバンドにおいてワイヤレスチャネルの周波数スペクトルをサンプリングすることが可能である。
【００３７】
システム１００は、インタレースに対するデータストリームのマッピングを容易にするためにＯＦＤＭシステムにおいてＭ個のスロットを定義することができる。各スロットは、送信ユニット、あるいはデータまたはパイロットを送信するための手段として見なされることができる。データのために使用されるスロットは、データスロットと呼ばれ、パイロットのために使用されるスロットは、パイロットスロットと呼ばれる。Ｍ個のスロットには、インデックス０からＭ−１が割り当てられることができる。スロット０は、パイロットのために使用されることができ、スロット１からＭ−１は、データのために使用されることができる。データストリームは、スロット１からＭ−１上で送信されることができる。固定されたインデックスを有するスロットの使用は、データストリームに対するスロットの割付けを簡略化することができる。各スロットは、１つの時間間隔において１つのインタレースに対してマッピングされることができる。Ｍ個のスロットは、周波数ダイバーシティおよび良好なチャネルの推定、ならびに検出性能を達成することができる任意のスロットからインタレースへのマッピングスキーム(slot-to-interlace mapping scheme)に基づいて異なる時間間隔におけるＭ個のインタレースのうちの異なるものへとマッピングされることができる。一般に、時間間隔は、１つまたは複数のシンボル期間に及ぶことができる。以下の説明は、１つの時間間隔が、１つのシンボル期間に及ぶことを仮定している。
【００３８】
図２は、例えば、図１のユーザ端末においてインプリメントされることができるＯＦＤＭレシーバ２００の簡略化された機能ブロック図である。レシーバ２００は、受信されたＯＦＤＭシンボルの処理を実行するために、ここにおいて説明されるようなＦＦＴ処理ブロックをインプリメントするように構成されることができる。
【００３９】
レシーバ２００は、ＲＦチャネル上の送信されたＲＦ  ＯＦＤＭシンボルを受信し、それらを処理し、そしてベースバンドＯＦＤＭシンボルまたは実質的なベースバンド信号にそれらを変換するように構成される受信ＲＦプロセッサ２１０を含んでいる。ベースバンド信号からの周波数オフセットが、信号帯域幅の一部分(fraction)である場合、あるいは信号が、さらなる周波数変換なしに信号の直接処理を可能にする十分に低い中間周波数にある場合には、信号は、実質的にベースバンド信号と称されることができる。受信ＲＦプロセッサ２１０からのＯＦＤＭシンボルは、フレームシンクロナイザ(frame synchronizer)２２０に結合される。
【００４０】
フレームシンクロナイザ２２０は、レシーバ２００をシンボルタイミングと同期化するように構成されることができる。一部の実施形態においては、フレームシンクロナイザは、スーパーフレームタイミングに対して、そしてスーパーフレーム内のシンボルタイミングに対してレシーバを同期化するように構成されることができる。
【００４１】
フレームシンクロナイザ２２０は、スロットが反復するようにマッピングをインタレースするために必要とされるいくつかのシンボルに基づいてインタレースを決定するように構成されることができる。一部の実施形態においては、マッピングをインタレースするスロットが、あらゆる１４シンボルの後に反復することができる。フレームシンクロナイザ２２０は、シンボルカウントからモジュロ１４のシンボルインデックスを決定することができる。レシーバ２００は、パイロットインタレース、ならびに割り当てられたデータスロットに対応する１つまたは複数のインタレースを決定するためにモジュロ１４のシンボルインデックスを使用することができる。
【００４２】
フレームシンクロナイザ２２０は、いくつかのファクタに基づいて、そしていくつかの技法のうちのどれかを使用して、レシーバタイミングを同期化することができる。例えば、フレームシンクロナイザ２２０は、ＯＦＤＭシンボルを復調することができ、それらの復調されたシンボルからスーパーフレームタイミングを決定することができる。他の実施形態においては、フレームシンクロナイザ２２０は、例えば、オーバーヘッドチャネルにおける１つまたは複数のシンボルの内部で受信される情報に基づいて、スーパーフレームタイミングを決定することができる。他の実施形態においては、フレームシンクロナイザ２２０は、ＯＦＤＭシンボルとは異なって受信されるオーバーヘッドチャネルを復調することなどにより、異なるチャネル上で情報を受信することにより、レシーバ２００を同期化することができる。もちろん、フレームシンクロナイザ２２０は、同期化を達成する任意の方法を使用することができ、そして同期化を達成する方法は、必ずしもモジュロシンボルカウントを決定する方法を限定するものとは限らない。
【００４３】
フレームシンクロナイザ２２０の出力は、ＯＦＤＭシンボルを復調し、そしてシリアルデータパスから複数のパラレルデータパスのうちの任意の１つに対してシンボルのサンプルまたはチップをマッピングするように構成されることができるサンプルマップ(sample map)２３０に結合される。例えば、サンプルマップ２２０は、ＯＦＤＭシステムにおけるいくつかのサブバンドまたはサブキャリアに対応する複数のパラレルデータパスのうちの１つに対してＯＦＤＭチップのおのおのをマッピングするように構成されることができる。
【００４４】
サンプルマップ２３０の出力は、ＯＦＤＭシンボルを対応する周波数ドメインサブバンドに変換するように構成されるＦＦＴモジュール２４０に結合される。ＦＦＴモジュール２４０は、モジュロ１４のシンボルカウントに基づいてパイロットスロットに対応するインタレースを決定するように構成されることができる。ＦＦＴモジュール２４０は、あらかじめ決定されたパイロットサブバンドなど、１つまたは複数のサブバンドをチャネル推定器２５０に結合するように構成されることができる。パイロットサブバンドは、例えば、ＯＦＤＭシンボルの帯域幅にまたがる１つまたは複数の等しく間隔の空けられた組のＯＦＤＭサブバンドとすることができる。
【００４５】
チャネル推定器２５０は、受信されたＯＦＤＭシンボルに対して影響を及ぼす様々なチャネルを推定するパイロットサブバンドを使用するように構成される。一部の実施形態においては、チャネル推定器２５０は、データサブバンドのおのおのに対応するチャネル推定値を決定するように構成されることができる。
【００４６】
ＦＦＴモジュール２４０からのサブバンドと、チャネル推定値は、サブキャリアシンボルデインターリーバ(subcarrier symbol deinterleaver)２６０に結合される。シンボルデインターリーバ２６０は、１つまたは複数の割り当てられたデータスロットの知識と、それらの割り当てられたデータスロットに対応するインターリーブされたサブバンドとに基づいて、インタレースを決定するように構成されることができる。
【００４７】
シンボルデインターリーバ２６０は、例えば、割り当てられたデータインタレースに対応するサブキャリアのおのおのを復調し、そしてその復調されたデータからシリアルデータストリームを生成するように構成されることができる。他の実施形態においては、シンボルデインターリーバ２６０は、割り当てられたデータインタレースに対応するサブキャリアのおのおのを復調し、そしてパラレルデータストリームを生成するように構成されることができる。さらに他の実施形態においては、シンボルデインターリーバ２６０は、割り当てられたスロットに対応するデータインタレースのパラレルデータストリームを生成するように構成されることができる。
【００４８】
シンボルデインターリーバ２６０の出力は、受信データをさらに処理するように構成されるベースバンドプロセッサ２７０に結合される。例えば、ベースバンドプロセッサ２７０は、オーディオおよびビデオを有するマルチメディアデータストリームへと受信データを処理するように構成されることができる。ベースバンドプロセッサ２７０は、１つまたは複数の出力デバイス（図示されず）に処理された信号を送ることができる。
【００４９】
図３は、ＯＦＤＭシステムにおいて動作するレシーバについてのＦＦＴプロセッサ３００の一部の実施形態の簡略化された機能ブロック図である。ＦＦＴプロセッサ３００は、例えば、図１のワイヤレス通信システムにおいて、あるいは図２のレシーバにおいて使用されることができる。一部の実施形態においては、ＦＦＴプロセッサ３００は、図２のレシーバ実施形態のフレームシンクロナイザと、ＦＦＴモジュールと、チャネル推定器のファンクションの一部分またはすべてを実行するように構成されることができる。
【００５０】
ＦＦＴプロセッサ３００は、ＯＦＤＭレシーバ設計の処理部分についての単一チップソリューション(single chip solution)を提供するために、単一ＩＣ基板上の集積回路(Integrated Circuit)（ＩＣ）の形でインプリメントされることができる。代わりに、ＦＦＴプロセッサ３００は、複数のＩＣまたは基板上に、インプリメントされ、そして１つまたは複数のチップまたはモジュールとしてパッケージされることもできる。例えば、ＦＦＴプロセッサ３００は、第１のＩＣ上に実行される処理部分を有することができ、それらの処理部分は、第１のＩＣとは異なる１つまたは複数のストレージデバイス上にあるメモリとインターフェースすることができる。
【００５１】
ＦＦＴプロセッサ３００は、ＦＦＴ計算ブロック３６０と、チャネル推定器３８０とを相互接続するメモリアーキテクチャ３２０に結合される復調ブロック３１０を含んでいる。シンボルがマッピングされるシンボルマッピングブロック３５０は、ＦＦＴプロセッサ３００の一部分としてオプションとして含められることができ、あるいはＦＦＴプロセッサ３００と同じ基板またはＩＣ上にインプリメントされることもあり、またはインプリメントされないこともある別個のブロック内にインプリメントされることができる。シンボルマッピングブロック３５０においては、シンボルデインターリービング(symbol deinterleaving)もまた起こる。シンボルマッピングブロックの例示の一例は、対数尤度比(log likelihood ratio)である。
【００５２】
復調モジュールと、ＦＦＴモジュールと、チャネル推定モジュールと、シンボルマッピングモジュールは、サンプル値に対してオペレーションを実行する。メモリアーキテクチャ３２０は、これらのモジュールのうちのどれかが、与えられた時刻に任意のブロックにアクセスすることを可能にする。スイッチングロジックは、メモリバンクを一時的に分割することにより簡略化される。
【００５３】
メモリの１つのバンクは、復調ブロック３１０によって繰り返し使用される。ＦＦＴ計算ブロック３２０は、アクティブに処理されているバンクにアクセスする。チャネル推定ブロック３８０は、現在処理されているバンクのパイロット情報にアクセスする。シンボルマッピングブロック３５０は、もっとも古いサンプルを含むバンクにアクセスする。
【００５４】
復調ブロック３１０は、係数ＲＯＭ３１４に結合された復調器３１２を含んでいる。復調ブロック３１０は、パイロットとデータのインタレースを回復するために時間同期化されたＯＦＤＭシンボルを処理する。上記される例において、ＯＦＤＭシンボルは、８個の別個のインタレースに分割された４０９６個のサブバンドを含み、ここで各インタレースは、全体の４０９６個のサブバンドにまたがって一様に間隔の空けられたサブバンドを有する。
【００５５】
復調器３１２は、４０９６個の着信サンプルを８個のインタレースへと構成する。復調器は、インタレース０から７を表すｎを用いて、ｗ（ｎ）＝ｅ−ｊ２πｎ／５１２だけ、各着信サンプルを回転させる。第１の５１２個の値は、回転させられ、各インタレースに記憶される。追随する各組の５１２個のサンプルについて、復調器３１２は、それらの値を回転させ、次いで加える。各インタレースにおける各メモリロケーションは、累算された８個の回転させられたサンプルを有することになる。インタレース０における値は、回転させられず、ただ累算される。復調器３１２は、累算および回転に起因した増大に対応するように入力サンプルを表すために使用されるよりも大きな数のビットの形で回転値と累算値とを表すことができる。
【００５６】
係数ＲＯＭ３１４は、複素回転係数(complex rotation coefficient)を記憶するために使用される。インタレース０が、どのような回転も必要としないので、７つの係数が、各着信サンプルについて必要とされる。係数ＲＯＭ３１４は、立ち上がりエッジでトリガされる(rising-edge triggered)ことができ、これは、復調ブロック３１０がサンプルを受け取るときからの１サイクルの遅延をもたらす可能性がある。
【００５７】
復調ブロック３１０は、係数ＲＯＭ３１４から取り出される各係数値を登録するように構成されることができる。係数値を登録する動作は、それらの係数値自体が使用されることができる前に別のサイクル遅延を追加する。
【００５８】
各着信サンプルについて、おのおのが異なるアドレスを有する７つの異なる係数が、使用される。７個のカウンタが異なる係数を調べるために使用される。各カウンタは、あらゆる新しいサンプルについてそのインタレース番号だけインクリメントされ、例えば、インタレース１は、１だけインクリメントするが、インタレース７は、７だけインクリメントする。単一行において必要とされる７つの係数のすべてを保持するＲＯＭイメージを作成すること、あるいは７個の異なるＲＯＭを使用することは、一般的に実用的ではない。それ故に、復調パイプラインは、新しいサンプルが到着するときに係数値をフェッチすることにより、開始する。
【００５９】
係数メモリのサイズを小さくするために、０とπ／４の間のＣＯＳ値とＳＩＮ値が記憶される。メモリに送られない係数アドレスの３ビットの最上位ビット(most-significant bit)（ＭＳＢ）は、適切な四分円(quadrant)にそれらの値を向けるために使用されることができる。したがって、係数ＲＯＭ３１４から読み取られる値は、直ちには登録されない。
【００６０】
メモリアーキテクチャ３２０は、複数の(multiple)メモリバンク３２４ａ〜３２４ｃに結合された入力マルチプレクサ３２２を含んでいる。メモリバンク３２４ａ〜３２４ｃは、メモリバンク３２４ａ〜３２４ｃのおのおのから様々なモジュールへと値を経路指定することができるマルチプレクサを含むメモリ制御ブロック３２６に結合される。
【００６１】
メモリアーキテクチャ３２０は、パイロット観察値処理のためのメモリおよび制御も含んでいる。メモリアーキテクチャ３２０は、複数のパイロット観察値メモリ３３２ａ〜３３２ｃのうちの任意の１つにパイロット観察値を結合する入力パイロット選択マルチプレクサ３３０を含んでいる。複数のパイロット観察値メモリ３３２ａ〜３３２ｃは、任意のメモリの内容が処理のために選択されることを可能にする出力パイロット選択マルチプレクサ３３４に結合される。メモリアーキテクチャ３２０は、パイロット観察値から決定される処理されたチャネル推定値を記憶する複数のメモリ部分３４２ａ〜３４２ｂを含むことができる。
【００６２】
ＯＦＤＭシンボルを生成するために使用される直交周波数は、ＦＦＴなどのフーリエ変換を使用して都合よく処理されることができる。ＦＦＴ計算ブロック３６０は、１つまたは複数のあらかじめ決定された次元(dimension)の効率的なＦＦＴオペレーションおよび逆ＦＦＴ（ＩＦＦＴ）オペレーションを実行するように構成されるいくつかの要素を含むことができる。一般的に、それらの次元は、２の累乗であるが、ＦＦＴオペレーションまたはＩＦＦＴオペレーションは、２の累乗である次元だけには限定されない。
【００６３】
ＦＦＴ計算ブロック３６０は、メモリアーキテクチャ３２０または転置レジスタ３６４から取り出される複素データ上で動作することができるバタフライコア３７０を含んでいる。ＦＦＴ計算ブロック３６０は、メモリアーキテクチャ３２０と、転置レジスタ３５４との間で選択するように構成されるバタフライ入力マルチプレクサ３６２を含んでいる。バタフライコア３７０は、バタフライオペレーションを実行するために複素乗算器３６６とひねりメモリ３６８と一緒に動作する。
【００６４】
チャネル推定器３８０は、パイロットサンプルのスクランブルを解くためにＰＮシーケンサ３８４と一緒に動作するパイロットデスクランブラ(pilot descrambler)３８２を含むことができる。位相ランプモジュール(phase ramp module)３８６は、パイロットインタレースから様々なデータインタレースのうちのどれかへとパイロット観察値を回転させるように動作する。位相ランプ係数メモリ３８８は、可能性のあるインタレースの間でサンプルを回転させる必要がある位相ランプ情報を記憶するために使用される。
【００６５】
時間フィルタ３９２は、複数のシンボル上で複数のパイロット観察値に時間フィルタをかけるように構成されることができる。時間フィルタ３９２からのフィルタがかけられた出力は、メモリアーキテクチャ３２０に記憶され、さらに基礎となるサブバンドデータの復号化を実行するシンボルマッピングブロック３５０において使用するためのメモリアーキテクチャ３２０に戻されることに先立ってスレッショルダ(thresholder)３９４によって処理されることができる。
【００６６】
チャネル推定器３８０は、中間値と最終出力値とを含めて、様々なチャネル推定器の出力値をメモリアーキテクチャ３２０に対してインターフェースするチャネル推定値出力マルチプレクサ３９０を含むことができる。
【００６７】
図４は、ＯＦＤＭレシーバにおける他の信号処理ブロックに関連したＦＦＴプロセッサ４００の一部の実施形態の簡略化された機能ブロック図である。ＴＤＭパイロット取得モジュール(TDM pilot acquisition module)４０２は、ＦＦＴプロセッサ４００のための初期シンボル同期化とタイミングとを生成する。入ってくる同相(in-phase)（Ｉ）サンプルと直交（Ｑ）サンプルは、望ましい振幅と周波数エラーの範囲内に信号を保持する利得および周波数の制御ループをインプリメントするように動作するＡＧＣモジュール４０４に結合される。一部の実施形態においては、フレームシンクロナイザが、ＴＤＭパイロット取得モジュールという用語の代わりに使用されることができる。ＡＦＣファンクションは、フレームシンクロナイザブロックにおいて実行されるが、ＡＧＣファンクションは、フレームシンクロナイザ（図２からの受信ＲＦ処理）の前に実行されることができる。
【００６８】
制御プロセッサ４０８は、ＦＦＴプロセッサ４００のハイレベル制御(high level control)を実行する。制御プロセッサ４０８は、例えば、ＡＲＭ（商標）によって設計されるプロセッサなど、汎用プロセッサまたは縮小命令セットコンピュータ(Reduced Instruction Set Computer)（ＲＩＳＣ）プロセッサとすることができる。制御プロセッサ４０８は、例えば、シンボル同期化を制御すること、ＦＦＴプロセッサ４００の状態をアクティブ状態またはスリープ状態に制御すること、あるいは別の方法でＦＦＴプロセッサ４００のオペレーションを制御することにより、ＦＦＴプロセッサ４０８のオペレーションを制御することができる。
【００６９】
ＦＦＴプロセッサ４００内の制御ロジック４１０は、ＦＦＴプロセッサ４００の様々な内部モジュールにインターフェースするために使用されることができる。制御ロジック４１０は、ＦＦＴプロセッサ４００の外部の他のモジュールとインターフェースするためのロジックを含むこともできる。
【００７０】
ＩサンプルとＱサンプルは、ＦＦＴプロセッサ４００に、そしてより詳細にはＦＦＴプロセッサ４００の復調ブロック３１０に結合される。復調ブロック３１０は、あらかじめ決定された数のインタレースへとサンプルを分離するように動作する。復調ブロック３１０は、基礎となるデータの復号化のための処理、およびシンボルマッピングブロック３５０への送付のためのサンプルを記憶するメモリアーキテクチャ３２０とインターフェースする。
【００７１】
メモリアーキテクチャ３２０は、メモリアーキテクチャ３２０内の様々なメモリバンクのアクセスを制御するためのメモリコントローラ４１２を含むことができる。例えば、メモリコントローラ４１２は、様々なメモリバンク内のロケーションに対する行書込み(row write)を可能にするように構成されることができる。
【００７２】
メモリアーキテクチャ３２０は、ＦＦＴデータを記憶するための複数のＦＦＴ  ＲＡＭ４２０ａ〜４２０ｃを含むことができる。さらに、複数の時間フィルタメモリ４３０ａ〜４３０ｃは、チャネル推定値を生成するために使用されるパイロット観察値などの時間フィルタデータを記憶するために使用されることができる。
【００７３】
別個のチャネル推定値メモリ４４０ａ〜４４０ｂは、チャネル推定器３８０からの中間のチャネル推定結果を記憶するために使用されることができる。チャネル推定器３８０は、チャネル推定値を決定するときにチャネル推定値メモリ４４０ａ〜４４０ｂを使用することができる。
【００７４】
ＦＦＴプロセッサ４００は、ＦＦＴオペレーションの少なくとも一部分を実行するために使用されるＦＦＴ計算ブロックを含んでいる。図４の実施形態においては、ＦＦＴ計算ブロックは、８ポイントＦＦＴエンジン４６０である。８ポイントＦＦＴエンジン４６０は、上記されるＯＦＤＭシンボル構造の例示の例を処理するために有利なものにすることができる。以前に説明されるように、各ＯＦＤＭシンボルは、おのおの５１２個のサブバンドの８個のインタレースに分割された４０９６個のサブバンドを含んでいる。各インタレースにおけるサブバンドの数、５１２は、８の３乗(cube)である（８３＝５１２）。したがって、５１２ポイントＦＦＴは、基数８のＦＦＴを使用して３つのステージで実行されることができる。実際に、４０９６は、８の４乗であるので、４０９６ポイントＦＦＴは、全部で４ステージにするために、ちょうど１つの追加ＦＦＴステージを用いて実行されることができる。
【００７５】
８ポイントＦＦＴエンジン４６０は、基数８のＦＦＴを実行するように適合されたバタフライコア３７０と転置レジスタ３６４とを含むことができる。正規化ブロック４６２は、バタフライコア３７０によって生成される積を正規化するために使用される。正規化ブロック４６２は、ＦＦＴの各ステージに続いてバタフライコアから出力される値を表すために必要とされるメモリロケーションのビットの増大を制限するように動作することができる。
【００７６】
図５は、ＦＦＴモジュール５００の一部の実施形態の機能ブロック図である。ＦＦＴモジュール５００は、順変換と逆変換との間の対称性に起因して、小さな変更を有するＩ／ＦＦＴモジュールとして構成されることができる。ＦＦＴモジュール５００は、ＡＳＩＣの一部分として、ＦＰＧＡとして、あるいはロジックインプリメンテーションに対する任意のアプローチとして、単一ＩＣダイ上でインプリメントされることができる。代わりに、ＦＦＴモジュール５００は、互いに通信している複数の要素としてインプリメントされることもできる。さらに、ＦＦＴモジュール５００は、特定のＦＦＴ構造だけに限定されるものではない。例えば、ＦＦＴモジュール５００は、時間におけるデシメーション、または周波数ＦＦＴにおけるデシメーション（以下の式１においてさらに詳述される）を実行するように構成されることができる。図５は、基数ｒのＦＦＴの一般的なシナリオについて説明しており、図６は、基数８のＦＦＴの特定のシナリオについて説明している。
【００７７】
図５に戻って参照すると、ＦＦＴモジュール５００は、変換されるべきサンプルを記憶するように構成されるメモリ５１０を含んでいる。さらに、ＦＦＴモジュール５００は、変換の所定の位置にある計算を実行するように構成されるので、メモリ５１０は、ＦＦＴの各ステージの結果と、ＦＦＴモジュール５００の出力とを記憶するために使用される。
【００７８】
メモリ５１０は、ＦＦＴのサイズと、ＦＦＴの基数とに部分的に基づいてサイズ変更されることができる。Ｎ＝ｒｎである場合の基数ｒのＮポイントのＦＦＴでは、メモリ５１０は、行当たりにｒ個のサンプルを用いて、ｒｎ−１行にＮ個のサンプルを記憶するようにサイズ変更されることができる。メモリ５１０は、行当たりのサンプルの数によって乗ぜられるサンプル当たりのビットの数に等しい幅を有するように構成されることができる。メモリ５１０は、一般的に実数成分と虚数成分としてサンプルを記憶するように構成される。したがって、基数２のＦＦＴでは、メモリ５１０は、行当たり２つのサンプルを記憶するように構成され、第１のサンプルの実数部と、第１のサンプルの虚数部と、第２のサンプルの実数部と、第２のサンプルの虚数部としてそれらのサンプルを記憶することができる。サンプルの各コンポーネントが１０ビットとして構成される場合、メモリ５１０は、行当たりに４０ビットを使用する。メモリ５１０は、モジュールのオペレーションをサポートするために十分な速度のランダムアクセスメモリ(Random Access Memory)（ＲＡＭ）とすることができる。
【００７９】
メモリ５１０は、ｒポイントＦＦＴを実行するように構成されるＦＦＴエンジン５２０に結合される。ＦＦＴモジュール５００は、ＦＦＴを実行するように構成されることができ、ここではひねりファクタ(twiddle factor)による重み付けが、ＦＦＴバタフライとも称される部分的ＦＦＴの後に実行される。そのようなコンフィギュレーションは、ＦＦＴエンジン５２０が、最小数の乗算器を使用して構成されることを可能にし、それゆえにＦＦＴエンジン５２０のサイズと複雑さを最小にしている。ＦＦＴエンジン５２０は、メモリ５１０から１行を取り出し、その行におけるサンプルに対してＦＦＴを実行するように構成されることができる。したがって、ＦＦＴエンジン５２０は、単一サイクルでｒポイントＦＦＴについてのサンプルのすべてを取り出すことができる。ＦＦＴエンジン５２０は、例えばパイプライン化ＦＦＴエンジンとすることができ、そしてクロックの異なる位相上の行の中の値を操作することができる可能性がある。
【００８０】
ＦＦＴエンジン５２０の出力は、レジスタバンク５３０に結合される。レジスタバンク５３０は、ＦＦＴの基数に基づいていくつかの値を記憶するように構成される。一部の実施形態においては、レジスタバンク５３０は、ｒ２個の値を記憶するように構成されることができる。サンプルを有する場合のように、レジスタバンクに記憶される値は、一般的に、実数成分と虚数成分とを有する複素値である。
【００８１】
レジスタバンク５３０は、一時的ストレージとして使用されるが、高速アクセスのために構成され、アドレスバスを介してアクセスされる必要がないストレージについての専用ロケーションを提供する。例えば、レジスタバンク５３０におけるレジスタの各ビットは、フリップフロップを用いてインプリメントされることができる。結果として、レジスタは、匹敵するサイズのメモリロケーションに比べてずっと多くのダイ面積を使用する。レジスタスペースにアクセスすることには事実上サイクルコストが存在しないので、特定のＦＦＴモジュール５００のインプリメンテーションは、レジスタバンク５３０とメモリ５１０のサイズを操作することにより、ダイ面積のために速度をトレードオフすることができる。
【００８２】
レジスタバンク５３０は、値の転置が、例えば、行ごとに(by rows)値を書き込むことと、列ごとに(by columns)値を読み取ることとにより、あるいは逆の場合も同様に直接に実行されることができるように、ｒ２個の値を記憶するように有利にサイズ変更されることができる。値の転置は、ＦＦＴのすべてのステージについてメモリ５１０におけるＦＦＴ値の行アラインメント(row alignment)を保持するために使用される。
【００８３】
第２のメモリ５４０は、ＦＦＴエンジン５２０の出力を重み付けするために使用されるひねりファクタを記憶するように構成される。一部の実施形態においては、ＦＦＴエンジン５２０は、部分的ＦＦＴ出力（ＦＦＴバタフライ）の計算中に直接にひねりファクタを使用するように構成されることができる。ひねりファクタは、任意のＦＦＴについてあらかじめ決定されることができる。それ故に、第２のメモリ５４０は、読取り専用メモリ(Read Only Memory)（ＲＯＭ）、不揮発性メモリ、不揮発性ＲＡＭ、またはフラッシュプログラマブルメモリとしてインプリメントされることができるが、第２のメモリ５４０は、ＲＡＭ、または何らかの他のタイプのメモリとして構成されることもできる。第２のメモリ５４０は、Ｎ＝ｒｎである場合に、ＮポイントＦＦＴについてのＮ×（ｎ−１）個の複素ひねりファクタを記憶するようにサイズ変更されることができる。１、−１、ｊ、−ｊなどのひねりファクタの一部は、第２のメモリ５４０から省略されることができる。さらに、同じ値の複製も、第２のメモリ５４０から省略されることができる。それ故に、第２のメモリ５４０におけるひねりファクタの数は、（ｎ−１）のＮ倍よりも小さい可能性がある。効率的なインプリメンテーションは、ＦＦＴが周波数におけるデシメーションをインプリメントするか、時間アルゴリズムにおけるデシメーションをインプリメントするかに応じて、ＦＦＴのすべてのステージについてのひねりファクタが、第１のステージ、またはＦＦＴの最終ステージにおいて使用されるひねりファクタのサブセットであることを利用することができる。
【００８４】
複素乗算器５５０ａ〜５５０ｂは、レジスタバンクと第２のメモリ５４０とに結合される。複素乗算器５５０ａ〜５５０ｂは、第２のメモリ５４０からの適切なひねりファクタを用いて、レジスタバンク５３０に記憶された、ＦＦＴエンジン５２０の出力を重み付けするように構成される。図５に示される実施形態は、２つの複素乗算器５５０ａおよび５５０ｂを含んでいる。しかしながら、ＦＦＴモジュール２００に含まれる複素乗算器、例えば２５０ａの数は、ダイ面積に対する速度のトレードオフに基づいて選択されることができる。より多くの数の複素乗算器が、ＦＦＴの実行を高速化するためにダイ上にインプリメントされることができる。しかしながら、増大させられた速度は、ダイ面積を犠牲にする。ダイ面積がクリティカルである場合には、複素乗算器の数は、減少させられる可能性がある。一般的に、ｒ−１個の複素乗算器は、ＦＦＴエンジン５２０の出力に対して並列にすべての重要なひねりファクタを適用するのに十分であるので、ｒポイントＦＦＴエンジン５２０がインプリメントされるときに、設計はｒ−１個よりも多くの複素乗算器を含むことはなくなる。一例として、８ポイントの基数２のＦＦＴを実行するように構成されるＦＦＴモジュール５００は、２個の複素乗算器をインプリメントすることができるが、１個の複素乗算器をインプリメントすることもできる。
【００８５】
各複素乗算器、例えば５５０ａは、各乗算オペレーション中に、レジスタバンク５３０からの単一の値と、第２のメモリ５４０に記憶される対応するひねりファクタに対して動作する。実行されるべき複素乗算よりも少ない複素乗算器しか存在しない場合、複素乗算器は、レジスタバンク５３０からの複数のＦＦＴ値に対するオペレーションを実行することになる。
【００８６】
複素乗算器、例えば５５０ａの出力は、レジスタバンク５３０に対して、一般的には複素乗算器に入力を供給した同じポジションに対して書き込まれる。それ故に、複素乗算の後に、レジスタバンクの内容は、複素乗算器が、ＦＦＴエンジン５２０内にインプリメントされたか、あるいは図５に示されるようにレジスタバンク５３０に関連づけられたかどうかにかかわらず同じであるＦＦＴステージ出力を表す。
【００８７】
レジスタバンク５３０に結合される転置モジュール５３２は、レジスタバンク５３０の内容に対して転置を実行する。転置モジュール５３２は、レジスタ値を並べ換えることによりレジスタ内容を転置することができる。代わりに、転置モジュール５３２は、内容が、レジスタブロック５３０から読み取られるときにレジスタブロック５３０の内容を転置することができる。レジスタバンク５３０の内容は、ＦＦＴエンジン５２０に対して入力を供給した行においてメモリ５１０にライトバックされる前に転置される。レジスタバンク５３０の値を転置することは、ＦＦＴのすべてのステージにまたがってＦＦＴ入力についての行構造を保持する。
【００８８】
プロセッサ５６２は、命令メモリ５６４と一緒に、モジュール間でデータフローを実行するように構成されることができ、図５の１つまたは複数のブロックのうちの一部またはすべてを実行するように構成されることができる。例えば、命令メモリ５６４は、ＦＦＴモジュール５００においてデータを操作するようにプロセッサ５６２に指示するソフトウェアとして、１つまたは複数のプロセッサ使用可能命令を記憶することができる。
【００８９】
プロセッサ５６２と命令メモリ５６４は、ＦＦＴモジュール５００の一部分としてインプリメントされることができ、あるいはＦＦＴモジュール５００の外部にあるようにすることもできる。代わりに、プロセッサ５６２は、ＦＦＴモジュール５００の外部にあるようにすることもできるが、命令メモリ５６４は、ＦＦＴモジュール５００の外部にあるようにすることもでき、例えば、サンプルのために使用されるメモリ５１０、またはひねりファクタが記憶される第２のメモリ５４０と共通にすることもできる。
【００９０】
図５に示される実施形態は、アルゴリズム変更の基数としての速度と面積の間のトレードオフを特徴とする。Ｎ＝ｒνポイントＦＦＴをインプリメントするために、必要とされるサイクルの数は、次式のように推定されることができる。
【数１】
2009535678.tif 000003
【００９１】
ここで、
【数２】
2009535678.tif 000004
【００９２】
であり、
基数ｒのＦＦＴ(radix-r FFTs)が計算されることになる。
【００９３】
ｒＮＦＦＴ＝ｒ×Ｔｉｍｅ（１回の読取り、ＦＦＴ、ひねり乗算(twiddle multily)を実行し、ｒ個の要素のベクトルについて書き込むために必要とされる時間）である。
【００９４】
ＮＦＦＴは、基数と独立な定数であるものと仮定される。サイクルカウントは、およそ１／ｒ（Ｏ（１／ｒ））の程度で減少する。インプリメンテーションのために必要とされる面積は、転置のために必要とされるレジスタの数が、ｒ２として増大するにつれ、Ｏ（ｒ２）で増大する。レジスタの数と、レジスタをインプリメントするために必要とされる面積は、大きなＮでは面積を支配する。
【００９５】
望ましい速度を提供する最小の基数は、対象となる異なる場合についてＦＦＴをインプリメントするように選択されることができる。基数を最小にすることは、モジュールの速度が十分であるという条件で、モジュールをインプリメントするために使用されるダイ面積を最小にする。
【００９６】
一部の実施形態においては、５１２ポイントＦＦＴは、周波数アプローチにおけるデシメーションを使用してインプリメントされる（式１を参照）。このアプローチは、５１２ポイントＦＦＴを達成するために、３つの基数８のＦＦＴをカスケードにする。
【数３】
2009535678.tif 000005
【００９７】
周波数におけるデシメーション(decimation)と、時間におけるデシメーションとの間の違いは、ひねりメモリ係数(twiddle memory coefficience)である。我々は、基数８のＦＦＴユニットを使用して５１２ポイントＦＦＴオペレーションをインプリメントしているので、３ステージの処理が存在する。
【００９８】
図６は、基数８のＦＦＴモジュール６００の一部の実施形態の機能ブロック図である。図５における汎用ＦＦＴモジュール５００と同様に、基数８のＦＦＴモジュール６００は、順変換と逆変換との間の対称性に起因して、少ない変更を有するＩＦＦＴモジュールとして構成されることができる。ＦＦＴモジュール６００は、ＡＳＩＣの一部分として、ＦＰＧＡとして、あるいはロジックインプリメンテーションに対する任意のアプローチとして、単一のＩＣダイ上にインプリメントされることができる。代わりに、ＦＦＴモジュール６００は、互いに通信している複数の要素としてインプリメントされることもできる。さらに、基数８のＦＦＴモジュール６００は、特定のＦＦＴ構造だけに限定されることはない。
【００９９】
基数８のＦＦＴアーキテクチャ６００は、行当たりに８個のサンプルを記憶するのに十分となるメモリ行幅を有するように構成されるサンプルメモリ６１０を含んでいる。したがって、サンプルメモリは、行当たりに８個のサンプルの６４個の行を有するように構成される。ＦＦＴ読取りブロック６２０は、メモリから行を取り出すように構成され、各行におけるサンプル上で８ポイントＦＦＴを実行する。
【０１００】
基数８のＦＦＴモジュール６００は、変換されるべきサンプルを記憶するように構成される別個のプロセッサメモリ（図示されず）を含むことができる。さらに、基数８のＦＦＴモジュール６００は、サンプル変換をインプリメントするための別個のプロセッサ（図示されず）を含むことができる。ＦＦＴモジュール６００は、変換の所定の位置にある計算を実行するように構成されるので、メモリは、ＦＦＴの各ステージの結果と、ＦＦＴモジュール６００の出力とを記憶するために使用される。
【０１０１】
読取りブロック６２０は、８ポイントＦＦＴ計算を実行するように構成される８ポイントパイプラインＦＦＴブロック６３０に結合される。一部の実施形態においては、８ポイントパイプラインＦＦＴブロック６３０は、１つの基数８を計算するバタフライコアである。さらに、８ポイントパイプラインＦＦＴブロック６３０は、ＦＦＴまたはＩＦＦＴの計算のためにプログラマブルとすることができる。メモリ６１０から読み取られる値は、直ちに登録される。
【０１０２】
８ポイントパイプラインＦＦＴブロック６３０からの出力値は、列ごとに８×８の転置メモリ６５０に書き込まれる。転置メモリ６５０は、さらに４つの複素乗算器６６０ａ、６６０ｂ、６６０ｃ、６６０ｄ（一括して６６０）と、ひねりＲＯＭ６４０とに結合される。複素乗算器６６０は、転置メモリ６５０からひねり係数を読取り、ひねりＲＯＭ６４０からの命令に基づいて計算を実行し、そして転置メモリ６５０へと出力をライトバックする。出力は、転置メモリが一定のメモリフットプリントを保持することを可能にする入力として同じロケーションに対して書き込まれる（すなわち、入力データを置き換える）。複素乗算器６６０によって実行されるような読取りおよび書込みの順序とロケーションについての命令は、ひねりＲＯＭ６４０に記憶される。ひねりＲＯＭ６４０は、行当たりに４個のひねりファクタの１２２個の行を含んでいる。転置メモリ６５０からの出力はまた、行ごとにサンプルメモリ６１０に書き込まれる。
【０１０３】
８×８の転置メモリは、任意の書込み可能データストア(writable data store)の形でインプリメントされることができる。メモリモジュールの例は、ＲＡＭ、レジスタ、フラッシュ、磁気ディスク、光ディスクなどの集積回路を含んでいる。一部の好ましい実施形態においては、ＲＡＭは、他のデータストアと比較されたコスト／パフォーマンスのトレードオフに基づいて使用される。
【０１０４】
ＦＦＴブロックは、単一の５１２ポイントＦＦＴを実行するために、基数８のバタフライコアを介した３つのパス(pass)を使用する。第１の２つのパスからの結果は、ひねり値によって乗ぜられ、そして正規化されたそれらの値の一部を有する。８つの値がメモリの単一の行に記憶されるので、それらが読み取られるときのそれらの値の順序は、値がライトバックされるときとは異なっている。２ｋのＩ／ＦＦＴが実行される場合、メモリ値は、バタフライコアに送信される前に転置される。
【０１０５】
基数８のＦＦＴは、８×８のレジスタを必要とする。すべての６４個のレジスタは、バタフライコアからの入力を受け取る。これらのレジスタのうちで、５６個のレジスタは、複素乗算器からの入力を受け取り、３２個のレジスタは、メインメモリからの入力を受け取る。メインメモリからの入力は、レジスタの行に書き込まれる。バタフライコアからの入力は、レジスタの列に書き込まれる。複素乗算器からの入力は、グループで実行される。
【０１０６】
すべての６４個のレジスタは、正規化の計算および登録を介してメインメモリに対して出力を送る。正規化の順序は、Ｉ／ＦＦＴのおのおののタイプとステージについて異なる。特に、５６個のレジスタは、ひねり乗算を必要とする。３２個のレジスタは、それらの値がバタフライコアへと送られている。値がバタフライコアに送られるときに、それらは、列ごとに送られる。値が複素乗算器に送られるときには、それらは、グループで行われる。
【０１０７】
図７は、コアが、５１２ポイントＦＦＴについて基数８のモードで動作させられるときに使用されるバタフライコア７００の一部の実施形態の機能ブロック図である。ＦＦＴバタフライ計算とひねり乗算の信号フローが、示されている。５１２ポイントＦＦＴは、６４行（８個の８ポイントＦＦＴのおのおのについて１つ）と８列（８サンプル／行）のサンプルメモリ６１０を使用する。レジスタブロックは、８×８の行列（転置メモリ６５０）として構成される。ＦＦＴ処理中に生じる２つの「ひねり」乗算が存在する。図７のひねり乗算は、Ｉ／ＦＦＴバタフライを介した単一のパスに関連する乗算を意味する。
【０１０８】
サンプルメモリ６１０の初期の内容は、おのおの８列の８行の形で配列される。行は、サンプルメモリから取り出され、ＦＦＴは、行に記憶された値に対して実行される。結果は、適切なひねりファクタを用いて重み付けされ、結果は、レジスタバンクに書き込まれる。次いで、レジスタバンク値は、サンプルメモリにライトバックされる前に転置される。以前のレジスタ値は、上書きされ、計算が実行される順序を重要にしている。しかしながら、同じレジスタを使用することに対するこのアプローチと、注意深い順序付けは、ＦＦＴのより高速な計算と、小さなメモリの要件を可能にする。これについては、さらに図８ａおよび８ｂにおいて説明される。
【０１０９】
図７に戻って参照すると、コア７００において基数８のＦＦＴを実行する際には、まず入力が読み取られ、第１の組の加算器に先立ってビット反転され、そしてレジスタに記憶される。基数８のオペレーションでは、ビット反転は、フルの３ビットの反転であり、すなわち、０→０、１→４、２→２、３→６、４→１、５→５、６→３、７→７である。
【０１１０】
次に、それらの値は、おのおの図７に示されるように加えられる。例えば、Ｄ０は、Ｏｕｔ４（０）に対する入力を生成するようにＤ１に加えられる。一般に、
【数４】
2009535678.tif 000006
【０１１１】
である。ｗ０からｗ３は、ＦＦＴオペレーションのために使用される。ｗ０と、ｗ５からｗ７とが、ＩＦＦＴオペレーションについて使用される。特に、ｗ＊の置換(substitution)が、表１に詳述される。
【表１】
2009535678.tif 000007
【０１１２】
一例を用いて例示すると、Ａ領域における第４の和と第８の和が、ＦＦＴでは、ｗ２によって乗ぜられる。ＩＦＦＴでは、この値は、ｗ６になる。
【０１１３】
ｗ＊の乗算は、以下のようにインプリメントされる。
【数５】
2009535678.tif 000008
【０１１４】
ｗ０の場合には、修正の必要はない。
【数６】
2009535678.tif 000009
【０１１５】
ｗ１の場合には、複素乗算器が、必要とされる。
【数７】
2009535678.tif 000010
【０１１６】
ｗ２の場合には、入力の実数部についての２の補数の否定(2's complement negation)を実行すること、およびそのあと加算することの代わりに、実数部の値は、変更されないままにおかれ、後続の加算器は、符号変更を明らかにするために(to account for)減算器に変更される。
【数８】
2009535678.tif 000011
【０１１７】
ｗ３の場合には、複素乗算器が、必要とされる。
【数９】
2009535678.tif 000012
【０１１８】
ｗ４の場合は、どのようなＦＦＴ計算でも使用されない。
【数１０】
2009535678.tif 000013
【０１１９】
ｗ５の場合には、複素乗算器が、必要とされる。
【数１１】
2009535678.tif 000014
【０１２０】
ｗ６の場合には、入力の虚数部についての２の補数の否定を実行すること、およびそのあと加算することの代わりに、虚数部の値は、変更されないままにおかれ、後続の加算器は、符号変更を明らかにするために減算器に変更される。
【数１２】
2009535678.tif 000015
【０１２１】
ｗ７の場合には、複素乗算器が、必要とされる。
【０１２２】
図７と、ＦＦＴコアとＩＦＦＴコアの両方についての二重性インプリメンテーションをさらに示すために、２組の加算器が、第４の加算と第８の加算について使用される。一方の組は、ｗ２（ＦＦＴ）を計算するが、他方は、ｗ６（ＩＦＦＴ）を計算する。信号は、ＦＦＴが望ましいか、ＩＦＦＴが望ましいかに応じて、どちらの加算を使用すべきかを制御する。それ故に、両方が計算されるが、一方が使用される。
【０１２３】
実際の複素乗算器が、Ｂ領域における第６の値と第８の値のために必要とされる。ＦＦＴを実行するときには、これらは、ｗ１とｗ３になる。ＩＦＦＴを実行するときには、これらは、それぞれｗ７とｗ５になる。
【数１３】
2009535678.tif 000016
【０１２４】
は、式の組２を生成するために、抽出(factor out)されることができる。
【数１４】
2009535678.tif 000017
【０１２５】
ＦＦＴ／ＩＦＦＴ信号が、それらの入力値を加算器と減算器へと向けるために、そしてその和と差をそれらの最終宛先へと向けるために使用される。Ｐを抽出することは、このインプリメンテーションが２つの乗算器と２つの加算器（１つの加算器および１つの減算器）とを必要とすることを示す。
【０１２６】
同じことが、ｗ３／ｗ７（式の組３）について行われることができる。
【数１５】
2009535678.tif 000018
【０１２７】
Ｐを使用する代わりに、コアは、これらの積和(these product sums)について
【数１６】
2009535678.tif 000019
【０１２８】
を使用する。Ｒを使用すると、そのときには式は、（式の組４）になる。
【数１７】
2009535678.tif 000020
【０１２９】
以前のように、ＦＦＴ／ＩＦＦＴ信号は、それらの入力値を加算器と減算器に向ける他に、その和および差をそれらの最終宛先へと向けるためにも使用される。２つの乗算器と２つの加算器（１つの加算器および１つの減算器）とが、必要とされる。
【０１３０】
ちょっとした乗算、領域Ｂにおけるｗ２およびｗ６は、領域Ａにおけるこれらの乗算と同様に取り扱われる。
【０１３１】
本実施形態とハードウェア制約条件に応じて、タイミング制約条件がそれをそのように必要とする場合、これらの計算は、複数のクロックサイクルにおいて行われることができる。１組のレジスタは、Ｏｕｔ４値を取り込むために追加されることができる。第６と第８についてのＯｕｔ４値は、登録されることに先立って定数ＰおよびＲによって乗ぜられる（式の組２および４）。レジスタのこの配置は、以下のように最悪ケースの経路についてそれらの計算をバランスさせる。
【０１３２】
第１のサイクル：乗算器→加算器→加算器→乗算器→乗算器
第２のサイクル：加算器→乗算器→加算器→加算器
信号が、Ｏｕｔ４値またはＯｕｔ８値のどちらかを送り出すために使用される。その信号は、基数４のオペレーションが必要とされたか、基数８のオペレーションが必要とされたかを決定する。ＦＦＴアーキテクチャが異なるステージの組合せにおいてインプリメントされることができることを段落０００３２から思い起こして欲しい。８×８×８×４のシーケンスの例においては、Ｏｕｔ４は、２０４８ポイントＩ／ＦＦＴオペレーション（すなわち、８×８×８×４のシーケンスの第４ステージ）のために使用される。
【０１３３】
図８は、５１２ポイントの基数８のＦＦＴについての転置メモリ乗算順序８００の図である。各ＤＦＴは、より大きなＤＦＴ(larger DFT)（ｌＤＦＴ）への、より小さなＤＦＴ(smaller DFT)（ｓＤＦＴ）の組合せであることを思い起こして欲しい。これが、バタフライ計算の本質である。最初は問題ではないが、後続のｓＤＦＴは、以前のｓＤＦＴからの出力に依存する。これは、遅延を生成するが、プロセッサまたはＦＦＴｅは、計算を終了するために依存した入力データを待つ。これらのｓＤＦＴが計算される順序を構成することにより、ＦＦＴパイプラインは、遅延を最小にし、最小の時間に全体のＦＦＴを生成するためにインプリメントされることができる。
【０１３４】
図８は、ｓＤＦＴの最適な順序付け８００についてのグループ分けを示している。各セルについての計算が、示され、グループ分けされる。表２は、Ｘ（ｋ）の入力が導き出されるメモリにおける特定の行および列を詳述している。
【表２】
2009535678.tif 000021
【０１３５】
各Ｘ（ｎ）は、８ポイントＦＦＴを示す。
【０１３６】
図９は、基数８のＦＦＴ計算時系列９００の図である。基数８のＦＦＴを実行するために必要とされるクロックサイクルと、オペレーションが実行される順序は、時間ドメイン上に示される。ＦＦＴｅにおける基数８のＦＦＴ計算は、４組のオペレーション、すなわちサンプルを読み取ることと、８ポイントＦＦＴを計算することと、ひねり乗算と、出力を書き込むこととを必要とする。
【０１３７】
図８と図９は、密接に関連しており、一緒にして最も簡単に理解されるので、それらは、ここにおいて一緒に説明されることになる。図９において、ＦＦＴ時系列は、右に向かって増大している時間を示す。時間の離散的間隔は、時間上でＣＬＫ９１０のグラフを用いて注釈が付けられる。方形波の完全な各サイクルは、基準時間単位を示す。この例においては、基準時間単位は、８つの複素サンプルの読取りアクセスと書込みアクセスを完了するのに十分な時間間隔と一致するように較正される。読取りグラフ９２０は、サンプルの読取りを示す。各読取りボックスは、特定の読取りタスク、一般には８つの複素サンプルの１回の読取りを完了するために必要とされる時間を表す。ＦＦＴ−８ｐｔグラフ９３０は、８ポイントＦＦＴの計算を示し、この計算は、バタフライ計算を含んでいる。各ＦＦＴ−８ｐｔボックスは、ボックスによって表される８ポイントＦＦＴの特定のグループ分けを処理することを完了するために必要とされる時間を表す。８ポイントＦＦＴは、残っている追加の任意のひねり計算に基づいて、グループ分けされる。一部の場合においては、８ポイントＦＦＴを完了することは、ひねり乗算が依然として必要とされるので不十分である。ひねり乗算グラフ(Twiddle Mult graph)９４０は、８ポイントＦＦＴグループ上におけるひねり乗算の計算を示す。各ひねり乗算ボックスは、ボックスによって表される特定のひねり乗算を処理することを完了するために必要とされる時間を表す。最後に、書込みグラフ９５０は、データストアへの最終出力の書込みを示す。各書込みボックスは、特定の書込みタスク、一般には８つの複素サンプルの１回の書込みを完了するために必要とされる時間を表す。
【０１３８】
サイクル０において、メモリの８つの行が読み取られる。これらの行における８つの値のおのおのが処理されるにつれて、それらは、転置レジスタの列に対して書き込まれる。図８においてＸ（０）からＸ（７）で示されるメモリ値は、第１の行から読み取られる第１の８つの値である。サイクル４において、図８においてＸ（０）、Ｘ（８）、Ｘ（１６）、..Ｘ（５６）で示される、転置レジスタの第１の列が書き込まれる。第１の４つのひねり係数のフェッチは、グループ８１１における４つの値、特にＸ（８）、Ｘ（１６）、Ｘ（２４）、およびＸ（３２）に対応する。
【０１３９】
これらの第１の４つの値は、ひねり乗算されるが、バタフライは、メモリ読取りの第２の行についての結果を出力している。これらの８つの値は、転置レジスタの第２の列に書き込まれる。第２の組のひねり係数のフェッチは、グループ８１２、特にＸ（９）、Ｘ（１７）、Ｘ（２５）、およびＸ（３３）についてである。
【０１４０】
グループ８１１から８２４におけるひねり乗算は、バタフライ結果が、使用可能になるとすぐに行われることができる。その後に、グループ８１１から８２４において、転置レジスタの行は、結果が使用可能になるとすぐにメモリの行にライトバックする用意が整っている。例えば、書き込まれるメモリの第１の行は、Ｘ（０）からＸ（７）の値のためになる。
【０１４１】
８行のメモリが読み取られ、書き込まれた後に、次の組の８行が、同様に処理される。これは、８回行われ、行われる全部で５１２個のサンプルについて、メモリの６４行（おのおのが８つのサンプルを保持する）を完了している。
【０１４２】
一部の実施形態においては、それらの値は、行から列へと転置されない。異なるＦＦＴステージでは、書き込まれるメモリの行は、転置レジスタ値の行から、または列からとすることができる。正規化レジスタは、転置レジスタからデータの行または列を受け取り、必要に応じてその正規化オペレーションを実行し、メモリの１行に対してそれらの値を書き込むことができる。
【０１４３】
図１０は、Ｉ／ＦＦＴエンジン１０００の別の例示のインプリメンテーションのブロック図設計を示している。図１〜６に示されるコンポーネントは、ここで図１０において示されるようにモジュールによってインプリメントされることができる。これらのモジュールの間の情報フローは、図１〜６に類似している。モジュラーインプリメンテーション１０００として、処理システム１０００は、第１のデータを記憶するためのモジュール１０１０と、第１のデータを記憶するためのモジュールよりも高速である、第２のデータを記憶するための１つまたは複数のモジュール１０５０と、第１のデータを記憶するための手段からマルチポイント入力を受け取るためのモジュール１０２０と、第２のデータを記憶するための１つまたは複数のモジュールのうちの少なくとも１つに受け取られた入力を記憶するためのモジュール１０５０と、無遅延パイプラインを使用して入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するためのモジュール１０９０とを備える。これらのモジュールのおのおのは、単一モジュール内に、あるいは複数のサブモジュールを使用して、インプリメントされることができる。これらのモジュールは、より大きなモジュールを形成するためにさらに組み合わされることができる。
【０１４４】
一部の実施形態においては、入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算するための計算モジュール１０９０は、ギャップレスパイプラインを使用する。計算モジュール１０９０は、さらに基数８のバタフライコアを使用してデータを処理することができる。ストレージモジュール１０５０は、第２のデータを記憶するための少なくとも６４個のモジュールに受け取られた入力を記憶することができる。計算モジュール１０９０は、複素定数を計算することができ、ここで第２のデータを記憶するための少なくとも６４個のモジュール１０５０のうちの５６個は、複素乗数を計算するためのモジュール１０６０から入力を受け取る。受け取りモジュール１０２０は、第１のデータを記憶するためのモジュール１０１０から入力を受け取ることができ、ここでモジュール１０５０のうちの３２個は、第２のデータを記憶するための１つまたは複数のモジュール１０５０のうちの少なくとも１つに受け取られた入力を記憶するためのものである。受け取りモジュール１０２０は、第１のデータを記憶するためのモジュール１０１０から５１２ポイントの入力を受け取ることができる。出力モジュール１０７０は、計算された変換を出力することができる。計算モジュール１０９０は、無遅延パイプラインを使用して入力に対する高速フーリエ変換（ＦＦＴ）と逆高速フーリエ変換（ＩＦＦＴ）のいずれかまたは両方を計算することができ、ＦＦＴｅは、第１の入力を読み取った後に、出力を１２サイクル（８＋パイプライン遅延）書き込むことを開始するように構成される。パイプライン遅延が４サイクルよりも短い他の実施形態においては、ＦＦＴｅは、第１の入力を読み取った後に、出力を（８＋パイプライン遅延）サイクル書き込むことを開始するように構成される。
【０１４５】
図９において見られることができるように、このＦＦＴパイプラインのこのインプリメンテーションは、ギャップレスである。各プロセス９２０、９３０、９４０および９５０が、別個のスレッドまたはエンジンと考えられる場合、与えられた基数８のＦＦＴおよび与えられたＦＦＴｅ設計では、スレッドが第１のサブタスクを処理することを開始するときと、全体タスクが完了されるときの間の時間は、最小である。したがって、スレッド／エンジンの不必要なアイドリングは、存在しない。ユーザは、どんな理由であれ（すなわち、プロセッサの熱を減少させ、プロセッサの負荷を減少させるなど）プロセッサ／スレッドにギャップを意図的に導入することができるが、これらの意図的に導入されたギャップが取り除かれる場合には、スレッドは、上記されるスレッドに帰されることになる。
【０１４６】
ギャップレスパイプライン化ＦＦＴのこの特性を示すために、読取りプロセス９２０の例において、第１の部分読取り(sub-read)（Ｘ（０）の読取り）は、サイクル０において開始し、最後の部分読取り（Ｘ（７）の読取り）は、サイクル７の終わりにおいて終了する。全部で８個の読取り（Ｘ（１）〜Ｘ（７））が存在するので、各部分読取りが異なるサイクル中に開始する場合には、メモリのすべての８つの行を読み取るために必要とされる最小時間は、８サイクルであり、説明される読取りプロセス９２０によって使用される正確な時間である。
【０１４７】
別の例を用いて示すために、ＦＦＴ−８ｐｔプロセス９３０について考察する。第１のサブＦＦＴ処理（Ｘ（０））は、サイクル１において開始し、最後のサブＦＦＴ処理（Ｘ（７））は、サイクル１１の終わりにおいて終了する。８行のメモリが存在するので、各サブＦＦＴ処理がメモリのすべての８つの行をＦＦＴ処理するために必要とされる最小時間は、１０サイクル（８行のメモリ、各サブＦＦＴ処理は、３サイクルを必要とする）であり、説明されるＦＦＴ−８ｐｔプロセス９３０によって使用される正確な時間である。
【０１４８】
次に、ひねり乗算プロセス９４０を考察する。基数８のＦＦＴは、１４個のひねり乗算を必要とする。第１の部分ひねり乗算(sub-twiddle multiplication)（グループ１  ８１１）は、サイクル３において開始し、最後の部分ひねり乗算（グループ１４  ８２４）は、サイクル１８の終わりにおいて終了する。１４個のひねり乗算グループが存在するので、各部分ひねり乗算が、異なるサイクル中に開始する場合、すべての１４個のグループをひねり乗算するために必要とされる最小時間は、１６サイクル（１４グループ、各部分ひねり乗算は、３サイクルを必要とする）であり、説明されるひねり乗算プロセス９４０によって使用される正確な時間である。
【０１４９】
最後に、書込みプロセス９５０を考察する。基数８のＦＦＴは、８つの書込みを必要とする。第１の部分書込み(sub-write)（出力０）は、サイクル１２（８+パイプライン遅延）において開始し、最後の部分書込み（出力７）は、サイクル２０（１６＋パイプライン遅延）の終わりにおいて終了する。８つの書込みが存在するので、各部分書込みが、異なるサイクル中に開始する場合、すべての８個のグループを書き込むために必要とされる最小時間は、８サイクル（８つの出力、各部分書込みは、２サイクルを必要とする）であり、説明される書込みプロセス９５０によって使用される正確な時間である。
【０１５０】
マルチコアまたはマルチプロセッサのシステムの場合には、一部のサブタスクは、同じ「現実世界の」時間サイクル中に実行することができる。しかしながら、マルチスレッド化されたシステムは、単一スレッドへと線形化されることができるので、この解析およびアプローチは、これらのマルチコアドメインに広がる。４サイクルのスパン上でのデュアルコアシステム(dual core system)において８行のメモリを読み取ることは、依然としてギャップレスである。デュアルコアのプロセスが、単一コアに線形化されるときには、読取りは、以前と同様に８サイクルを必要とすることになる。
【０１５１】
さらに、このＦＦＴパイプラインのこのインプリメンテーションは、無遅延である。各プロセス９２０、９３０、９４０および９５０が、別個のスレッドまたはエンジンと考えられる場合、与えられた基数８のＦＦＴおよび与えられたＦＦＴｅ設計では、第１の読取りを開始するＦＦＴプロセスと、第１の書込みを開始するＦＦＴプロセスとの間の全体の時間は、最小である。ユーザは、どんな理由であれ（すなわち、プロセッサの熱を減少させ、プロセッサの負荷を減少させるなど）基数８のＦＦＴ処理にギャップを意図的に導入することができるが、これらの意図的に導入されたギャップが取り除かれる場合には、基数８のＦＦＴ処理は、以上で開示される基数８のＦＦＴ処理に帰されることになる。
【０１５２】
無遅延のパイプライン化ＦＦＴのこの特性を示すために、基数８のＦＦＴを実行する例においては、第１の書込みは、最後の８ポイントＦＦＴが完了するまで実行することができない。順々に、最後の８ポイントＦＦＴは、メモリの最後の行が読み取られるまで実行することができない。８つの行が存在するので、第１の読取りと第１の書込みとの間で必要とされる最小サイクルは、１２サイクル（８つの読取り、３つのＦＦＴ−８ｐｔ、１つの書込み；８＋パイプライン遅延）であり、これは、以上で開示されるようなシナリオである。
【０１５３】
上記されたクロックサイクルは、プロセッサおよびシステムのクロックに独立である。様々なプロセッサは、コマンドを異なるようにインプリメントするので、１つのプロセッサは、読取りを実行するために２つのプロセッサクロックを必要とする可能性があるのに対して、別のプロセッサは、３つのプロセッサクロックを必要とする可能性がある。いくつかのオペレーションが、ルーチンをサイクルで記述したが、ＦＦＴサブルーチンの順序に強調が置かれ、このＦＦＴサブルーチンの順序は、システムに独立している。
【０１５４】
ここにおいて説明されるＦＦＴ処理技法は、様々な手段によってインプリメントされることができる。例えば、これらの技法は、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組合せの形でインプリメントされることができる。ハードウェアインプリメンテーションでは、ＦＦＴを実行するために使用される処理ユニットは、ここにおいて説明される機能を実行するように設計された１つまたは複数の特定用途向け集積回路（ＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）、デジタル信号処理デバイス(digital signal processing device)（ＤＳＰＤ）、プログラマブルロジックデバイス(programmable logic device)（ＰＬＤ）、フィールドプログラマブルゲートアレイ(field programmable gate array)（ＦＰＧＡ）、プロセッサ、コントローラ、マイクロコントローラ、マイクロプロセッサ、電子デバイス、他の電子ユニット、あるいはそれらの組合せの内部にインプリメントされることができる。
【０１５５】
ファームウェアおよび／またはソフトウェアのインプリメンテーションでは、本技法は、ここにおいて説明される機能を実行するモジュール（例えば、プロシージャ、ファンクションなど）を用いてインプリメントされることができる。ファームウェアおよび／またはソフトウェアのコードは、メモリに記憶され、プロセッサによって実行されることができる。メモリは、プロセッサ内に、あるいはプロセッサの外部にインプリメントされることができる。
【０１５６】
開示される実施形態の以上の説明は、任意の当業者が本発明を作り、または使用することを可能にするために提供される。これらの実施形態に対する様々な修正は、当業者にとっては容易に明らかであろう、また、ここにおいて定義される包括的な原理は、本発明の精神あるいは範囲を逸脱することなく、他の実施形態に適用されることができる。したがって、本発明は、ここにおいて示される実施形態だけに限定されるようには意図されず、ここにおいて開示される原理および新規な特徴と整合する最も広い範囲が与えられるべきである。
【図面の簡単な説明】
【０１５７】
【図１】ワイヤレス通信システムのブロック図である。
【図２】ＯＦＤＭレシーバのブロック図である。
【図３】ＦＦＴプロセッサのブロック図である。
【図４】他の信号処理ブロックに関連したＦＦＴプロセッサのブロック図である。
【図５】ＦＦＴモジュール５００のブロック図である。
【図６】基数８のＦＦＴモジュール６００のブロック図である。
【図７】基数８のＦＦＴモジュールの中のレジスタモジュールのブロック図である。
【図８】５１２ポイントの基数８のＦＦＴについての転置メモリ乗算順序の図である。
【図９】基数８のＦＦＴ計算時系列の図である。
【図１０】Ｉ／ＦＦＴエンジンのブロック図である。
【図１】
2009535678.tif 000022
【図２】
2009535678.tif 000023
【図３】
2009535678.tif 000024
【図４】
2009535678.tif 000025
【図５】
2009535678.tif 000026
【図６】
2009535678.tif 000027
【図７】
2009535678.tif 000028
【図８】
2009535678.tif 000029
【図９】
2009535678.tif 000030
【図１０】
2009535678.tif 000031