Wenn ich mich nicht irre, verwendet Julia FFTW für FFT. Ich kann mich nicht daran erinnern, dass im FFTW-Handbuch etwas über automatisch gefüllte FFTs zu sehen ist, ohne die Eingabedaten zu manipulieren.
Wenn Sie nicht an Geschwindigkeit interessiert sind und nur FFT als Abkürzung für die diskrete Fourier-Transformation (DFT) verwenden, können Sie die DFT mit einer DFT-Funktion einer beliebigen Frequenz-Bin-Abtastung durchführen oder die Transformation einfach manuell ausführen. Es wird nicht länger eine O (N log N) -Operation sein, aber es vermeidet, den ursprünglichen Datenvektor manuell aufzufüllen, und Sie können die Abtastung der Transformation nach Bedarf spacen, z. Oversampling die Teile des Spektrums, das Sie interessiert sind oder die Teile auslassen, die Sie nicht interessieren.
beispielsweise f
die DFT-Matrix, die Proben, die bei Frequenzen zu machen:
M = exp(-2im*pi * f/Fs * (0:N-1)')
wo Fs
der Vektor Abtastrate der Daten ist und N
die Länge des Datenvektor ist. f
ist auch ein Vektor von Häufigkeitswerten. Übernehmen mit Matrixmultiplikation:
Wenn die DFT-Matrix zu groß wird, wenden Sie einfach jede Zeile davon in einer Schleife an.
Es ist überraschend, da der Padding-Parameter in Matlab und Numpy sehr vorne und zentriert ist. Das manuelle Auffüllen ist in der REPL umständlich und weist zusätzlichen Speicher zu. Ich denke, meine eigene Wrapper-Methode, die Zero-Pads ist eine Lösung. – DNF
Ja, wenn Sie oft in der REPL verwenden, dann ist das wahrscheinlich der Weg zu gehen. Sie können es in einer Zeile tun, obwohl 'datpad = [dat; Nullen (eltype (dat), nextprod (Länge (dat)) - Länge (dat)] ' –