在Matlab中比较两个信号的最佳方法

在Matlab中比较两个信号的最佳方法,matlab,compare,signal-processing,similarity,Matlab,Compare,Signal Processing,Similarity,我有一个我在matlab中制作的信号,我想和另一个信号进行比较(称它们为y和z)。我正在寻找的是一种方法,可以指定两个信号的相似程度的值或百分比 我试图使用corrcoef,但是我得到的值很差(corrcoef(y,z)=-0.1141),但是当我看两个叠加图的FFT时,我会直观地说它们非常相似。看看两个信号的幅度的FFT的相关系数,看起来更有希望:corrcof(abs(FFT(y)),abs(FFT(z))=0.9955,但我不确定这是否是最好的方法,因为这两个纯形式的信号似乎不相关 有人推

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

我试图使用corrcoef,但是我得到的值很差(
corrcoef(y,z)=-0.1141
),但是当我看两个叠加图的FFT时,我会直观地说它们非常相似。看看两个信号的幅度的FFT的相关系数,看起来更有希望:
corrcof(abs(FFT(y)),abs(FFT(z))=0.9955
,但我不确定这是否是最好的方法,因为这两个纯形式的信号似乎不相关

有人推荐如何在Matlab中比较上述两个信号吗


谢谢

如果对“相似”的含义没有更明确的定义,这个问题是不可能回答的

如果你所说的“相似”是指“相关频率响应”,那么,好吧,你领先了一步

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

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

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

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

或者其他任何型号的


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

皮特是对的,你需要定义一个相似性的概念,然后再进一步。您可能会发现标准化的最大互相关量对于您的环境来说是一个有用的相似性概念,但是:

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

这种相似性的概念类似于两个序列的机械关联,但对时间延迟是不变的。

是的,我想我没有我希望的那么清楚,对不起。我最终想做的是把我的原始信号“混合”下来,然后把一些东西“混合”起来,看看它和原始信号有多接近。我知道这会有点不同,因为在两次混合后我有一个LPF和BPF,所以我想评价它有多相似。可悲的是,我不确定我是否澄清了那么多,是吗?别难过。你问了一个你认为合理的问题。现在你已经有了有趣的东西在你面前!对于这个问题,更好的地方是dsp.stackoverflow.com。(我试图将其标记为移动,但由于某些原因,该站点不可用。)是否存在dsp.stackoverflow?对不起,dsp.stackexchange.com