在信号中找到重新出现的模式

信息处理 matlab 卷积 Python 信号检测 模板匹配
2022-02-18 06:55:25

我正在处理一个信号,该信号将某些房屋的能源消耗描述为时间的函数,并且我正在尝试找到与某些特定类型的洗碗机相对应的时间间隔。

我们对这款洗碗机了解多少:

  1. 它有 4 个加热脉冲。
  2. 每个脉冲的幅度约为 2000,持续时间至少为 120 秒。
  3. 加热脉冲不是周期性的。
  4. 如果有这样的洗碗机,它在给定的时间内至少使用了两次。

我试图回答的问题:

  1. 在给定的时间间隔内,这所房子是否使用过这样的洗碗机?
  2. 如果是,我想确定发生这种情况的所有时间间隔。

例子: 洗碗机

带有整个信号的csv

假设我发现了这个洗碗机的一次出现,就像这个图一样,并试图找出是否还有其他类似的间隔。目前,我正在用这个洗碗机信号对整个信号进行卷积,并选择给出高卷积分数的时间间隔。问题是信号是附加的,如果有人同时使用其他电器,我可能会在没有洗碗机的情况下获得高分,而在没有洗碗机的情况下获得低分。

2个回答

Vladimir:您试图在较长的离散输入样本序列中检测特定样本模式(特定样本值序列)。这对我来说听起来像是一个“匹配的过滤器”问题。如果您尝试检测的样本模式是图表红色阴影区域中的样本,那么在探索更多奇特的信号检测算法之前,首先尝试执行卷积似乎是一件明智的事情。通过卷积,我的意思是一种实现,您将长输入值序列通过抽头延迟线 FIR 滤波器。但要小心您必须确保抽头延迟线滤波器的系数是您尝试检测的序列的“时间翻转”(按时间顺序反转)版本。

假设

您知道整个洗涤周期的总持续时间(或者至少您有一个很好的估计)。我的意思是你知道这四个脉冲必须在一定的时间内出现,例如 2 小时。我们称这个窗口为接受窗口

建议的解决方案

在应用复杂的数学之前,为什么不尝试一些简单直接的方法,例如简单的计数方法?在这种情况下,在纸上手工进行示例性分析,然后仔细考虑你刚刚做了什么,通常会很有成效。

这是一个想法:

  1. 区分信号,不要通过阈值检测脉冲。这消除了可加性的问题。

  2. 检查上升沿(加热期的开始)。保存当前开始时间。然后检查 120 秒或更长时间后是否有下降沿(加热周期结束),即在接受窗口内。

    2a。用同样的方法重复基于边沿的脉冲检测 3 次。检查发现的下一个脉冲是否也在以第一个加热脉冲开始的接受窗口内。

  3. 如果您在接受窗口内发现了四个脉冲,请将信号中的周期标记为候选段,并以相同的方式分析信号的其余部分。

  4. 您现在可以继续检查振幅是否高于 2000 左右,以确保...

您还可以尝试反向进行分析,并检查找到的候选片段在原始分析和反向分析中是否重叠。这可能会有所帮助,如果还有其他信号源也会产生您期望的脉冲......