为什么 Goertzel 算法被认为是块算法?鉴于我的输入是有界的,如果给中间系数足够大的字长,我不能永远运行它(获取在一定长度 N 之后出现的每个样本)吗?
我知道我会得到矩形窗口光谱泄漏,这可能是不可取的,但让我们假设它已经足够好了。如果我的输入信号是固定的,那么最终我应该得到相当好的光谱分辨率,对吗?
但如果它不是静止的呢?Goertzel 算法的内存是多少?在我得到垃圾结果之前,输入信号频率需要改变多快?
为什么 Goertzel 算法被认为是块算法?鉴于我的输入是有界的,如果给中间系数足够大的字长,我不能永远运行它(获取在一定长度 N 之后出现的每个样本)吗?
我知道我会得到矩形窗口光谱泄漏,这可能是不可取的,但让我们假设它已经足够好了。如果我的输入信号是固定的,那么最终我应该得到相当好的光谱分辨率,对吗?
但如果它不是静止的呢?Goertzel 算法的内存是多少?在我得到垃圾结果之前,输入信号频率需要改变多快?
您可以将 Goertzel 算法的形式用作固定长度的块滤波器、具有非常长的脉冲响应的 IIR 滤波器或固定长度的运行滤波器。
作为固定长度滤波器,Goertzel 产生的 FIR 滤波器与相同长度的 DFT 或 FFT 的 1 个 bin 的结果相似(几乎相同)。
作为 IIR 滤波器,Goertzel 滤波器处于不稳定的边缘(极点在单位圆上),因此您可能需要限制滤波器状态和/或外部输出,或将增益降低到略低于 1.0。
作为一个固定长度的运行滤波器,您减去 2 个偏移(但稳定)的 Goertzel IIR 滤波器的输出,以获得一个 FIR 滤波器或 1 个 DFT 箱(长度等于偏移),它更新每个输入样本,并且每个 MAC 很少样本。