【问题标题】:define an interval for frequency of STFT outputs定义 STFT 输出频率的间隔
【发布时间】:2017-08-06 21:07:55
【问题描述】:

如您所知,STFT 有一个矩阵结果,其维度为:

number of frequency bins * number of time frames. 

例如,假设我有一个具有特征的信号,我想使用以下输入参数应用 STFT 方法:

  • 采样率:250,000 Hz;
  • 数据长度:498900个样本;
  • 窗口长度:nftt=625 样本;
  • 跳跃大小:125 个样本

使用这些参数,我的 STFT 将输出大小为:313*3987(某些网站中存在计算这些值的方法)

现在,我的问题是如何定义 STFT 输出的频率维度限制?我想我应该将我的阈值计算为 STFT 输出中的索引号,如果是这样,我该怎么做?

我有频率分辨率,但是当我乘以nfft时,它是采样率值的一半。

【问题讨论】:

    标签: matlab fft frequency time-frequency


    【解决方案1】:

    你没有提供你是如何计算频率分辨率的,但它应该是这样的:

    frequency_resolution = sampling_rate / nfft;
    

    在采样率为 250,000Hz 和 nfft=625 的特定情况下,这应该为您提供 400Hz 的频率分辨率。你可以验证625*400确实等于250000

    然后,如果您想在 STFT 输出中包含从 0Hz 到不大于 max_frequency 的频率,则沿频率轴的最大尺寸应为:

    size_frequency_axis = 1 + floor(max_frequency / frequency_resolution);
    

    作为一种特殊情况,您还可以验证当 max_frequency 设置为奈奎斯特频率 (250000/2 = 125000) 时,计算的大小为 1+floor(125000/400) = 313(与您的全频谱 STFT 输出大小匹配)。

    一般来说,如果你想包含一个不是从 0Hz 开始的频率范围,那么你可以以类似的方式计算最小和最大频率的索引,并获得相应的大小:

    min_frequency_index = 1 + floor(min_frequency / frequency_resolution);
    max_frequency_index = 1 + floor(max_frequency / frequency_resolution);
    size_frequency_axis = max_frequency_index - min_frequency_index + 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-17
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多