2016-09-28 15 views
1

現在、私はMATLABの音声認識プロジェクトに取り組んでいます。 私は2つの音声信号を取り、同じ信号のMFCC係数を抽出しました。 私が知る限り、私は今、2つの間のユークリッド距離を計算し、次にDTWアルゴリズムを適用すべきです。そういうわけで私は2人の間の距離を計算し、距離の配列を得ました。 私の質問は、結果の配列にDTWを実装する方法ですか?MFCC係数の配列に対してDTWを実行する方法は?

はここに私のMATLABコードです:

オールクリア。すべてを閉じる。 clc;

% Define variables 
Tw = 25;    % analysis frame duration (ms) 
Ts = 10;    % analysis frame shift (ms) 
alpha = 0.97;   % preemphasis coefficient 
M = 20;     % number of filterbank channels 
C = 12;     % number of cepstral coefficients 
L = 22;     % cepstral sine lifter parameter 
LF = 300;    % lower frequency limit (Hz) 
HF = 3700;    % upper frequency limit (Hz) 
wav_file = 'Play.wav'; % input audio filename 
wav_file1 = 'Next.wav'; 


% Read speech samples, sampling rate and precision from file 
[ speech, fs, nbits ] = wavread(wav_file); 
[ speech1, fs, nbits ] = wavread(wav_file1); 

% Feature extraction (feature vectors as columns) 
[ MFCCs, FBEs, frames ] = ... 
       mfcc(speech, fs, Tw, Ts, alpha, @hamming, [LF HF], M, C+1, L); 
[ MFCC1s, FBEs, frames ] = ... 
       mfcc(speech1, fs, Tw, Ts, alpha, @hamming, [LF HF], M, C+1, L); 

L = pdist2(MFCCs, MFCC1s, 'euclidean'); 

答えて

0

免責事項:私はmatlabユーザではありません。

「私は今、DTWアルゴリズムのユークリッド距離を計算してからDTWアルゴリズムを適用すべきです」という誤解があると思います。

DTWを使用するポイントは、2つのシリーズ(wav1とwav2のMFCCシリーズ)を比較する必要があります。両方のWAVの持続時間が異なる可能性があるので、2つのセット異なるサイズのMFCCベクター。 DTWは、サイズにかかわらず2つのMFCCシリーズを比較するのに役立ちます(https://en.wikipedia.org/wiki/Dynamic_time_warping参照)。

たとえば、wav1の3つのMFCC特徴ベクトルとwav2の5つのMFCC特徴ベクトルを抽出した場合、DTWを適用することによってそれらを比較して効果的に差それら。あなたはDTWを計算するのにDTWを使う前に距離を計算する必要はありません。実際にはそうでない場合は、別の長さの距離をどう計算するのか分かりません。

私が最初に言ったように、私はMathWorks社のMATLABユーザないんだけど、「MATLABのDTW」のための迅速なGoogle検索は、この記事に私を指摘:それらがdtw()を参照して、https://www.mathworks.com/help/signal/ref/dtw.html

dist = dtw(x,y) stretches two vectors, x and y, onto a common set of 
    instants such that dist, the sum of the Euclidean distances between 
    corresponding points, is smallest 
関連する問題