在物理实验室里,我们的教授给了我们一项任务,要我们分析一根拨弦的频谱。在声音采集之后,我们得到了执行FFT的脚本
After the FFT we now have several frequency peaks.
然后他告诉我们,我们必须分别计算每个峰的强度。我对这个主题还不熟悉,所以我请求您帮助如何修改给定的代码以获得输出峰值强度,比如从760 Hz到765 Hz
代码如下:
from scipy.fftpack import fft,ifft
import matplotlib.pyplot as plt
from scipy.signal import blackman
data = np.loadtxt("mic.txt")
x = data[:,0]
y = data[:,1]
fy = fft(y)
print np.sum(y),"==",fy[0]
n = len(x)
t = x[-1]
fx = np.linspace(0,n/t,n)
plt.plot(fx[0:n/2],np.abs(fy[0:n/2]))
plt.xlabel("frequency (Hz)")
plt.show()
谢谢你的帮助,马修
我假设你所说的峰值强度是指每个峰值的大小(当然可以归一化)。我用^{} 得到光谱中的峰。因为FFT返回复数,所以我对y的绝对值使用了它。这是一个通用示例,因此在大多数情况下,找到最大值并不是那么简单。还有其他峰值检测工具,如^{} 或^{} 包。
从scipy tutorials开始,这里有一个最小的工作示例:
山峰的大小刚好
相关问题 更多 >
编程相关推荐