我正在学习教程示例 scipy.signal.spectrogram . 有没有可能限制我们要计算的频谱的频率,比如说在1000-2000Hz的范围内。根据FFT,我们将得到一半采样频率的结果。如果没有,那么我可以对输出进行切片以获得 t,f,Sxx 我将频率限制在1000-2000 Hz?在我的情况下,我的信号只包含特定的频率范围,保留所有频率对我的分析来说是昂贵的。
t,f,Sxx
除非要分析很小百分比的频谱,否则使用FFT计算整个频谱(并丢弃不需要的部分)通常仍然是获得部分频谱的一种相当有效的方法。
然后您可以在中找到感兴趣的频率 f 使用 numpy.where (以下 this answer 通过 askewchan ). 接下来的步骤是简单地对输出进行切片,在1D阵列中提取所需的频率值 f 以及2D阵列中的相关功率谱值 Sxx . 可按以下方式进行:
f
numpy.where
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]