Помощь в расчете / понимании MFCC: коэффициенты Mel-Frequency Cepstrum

17

Я читал кусочки в Интернете, но я просто не могу собрать все это вместе. У меня есть некоторые базовые знания о сигналах / DSP, что должно быть достаточно предпосылок для этого. Я заинтересован в том, чтобы в конечном итоге кодировать этот алгоритм на Java, но пока не до конца его понимаю, поэтому я здесь (это считается математикой, верно?).

Вот как я думаю, что это работает вместе с пробелами в моих знаниях.

  1. Начните с аудио образца речи, скажем, файла .wav, который вы можете прочитать в массив. Назовите этот массив , где n находится в диапазоне от 0 , 1 , , N - 1 (так N выборок). Значения соответствуют интенсивности звука, я думаю - амплитуды.x[n]n0,1,,N1N

  2. Разбейте аудиосигнал на отдельные «кадры» по 10 мс или около того, где вы предполагаете, что речевой сигнал «стационарный». Это форма квантования. Таким образом, если ваша частота дискретизации составляет 44,1 кГц, 10 мс равна 441 выборке или значениям .x[n]

  3. Сделайте преобразование Фурье (БПФ для вычисления). Теперь это делается для всего сигнала или для каждого отдельного кадра ? Я думаю, что есть разница, потому что в общем случае преобразование Фурье рассматривает все элементы сигнала, поэтому F ( x [ n ] ) F ( x 1 [ n ] ) объединяется с F ( x 2 [ n ] ), объединяется с F ( x N [ n ] ) где xx[n]F(x[n])F(x1[n])F(x2[n])F(xN[n]) являются меньшими кадрами. В любом случае, скажем, что мы делаем немного БПФ и заканчиваем с X [ k ] для остальной части этого.xi[n]X[k]

  4. Отображение на шкалу Мел и ведение журнала. Я знаю, как преобразовать обычные частоты в шкалу Мел. Для каждого из X [ k ] («ось x», если позволите), вы можете сделать формулу здесь: http://en.wikipedia.org/wiki/Mel_scale . Но как насчет «значений y» или амплитуд X [ k ] ? Они просто остаются теми же значениями, но смещены в соответствующие точки на новой оси Mel (x-)? Я видел в какой-то статье что-то о регистрации фактических значений X [ k ], потому что тогда, если X [ k ] = A [ kkX[k]X[k]X[k] где один из этих сигналов считается шумом, который вам не нужен, логарифмическая операция по этому уравнению превращает мультипликативный шум в аддитивный шум, который, возможно, можно отфильтровать (?).X[k]=A[k]B[k]

  5. Теперь последний шаг - взять DCT вашего модифицированного сверху (однако в итоге он был модифицирован). Затем вы берете амплитуды этого окончательного результата, и это ваши MFCC. Я читал кое-что о выбрасывании высоких частот.X[k]

Так что я пытаюсь по-настоящему выяснить, как вычислить этих парней шаг за шагом, и, очевидно, некоторые вещи ускользают от меня сверху.

Кроме того, я слышал об использовании «банков фильтров» (в основном, массива полосовых фильтров) и не знаю, относится ли это к созданию кадров из исходного сигнала, или, может быть, вы делаете кадры после БПФ?

И наконец, что-то, что я видел в MFCC с 13 коэффициентами?

Молодые деньги
источник
1
Это большой вопрос, но есть много здесь , чтобы ответить. Я бы порекомендовал разбить это на 2-3 разных вопроса (вы можете ссылаться на один из другого, если вы хотите сохранить преемственность), чтобы на него можно было с большей готовностью ответить.
Йонска
Так как вы ранее задавали тот же вопрос на math.SE (и вам было рекомендовано, что dsp.SE - лучший дом для него), возможно, вам следует удалить вопрос на math.SE.
Дилип Сарват
Я удалил версию по математике. SE
YoungMoney
Очень хороший и информативный учебник thankssssssssssssss
1
Эй, ты сказал в своем вопросе: «Отображение на шкалу Мел и ведение журнала. Я знаю, как преобразовать числа регулярных частот в шкалу Мел». Вы можете помочь мне рассчитать эту часть. Поскольку у меня есть мой выходной FFt x [k] = 1 * 184, но мой треугольный полосовой фильтр установлен в 20 * 3. тогда как я могу умножить их обоих? Пожалуйста, как можно скорее
Агравал

Ответы:

25

Шаг за шагом...

1. & 2 . Это верно. Обратите внимание, что кадры обычно перекрываются, например, кадр 0 - это выборки от 0 до 440; кадр 1 - образцы от 220 до 660; кадр 2 - это выборки с 440 по 880 и т. д. Обратите также внимание, что оконная функция применяется к выборкам в кадре.

3 . Преобразование Фурье выполняется для каждого кадра. Мотивация этого проста: речевой сигнал меняется с течением времени, но не меняется на коротких отрезках. Вы хотите проанализировать каждый короткий сегмент по отдельности - потому что на этих сегментах сигнал достаточно прост, чтобы его можно было эффективно описать несколькими коэффициентами. Подумайте, кто-то говорит "привет". Вы не хотите, чтобы все фонемы были объединены в один спектр (БПФ сворачивает временную информацию), анализируя весь звук одновременно. Вы хотите, чтобы «хххххеееееееееееллооооооооо» распознавал слово поэтапно, поэтому его нужно разбить на короткие сегменты.

NN=40

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

Посмотрите на следующую картинку, представляющую банк фильтров с 12 ячейками:

Мелкочастотный фильтр-банк с 12 каналами

Восьмая ячейка имеет центральную частоту около 2 кГц. Энергия в 8-ой ячейке получается путем суммирования взвешенных энергий БПФ приблизительно в диапазоне от 1600 до 2800 Гц - с пиковым весом около 2 кГц.

Замечание по реализации: Этот набор взвешенных сумм может быть выполнен за одну операцию - умножение матрицы «матрицы набора фильтров» на вектор энергий БПФ.

Таким образом, на этом этапе мы «суммировали» спектр БПФ в набор из 40 (12 на рисунке) значений энергии, каждое из которых соответствует разному диапазону частот. Мы берем журнал этих значений.

KK=13

pichenettes
источник
Просто быстрый вопрос о наборе фильтров Mel - диапазон высоты / амплитуд от 1,8 до 2 это важно или они могут быть единицей (1) высоты?
YoungMoney
1
Это не важно Эффект от использования макс. амплитуда 1,0 против 2,0 только сместит логарифмическую энергию на постоянную на шаге 4 и, таким образом, повлияет только на первый коэффициент на шаге 5 (который в любом случае часто отбрасывается). Обратите внимание, что в некоторых реализациях используется нормализация энергии, поэтому чем шире фильтр, тем ниже его максимальная амплитуда ( i.imgur.com/IOaLa.gif ). Это может привести к незначительным изменениям производительности в приложениях распознавания. Если вы посмотрите на используемые реализации MFCC, на самом деле на каждом шаге есть много небольших вариаций - bit.ly/ULatdL
pichenettes
Это старая тема, но мне нужно кое-что спросить о графике. Если Найквист имеет частоту 4 кГц, почему эти фильтры с ограниченной полосой пропускания превышают точку 4 кГц. это нормально для MFCC. Обычно вы не хотите, чтобы фильтр пропустил Найквиста? Я прав?
Селдор
2
У вас есть ссылка на то, почему используются N = 40 частот набора фильтров Мел (или 26, другое распространенное значение, которое я видел)?
Джеймс Оверс
1
откуда берется 39 melшаг 4?
Герт Коммер