2016-09-28 1 views
1

Momentan arbeite ich an einem Spracherkennungsprojekt in MATLAB. Ich habe zwei Sprachsignale genommen und die MFCC-Koeffizienten derselben extrahiert. Soweit ich weiß, sollte ich jetzt den euklidischen Abstand zwischen den beiden berechnen und dann den DTW-Algorithmus anwenden. Deshalb berechnete ich die Entfernung zwischen den beiden und bekam eine Reihe von Entfernungen. Also meine Frage ist, wie DTW auf resultierende Array zu implementieren?Wie man DTW auf einem Array von MFCC-Koeffizienten durchführt?

Hier ist mein MATLAB-Code:

klar alle; alle schließen; 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'); 

Antwort

0

Haftungsausschluss: Ich bin kein Matlab-Benutzer.

Ich denke, es könnte ein Missverständnis in Ihrer Aussage "Ich sollte jetzt die Euklidische Entfernung zwischen den beiden berechnen und dann den DTW-Algorithmus anwenden".

Der Punkt der Verwendung von DTW ist, dass Sie zwei Serien (MFCCs-Serie für wav 1 und für wav 2) vergleichen müssen, und die Chancen stehen gut, dass beide Wavs von unterschiedlicher Dauer sind, so dass Sie mit zwei Sätze von MFCCs Vektoren unterschiedlicher Größe. Mit DTW können Sie die beiden MFCCs unabhängig von ihrer Größe vergleichen (siehe https://en.wikipedia.org/wiki/Dynamic_time_warping). Wenn Sie beispielsweise 3 MFCC-Merkmalsvektoren für wav 1 und 5 MFCC-Merkmalsvektoren für wav 2 extrahiert haben, können Sie sie vergleichen, indem Sie DTW anwenden. Auf diese Weise erhalten Sie effektiv die Differenz oder den Abstand zwischen beiden Sie. Sie müssen nicht die Entfernung "vor" DTW berechnen, Sie verwenden DTW, um es zu berechnen (in der Tat, weiß ich nicht, wie würde ich einen Abstand zwischen anderen Längen unterschiedlicher Länge berechnen).

Wie ich am Anfang gesagt, ich bin kein Matlab Benutzer, sondern eine schnelle Google-Suche nach „Matlab dtw“ wies mich auf diesen Artikel: https://www.mathworks.com/help/signal/ref/dtw.html, in die sie sich beziehen auf dtw():

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 
Verwandte Themen