matlab - matlab中的新手互相关

标签 matlab signal-processing

我试图了解 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 我无法弄清楚我做错了什么

提前致谢

最佳答案

你有两处错误:

  1. 您不应在最大化中使用 abs
  2. 0.7*3.14 是真正的相位滞后,而不是真正的时间滞后。真正的时间滞后是-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秒。

关于matlab - matlab中的新手互相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28006565/

相关文章:

matlab - 读取数据文件时提取变量

arrays - Matlab:arrayfun,两个矩阵X,Y作为向量的分量

matlab - 顺序特征选择 Matlab

matlab - 在 MATLAB 中使用 FFT 的频率响应

signal-processing - 什么可能导致 FFT 数据在错误频率处出现尖峰?

matlab - 如何使用 MATLAB 更改矩阵中的元素

c - 将 MATLAB 代码移植到优化 C 的有效方法

audio - 回声音效

python - 发现信号峰值不正确

matlab - 我如何才能在确切的时间内通过MATLAB呈现声音?