我在理解matplotlib的magnitude_spectrum函数调用生成的输出时遇到了问题。
我生成了一个频率为50khz的正弦信号
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]))
结果是在50khz处的单个尖峰,但幅度为50,而不是预期的100。
有人能解释一下为什么会这样吗?
下面是一个ipython notebook的链接,描述了前面提到的代码和结果图:
http://nbviewer.ipython.org/gist/bkinman/22cc15d3ad3b9b2db09e
2条答案
按热度按时间mwngjboj1#
它看起来与所使用的FFT窗口的默认设置有关。文档说默认值是Hanning窗口。如果使用矩形窗:
你会得到100的峰值,就像一个简单的FFT一样。
顺便说一句,如果您编辑您的问题,将其放入创建
s1_magspec
的代码行中,而不是依赖于notebook查看器,那么这将是一件好事,到notebook查看器的链接无疑会在某一天中断。bzzcjhmw2#
振幅(100%)被分为负频率(50%)和正频率(50%)。你可以看到我的意思,如果你把这个代码(注意
sides='twosided'
):只是要小心,如果你添加一些直流偏移,e。例如30,其振幅完全变为0 Hz(注意
+ 30
):