Liccsu 在 深入浅出Goertzel算法 中发帖
在数字信号处理(DSP)中,当需要分析信号的频谱的时候,最常用也最为大众熟悉的应该就是快速傅里叶变换(FFT)。但是在某些特定场景,我们只关心某个或某几个特定频率的时候,计算完整的 FFT 很划不来,尤其是在性能受限的嵌入式设备上或要求高实时性的场景中。
这时候,就该 Goertzel 算法登场了,它不需要扫描整个频谱,它只关心其中的一个(或几个)频率分量,能够高效地计算出其能量。
一、从 DFT 说起
要理解 Goertzel 算法,我们首先回顾一下 离散傅里叶变换(DFT) 的定义。
对于长度为 N 的离散信号 x[n] ,其第 k 个频率分量的 DFT 定义为:
X[k] = \sum_{n=0}^{N-1} x[n] \cdot e^{-j \frac{2\pi k n}{N}} = \sum_{n=0}^{N-1} x[n] \cdot W_N^{kn}
其中 W_N...