估计谱密度

机器算法验证 时间序列 信号处理
2022-03-15 09:44:09

我有兴趣使用谱密度来确定时间序列的周期。根据维基百科,我们可以使用周期图来估计谱密度。沿着链条往下走,维基百科说周期图是使用 FFT 实现的,但没有给出细节。它实际上是上的 FFT吗?xtxt

编辑:

在 R 中,有一个函数 spec.pgram 返回原始周期图。我试图将其与 ACF 的 FFT 进行比较,但我仍然没有得到匹配的结果(最终我需要在 Java 中执行此操作,所以我试图完全理解实现)。

x = rep(c(5,1,5,10),4)
x.acf = acf(x)$acf[,,1]
Mod(fft(x.acf))^2

 [1]  0.3906250  0.4757183  0.9898323 15.5956432  2.5543312  0.3962321
 [7]  0.2068152  0.2068152  0.3962321  2.5543312 15.5956432  0.9898323
[13]  0.4757183

对比

x.pgram = spec.pgram(x, detrend=F)
x.pgram$freq

[1] 0.0625 0.1250 0.1875 0.2500 0.3125 0.3750 0.4375 0.5000

x.pgram$spec

[1]  3.8819277  3.4948335  2.9155061 69.0892857  1.5487796  0.9694522  0.5823580
[8]  0.1607143
2个回答

它实际上主要是通过FFT 实现的,但通常是在 DFT 的帮助下推导出来的。这个想法是,可以通过这种方式获得周期图的大部分统计特性(例如,您不仅想知道峰值在哪里,而且还想知道那个峰值的重要性!)。FFT是否直接取决于算法;“经典”周期图“只是”FFT,但它不仅嘈杂,而且还有其他严重问题(参见我在下面引用的 Scargle 论文)。

周期图最常用的形式是Lomb-Scargle (LS) 周期图(Scargle,1989;实际上,在这篇论文中,Scargle 对“经典”周期图进行了批评;如果您想检测周期,它是必读的时间序列!)。您可以在Press & Rybicki (1989)的这篇论文中查看它的快速实现(如果您迷路了,还可以查看Numerical Recipes中的显式实现)。

我还应该补充一点,LS 周期图的概括说明了正弦曲线的浮动均值,或点之间的不等方差一旦你阅读了我刚刚给出的论文,实现就很简单了;-)。

谱密度是为平稳时间序列定义的。它是自相关函数的傅里叶变换。周期图是样本自相关函数的傅里叶变换。周期图是离散的,而谱密度是连续的,通常通过周期图的核平滑来估计。由于 Tukey 和 Cooley 的工作,快速傅立叶变换是计算傅立叶变换的一种快速方法。