我在理解matplotlib的magnitude_spectrum函数调用生成的输出时遇到了问题。
我产生了一个频率为50千赫的正弦,
f_s = 488000.0 # Hz
t = np.arange(0.0, 1.0, 1/f_s)
s1 = 100*np.sin(2*np.pi*50000*t)然后,在除以FFT回收箱的数目之后,绘制出所产生的震级谱。
s1_magspec = plt.magnitude_spectrum(s1,Fs=f_s)
plt.plot(s1_magspec[0]/len(s1_magspec[0]))结果是一个50千赫的单一峰值,但震级为50,而不是预期的100。
有人能解释一下为什么吗?
下面是一个ipython笔记本的链接,描述了上面提到的代码和结果的情节:
http://nbviewer.ipython.org/gist/bkinman/22cc15d3ad3b9b2db09e
发布于 2014-12-02 01:43:49
它看起来与所使用的FFT窗口的默认设置有关。文档显示,默认情况下是一个汉宁窗口。如果您使用的是箱式车窗,那么:
s1_magspec = plt.magnitude_spectrum(s1, Fs=f_s, window=np.ones(s1.shape))你会得到你的峰值在100,就像一个直接的数字FFT。
顺便说一句,如果你把你的问题编辑成创建s1_magspec的代码,而不是依赖笔记本查看器,那就更好了,因为有一天,这个链接肯定会中断。
https://stackoverflow.com/questions/27239844
复制相似问题