8

我有一个在 matlab 中制作的信号,我想将其与另一个信号进行比较(称它们为 y 和 z)。我正在寻找的是一种分配两个信号相似程度的值或百分比的方法。

corrcoef(y,z) = -0.1141我试图使用corrcoef ,但得到的值很差(看一下两个信号幅度的 FFT 的 corrcoef 看起来更有希望:corrcoef(abs(fft(y)),abs(fft(z))) = 0.9955,但我不确定这是否是最好的方法,因为这两个信号的纯形式似乎不是相关。

有没有人推荐如何在 Matlab 中比较两个信号?

谢谢!

4

2 回答 2

9

如果没有更清楚地定义“相似”的含义,这个问题就无法回答。

如果“相似”是指“相关频率响应”,那么,你就领先一步了!

一般来说,定义适当的度量是高度特定于应用程序的;您需要回答为什么要知道这两个信号有多相似才能知道如何衡量它们的相似程度。它们会被输入到同一个系统吗?它们是否需要通过相同的算法来检测?

同时,您使用频率域相关性的想法还不错。但你也可以考虑

http://en.wikipedia.org/wiki/Dynamic_time_warping

或者各种统计模型下时间序列的可能性:

http://en.wikipedia.org/wiki/Hidden_ ​​Markov_model http://en.wikipedia.org/wiki/Autoregressive_model http://en.wikipedia.org/wiki/Autoregressive%E2%80%93moving-average_model

或任何数量的其他型号...

我应该补充:一般来说,两个时间序列之间的相关系数是时间序列相似性的一个非常差的度量,除非在非常特殊的情况下(例如,没有相位变化)

于 2013-01-17T19:02:51.023 回答
7

皮特是对的,您需要在进一步发展之前定义相似性的概念。您可能会发现归一化的最大互相关幅度对于您的情况是有用的相似性概念,但是:

norm_max_xcorr_mag = @(x,y)(max(abs(xcorr(x,y)))/(norm(x,2)*norm(y,2)));
x = randn(1, 200); y = randn(1, 200); % two random signals 
norm_max_xcorr_mag(x,y)

ans = 0.1636

y = [zeros(1, 30), 3.*x]; % y is delayed, multiplied version of x
norm_max_xcorr_mag(x,y)

ans = 1

这种相似性的概念类似于两个序列的死记硬背,但对时间延迟是不变的。

于 2013-01-20T19:39:23.907 回答