簡體   English   中英

scipy.signal.spectrogram頻率分辨率

[英]scipy.signal.spectrogram frequency resolution

scipy.signal.spectrogram計算信號的頻譜圖,但我看不到增加頻譜圖頻率分辨率的選項。 鑒於文檔中提供的代碼,如何實現?

from scipy import signal
import numpy as np
import matplotlib.pyplot as plt

fs = 10e3
N = 1e5
amp = 2 * np.sqrt(2)
noise_power = 0.01 * fs / 2
time = np.arange(N) / float(fs)
mod = 500*np.cos(2*np.pi*0.25*time)
carrier = amp * np.sin(2*np.pi*3e3*time + mod)
noise = np.random.normal(scale=np.sqrt(noise_power), size=time.shape)
noise *= np.exp(-time/5)
x = carrier + noise

f, t, Sxx = signal.spectrogram(x, fs)
plt.pcolormesh(t, f[0:10], Sxx[0:10,])
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()

光譜分辨率由FFT中使用的點數決定,該點由nperseg參數控制。 要提高分辨率,可以增加每次FFT計算的輸入點數。 例如,將點數從默認值256增加到分辨率的兩倍(即512點),您可以像這樣調用scipy.signal.spectrogram

f, t, Sxx = signal.spectrogram(x, fs, nperseg=512)

請注意,您還可以使用:

f, t, Sxx = signal.spectrogram(x, fs, nfft=512)

在FFT中使用更多的點,但每個段沒有更多的輸入點(即每個段填充零點)。 這基本上會產生頻譜圖,其中插入附加頻率點。 它不會增加分辨率(即具有非常相似頻率的兩個音調將不再具有可區分性),但是附加點將使結果看起來更平滑。

暫無
暫無

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

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