使用Python在傅立葉轉換後計算個別峰值下的面積

2024-09-24 06:33:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python2.7.3中生成了一个FFT图,其中包含许多单独的峰值。在

http://imgur.com/O9E0e

我知道要计算整个图形下的面积,我可以求和值,也可以使用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()

我确信我可能只是错过了一些相对简单的东西,但是作为一个编程的新手,我会很感激你能提供的任何帮助,而简单的搜索并没有提供任何答案。谢谢。在


Tags: 代码fft图形区域plotshowpifrequency
2条回答

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

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

或者

^{pr2}$

看来应该行得通。在

>>> 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)

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

相关问题 更多 >