2012-06-07 32 views
8

Có chức năng hoặc gói nào trong R để tính toán FFT trượt của mẫu không? Bởi điều này tôi có nghĩa là cho đầu ra của fft(x[n:m]), tính toán fft(x[1+(n:m)]) hiệu quả.Trượt FFT trong R

Lý tưởng nhất là tôi tìm cả phiên bản trực tuyến (nơi tôi không có quyền truy cập vào toàn bộ chuỗi thời gian lúc đầu hoặc quá lớn để phù hợp với bộ nhớ và tôi sẽ không cố gắng lưu toàn bộ chạy FFT trong bộ nhớ hoặc) và một phiên bản lô (nơi tôi cung cấp cho nó toàn bộ mẫu x và cho biết chiều rộng cửa sổ đang chạy w, dẫn đến ma trận phức tạp của kích thước c(w,length(x)/w)).

Một ví dụ về thuật toán như vậy được trình bày ở đây (nhưng tôi chưa bao giờ cố gắng thực hiện nó trong bất kỳ ngôn ngữ nào):

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

Nếu không thingy như vậy đã tồn tại trong R, điều đó không có trông quá khó để thực hiện tôi đoán.

Trả lời

5

Như thường xảy ra khi tôi gửi một cái gì đó ở đây, tôi vẫn tiếp tục làm việc trên đó và đã đưa ra một giải pháp:

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 

Vẫn quan tâm để biết nếu một số thư viện cung cấp này, bởi vì sau đó nó có thể cung cấp những thứ tiện dụng khác quá. =) Nhưng bây giờ vấn đề của tôi đã được giải quyết.