同じ音声コンテンツからなる 2 つの約 30 秒のオーディオ ファイルから 2 つの系列 MFCC 係数を抽出しました。オーディオ ファイルは、異なるソースから同じ場所に録音されます。オーディオに同じ会話が含まれているか、別の会話が含まれているかを推定する必要があります。現在、2 つの Mfcc シリーズの相関計算をテストしましたが、結果はあまり妥当ではありません。このシナリオのベスト プラクティスはありますか?
4 に答える
2つのベクトルは事実上ヒストグラムであるため、ベクトル間のカイ2乗距離(ヒストグラムの一般的な距離測度)を計算してみてください。
d(i) = sum (x(i) - y(i))^2/(2 * (x(i)+y(i)));
優れた(mex)実装は、このツールボックスにあります。
http://www.mathworks.com/matlabcentral/fileexchange/15935-computing-pairwise-distances-and-metrics
次のように呼び出します。
d = slmetric_pw(X, Y, 'chisq');
私は同じ問題を抱えていましたが、その解決策は、ダイナミック タイムワーピング アルゴリズムを使用して MFCC の 2 つの配列を一致させることでした。
MFCC を計算すると、2 つの信号のそれぞれについて、各要素にフレームの MFCC が含まれる配列 (配列の配列) が必要になります。最初のステップは、1 つの配列のすべての要素と他の配列のすべての要素との間の「距離」、つまり MFCC の 2 つのセットごとの距離を計算することです (これにはユークリッド距離を使用してみてください)。
これにより、2 次元配列 (「dist」と呼びましょう) が残ります。要素 (i,j) は、最初の信号の i 番目のフレームの MFCC と j 番目のフレームの MFCC の間の距離を表します。あなたの2番目の信号の。
この配列で、DTW アルゴリズムを適用できるようになりました。
- dtw(1,1) = 距離(1,1)
- dtw(i,j) = min (dtw(i-1, j-1), dtw(i-1, j), dtw(i, j-1)) + dist(i,j).
2 つのファイルの「違い」を表す値は dtw(n,m) で、n = nr です。最初の信号のフレーム数、m = nr。2 番目のフレームの。
さらに読むために、このホワイト ペーパーでは、DTW を MFCC に適用する全体像を示し、DTW アルゴリズムのこのプレゼンテーションも役立つ可能性があります。
私は最近同じ問題に直面しました。私が見つけた最良の方法は、オーディオ処理に関して非常に強力なオーディオ ライブラリMIRtoolboxを使用することです。
このライブラリを追加した後、2 つの MFCC の距離は次の呼び出しで簡単に計算できます (より低い距離 <=> 同様の一致):
dist = mirgetdata(mirdist(mfcc1, mfcc2));