1

我在 Python 2.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()

我敢肯定我可能只是错过了一些相对简单的东西,但作为一个完整的编程新手,我会很感激你能提供的任何帮助,并且对 SO 的简短搜索没有提供任何答案。谢谢。

4

2 回答 2

1

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

于 2012-11-06T15:00:09.047 回答
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)
于 2012-11-06T15:04:45.113 回答