检测特定频率的存在(或缺乏)

信息处理 过滤器 算法 频率
2022-01-31 10:31:26

除了本科入门课程之外,我对 DSP 知之甚少。我正在寻找一种 C 算法,该算法采用 ADC 样本并确定是否存在特定频率(在 100KHz 范围内);不关心信号的任何其他分量。

我不知道从哪里开始。我看了Goertzel算法;这是一个值得推荐的方法吗?

我想知道用 ARM 微控制器分析 100KHz 的信号是否可行,或者我需要特殊的 DSP 品种吗?

我是否应该使用 PLL 或类似的东西来解决这个问题?如果是这样,有人有一些设计参考吗?

谢谢!

2个回答

关于实现问题,也许您可​​以告诉我们更多有关您的硬件的信息:ARM 系列(Cortex M3 还是 M4?),时钟频率...

Goertzel 算法的定点实现是十几个指令,因此在时钟频率为 72 MHz 的低端 ARM 微控制器(例如 STM32F1 或 LPC1343)上以 1 MHz 的采样率确实可以做到这一点(假设你没有读取 ADC 有很多开销,例如让 DMA 子系统处理这个)。

然而:

  • 您可能会达到 ADC 采样率的上限,并且/或者几乎没有余量来设计抗混叠滤波器(比如 105kHz 是感兴趣的上限频率……您可以在 210kHz 下采样,但需要最陡峭的抗混叠滤波器)混叠滤波器......或者在 800kHz 并且为抗混叠滤波器的过渡带留出更多余量)。
  • 这看起来仍然是对 CPU 周期的浪费,尤其是当您只对窄带信号感兴趣时。请记住,如果您唯一感兴趣的是 99kHz 到 101kHz 频段,那么您实际上只需要 4kHz 的采样率来捕获所有有用的信息——前提是您可以通过 100kHz 正弦波调制输入信号。

在这种情况下,如果您控制目标硬件,则在模拟域中进行一些预处理可能会很方便,例如:

  • 将信号频移 100kHz,使感兴趣的频带成为基带,这样您就可以以低采样率对其进行采样(需要正弦振荡器、乘法器和低通滤波器)。
  • 在感兴趣区域应用窄带通滤波器 + 整流器 + 低通滤波器 - 这将测量感兴趣频带的能量。

如果您熟悉离散傅立叶变换,则它基本上与每个可能频率的正弦波和余弦波相关。因此,如果您只对一个特定频率感兴趣,您可以与您感兴趣的频率的正弦和余弦进行相关。另一种方法是使用带通滤波器,使用 IIR 滤波器可以获得一些非常有效的算法,如果这是您想要的,这将使您获得接近目标频率的频率。