首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scipy.signal.spectrogram与matplotlib.pyplot.specgram的比较

scipy.signal.spectrogram与matplotlib.pyplot.specgram的比较
EN

Stack Overflow用户
提问于 2018-02-03 23:31:04
回答 1查看 8.6K关注 0票数 12

下面的代码使用scipy.signal.spectrogrammatplotlib.pyplot.specgram生成频谱图。

然而,specgram函数的颜色对比度相当低。有没有办法增加它?

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

# Generate data
fs = 10e3
N = 5e4
amp = 4 * np.sqrt(2)
noise_power = 0.01 * fs / 2
time = np.arange(N) / float(fs)
mod = 800*np.cos(2*np.pi*0.2*time)
carrier = amp * np.sin(2*np.pi*time + mod)
noise = np.random.normal(scale=np.sqrt(noise_power), size=time.shape)
noise *= np.exp(-time/5)
x = carrier + noise

使用matplotlib.pyplot.specgram会产生以下结果:

代码语言:javascript
复制
Pxx, freqs, bins, im = plt.specgram(x, NFFT=1028, Fs=fs)
x1, x2, y1, y2 = plt.axis()
plt.axis((x1, x2, 0, 200))
plt.show()

使用scipy.signal.spectrogram的结果如下所示

代码语言:javascript
复制
f, t, Sxx = signal.spectrogram(x, fs, nfft=1028)
plt.pcolormesh(t, f[0:20], Sxx[0:20])
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()

这两个函数似乎都使用了'jet‘颜色映射。

我通常也会对这两个函数之间的区别感兴趣。尽管它们做的是相似的事情,但它们显然不是完全相同的。

EN

回答 1

Stack Overflow用户

发布于 2018-10-12 10:50:17

plt.specgram不仅返回Pxxft,还会自动为您进行绘图。打印时,plt.specgram将打印10*np.log10(Pxx)而不是Pxx

但是,signal.spectrogram仅返回Pxxft。它根本不做绘图。这就是您使用plt.pcolormesh(t, f[0:20], Sxx[0:20])的原因。您可能想要绘制10*np.log10(Sxx)

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

https://stackoverflow.com/questions/48598994

复制
相关文章

相似问题

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