2016-05-16 14 views
2

zu implementieren Also frage ich mich, wie man eine STFT in Julia implementieren, möglicherweise mit einem Hamming-Fenster. Ich kann nichts im Internet finden.Was ist der beste Weg, um STFT (Kurzzeit-Fourier-Transformation) in Julia

Was ist der beste Weg, es zu tun? Ich würde es vorziehen, keine Python-Bibliotheken zu verwenden, sondern pure native Julia, wenn möglich. Vielleicht ist es ein Merkmal, das noch in Juila entwickelt wird ...?

Danke!

+1

Ich denke, Sie können einfach tun, was es im ersten Absatz der verlinkten Wikipedia-Seite sagt: Nehmen Sie die FFT von Abschnitten (Fenstern) der Zeitreihe? Was vermisst das? –

Antwort

4

Mir ist keine native STFT-Implementierung in Julia bekannt. Wie David in seinem Kommentar sagte, müssen Sie dies selbst umsetzen. Das ist ziemlich einfach:

1) das Signal in kurze Zeitabschnitte Break up

2) Übernehmen Sie die Fenster der Wahl (in Ihrem Fall, Hamming)

3) Nehmen Sie die FFT Julias mit fft Funktion .

Alle oben genannten sind ziemlich Standard mathematische Operationen und Sie finden eine Menge von Referenzen online. Der folgende Code erzeugt ein Hamming-Fenster, wenn Sie noch keins haben (achten Sie auf Julias 1-indexing, wenn Sie Online-Referenzen verwenden, da viele der Signalverarbeitungs-Referenzmaterialien bei der Beschreibung der Fenstergenerierung gerne 0-indexing verwenden).

Wb = Array(Float64, N) 
## Hamming Window Generation 
for n in 1:N 
    Wb[n] = 0.54-0.46cos(2pi*(n-1)/N) 
end 

Sie können auch die Hamming-Fensterfunktion von DSP.jl verwenden.

P.S Wenn Sie Julia unter OS X ausführen, überprüfen Sie die Julia interface zu Apples Accelerate-Framework. Dies liefert eine sehr schnelle Hamming-Fenster-Implementierung sowie Faltungs-und elementweise Multiplikationsfunktionen, die hilfreich sein könnten.