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中已经没有这样的东西,那我觉得实现起来并不难.
正如我在这里发布一些内容时经常发生的那样,我一直在努力并想出一个解决方案:
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
Run Code Online (Sandbox Code Playgroud)
仍然有兴趣知道某些图书馆是否提供此功能,因为它可能会提供其他方便的东西.=)但是现在我的问题已经解决了.