8

R中是否有用于计算样本滑动FFT的函数或包?我的意思是,给定 的输出fft(x[n:m]),有效地计算fft(x[1+(n:m)])

理想情况下,我会找到一个在线版本(一开始我无法访问完整的时间序列,或者它太大而无法放入内存,我不会尝试将整个运行的 FFT 保存在内存)和批处理版本(我给它整个样本x并告诉它正在运行的窗口宽度w,从而产生一个复杂的维度矩阵c(w,length(x)/w))。

此处介绍了这种算法的一个示例(但我从未尝试过用任何语言实现它):

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

如果 R 中不存在这样的东西,我猜这看起来并不难实现。

4

1 回答 1

5

就像我在这里发布东西时通常发生的那样,我一直在努力并想出了一个解决方案:

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

仍然有兴趣知道某些图书馆是否提供此功能,因为那样它也可能提供其他方便的东西。=) 但是现在我的问题已经解决了。

于 2012-06-07T19:47:46.113 回答