根据本文中的公式,您可以通过以下方式计算互相关系数:
% Assuming: m and n are your signals organized as row vectors
r = cov([m;n]) / (std(m)*std(n));
如果你只想为信号的某些部分计算系数,只需使用:
r = cov([m(1:100);n(1:100)]) / (std(m(1:100))*std(n(1:100)));
你有没有试过 corrcoef 功能?
Edit 好的,我检查了corrcoef功能,它似乎工作正常,看看:
>> x = 100*randn(1000,1);
>> y=34*randn(1000,1);
>> corrcoef(x,y)
ans =
1.0000 -0.0543
-0.0543 1.0000
因此相关系数等于-0.0543 - 相似性小(如预期的那样) .
为了检查这一点,让我们计算相同信号的系数:
>> y=x;
>> corrcoef(x,y)
ans =
1 1
1 1
正如预期的那样,它等于1 .
Edit . 如您所见,corrcoef的结果是这两个信号之间所有可能相关系数的矩阵:
x y
x 1.0000 -0.0543
y -0.0543 1.0000
因此,对于互相关,您需要选择主对角线之外的一个元素(存在自相关系数,在这种情况下总是等于1) .
如果你选择ans(2,1)或ans(1,2)没有区别 - 如果计算x和y的相关性,或y和x的相关性,则没有区别 .
所以最终的代码看起来应该类似于:
R = corrcoef(x,y); % Correlation matrix
r = R(2,1); % this is your Cross-Correlation coefficient