代码之家  ›  专栏  ›  技术社区  ›  gmatharu

限制scipy。信号仅计算特定频率的频谱图

  •  6
  • gmatharu  · 技术社区  · 6 年前

    我正在学习教程示例 scipy.signal.spectrogram . 有没有可能限制我们要计算的频谱的频率,比如说在1000-2000Hz的范围内。根据FFT,我们将得到一半采样频率的结果。如果没有,那么我可以对输出进行切片以获得 t,f,Sxx 我将频率限制在1000-2000 Hz?在我的情况下,我的信号只包含特定的频率范围,保留所有频率对我的分析来说是昂贵的。

    1 回复  |  直到 6 年前
        1
  •  6
  •   SleuthEye    6 年前

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

    然后您可以在中找到感兴趣的频率 f 使用 numpy.where (以下 this answer 通过 askewchan ). 接下来的步骤是简单地对输出进行切片,在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]