如何在数据中找到周期?

Mic*_*ael 17 algorithm fft c#-3.0

我有一个数据集(一个数组),我需要在其中找到周期性.我该怎么办?有人说我可以使用FFT,但我不确定它会如何给我周期性.非常感谢您的帮助!

tom*_*m10 14

对于此任务,最好使用自相关.

FFT是用于查找周期性的错误工具.

例如,考虑一种情况,即通过将两个简单的正弦波相加来制作波形,一个周期为2秒(0.5 Hz),另一个周期为3秒(0.333 Hz).该波形的周期为6秒(即2*3),但傅立叶频谱仅在.5 Hz和.333 Hz处显示两个峰值.

  • @MusséRedi:这个想法非常简单:只需采用自相关并找到峰值(不是0).那么唯一的问题是,如何进行自相关并找到结果的峰值.你如何做到这将取决于你正在使用什么工具; 虽然你可以从头开始,但大多数人会使用一些数据分析包.也就是说,我的草图在这里没有帮助,所以相反,我建议,选择一个你喜欢的方法,尝试一下,如果某些东西不起作用,请提出一些具体的问题. (3认同)

Vov*_*ium 5

周期性是一个没有明确定义的术语。例如这样的数据:

1, 10, 1, 10, 1, 11, 1, 10, 1, 10, 1, 11, 1, 10, 1, 10, 1, 11

您可以将其视为不精确但强周期性 2 的 1,以及精确周期 6 的周期。

对于精确的周期性,您可以简单地尝试将给定数据作为重复两次的数据子串来查找。

对于真实、噪声信号的非精确周期性,可以使用时域和频域方法。

时域一是自相关。就像上面的子串搜索:搜索数据具有最大自相似性的移位值。

对于简单信号,计算阈值转换可能就足够了。

频域方法包括使用 FFT/FHT 的方法:搜索频率频谱中的最大值,给出 1/T 的周期性。

另一种方法是使用倒谱


Jac*_*ack 1

您可以使用 FFT,因为它将您的数据集从值空间转换为频率空间。

这意味着您最终将拥有一组频率,这些频率组成将产生您想要分析的初始输入。然后您可以轻松识别哪些是由特定频率产生的主要贡献,因此您将了解有多少个周期性以及哪些是最有影响力的。

看看这里: http: //local.wasp.uwa.edu.au/~pbourke/miscellaneous/dft/