Согласование двух серий коэффициентов Mfcc - PullRequest
2 голосов
/ 03 августа 2011

Я извлек два ряда коэффициентов MFCC из двух аудиофайлов длительностью около 30 секунд, состоящих из одного и того же речевого содержимого. Аудиофайлы записываются в одном месте из разных источников. Следует оценить, содержит ли аудио тот же разговор или другой разговор. В настоящее время я проверил расчет корреляции двух серий Mfcc, но результат не очень разумный. Есть ли лучшие практики для этого сценария?

Ответы [ 3 ]

4 голосов
/ 25 марта 2013

У меня была та же проблема, и решение для нее состояло в том, чтобы сопоставить два массива MFCC с использованием алгоритма Dynamic Time Warping .

После вычисления MFCC вы должны теперькаждый из ваших двух сигналов - массив, в котором каждый элемент содержит MFCC для кадра (массив массивов).Первым шагом будет вычисление «расстояний» между каждым одним элементом одного массива и каждым другим элементом, то есть расстояний между каждыми двумя наборами MFCC (для этого вы можете попробовать использовать евклидово расстояние ),

Это должно оставить вас с двумерным массивом (назовем его «dist»), где element (i, j) представляет расстояние между MFCC i-го кадра в первом сигнале и MFCCj-го кадра вашего второго сигнала.

К этому массиву теперь можно применить алгоритм DTW:

  • dtw (1,1) = dist (1,1)
  • dtw (i, j) = min (dtw (i-1, j-1), dtw (i-1, j), dtw (i, j-1)) + dist (i, j).

Значение, представляющее «разницу» между вашими двумя файлами, равно dtw (n, m), где n = nr.кадров в первом сигнале, m = nr.фреймов второго.

Для дальнейшего чтения, этот документ может дать вам общее представление о применении DTW к MFCC, а это представление алгоритма DTW можеттакже помогите.

3 голосов
/ 16 ноября 2011

Поскольку два вектора фактически являются гистограммами, вы можете попробовать вычислить расстояние хи-квадрат между векторами (общая мера расстояния для гистограмм).

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');
1 голос
/ 30 декабря 2013

Я недавно столкнулся с той же проблемой. Лучший способ, который я нашел, - это использовать библиотеку аудио MIRtoolbox , которая является очень мощной с точки зрения обработки аудио.

После добавления этой библиотеки расстояние двух MFCC можно легко вычислить, вызвав (меньшее совпадение <=> совпадений):

dist = mirgetdata(mirdist(mfcc1, mfcc2));
...