我可以使用什么算法来比较两个信号的相似性?

信息处理 信号分析 信号检测 波形相似度
2022-02-07 12:37:58

假设我有两个时间序列(测量来自两个身体传感器 A 和 B 的陀螺仪数据)。

我不知何故需要评估信号 B 是否“跟随”信号 A——也就是说,它有多相似。

是否有任何措施用于此类任务的信号处理?

例如,我正在考虑某种比较算法,它可以指示一个信号是跟随另一个信号还是沿着这些线......

谢谢!

4个回答

我建议不要使用原始陀螺仪测量值,而是将原始测量值处理/转换为滚动角、俯仰角和偏航角。转换有助于解释。您可以尝试观察结果并检查是否AB.

如果您正在寻找一种数学上严谨的方法来测试两个传感器之间是否存在因果关系,请尝试Granger causality由于这些是时间序列数据,您可以分别计算横滚、俯仰和偏航的格兰杰因果关系,或计算多元格兰杰因果关系。

你需要检查两个信号之间的互相关,比如说xA[k],xB[k].

从互相关序列RAB由表达式给出

RAB[n]k=+xA[n]xB[k+n]

您可以确定需要在时间轴上量,这是它与 “最多”匹配的位置。nxBRABxA

您可以scipy.signal.correlate在 Python 中使用,或者如果您使用的是 MATLAB,则可以使用该命令xcorr来计算相关序列。这两个文档都为您要实现的目标提供了极好的示例。

您可以使用归一化互相关来查找两个信号之间的相似性

假设您已经预处理信号以获得时间对齐并填充缺失的样本等,Spearman 等级相关将是一个选择:https ://en.wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient

它在 Python numpy/scipy 中是标准的。

定性地,它将帮助您跟踪 X 和 Y 是否一起下降/上升。

当然,良好的旧 Pearson 相关性(如上面的答案中所述)也可以。