我正在关注scipy.signal.spectrogram的教程示例。
是否可以限制我们想要计算频谱的频率,比如在1000-2000Hz范围内。根据FFT,我们将获得一半的采样频率。如果没有,那么我可以切片输出以获得t,f,Sxx
的3D矩阵,其中我将频率限制为1000-2000 Hz?在我的情况下使用的是我的信号只包含一定范围的频率,并且保持所有频率对我的分析来说都是昂贵的。
答案 0 :(得分:2)
除非你要分析很小比例的频谱,否则用FFT计算整个频谱(丢掉你不想要的部分)通常仍然是获得部分频谱的一种相当有效的方法。 / p>
然后,您可以使用numpy.where
(this answer后跟askewchan)查找f
中感兴趣的频率。接下来的步骤是简单地对输出进行切片,提取1D阵列f
中的所需频率值以及2D阵列Sxx
中的相关功率谱值。这可以按如下方式完成:
...
f, t, Sxx = signal.spectrogram(x, fs)
fmin = 1000 # Hz
fmax = 2000 # Hz
freq_slice = np.where((f >= fmin) & (f <= fmax))
# keep only frequencies of interest
f = f[freq_slice]
Sxx = Sxx[freq_slice,:][0]