根据本文中的方程式,您可以这样计算互相关系数:
% 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
功能吗?
编辑
好的,我检查了 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。
编辑. 如您所见, 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