如何在数据中找到周期?

时间:2010-11-21 18:39:02

标签: algorithm c#-3.0 fft

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

5 个答案:

答案 0 :(得分:14)

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

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

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

答案 1 :(得分:4)

周期性定义不明确。例如,这样的数据:

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

你可以把它当作一个不精确但强周期为2的人,并且确切周期为6。

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

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

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

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

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

另一种方法是使用Cepstrum

答案 2 :(得分:2)

这篇新论文没有引起太多关注,谱聚类

  

Amariei,C.,Tomita,M。,& Murray,D。B.(2014)。 Quantifying periodicity in omics data细胞和发育生物学的前沿

oscillat.iab.keio.ac.jp处提供的R包中实施。我与作者没有任何关系,但是将代码放在GitHub上here以便于访问(主要文字here)。

使用DFT并将行分组为主要光谱功率,非常适合我的经验。显然,对于基因组学而言,它的设计是健壮的(在代码中注明computationally heavy),因此可能取决于应用程序。

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

我发现了一篇将基于FFT的周期图与自相关相结合的论文,以提供有关信号周期性的更准确信息。我认为这种方法值得研究:

On Periodicity Detection and Structural Periodic Similarity