【问题标题】:newbie cross-correlation in matlabmatlab中的新手互相关
【发布时间】:2015-01-18 02:27:57
【问题描述】:

我试图了解 matlab 中的互相关(主要是 xcorr)是如何工作的。这是一个示例代码:

t = -4*pi:0.1:4*pi;
y1 = sin(t*pi);
y2 = sin(t*pi - 0.7*pi);
[acor,lag] = xcorr(y1,y2,50);
[~,I] = max(abs(acor));
lagDiff = lag(I)

答案是:

  3

现在你将 delta t 乘以 3,得到 (0.1*3),时滞为 0.3,而真正的答案是 0.7*3.14,大约是 2.2 我不知道我做错了什么

提前致谢

【问题讨论】:

  • 为什么t定义为t = -4*pi:0.1:4*pi;?然后你再乘以pi

标签: matlab signal-processing


【解决方案1】:

你有两件事错了:

  1. 您不应在最大化中使用abs
  2. 0.7*3.14 是真正的 phase 滞后,而不是真正的 time 滞后。真正的时滞是-0.7(还要注意减号)。

让我详细说明这两点。

  1. 你需要使用

    [~,I] = max(acor)
    

    即删除abs。使用abs,您可能会发现信号给出非常大的相关性的延迟,这不是您想要的。

    通过此修改,您将获得I=44lagDiff=-7

    现在,根据您对t 的定义,您的采样周期为0.1。所以结果lagDiff=-7(在样本中)对应于-0.7秒。

  2. 您对正确答案的推理不正确。真正的答案不是0.7*3.14,而是-0.7。要了解原因,请注意您的定义

    y2 = sin(t*pi - 0.7*pi);
    

    等价于

    y2 = sin((t-0.7)*pi);
    

    比较

    y1 = sin(t*pi);
    

    很明显y2y1,时间提前了0.7 秒;或延迟-0.7 秒。

总之,没有abs的代码给出的结果与真实答案一致:-0.7秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2011-09-11
    • 1970-01-01
    • 2021-05-26
    相关资源
    最近更新 更多