我在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的简要搜索没有提供任何答案。感谢。
答案 0 :(得分: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)
答案 1 :(得分:0)
指数的积分,$ \ int_a ^ {b} \ exp(x * q)=(1 / q)*(\ exp(b * q) - \ exp(a * q))$