python - 使用 numpy 的傅里叶变换找到时间序列最可能的周期性?

标签 python numpy fft periodicity

假设我有一个包含一百个测量值的时间序列 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/

相关文章:

python - 大型数据集上的ElasticSearch聚合

python - scikit-learn fit() 在规范化数据后导致错误

iphone - 如何将字节数组转换为 wav 文件 <OOURAFFT>

python - 过滤 wav 文件中高于限制的频率(低通滤波器)

python - 如何以行 block 的形式检查进程的持续时间?

python - 保存图像文件时 Flask 出现错误 "ValueError: read of closed file"

python - PyML 构建时出错

python - 导入错误 numpy/core/multiarray.so : undefined symbol: PyUnicodeUCS2_AsASCIIString

python - 根据行间变化的计算创建新列?

python - 为什么这个经过过滤的噪声信号的表现不像我预期的那样?