2013-01-17 122 views
5

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

我试图用corrcoef,但我得到非常差的值(corrcoef(y,z) = -0.1141),但是当我看着彼此叠加,两个地块的FFT,我会在视觉上说,他们是非常相似。看看这两个信号的幅度的FFT的corrcoef看起来更有希望:corrcoef(abs(fft(y)),abs(fft(z))) = 0.9955,但我不确定这是否是最好的方式去做,因为纯净的形式的两个信号似乎不是相关。

有没有人有建议如何比较Matlab中描述的两个信号?

谢谢!

+0

这个问题的更好的地方是dsp.stackoverflow.com。 (我试图标记它被移动,但由于某种原因,该网站不是一个选项。) –

+1

是否有一个dsp.stackoverflow? – toozie21

+0

对不起dsp.stackexchange.com –

回答

9

这个问题是不可能的,没有一个更清晰的定义你的意思是“相似”。

如果通过“相似”来表示“相关频率响应”,那么,你就是领先一步!通常,定义适当的度量是高度特定于应用程序的;你需要回答为什么你想知道这两个信号的相似程度是如何测量它们的相似程度。他们会被输入到同一个系统吗?他们是否需要使用相同的算法进行检测?

与此同时,您使用freq域相关性的想法也不错。但是,你也可以考虑

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

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

我应该补充:一般来说,相关系数除非在特定的情况下(例如,没有相位移动),否则两个时间序列是时间序列相似度的一个非常差的度量标准

+0

是的,我想我不像我希望的那么清楚,对不起。我最终想要做的就是把我的原始信号“混合”下来,所以有些东西,“混合”它看起来有多接近原始信号。我知道这会有点不同,因为我在两次混合后都有LPF和BPF,所以我想评价它的相似程度。可悲的是,我不确定我是否清除了很多,是吗? – toozie21

+0

不要对不起。你问你认为是一个合理的问题。现在你已经掌握了有趣的东西! – Pete

6

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

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 

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

相关问题