2012-06-07 11 views
8

Gibt es in R eine Funktion oder ein Paket zur Berechnung der gleitenden FFT einer Probe? Damit meine ich, dass die Ausgabe fft(x[n:m])fft(x[1+(n:m)]) effizient berechnet.Gleitende FFT in R

Idealerweise würde ich sowohl eine Online - Version finden (wo ich zu Anfang keinen Zugriff auf die vollständige Zeitreihe habe, noch zu groß, um in den Speicher zu passen, und ich werde nicht versuchen, die ganze laufende FFT im Speicher entweder) und eine Batch-Version (wo ich gebe das ganze Beispiel x und teilen Sie ihm die laufende Fensterbreite w, was zu einer komplexen Matrix der Dimension c(w,length(x)/w)).

Ein Beispiel für einen solchen Algorithmus wird hier vorgestellt (aber ich habe nie versucht, es in jeder Sprache noch der Umsetzung):

http://cnx.org/content/m12029/latest/

Wenn keine solche Dingens bereits in R existiert, das nicht der Fall ist schau zu schwer, um es zu implementieren, denke ich.

Antwort

5

Wie geschieht in der Regel, wenn ich hier etwas schreiben, hielt ich daran zu arbeiten und kam mit einer Lösung:

fft.up <- function(x1, xn, prev) { 
    b <- length(prev) 
    vec <- exp(2i*pi*seq.int(0,b-1)/b) 
    (prev - x1 + xn) * vec 
} 

# Test it out 
x <- runif(6) 
all.equal(fft.up(x[1], x[6], fft(x[1:5])), fft(x[2:6])) 
# [1] TRUE 

immer noch daran interessiert zu wissen, ob einige Bibliothek dies bietet, denn dann könnte es andere praktische Dinge anbieten auch. =) Aber jetzt ist mein Problem gelöst.