首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >matplotlib.mlab和numpy.abs中magnitude_spectrum结果的差异(numpy.fft.fft(数据))

matplotlib.mlab和numpy.abs中magnitude_spectrum结果的差异(numpy.fft.fft(数据))
EN

Stack Overflow用户
提问于 2015-04-24 18:12:55
回答 1查看 1.3K关注 0票数 2

我有一个简单的正弦波。我试图在频域中找到震级谱。

我使用了函数matplotlib.mlab.magnitude_spectrum(data)来验证这个结果,所以我尝试了numpy.abs(numpy.fft.fft(data)),结果是不同的。

应该是一样的,对吧?即使我试着

numpy.sqrt(matplotlib.mlab.psd(data)),结果是不同的。

我正在寻找这件事的解释。

EN

回答 1

Stack Overflow用户

发布于 2015-04-24 18:25:56

这里有两个主要的区别。首先,matplotlib.mlab.magnitude_spectrum在进行快速傅立叶变换之前对输入数据应用窗口函数(默认情况下为Hanning window)。其次,它只返回正频率,而np.fft.fft同时返回正频率和负频率:

代码语言:javascript
复制
import numpy as np
from matplotlib import pyplot as plt


x = np.random.randn(500)

mag1, f = plt.mlab.magnitude_spectrum(x)

# apply a hanning window to x
xw = np.hanning(x.shape[0]) * x

# use np.fft.rfft to get the positive frequencies only
mag2 = np.abs(np.fft.rfft(xw))

fig, ax = plt.subplots(1, 1)
ax.hold(True)
ax.plot(f, mag1, '-k', lw=2)
ax.plot(f, mag2, '--r', lw=2)
plt.show()

matplotlib.mlab.psd做了一些更复杂的事情-它使用Welch's method计算周期图,而不仅仅是取FFT的平方幅度。它基本上是对信号的窗口重叠部分进行平均周期图,以牺牲一些频率分辨率为代价,给你一个“更平滑的”周期图,它对噪声更有鲁棒性。根据信号的外观,以及您对psdNFFT=noverlap=参数的选择,您应该会看到与magnitude_spectrum完全不同的结果。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29844783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档