bra*_*man 4 python signal-processing matplotlib
我在理解 matplotlib 的mplitude_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)
Run Code Online (Sandbox Code Playgroud)
然后,除以 FFT 箱数后绘制所得幅度谱
s1_magspec = plt.magnitude_spectrum(s1,Fs=f_s)
plt.plot(s1_magspec[0]/len(s1_magspec[0]))
Run Code Online (Sandbox Code Playgroud)
结果是 50khz 的单个尖峰,但幅度为 50,而不是预期的 100。
有人能解释这是为什么吗?
以下是 ipython 笔记本的链接,描述了上述代码和结果图:
http://nbviewer.ipython.org/gist/bkinman/22cc15d3ad3b9b2db09e
看起来这与所使用的 FFT 窗口的默认设置有关。文档说默认是汉宁窗。如果您使用棚车窗代替:
s1_magspec = plt.magnitude_spectrum(s1, Fs=f_s, window=np.ones(s1.shape))
Run Code Online (Sandbox Code Playgroud)
你会在 100 处得到峰值,就像直接进行 numpy FFT 一样。
顺便说一句,如果您编辑问题以放入创建的代码行s1_magspec而不是依赖笔记本查看器,那就太好了,而笔记本查看器的链接无疑有一天会中断。