假设我有一个包含一百个测量值的时间序列 t,每个条目代表每天的测量值。我假设信号有一定的周期性——它可能每天、每周或每月重复。
将时间序列转换为傅里叶域可能有助于找到这样的周期性?
我如何使用 numpy 的 fft 模块为我的时间序列找到最可能的周期?
最佳答案
我的目标是回答我自己的问题。您可以在适当的地方纠正我。
假设我们的时间序列 t 是 t = [2,1,0,1,2,3,2,1,0,1,2,3,2,1,0,1,2,3 ]
有 18 个测量值。一个相当简单的例子:周期的长度似乎是六个时间单位。
将这个时间序列带入频域得到我们:
w = numpy.fft.fft(t)
print numpy.absolute(w)
array([27.000000, 0.000000, 0.000000, 12.000000, 0.000000, 0.000000,
0.000000, 0.000000, 0.000000, 3.000000, 0.000000, 0.000000,
0.000000, 0.000000, 0.000000, 12.000000, 0.000000, 0.000000])
我们忽略频率 0 并观察到索引 3 的值最大——这表明在我们的时间序列 t 内,信号重复 3 次。因此信号的长度——周期——将是 18/3 = 6。事实上:
numpy.fft.fftfreq(18)
array([ 0. , 0.055556, 0.111111, 0.166667, 0.222222, 0.277778,
0.333333, 0.388889, 0.444444, -0.5 , -0.444444, -0.388889,
-0.333333, -0.277778, -0.222222, -0.166667, -0.111111, -0.055556])
索引 3 处的频率恰好是 1/6,即一个时间单位的频率是 1/6,这意味着信号在整个周期内需要六个时间单位。
请让我知道我的理解是否正确。
关于python - 使用 numpy 的傅里叶变换找到时间序列最可能的周期性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44803225/