限制 scipy.signal.spectrogram 以仅计算特定频率

Limiting scipy.signal.spectrogram to calculate only specific frequencies

我正在学习 scipy.signal.spectrogram 上的教程示例。 是否可以限制我们要为其计算频谱图的频率,比方说在 1000-2000Hz 范围内。根据 FFT,我们将获得一半采样频率。如果不是,那么我可以将输出切片以获得 t,f,Sxx 的 3D 矩阵,我将频率限制在 1000-2000 Hz 吗?在我的例子中,我的信号只包含一定范围的频率,保留所有频率对我的分析来说代价高昂。

除非您要分析很小比例的频谱,否则使用 FFT 计算整个频谱(并丢弃不需要的部分)通常仍然是获得部分频谱的相当有效的方法.

然后您可以使用 numpy.where (following this answer by askewchan) 在 f 中找到感兴趣的频率。下一步将是简单地对输出进行切片,在一维数组 f 中提取所需的频率值,并在二维数组 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]