matlab中的新手互相关
newbie cross-correlation in matlab
我想了解 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 我不知道我在做什么错
提前致谢
你有两处错误:
- 你不应该在最大化中使用
abs
。
0.7*3.14
是真正的 phase 滞后,而不是真正的 time 滞后。真正的时间滞后是 -0.7
(另请注意减号)。
让我详细说明这两点。
您需要使用
[~,I] = max(acor)
即去掉abs
。使用 abs
您可能会发现信号产生非常大的 负 相关性的滞后,这不是您想要的。
通过此修改,您将获得 I=44
和 lagDiff=-7
。
现在,根据您对 t
的定义,您的采样周期为 0.1
。因此结果 lagDiff=-7
(以样本为单位)对应于 -0.7
秒。
您对正确答案的推理不正确。真正的答案不是 0.7*3.14
,而是 -0.7
。要了解原因,请注意您的定义
y2 = sin(t*pi - 0.7*pi);
等同于
y2 = sin((t-0.7)*pi);
比较
y1 = sin(t*pi);
很明显y2
是y1
时间提前了0.7
秒;或延迟 -0.7
秒。
综上所述,不带abs
的代码给出的结果符合正确答案:-0.7
秒。
我想了解 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 我不知道我在做什么错
提前致谢
你有两处错误:
- 你不应该在最大化中使用
abs
。 0.7*3.14
是真正的 phase 滞后,而不是真正的 time 滞后。真正的时间滞后是-0.7
(另请注意减号)。
让我详细说明这两点。
您需要使用
[~,I] = max(acor)
即去掉
abs
。使用abs
您可能会发现信号产生非常大的 负 相关性的滞后,这不是您想要的。通过此修改,您将获得
I=44
和lagDiff=-7
。现在,根据您对
t
的定义,您的采样周期为0.1
。因此结果lagDiff=-7
(以样本为单位)对应于-0.7
秒。您对正确答案的推理不正确。真正的答案不是
0.7*3.14
,而是-0.7
。要了解原因,请注意您的定义y2 = sin(t*pi - 0.7*pi);
等同于
y2 = sin((t-0.7)*pi);
比较
y1 = sin(t*pi);
很明显
y2
是y1
时间提前了0.7
秒;或延迟-0.7
秒。
综上所述,不带abs
的代码给出的结果符合正确答案:-0.7
秒。