如何计算两个函数的互相关

信息处理 matlab 互相关
2022-02-24 14:19:38

我正在尝试实现 Matlab 的互相关函数,但我似乎无法复制使用 Matlab 内置函数“xcorr”时获得的结果。

可以在这里找到 xcorr 的文档

查看 Matlab 文档,似乎互相关被实现为

Rxy[m]={n=0Nm1x[n+m]y[n]m0Ryx[m]m<0}

或等价于

Rxy[m]={n=1Nmx[n+m]y[n]m0n=1N+my[nm]x[n]m<0}

如果 x 和 y 的索引从 1 开始。结果将是 C,其中

C(m)=Rxy(mN)form=1,2,...,2N1.

该公式在 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.jpg

使用“xcorr”的自相关:

xcorr.jpg

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

2个回答

在计算结果向量的循环中,您应该将 A 和 B 值相乘而不是相加。

for n = 1:limit
      if (negativeCondition==0)
        result(m) = result(m) + A(n) * B(n - arg);
      else
        result(m) = result(m) + A(arg + n) * B(n);
      end
end