判断两个信号是否相同?

信息处理 离散信号 信号分析 Python
2022-01-31 12:54:02

我对信号处理很陌生。我的数据是(x,y,z)一个人在他/她的口袋里拿着智能手机走路的加速度。

目标

  1. 给定两个信号,确定它是来自同一个人两次,还是来自两个不同的人。
  2. 对从 1 开始的决定的信心程度有一定的了解。

试图

  1. 将数据分割成循环部分(每一步和脚的缩回)和非循环部分(可能在步骤之间等待或当用户停止与某人交谈时)。

  2. 计算循环部分和非循环部分的统计数据(平均值、s.dev、中值、互相关、每一步之间的时间等)。


话虽如此,我缺乏确定两个信号是否“相似”的基础知识,我认为这是来自某个距离函数。我找到了ResearchGate 线程,但我想知道是否还有其他我应该包括的内容(特别是因为我的目标与那些用户不同)。他们提到的方法是:

  • 互相关
  • 协方差
  • 互信息
  • 自相关

我的背景主要是统计/机器学习/软件,所以如果有任何解释被简化,我将不胜感激!

3个回答

使用梅尔频率倒谱系数 (MFCC) 和动态时间规整 (DTW) 可以获得有价值的结果。

将信号分成多个段。我建议使用 50% 的重叠。计算每一帧的 MFCC,然后你将获得每一帧的 MFCC 向量。最后,您将获得每个信号的 [MFFC 数量,帧数] 矩阵。要比较不同时间长度的序列之间的相似性,请计算两个矩阵之间的欧几里得距离。您也可以使用标准化的欧几里德距离(检查 Python 的 scipy.spatial.distance.cdist)。

cost_matrix = cdist(x, y, metric='euclidean')

因此,您将获得一个成本矩阵。在这个成本矩阵上应用 DTW 算法,你会发现分数,它会告诉你输入信号之间的相似性。我建议您查看不同数量的 MFCC 如何影响结果,并考虑信号的长度。

我推荐这个链接来阅读有关 MFCC 的更多详细信息,并且一个有用的关于 DTW 的视频教程。您还可以找到许多关于 DTW 的文章,它是衡量两个时间序列之间相似性的一种众所周知的度量。

对于目标 1。

相似性的度量最好由最大比率组合器或匹配滤波器给出。我在这里假设您没有任何干扰。因此,您可以简单地将接收到的 3 维向量沿“已知”用户向量投影。具有较高相关值的对应于用户。

现在你如何想出这些“已知”的向量,完全取决于你的数据集。

对于目标 2。

尝试将相关性建模为受到一些高斯噪声的干扰。设置一个有意义的置信区间,2σ2σ围绕高斯的平均值(涵盖 95% 的不确定性)。高斯的平均值将是用户信号的范数平方。

一个典型的做法是:

  1. 降低采样频率
  2. 计算 FFT
  3. 将 FFT 与参考 FFT 进行比较