Согласно уравнениям в этой статье вы можете рассчитать коэффициент взаимной корреляции следующим образом:
% 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