【问题标题】:Calculating Area Under Individual Peaks in Python After FFT在FFT之后计算Python中各个峰下的面积
【发布时间】:2012-11-06 14:53:55
【问题描述】:

我在 Python 2.7.3 中生成了一个 FFT 图,其中包含多个单独的峰值。

我知道要计算整个图表下的面积,我可以对这些值求和或使用 trapz,但在尝试将这些计算限制在单个区域时我会遇到困难。例如,我想只计算 105 到 120Hz 之间或 145 到 155Hz 之间的区域。

如果有帮助,生成此图的代码是:

x=arange(0,15,0.01)

y=exp(-0.3*x)*exp(x*pi*20j)+exp(-0.9*x)*exp(x*pi*25j)+exp(-0.9*x)*exp(x*pi*15j)

fft(y)
plot(fft(y))
xlabel('frequency (Hz)')
show()

我确定我可能只是遗漏了一些相对简单的东西,但作为一个完全的编程新手,我希望你能提供任何帮助,并且对 SO 的简短搜索没有提供任何答案。谢谢。

【问题讨论】:

    标签: python math numpy matplotlib fft


    【解决方案1】:

    如果您使用简单的求和(或梯形)积分:

    ft = np.fft.fft(y)
    integral = sum(ft[105:121])
    

    integral = np.trapz(ft[105:121])
    

    看起来应该可以了。

    >>> import numpy as np
    >>> x = x=np.arange(0,15,0.01)
    >>> from numpy import exp,pi
    >>> y=exp(-0.3*x)*exp(x*pi*20j)+exp(-0.9*x)*exp(x*pi*25j)+exp(-0.9*x)*exp(x*pi*15j)
    >>> ft = np.fft.fft(y)
    >>> np.trapz(ft[105:121])
    (642.14009362811771+142.9776425340925j)
    >>> sum(ft[105:121])
    (652.29308789751224+152.70583448308713j)
    

    【讨论】:

    • 这绝对是我希望得到的答案,非常感谢。
    【解决方案2】:

    指数的积分,$\int_a^{b} \exp(x*q) = (1/q)*(\exp(b*q) - \exp(a*q))$

    【讨论】:

    • 但是,一旦转换到频率空间,您将整合指数的傅立叶变换......
    • 是的。在f(x)ab 的积分中,将f(x) 写为其FT 的傅立叶空间上的积分,然后改变积分的顺序。剩下的是函数 FT 的傅立叶空间上的积分乘以指数的积分,得到类似sin(kx)/kx
    猜你喜欢
    • 2019-02-11
    • 2021-12-05
    • 2011-02-08
    • 2023-01-12
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    相关资源
    最近更新 更多