この記事の方程式によると、次の方法で相互相関係数を数えることができます。
% 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
機能も試しましたか?
編集
OK、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 の結果は、これら 2 つの信号間のすべての可能な相関係数の行列です。
x y
x 1.0000 -0.0543
y -0.0543 1.0000
したがって、相互相関の場合、主対角線の外側にある要素の 1 つを選択する必要があります (自己相関係数があり、この場合は常に 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