複雑な2次元配列の少数の低周波数フーリエ成分のみを計算する必要があります。入力配列が変わると、同じフーリエ成分を何度も計算します。明らかに、フーリエ成分が1つだけ必要な制限では、私が求めている成分を与えるDFT行列を作成し、その行列を繰り返し乗算するのが最も高速です。
もう1つの制限では、すべてのフーリエ成分が必要な場合は、FFTを使用する方が高速です。
どの時点で、配列のFFTを計算し、単純に私が求めているコンポーネントを引き出す方が速くなりますか?
それが違いを生む場合、私の特定の状況では、入力配列はようなものになります。私はMATLABを使用しているので、FFTはFFTWを使用して実行され、行列DFTの行列乗算は、MATLABが内部で使用する行列乗算アルゴリズムを介して実行されます。
2
最初に、注意してください。DFTは数学的変換であり、FFTはそれらを計算するための高速アルゴリズムです。DFTによって、離散フーリエ変換式の直接実装を意味しているように見えます。第二:あなたは逆が必要ないのですか?その場合、必要な要素の変換のみを実装できます。
—
fcruz
はい、DFTとFFTの違いを認識しています。多分、私がこの用語を使用した方法は、私と私の同僚以外には一般的ではありません。あなたが言ったことは本質的に正しいです。私は「DFT」という用語を使用して、1つ以上のフーリエ係数の直接計算を指します。FFTは効率的ですが、DCからナイキスト周波数の2倍までの周波数の計算に制限されています。サンプル間隔は1 / Nで、Nは配列のサイズです。一般に、DFTはこれらのサブセット、または中間周波数(非整数kの場合はk / N)さえ計算できますが、それほど効率的ではありません。
—
コリンK
@fcruz:また、「必要な要素のみの変換を実装する」というのがこの質問の意味です。FFT全体を実行してから不要な値を捨てるだけの簡単な方法である前に、DFTで計算できる要素の数を尋ねています。rcomptonの答えは、この点ではかなり正しいようです。
—
Colin K