有哪些方法可以检测噪声中的正弦曲线?

信息处理 离散信号 信号检测 信号分析
2022-01-15 21:27:31

我正在寻找关于可用技术种类的广泛分类。我可以用来开始文献调查的东西。

一些细节:

  1. 对于实时实施应该是可行的。

  2. 二进制判决,我应该能够连续输入信号,并且算法必须检测波形中正弦曲线的开始和停止时间。

  3. 没有其他信号,即如果正弦波不存在,那么只会有噪声

  4. 输入是带限的,并且正弦波(如果存在)确保在该带内。

  5. 权衡是速度(正弦曲线出现后多久算法可以检测到它的存在)和误报(应该是最小的)

  6. 我无法提供有关可接受的绩效指标的任何确切数字,因为我自己也不确定。我打算实施您对我的应用程序的所有建议并找出我自己。我只是在寻找解决这个问题的“标准”技术。

更多详细信息:

  1. 输入是带通滤波器的输出,因此噪声也仅在通带中显着。

  2. 无法确定正弦曲线何时会出现。正弦曲线的持续时间在 50-100 毫秒的范围内。正弦波的幅度会波动。

4个回答

根据采样频率,FFT(快速傅里叶变换)将起作用。例如,如果您的采样率仅为每 20 毫秒一次,那么您只会获得几个正弦曲线样本,但如果您每 0.5 毫秒采样一次,那么您将获得更多的样本。FFT 通常在处理大量样本进行平均时效果最好。在这种情况下,即使您的信号是几个正弦曲线的总和,也可以准确地确定它们。

或者,您可以查看MUSIC算法。我不太清楚它是如何实现的细节,但它已经在几个实时检测场景中实现了。音乐的替代方案是Esprit算法。

尽管如此,如果您的样本量足够大并且噪声没有完全淹没信号,那么 FFT 将(平均而言)是最快的选择。

检测正弦曲线的一种方法是使用Goertzel 算法Rick Lyons 在这里写了一篇关于如何使用它进行检测的文章

第二个链接有这个方程来过滤你的输入信号并计算“决策统计”:

在此处输入图像描述

一切都取决于信噪比。SNR 越低,将信号与噪声分离所需的处理就越多。我过去曾解决过一个类似的问题,当时我正在寻找一个在相当宽的频率范围内的间歇性、低 SNR 正弦信号。这对我有用:

  1. 执行系统噪声的离线表征(在频域中)。如果环境噪声水平随时间变化,当算法对不存在感兴趣的信号有很高的置信度时,定期在线更新此噪声水平。如果噪音不是很稳定,那么这可能无济于事(并且可能会造成伤害)。
  2. 在离散时间窗口上执行滑动 FFT。寻找能量高于背景噪声某个阈值的频率。获取可能是感兴趣信号的候选“峰值”列表。我选择保留数据的循环缓冲区,包括来自先前时间窗口的样本,以便 FFT 具有更好的频率分辨率。
  3. 为 FFT 中确定的感兴趣的峰值频率构建正弦匹配滤波器。寻找高于某个阈值的响应。匹配滤波器(又称自相关函数)可以很好地衰减噪声,在我的系统中,它非常擅长从乍一看似乎毫无希望的数据中提取检测。作为时域滤波器,匹配滤波器还可以告诉您信号何时出现以及何时消失。

正如其他人所建议的那样,我尝试使用 MUSIC 算法将信号与噪声分离。对于我的问题,它在寻找低 SNR 候选信号方面比 FFT 稍好一些,但由于计算负担要高得多(而且我的算法在一个懦弱的定点 DSP 上运行),我选择不使用它。使用 FFT 将检测阈值设置得较低,检测更多杂散峰值并在匹配滤波阶段消除它们会更容易。低 SNR 检测可能是一种黑暗艺术,但如果您对系统有足够的了解,则可以可靠地检测幅度低于环境噪声水平的信号。这完全取决于您了解您可以利用的系统信息。

我会提出以下建议:
1. 组织一个足够宽的滑动窗口以包含信号的整个频带(至少几个最低频率信号的周期)
2. 对当前在窗口内的样本执行 FFT,获得来自它的功率谱。
3. 裁剪具有已知频带限制的频谱。
4. 将剩余的功率谱值按降序排列。由于噪声是高斯的,因此噪声频谱在频带内将是平均平坦的,并且如果窗口中存在单调哔哔声,则会产生尖峰。
5. 确定典型的尖峰带宽。从裁剪排序的功率谱中获取最高幅度的样本,获得平均值。那将是潜在的“哔哔”能量。
6. 还获得剩余频带样本的平均值,这将是噪声能量。
7. 计算 (5) 和 (6) 中获得的能量比。如果比率超过给定阈值,则设置指示找到哔声的标志。如果没有,则设置当前没有哔声的标志。
8. 将窗口滑动到下一帧(逐个样本,或按更大的步长)。