【发布时间】:2023-03-09 19:25:01
【问题描述】:
我有一个模拟信号,我想检测边缘/“波形”。要检测的波形有时与下面的第一个示例一样简单(简单的上升沿),但也更复杂(如前面带有较小“blob”的上升沿)。信号具有噪声和不需要的较小信号,因此像“匹配等级”0.0 到 1.0 这样的输出可以很好地设置阈值。 另一个要求是检测时间:算法必须在 1 个“上升时间”内“触发”,就像图像中的红色斑点圆圈一样。尽早,但不要在达到最大值之前。
一切都将在 STM32 ARM 控制器上执行,信号每秒有 100 个点。侧面上升沿需要 0.5 - 2 秒,因此“查看”的数据范围约为 250 - 500 个数据点。
我已阅读有关相关性和 FFT 的内容,但如果我理解正确的主题,这将仅适用于周期性波形(因为 FFT 会将信号分解为正弦/余弦部分)。
FFT 和相关性是正确的路径,还是有更好的方法满足我们的要求?如果我们的路径是正确的,是否有推荐的文献/搜索词以方便进入该主题?
编辑: 我添加了真实数据的示例。 在Picture 2 中,您可以看到一个易于检测的边缘。使用基本的边缘检测,我们对此边缘没有任何问题。
Picture 3 中存在我们的问题: 我们当前的算法在 2565 秒检测到一个边缘,但我们想要在 2574 秒检测。 与要检测的边缘相比,第一个“斑点”始终出现在信号电平的 40% - 85% 左右。
【问题讨论】:
-
在有效回答这个问题之前,必须:显示真实数据。我从经验中知道,真正的数据从不像 OP 草图。
-
我建议你在那个地方扔一个小波包变换,看看你得到了什么,并尝试在输出中找到模式。 en.wikipedia.org/wiki/Wavelet_packet_decomposition 的底部链接到您可以尝试的 MATLAB、R、C++ 和 Java 中的现有实现。我建议避免过于平滑。一个 4 抽头的 Daubechies 小波可能会很好地工作。 (Haar 小波太粗糙 - 它不能很好地代表上升沿。)
标签: algorithm signal-processing