組み込み関数xcorr
と相関係数を使用せずに、MATLABで2つの音声信号(それぞれ40,000サンプル)の相互相関を行う方法を誰かに教えてもらえますか?
前もって感謝します。
組み込みを使用できない正当な理由がある場合は、代わりに畳み込みを使用できます。相互相関は、反転を伴わない単純な畳み込みであるため、相関積分の反転を「元に戻す」には、最初に信号の1つに追加の反転を適用できます(畳み込みでキャンセルされます)。
さてヨーダは良い答えを出しましたが、念のためとにかくこれに言及すると思いました。離散相互相関の定義に戻ると、組み込みのMatlab関数(Matlabがxcorr
で行うこと)を使用せずに計算できます。もちろん、私はこれをベクトル化しようとしなかったので、まだ改善の余地があります。
n=1000;
x1=Rand(n,1);
x2=Rand(n,1);
xc=zeros(2*n-1,1);
for i=1:2*n-1
if(i>n)
j1=1;
k1=2*n-i;
j2=i-n+1;
k2=n;
else
j1=n-i+1;
k1=n;
j2=1;
k2=i;
end
xc(i)=sum(conj(x1(j1:k1)).*x2(j2:k2));
end
xc=flipud(xc);
xcorr
関数の結果と一致します。
PDATE:私の意見では、Matlabは大規模なデータセットのリアルタイムの相互相関を行うための適切なツールではないことを忘れてしまいました。むしろ、Cまたは他のコンパイル言語で試してみます。