实时 Goertzel 算法

信息处理 离散信号 无限脉冲响应 傅立叶
2022-02-19 06:23:39

为什么 Goertzel 算法被认为是块算法?鉴于我的输入是有界的,如果给中间系数足够大的字长,我不能永远运行它(获取在一定长度 N 之后出现的每个样本)吗?

我知道我会得到矩形窗口光谱泄漏,这可能是不可取的,但让我们假设它已经足够好了。如果我的输入信号是固定的,那么最终我应该得到相当好的光谱分辨率,对吗?

但如果它不是静止的呢?Goertzel 算法的内存是多少?在我得到垃圾结果之前,输入信号频率需要改变多快?

1个回答

您可以将 Goertzel 算法的形式用作固定长度的块滤波器、具有非常长的脉冲响应的 IIR 滤波器或固定长度的运行滤波器。

作为固定长度滤波器,Goertzel 产生的 FIR 滤波器与相同长度的 DFT 或 FFT 的 1 个 bin 的结果相似(几乎相同)。

作为 IIR 滤波器,Goertzel 滤波器处于不稳定的边缘(极点在单位圆上),因此您可能需要限制滤波器状态和/或外部输出,或将增益降低到略低于 1.0。

作为一个固定长度的运行滤波器,您减去 2 个偏移(但稳定)的 Goertzel IIR 滤波器的输出,以获得一个 FIR 滤波器或 1 个 DFT 箱(长度等于偏移),它更新每个输入样本,并且每个 MAC 很少样本。