以最小过采样锁定方波信号

信息处理 采样
2022-02-09 17:40:24

我正在设计一个将红外光电二极管连接到低功率微控制器的 ADC 引脚的设备。有时,另一台设备将传输 48KHz 方波,我希望能够完全在软件中检测到这种情况,以及能够检测到单独的高低转换。

我的理解是PLL是解决这个问题的正确方法。但是,我对 DSP 的了解极为有限,因此对于如何在软件中实际实现这一点,我充其量只是一个模糊的想法,而且很多可用的文档在我脑海中都包含很多特定领域的术语。由于微控制器的低功耗特性,这更加复杂 - 我的可用处理器周期有限,因此我希望尽可能不频繁地采样,同时仍能可靠地锁定信号。如果有帮助,可以调整采样定时器以匹配观察到的输入信号频率。

任何人都可以提出一种尽可能简单易懂的方法,同时还能最大限度地减少 CPU 资源消耗吗?

1个回答

我自己的问题的一个部分答案是使用Goertzel 算法而不是 PLL。Goertzel 算法可以轻松确定特定频率的功率;但是,它不会提供相位。

Goertzel 算法可以非常简单地使用每个样本的乘法和两次加法来实现。采样率只需至少是要检测的信号频率的两倍。从 Goertzel 算法的输出中确定信号的幅度需要四次乘法和两次加法。

由于 Goertzel 算法的主要部分中的乘法是一个常数因子2 * cos(2 * pi * w),其中w是每个周期的样本数,因此可以通过以 6 倍目标频率进行采样来完全消除一次乘法,从而使2 * cos(2 * pi * 1/6) = 1.