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
.
我有 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
.