2010-11-21 101 views
16

我有一个数据集(一个数组),我需要找到它的周期性。我应该如何继续......请帮助。提前致谢。有些人说我可以使用FFT,但我不知道它将如何给我周期性。您的帮助表示赞赏。再次感谢。如何找到数据中的周期?

回答

0

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

这意味着你最终会得到一组合成​​的频率,它们会产生你想分析的初始输入。然后你就可以很容易地识别哪些是由特定的频率产生的主要contribuitions等会你了解有多少周期性存在的,哪些是最有影响力的人..

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

4

周期没有明确定义的术语。例如,这样的数据:

1,10个,11,10,1,11,如图1所示,10个,11,10,1,11,如图1所示,10个,11,10,如图1所示,11

你可以视为不精确但强周期为2的一个,并且精确周期为6.

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

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

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

对于简单的信号计数阈值转换可能就足够了。频率范围方法包括使用FFT/FHT的方法:在频率范围内搜索最大值,它给出1/T的周期性。

另一种方法是使用Cepstrum

13

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

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

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

+1

你将如何实现自相关任务?你能给一个素描吗? – 2014-05-16 21:41:57

+3

@MusséRedi:这个想法很简单:只要采用自相关并找到峰值(不是0)。那么唯一的问题是,如何做自相关并找出结果的高峰。你如何做到这一点将取决于你使用的是什么工具;尽管你可以从头开始,但大多数人会使用一些数据分析软件包。也就是说,我在这里的草图不会有帮助,所以我建议,选择一种你喜欢的方法,尝试一下,如果有什么不管用,请用一些细节问一个问题。 – tom10 2014-05-16 22:12:21

+0

我尝试了第一个答案的方法http://stackoverflow.com/questions/643699/how-can-i-use-numpy-correlate-to-do-autocorrelation来自动关联我的数据。这给出了数字的降序。峰值并没有给出任何关于周期性的信息。当测试正弦函数时,我得到一个下降的振荡。我应该如何找到周期? – 2014-05-16 22:57:57

1

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

On Periodicity Detection and Structural Periodic Similarity

+0

这个链接似乎已经死了,但我发现了一些类似的东西,使用SVD来查找数据的周期性:http://pre.aps.org/abstract/PRE/v59/i4/p4013_1 – Magsol 2013-06-11 19:49:21

+0

我刚刚检查了链接,似乎为我打开PDF文件。如果您在Google学术搜索中搜索链接的标题,则可以尝试其他链接。 – bnsmith 2013-07-19 18:22:42

1

这个新的文件一直没有很大的关注,谱聚类

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

实施在一个R包可在oscillat.iab.keio.ac.jp。我与作者没有关系,但将代码放在GitHub here以便于访问(主脚本here)。

使用DFT并将行分组为主要频谱功率,很好用于我的经验。显然对于基因组学来说,它的设计很强大(在代码中注明它是computationally heavy),因此可能取决于应用程序。