簡體   English   中英

Python Pcolormesh 未顯示

[英]Python Pcolormesh not showing

我對這里發生的事情有些迷失:

我有這個功能可以模擬復雜的無線麥克風信號

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, fs=fs, fc=fc, fm=fm, fd=fd)

繪制頻譜圖正是我所期望的:

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

在此處輸入圖片說明

但是當我用 pcolormesh 做 STFT 時,我只會得到負面的部分

f, t, Zxx = signal.stft(sig, fs, 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()

在此處輸入圖片說明

我不明白為什么?

這是 STFT 之后的數據

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

在此處輸入圖片說明

所以理論上它也應該打印正面部分。 我錯過了什么?

任何幫助表示贊賞謝謝:)

問題是 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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM