2012-06-07 9 views
8

Esiste una funzione o un pacchetto in R per calcolare la FFT scorrevole di un campione? Con questo voglio dire che data l'uscita di fft(x[n:m]), calcolare fft(x[1+(n:m)]) in modo efficiente.FFT scorrevole in R

Idealmente troverei sia una versione online (in cui non ho accesso alle serie temporali complete all'inizio, o è troppo grande per stare nella memoria, e non ho intenzione di provare a salvare il tutta la FFT in esecuzione in memoria) e una versione batch (dove gli do l'intero campione x e diciamo la larghezza della finestra corrente w, risultante in una matrice complessa di dimensione c(w,length(x)/w)).

Un esempio di un tale algoritmo qui viene presentato (ma non ho mai provato la sua attuazione in tutte le lingue ancora):

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

Se tale thingy esiste già in R, che non lo fa sembra troppo difficile da implementare, immagino.

risposta

5

come di solito accade quando posto qualcosa qui, ho continuato a lavorare su di esso e si avvicinò con una soluzione:

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 

ancora interessato a sapere se qualche libreria offre questo, perché allora potrebbe offrire altre cose a portata di mano pure. =) Ma per ora il mio problema è risolto.