我的问题如下:
我已经有了所有需要制作频谱图所需的值(scipy.fftpack.fft
),我想在Python中创建一个三维频谱图。
在MATLAB中,这是非常简单的任务,而在Python中似乎要复杂得多。我尝试过Mayavi、3D绘图的Matplotlib,但都没有成功。
谢谢
我的代码:
import numpy as np
import pandas as pd
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.collections import PolyCollection
fs = 11240.
t = 10
time = np.arange(fs*t) / fs
frequency = 1000.
mysignal = np.sin(2.0 * np.pi * frequency * time)
nperseg = 2**14
noverlap = 2**13
f, t, Sxx = signal.spectrogram(mysignal, fs, nperseg=nperseg,noverlap=noverlap)
myfilter = (f>800) & (f<1200)
fig,ax = plt.subplots()
plt.pcolormesh(t, f[myfilter], 10*np.log10(Sxx[myfilter, :]), cmap='jet')
plt.show()
fig = plt.figure()
ax = fig.gca(projection='3d')
x = []
y = []
for counter,i in enumerate(f):
x.append(np.array([i for k in t]))
y.append(t)
ax.plot_surface(np.array(x), np.array(y), 10.0*np.log10(Sxx), cmap=cm.coolwarm)
plt.show()
类似未解决的问题:如何在Python中将频谱图转换为三维图。
希望在Python中得到类似于Matlab图形的图表(最后一个图表在此处:https://www.mathworks.com/help/signal/ref/spectrogram.html)
x
和y
看起来像什么?特别是,你想用[i for k in t]
做什么?你看过np.meshgrid
来生成x
和y
吗? - Danspecgram
了吗? - Dan