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

Cross Correlation with signals of different length in MATLAB

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

这将用于稍后略有不同的信号,但现在我正在尝试使用相同的信号。

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

有什么想法可以实现吗?

如果你想删除向量的第一个和最后一个零,你可以在这里使用它

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')));

假设 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.