matlab xcorr互相关系数计算,结果不在0-1之间

2025-03-14 04:59:36
推荐回答(1个)
回答1:

统计学中,两个向量的互相关用来表示两个随机矢量X和Y之间的协方差,结果是一个矩阵(元素取值在0-1之间),可以用corrcoef函数计算。

 

在信号处理领域中,互相关是用来表示两个信号之间相似性的一个度量,通常通过与已知信号比较用于寻找未知信号中的特性。它是两个信号之间相对于时间的一个函数,有时也称为滑动点积,类似于两个函数的卷积。可使用xcorr函数计算,得到的结果是一个序列(cross-correlation sequence),但该函数带'coeff'参数的含义并不是把结果范围限制在0-1之内,而只是让结果序列中特定的值为1(normalizes the sequence so that the auto-correlations at zero lag are identically 1.0),具体处理分几种情况,有关的代码如下:

 if ~autoFlag,
  % xcorr(x,y)
  % Compute autocorrelations at zero lag
  cxx0 = sum(abs(x).^2);
  cyy0 = sum(abs(varargin{1}).^2);
  scale = sqrt(cxx0*cyy0);
  c = c./scale;
 else
  if ~xIsMatrix,
   % Autocorrelation case, simply normalize by c[0]
   c = c./c(maxlag+1);
  else
   % Compute the indices corresponding to the columns for which
   % we have autocorrelations (e.g. if c = n by 9, the autocorrelations
   % are at columns [1,5,9] the other columns are cross-correlations).
   [mc,nc] = size(c);
   jkl = reshape(1:nc,sqrt(nc),sqrt(nc))';
   tmp = sqrt(c(maxlag+1,diag(jkl)));
   tmp = tmp(:)*tmp; 
   cdiv = repmat(tmp(:).',mc,1);
   c = c ./ cdiv; % The autocorrelations at zero-lag are normalized to
   % one
  end

建议你搞清楚自己到底是要计算什么,再选择适当的函数进行计算。