python中具有不均匀间隔数据的频率分析

时间:2012-03-09 15:13:07

标签: python signal-processing fft

我有一个模拟程序生成的信号。因为该程序中的求解器具有可变的时间步长,所以我的信号具有不均匀的间隔数据。我有两个列表,一个包含信号值的列表,另一个列表包含每个值发生的时间。数据可能是这样的

npts = 500
t=logspace(0,1,npts)
f1 = 0.5 
f2 = 0.6
sig=(1+sin(2*pi*f1*t))+(1+sin(2*pi*f2*t))

我希望能够使用python对此信号进行频率分析。似乎我不能在numpy中使用fft函数,因为这需要均匀间隔的数据。是否有任何标准功能可以帮助我找到此信号中包含的频率?

3 个答案:

答案 0 :(得分:6)

解决此类事情的最常见算法称为Least-Squares Spectral analysis频率。看起来这将是scipy.signals package的未来版本。也许有一个当前版本,但我似乎无法找到它...此外,还有一些代码可以从Astropython获得,我不会完全复制它,但它实际上创建了一个lomb类您可以使用以下代码来获取一些值。您需要做的是以下内容:

import numpy
import lomb
x = numpy.arange(10)
y = numpy.sin(x)
fx,fy, nout, jmax, prob = lomb.fasper(x,y, 6., 6.)

答案 1 :(得分:2)

非常简单,只需查看傅里叶变换的公式,并将其作为数据值的离散和实现:

在一组f(x)上给出一组值x,然后为每个频率k

F(k) = sum_x ( exp( +/-i * k *x ) )

选择从k0的{​​{1}}。

并且,您可以使用2*pi / min separation in x作为增量大小

对于测试用例,请使用您知道正确答案的内容,例如,某些2 * pi / max(x)的单cos( k' * x )或高斯。

答案 2 :(得分:0)

一种简单的解决方法是插值到均匀间隔的时间间隔