限制 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]
我正在学习 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]