【问题标题】:Best way to compare two signals in Matlab在 Matlab 中比较两个信号的最佳方法
【发布时间】:2013-01-01 09:47:51
【问题描述】:

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

我尝试使用 corrcoef,但我得到的值非常差 (corrcoef(y,z) = -0.1141),但是当我查看相互叠加的两个图的 FFT 时,我会在视觉上说它们 非常 类似。看一下两个信号幅度的 FFT 的 corrcoef 看起来更有希望:corrcoef(abs(fft(y)),abs(fft(z))) = 0.9955,但我不确定这是否是最好的方法,因为这两个信号以纯形式出现不相关。

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

谢谢!

【问题讨论】:

  • 这个问题更好的地方是 dsp.stackoverflow.com。 (我尝试将其标记为移动,但由于某种原因,该站点不是一个选项。)
  • 有 dsp.stackoverflow 吗?
  • 对不起dsp.stackexchange.com

标签: matlab compare signal-processing similarity


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

  • 是的,我想我没有像我希望的那样清楚,抱歉。我最终想要做的是把我的原始信号“混合”下来,所以一些东西,“混合”它备份,看看它与原始信号有多接近。我知道这会有点不同,因为在两次混合后我有一个 LPF 和 BPF,所以我想评价它的相似程度。可悲的是,我不确定我是否已经清除了很多,是吗?
  • 别抱歉。你问了一个你认为合理的问题。现在你已经得到了有趣的东西!
【解决方案2】:

Pete 说得对,您需要先定义相似性的概念,然后再继续前进。但是,您可能会发现归一化的最大互相关幅度对于您的情况是有用的相似性概念:

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

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

【讨论】:

    猜你喜欢
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多