Goertzel 算法:大小关系

信息处理 过滤器 自由度
2022-02-07 11:57:26

我编写了一个快速测试应用程序,它使用 Goertzel 算法来确定信号中是否存在给定频率。这是为了接收 DTMF 音调和各种其他信号。该应用程序似乎正在运行。我在最后阶段使用“幅度平方”方法。

http://www.embedded.com/design/configurable-systems/4024443/The-Goertzel-Algorithm

现在,这个幅度与所有其他变量(尤其是源信号的幅度)有何关系?如果幅度超过某个阈值,大多数实现确定给定频率的存在。我想知道这个阈值是如何确定的,以及我将如何选择一个合适的阈值。

编辑

好的,我想我已经找到了答案(我希望)。大多数算法状态的实现将返回“相对功率”。我找不到任何说明它是相对于什么的。

今天早上,我突然意识到(双关语)它可能与输入信号有关(呃!)。那么,如果我们计算输入信号在所有采样上的功率,然后将其与算法给出的相对功率进行比较,我们应该对目标频率的贡献有一个很好的了解吗?

我的理解正确吗?

1个回答

您可以潜在地将阈值基于帧中的总能量。例如,如果音调占总能量的 10% 或更多,那么很有可能它就在那里,而不仅仅是噪音。

一般来说,基于 FFT 的算法可能不是最好的选择。除非您的音调和您的本地采样时钟是锁相的,否则您无法将音调排列在 FFT 箱(或您的 Goertzel 频率)上,因此音调的能量将“涂抹”在多个频率箱上。FFT 实际上是一个漂亮的带通滤波器。

替代方案是具有明确定义的带宽和陡度的时域带通滤波器。这也将摆脱帧约束,您可以根据信号的属性而不是算法的内部属性拨入时间常数。