我正在尝试实现 Matlab 的互相关函数,但我似乎无法复制使用 Matlab 内置函数“xcorr”时获得的结果。
可以在这里找到 xcorr 的文档。
查看 Matlab 文档,似乎互相关被实现为
或等价于
如果 x 和 y 的索引从 1 开始。结果将是 C,其中
该公式在 Matlab 中的实现如下图所示:
function [result] = myXCorr(A , B)
%Implementation of the Cross Coorelation Function
N = size(A,2);
M = size(B,2);
result = zeros(1, N + M - 1 );
len = size(result,2);
for m = 1 : len
arg = (m - N);
if(arg < 0)
negativeCondition = 1;
limit = N + arg;
else
negativeCondition = 0;
limit = N - arg;
end
for n = 1:limit
if(negativeCondition == 0)
result(m) = result(m) + A(arg + n) + B(n);
else
result(m) = result(m) + A(n) + B(n - arg);
end
end
end
end
此实现不会产生与 Matlab 相同的结果,我似乎无法找出错误是什么。自相关图如下所示。
A = 1:1:10;
B = 1:1:10;
myResult = myXCorr(A,B);
mResult = xcorr(A,B);
lag = -9:1:9;
plot(lag, myResult);
plot(lag, mResult);
使用我的函数进行自相关:

使用“xcorr”的自相关:

有谁知道这里做错了什么?任何帮助将不胜感激。