Ich muss nur eine kleine Anzahl niederfrequenter Fourier-Komponenten eines komplexen zweidimensionalen Arrays berechnen. Ich werde immer wieder dieselben Fourier-Komponenten berechnen, wenn sich das Eingabearray ändert. In der Grenze, in der ich nur eine Fourier-Komponente haben möchte, wäre es natürlich am schnellsten, eine DFT-Matrix zu erstellen, die die gewünschte Komponente angibt, und diese Matrix wiederholt zu multiplizieren.
In der anderen Grenze wäre es schneller, eine FFT zu verwenden, wenn ich alle Fourier-Komponenten haben wollte.
Ab wann wird es schneller, die FFT des Arrays zu berechnen und einfach die Komponenten herauszuziehen, nach denen ich suche?
Wenn es einen Unterschied macht, wird das Eingabearray in meiner speziellen Situation . Ich verwende MATLAB, was bedeutet, dass meine FFT mit FFTW durchgeführt wird und eine Matrixmultiplikation für eine Matrix-DFT über einen beliebigen Matrixmultiplikationsalgorithmus durchgeführt wird, den MATLAB unter der Haube verwendet.
quelle
Antworten:
17.
Viele, viele Arbeiten wurden in gute FFT-Implementierungen investiert, und es ist unwahrscheinlich, dass Sie eine gute FFT-Bibliothek zuverlässig übertreffen können. Zum Beispiel passt sich fftw "automatisch an Ihren Computer, Ihren Cache, die Größe Ihres Speichers, die Anzahl der Register und alle anderen Faktoren an, die es normalerweise unmöglich machen, ein Programm für mehr als einen Computer zu optimieren", siehe diese Seite .
Sie haben Recht, dass es Situationen gibt, in denen es schneller ist, nur ein paar Punktprodukte zu berechnen, aber es wird sehr systemabhängig sein.
Ein Experiment:
Wenn also 4096 Datenpunkte berechnet werden, dauert die gesamte FFT nur etwa 17-mal länger als die Berechnung eines einzelnen Punktprodukts.
quelle
Alternativ können Sie den Goertzel-Algorithmus verwenden , um die Frequenzkomponenten, an denen Sie interessiert sind, direkt zu berechnen.
quelle