Как выполнить DTW для массива коэффициентов MFCC?

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

Вот мой код MATLAB:

очистить все; закрыть все; клк;

% 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');

person Agasti Dukare    schedule 28.09.2016    source источник


Ответы (2)


Отказ от ответственности: я не пользователь Matlab.

Я думаю, что в вашем утверждении может быть неправильное представление: «Теперь я должен вычислить евклидово расстояние между ними, а затем применить алгоритм DTW».

Смысл использования DTW заключается в том, что вам нужно сравнить две серии (серии MFCC для wav 1 и для wav 2), и есть вероятность, что обе волны имеют разную продолжительность, поэтому вы получите два набора векторов 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
person jotadepicas    schedule 30.03.2017

Я предлагаю использовать стандартное евклидово расстояние вместо евклидова, потому что коэффициенты де MFCC имеют разный диапазон для каждого измерения.

Например, если у вас есть следующие 2 вектора измерения A(500, 4), B(504,4) и C(502,3), использование евклидова расстояния приведет к тому, что dist(A,C)dist(A,B) , потому что каждое размерное расстояние нормализовано к его среднему значению. Таким образом, у вас будет (504-500)/502 ‹ (4-3)/3,5

Таким образом, для MFCC будет лучше использовать этот шаг нормализации для улучшения результатов.

person Radmar    schedule 13.09.2018