【问题标题】:frequency analysis with unevenly spaced data in python在python中使用不均匀间隔的数据进行频率分析
【发布时间】:2012-03-09 15:13:06
【问题描述】:

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

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 函数,因为这需要均匀分布的数据。是否有任何标准函数可以帮助我找到该信号中包含的频率?

【问题讨论】:

    标签: python signal-processing fft


    【解决方案1】:

    解决此类问题的最常见算法称为频率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.)
    

    【讨论】:

    【解决方案2】:

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

    给定一组值f(x) 超过一组x,然后对于每个频率k

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

    选择您的k,范围从02*pi / min separation in x

    并且,您可以使用2 * pi / max(x) 作为增量大小

    对于测试用例,请使用您知道正确答案的东西,c.f.,单个 cos( k' * x ) 用于某些 k',或高斯。

    【讨论】:

    • 请考虑使用示例输出来回答,因为它将帮助很多用户如何找到这个问题。
    • 这只是功能示意图。 F(k) 将是您选择的任何 k 集合的复数值。
    • 再评论一下,此方法将输入的自变量集视为一组 delta 函数,与 FFT 中的隐含函数非常相似。
    【解决方案3】:

    一个简单的方法是插入到均匀间隔的时间间隔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 2017-01-09
      相关资源
      最近更新 更多