Frage:
FFT nur für einen Teil des gesamten Frequenzbereichs berechnen?
Scorch
2016-06-12 19:47:08 UTC
view on stackexchange narkive permalink

Earlier I asked a question here about performing FFT at lower frequencies but still at high sample frequencies. I was under the impression that the FFT was inherently calculated at every frequency 0->(Sampling Frequency)/2 distributed in bins of width Fs/(2*N). But, looking at some of the answers I received, it appears that it is possible that Fs is only useful in determining the maximum frequency, which is Fs/2, but that it is entirely possible to, say, sample at 640 Hz but to only sample frequencies 0-64 Hz.

Yet, from what I've read so far on FFT implementations, it appears that the FFT in the examples I'm seeing, is being performed on the entire range 0->Fs/2, so I'm not entirely sure how to go about performing the FFT on only a portion of the maximum frequency.

Now, just to pre-empt this, I realize that somewhere along the line there is a high chance of some sort of misunderstanding on my part. I'm not entirely sure what I'm missing, but that's why I laid out my current understanding here and maybe somebody can properly explain why I'm perceiving that the FFT is only being performed on a part of the range, which I have the suspicion, due to the contradiction outlined above, is just an incorrect interpretation by me. Or maybe oversampling requires some sort of different logic that I was unaware of. In either case, I'm left a little confused so any help is appreciated.

[Goertzel-Algorithmus] (https://en.wikipedia.org/wiki/Goertzel_algorithm)
Drei antworten:
The Photon
2016-06-12 20:13:11 UTC
view on stackexchange narkive permalink

Ich hatte den Eindruck, dass die FFT bei jeder Frequenz 0 -> (Abtastfrequenz) / 2 in Bins der Breite Fs / (2 * N) inhärent berechnet wurde.

Dies ist ungefähr richtig. Eine diskrete Fourier-Transformation (DFT) erzeugt eine Ausgabe für Frequenzen zwischen \ $ - F_s / 2 \ $ und \ $ F_s / 2 \ $. Wenn die Eingabedaten reellwertig (und nicht komplex) sind, ist das negative Frequenzspektrum nur das komplexe Konjugat des positiven Frequenzspektrums, sodass Zeit gespart werden kann, indem die negativen Frequenzbereichswerte nicht berechnet werden.

Der Abstand der Fächer beträgt \ $ F_s / N \ $, nicht \ $ F_s / (2N) \ $.

Ich bin mir nicht ganz sicher, wie Führen Sie die FFT nur für einen Teil der Maximalfrequenz durch.

Um eine kleine Anzahl von Bins zu berechnen, gibt es eine Methode namens Goertzel-Algorithmus zur Berechnung jeweils ein Bin.

Als Faustregel gilt, dass es in der Regel effizienter ist, \ $ M \ $ Bins einer DFT mit dem Goertzel-Algorithmus zu berechnen, wenn

$$ M \ le \ frac {5 N_2} {6 N} \ log_2 (N_2) $$

wobei \ $ N_2 \ $ die nächste Zweierpotenz ist, die größer als \ $ N \ $ ist.

Matt L.
2016-06-12 20:26:35 UTC
view on stackexchange narkive permalink

Sie haben Recht, dass die FFT äquidistante Frequenzabtastwerte über den gesamten Frequenzbereich berechnet.Neben dem in Die Antwort des Photons erwähnten Goertzel-Algorithmus können Sie auch die Chirp-Z-Transformation verwenden, mit der Sie einen bestimmten Frequenzbereich vergrößern können. Dieses Dokument erläutert den Algorithmus und enthält auch eine Matlab-Implementierung (die auch in der Signalverarbeitungs-Toolbox von Matlab als czt.m ) enthalten ist.

AußerdemSchauen Sie sich diese Antwort an.

Das CZT scheint tatsächlich eine sehr interessante Option zu sein.Ich bin allerdings gespannt, wie viel ineffizienter es ist als der Goertzel-Algorithmus.Nach der Antwort von The Photon ist das Goertzel nur über sehr enge Bandbreiten effizient (in der Größenordnung von M = 10 nach meiner Zählung, offensichtlich abhängig von den Parametern von N & N2). Wenn ich es also verwenden würdeBeim Goertzel wäre es eine ineffiziente Form, die sich darauf verlassen würde, dass mein Computerprozessor den Durchhang aufnimmt und ihn einfach loslässt.Aber vielleicht weiß jemand oder kann zumindest vermuten, wann das CZT effizienter wird als das Goertzel?
Dave Tweed
2016-06-12 20:21:48 UTC
view on stackexchange narkive permalink

Die DFT (diskrete Fourier-Transformation) ist ein Prozess, der N Datenabtastwerte im Zeitbereich entnimmt und N Datenabtastwerte im Frequenzbereich erzeugt. Es erfordert in der Reihenfolge von N 2 Operationen (dies wird als "O (N 2 2) geschrieben"), um die vollständige Berechnung abzuschließen. Jeder der N Ausgangswerte wird unabhängig berechnet, und jeder benötigt O (N) -Operationen, um zu berechnen.

Die FFT (schnelle Fourier-Transformation) ist eine Implementierung der DFT, die eliminiert die enorme Redundanz bei der normalen Burte-Force-DFT-Berechnung und reduziert die Anzahl der Operationen, die für O erforderlich sind (N log 2 N). Die N Ausgabeergebnisse werden jedoch "parallel" berechnet, und es gibt keine einfache Möglichkeit, nur einige davon zu berechnen, ohne alle Operationen auszuführen.

Wenn Sie daher nur eine Teilmenge der N Ergebnisse benötigen kann es effizienter sein, die ursprüngliche DFT-Berechnung zu verwenden. Insbesondere, wenn Sie nur log 2 sub> N von ihnen (oder weniger) benötigen. Wenn Sie jedoch mehr davon benötigen, können Sie die vollständige FFT ausführen und die nicht benötigten Ergebnisse wegwerfen.

Der Goertzel-Algorithmus ist eine andere Methode zur Berechnung eines einzelnen Ergebnisses von eine DFT. Die nicht rekursive Formel wird in eine rekursive umgewandelt, wodurch der erforderliche Zwischenspeicher erheblich reduziert wird. Aus diesem Grund ist es in Anwendungen wie der DTMF-Decodierung beliebt, in denen Sie nur die relativen Pegel von 8 verschiedenen spezifischen Frequenzen messen müssen.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...