2016-09-28 5 views
1

В настоящее время я работаю над проектом распознавания речи в MATLAB. Я взял два голосовых сигнала и извлек их коэффициенты MFCC. Насколько я знаю, теперь я должен вычислить эвклидовое расстояние между ними, а затем применить алгоритм DTW. Вот почему я вычислил распределение между ними и получил массив расстояний. Итак, мой вопрос заключается в том, как реализовать DTW на результирующем массиве?Как выполнить DTW по массиву коэффициентов MFCC?

Вот мой 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 заключается в том, что вам необходимо сравнить две серии (серии MFCC для wav 1 и wav 2), и, скорее всего, оба wavs имеют разную продолжительность, поэтому вы получите два набора MFCC-векторы разного размера. DTW помогает сравнить две серии MFCC независимо от их размеров (см. https://en.wikipedia.org/wiki/Dynamic_time_warping).

Так, например, если вы выделили, допустим, 3 вектора функций MFCC для wav 1 и 5 векторов объектов MFCC для wav 2, применяя DTW, вы можете сравнить их, тем самым эффективно получив разницу или расстояние между их. Вам не нужно вычислять расстояние «до» DTW, вы используете DTW для его вычисления (на самом деле, я не знаю, как бы рассчитать расстояние между сериями разной длины в противном случае).

Как я уже сказал в начале, я не пользователь MATLAB, но быстрый поиск Google для «MatLab DTW» указал мне на эту статью: https://www.mathworks.com/help/signal/ref/dtw.html, в которой они относятся к 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 
Смежные вопросы