模式匹配以检测信号边缘?

时间:2016-04-11 19:30:12

标签: algorithm signal-processing

我有模拟信号,我想检测边缘/波形'。要检测的波形有时与下面的第一个示例(简单的上升沿)一样简单,但也更复杂(如前一个较小的' blob')的上升沿。信号具有噪声和不需要的较小信号,因此输出类似于匹配等级' 0.0到1.0会很好地设置一个阈值。 另一个要求是检测时间:算法必须触发'在1'上升时间内,就像图像中的红色斑点圆圈一样。尽可能早,但不是在达到最大值之前。

一切都将在STM32 ARM控制器上执行,信号每秒100点。侧翼上升沿需要0.5 - 2秒,所以数据范围为'看'将是250 - 500数据点。

我已经读过有关相关和FFT的信息,但如果我理解了主题,那么这只适用于周期性波形(因为FFT会将信号拆分为sin / cos部分)。

FFT和相关是正确的路径还是有更好的方法满足我们的要求?如果我们的路径是正确的,是否有推荐的文献/搜索术语可以轻松进入主题?

编辑: 我添加了实际数据的示例。 在Picture 2中,您可以看到易于检测的边缘。使用基本边缘检测我们没有问题。

Picture 3中存在的问题是: 我们当前的算法检测到2565s的边缘,但我们想要在2574s处进行检测。 第一个' blob'与要检测的边缘相比,信号电平总是出现约40%-85%。

Sample waveforms to detect

example of good data

example of bad data

1 个答案:

答案 0 :(得分:1)

傅立叶系列是一个糟糕的选择是完全正确的,因为你试图写下没有边缘的数据描述,然后发现该描述中的边缘。不能很好地运作。

您可以采取的一种方法是执行类似傅里叶系列的操作,但使用更加本地化的描述并包含看起来像边缘的内容。 Google for"小波边缘检测"更多地了解这一点。这将允许您从嘈杂的数据中提取各种形式。例如,人们使用它来从图片中提取边缘,并从音频记录中提取phoenemes。小波是一个很大的主题,但是你可以找到一个能够接近你想要的东西的库。

但是对于像这样的简单1-d问题,您可以简单地应用平滑操作,然后查找感兴趣的形状。平滑操作越好,您可以忍受的噪音越多,但看到形状的难度就越大。

例如,您可以进行指数阻尼以进行平滑处理。 next_average = 0.9 * average + 0.1 * next_value。 (更一般地说(1 - x) * average + x * next_value。)这将使每个点看起来很像一个大约10点的移动窗口的平均值。将现在的平均值与100点前相比较,您将能够非常可靠地发现上升。更多的东西搞乱了,你可能会发现其他组合。

您必须使用公式和数据来找到适合您目的的效果。