在另一个信号中找到一个信号

信息处理 Python 信号检测 浮点
2022-02-22 09:37:14

我有一个 32 位浮点数的一维数组,表示在 40 分钟跨度内运行的无线电的当前消耗。数组中的元素数量为 2900 万并且不断变化。这个数组中有一个感兴趣的信号,我希望能够在未来的信号中识别它。我复制了我感兴趣的数组部分,并使用 python 脚本生成了参数化掩码。我想用这个掩码在我的 40 分钟数组中寻找类似的信号。问题是在所有数据上“扫描”这个掩码以查看是否所有数据点都适合掩码所需的时间。

一般来说,我希望能够识别大型数据集中感兴趣的信号并提取它们的索引。

我正在使用 Python、numpy 和 SciPy。

图片 1 小信号和掩码 2 完整的 40 分钟无线电电流消耗 小信号和掩码

完整的 40 分钟无线电电流消耗

给定一个感兴趣的信号波形,检测该信号是否存在于另一个信号中的最有效方法是什么?

相关信号

这是原始数据的链接。这是一种压缩的 csv 格式。这些值是以安培为单位的时间和电流消耗。数据采样率:每 8.192E-05 秒采样一次。感兴趣的信号在 917.65 秒左右开始,持续时间不到一秒。

https://www.dropbox.com/s/rw5yt5zv5rpraoh/ExportedData.zip?dl=0

1个回答

正如我在评论中所写,这可以使用互相关来解决。

取长度为的掩码,将其反转并开始执行此反转掩码和原始信号之间的卷积(或者,直接在 Python 中使用两个信号,即原始信号和掩码)。如果您在样本处获得相关性的峰值,这意味着如果您使用掩码并将其覆盖在原始信号上,使得掩码的个样本(使用函数使用参数),那么您将有一个很好的匹配(即,在那一刻,信号与掩码非常相似)。然后您可以得出结论,从,信号具有看起来像掩码的形状。Lscipy.signal.correlate()mmmode='same'mm+L1

我检查了您上传的信号,正如您所指出的,按照上面的过程,由于原始信号具有一些与形状相似性不对应的高值,因此会得到一些不需要的峰值掩码,但仍然返回高互相关值,因为元素乘积的总和很高。这可以通过“过滤掉”这些不想要的值来解决。

与面具最相似的信号将是……面具。因此,计算掩码与自身之间的相关性(处的自相关)。这将为您提供一个数字,该数字代表与面具的最大可能相似性。然后,您可以忽略原始互相关中大于处的自相关的那些值,因为它们肯定对应于原始信号具有的那些高峰值。这应该可以解决问题。00