代码之家  ›  专栏  ›  技术社区  ›  Rekeal

MATLAB中不同长度信号的互相关

  •  2
  • Rekeal  · 技术社区  · 11 年前

    我有两个不同长度的信号,其中较短的信号与移位的较长n个样本相同。我想找出这两个信号之间的最大归一化互相关。因为它是归一化的,所以应该给出1 xcorr 函数滞后从-441到441个样本不等。

    这将用于稍后稍有不同的信号,但目前我尝试使用相同的信号。

    零填充(正如我在图像中所做的)给了我一个错误的相关性,因为零成为相关性计算的一部分。

    有什么想法如何做到这一点吗?

    2 回复  |  直到 10 年前
        1
  •  1
  •   wsdzbm    11 年前

    假设x和y是你拥有的更短和更长的信号。

    nx = length(x);
    ny = length(y);
    cc = nan(1,ny-nx+1);
    for ii = 0 : ny-nx
      id = (1:nx) + ii;
      cc(ii+1) = sum(x.*y(id))/(sqrt(sum(x.^2)*sum(y(id).^2)));
    end
    [ccmx,idmx] = max(cc);
    

    现在你有了最大交叉系数的位置。

    如果滞后开始于 -441 如您所给出的(其中x和y在左侧对齐)。最大值应为 lag=idmx-442 .

        2
  •  1
  •   rst    11 年前

    如果要删除向量的第一个和最后一个零,可以在此处使用

    A = A(find(A~=0, 1, 'first'):find(A~=0, 1, 'last'));
    

    要在关联中直接使用它,请尝试在此处使用它(其中 A 是你的红线 B 蓝色的)

    xcorr(A(find(A~=0, 1, 'first'):find(A~=0, 1, 'last')), B(find(A~=0, 1, 'first'):find(A~=0, 1, 'last')));