python - 了解 matplotlib magnitude_spectrum 输出

标签 python matplotlib signal-processing

我在理解 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 bins 的数量后绘制结果幅度谱

s1_magspec = plt.magnitude_spectrum(s1,Fs=f_s)
plt.plot(s1_magspec[0]/len(s1_magspec[0]))

结果是 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))

您将在 100 处获得峰值,就像直接使用 numpy FFT 一样。

顺便说一句,如果您编辑您的问题以放入创建 s1_magspec 的代码行而不是依赖笔记本查看器,那将会很好,指向它的链接无疑有一天会中断。

关于python - 了解 matplotlib magnitude_spectrum 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27239844/

相关文章:

python - ValueError : could not broadcast input array from shape (20, 590) 变成形状 (20)

python - 使用 Popen 独立运行 python 子进程

python - Python 中关键字 "print"和函数 "print"之间的实际区别

python - 是否应该只在 except block 内调用 logger.exception?为什么?

python - 无法增加 Bokeh 中整个图表的大小并使图表处于水平轴

python - Pyplot/Matplotlib : How to achieve a compressed y-axis

python - 如何在 python Seaborn 中更改调色板中标签的颜色分配?

android - "Frequency Shift Keying"安卓解码器

python - 自动填充子图

java - Android:DSP 库的选项