以下代码使用
但是
使用
scipy.signal.spectrogram
或matplotlib.pyplot.specgram
生成谱图。但是
specgram
函数的颜色对比度相当低。有没有办法增加它?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
会得到以下结果: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
函数生成了如下图所示的绘图结果
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”色彩映射。
我也对这两个函数之间的区别感到普遍的兴趣。尽管它们执行类似的操作,但显然它们并不相同。
matplotlib.pyplot.specgram
的背景主要是温暖的颜色(黄色),而scipy.signal.spectrogram
的背景则是相对冷色调的颜色(蓝色)。我想在 matplotlib 的specgram
绘图中实现 scipy 所选择的颜色。 - NicolasBourbaki