微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python Pcolormesh未显示

如何解决Python Pcolormesh未显示

我有点迷失了这里发生的事情:

我有这个功能,可以模拟复杂的无线麦克风信号

def mic_sig(N,fs,fc,fm,fd):
    t = np.arange(N) / fs
    x = np.exp(1.j*(2.*np.pi*fc*t + fd/fm*np.sin(2.*np.pi*fm*t)))
    return x

我正在生成两个以6Mhz采样的信号,它们都从中心频率偏移了1Mhz

N = int(np.power(2.,np.ceil(np.log2(1e5))))
fs = int(1e6)
fm = int(3.9e3)
fd = int(15e3)
fc = int(-1e5)
sig = mic_sig(N,fs=fs,fc=fc,fm=fm,fd=fd)
fc = int(1e5)
sig += mic_sig(N,fd=fd)

绘制频谱图可以得到我所期望的:

f1,Pxx_den = signal.welch(sig,nperseg=1024)
plt.plot(f1,Pxx_den)
plt.xlabel('Frequency [Hz]')
plt.ylabel('PSD')
plt.show()

enter image description here

但是当我用pcolormesh做STFT时,我只会得到负数

f,t,Zxx = signal.stft(sig,window='hann',nperseg=1024)
plt.pcolormesh(t,f,np.abs(Zxx*np.conj(Zxx)),shading='gouraud')
plt.title('STFT Magnitude')
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()

enter image description here

我不明白为什么?

STFT之后的数据是什么

plt.plot(np.abs(Zxx*np.conj(Zxx)))
plt.show()

enter image description here

因此,从理论上讲,它也应印刷正部分。我想念什么?

感谢您的帮助 谢谢:)

解决方法

问题在于stft返回非单调的“ f”向量。 解决方案:

f,t,Zxx = signal.stft(sig,fs,window='hann',nperseg=1024)
ind=np.argsort(f) # returns the indices of the sorted f vector
f=f[ind]
Zxx=Zxx[ind,:]
plt.pcolormesh(t,f,np.abs(Zxx*np.conj(Zxx)),shading='gouraud')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。