我有一个以 5ms 速率采样的时变离散信号 x(t)。我需要找到每个样本的 20 Hz 频率分量的幅度。我今天所做的是,对于每个样本,我在该样本周围的窗口中对数据进行短时傅里叶变换。然后我从幅度谱中读取 20 Hz 频率分量的幅度。这似乎工作正常,但速度很慢。
我怎样才能加快这个过程?例如,我只对 20 Hz 分量感兴趣。有什么方法可以避免找到完整的幅度谱(比 FFT 更快)?
我有一个以 5ms 速率采样的时变离散信号 x(t)。我需要找到每个样本的 20 Hz 频率分量的幅度。我今天所做的是,对于每个样本,我在该样本周围的窗口中对数据进行短时傅里叶变换。然后我从幅度谱中读取 20 Hz 频率分量的幅度。这似乎工作正常,但速度很慢。
我怎样才能加快这个过程?例如,我只对 20 Hz 分量感兴趣。有什么方法可以避免找到完整的幅度谱(比 FFT 更快)?
正如 pichenettes 在上面的评论中已经指出的那样,一种方法是使用 Goertzel 算法。然而,一个有点普遍的误解是,为了推断信号中各个频带的幅度,必须使用基于傅里叶变换的技术。还有其他方法可能更适合您的应用程序。
例如,在您的情况下,只需创建任何以 20 Hz 为中心的带通滤波器并观察其输出幅度随时间的变化,您就可以做得同样好。DFT(以及扩展的 Goertzel 算法)可以被视为只是一组等距、临界采样的带通滤波器。如果您只需要一个输出,那么 DFT 就显得多余了,而且 Goertzel 算法可能会受到限制,因为您无法对其大约 20 Hz 的频率响应进行太多控制。