Я читал кусочки в Интернете, но я просто не могу собрать все это вместе. У меня есть некоторые базовые знания о сигналах / DSP, что должно быть достаточно предпосылок для этого. Я заинтересован в том, чтобы в конечном итоге кодировать этот алгоритм на Java, но пока не до конца его понимаю, поэтому я здесь (это считается математикой, верно?).
Вот как я думаю, что это работает вместе с пробелами в моих знаниях.
Начните с аудио образца речи, скажем, файла .wav, который вы можете прочитать в массив. Назовите этот массив , где n находится в диапазоне от 0 , 1 , … , N - 1 (так N выборок). Значения соответствуют интенсивности звука, я думаю - амплитуды.
Разбейте аудиосигнал на отдельные «кадры» по 10 мс или около того, где вы предполагаете, что речевой сигнал «стационарный». Это форма квантования. Таким образом, если ваша частота дискретизации составляет 44,1 кГц, 10 мс равна 441 выборке или значениям .
Сделайте преобразование Фурье (БПФ для вычисления). Теперь это делается для всего сигнала или для каждого отдельного кадра ? Я думаю, что есть разница, потому что в общем случае преобразование Фурье рассматривает все элементы сигнала, поэтому F ( x [ n ] ) ≠ F ( x 1 [ n ] ) объединяется с F ( x 2 [ n ] ), объединяется с … F ( x N [ n ] ) где x являются меньшими кадрами. В любом случае, скажем, что мы делаем немного БПФ и заканчиваем с X [ k ] для остальной части этого.
Отображение на шкалу Мел и ведение журнала. Я знаю, как преобразовать обычные частоты в шкалу Мел. Для каждого из X [ k ] («ось x», если позволите), вы можете сделать формулу здесь: http://en.wikipedia.org/wiki/Mel_scale . Но как насчет «значений y» или амплитуд X [ k ] ? Они просто остаются теми же значениями, но смещены в соответствующие точки на новой оси Mel (x-)? Я видел в какой-то статье что-то о регистрации фактических значений X [ k ], потому что тогда, если X [ k ] = A [ k где один из этих сигналов считается шумом, который вам не нужен, логарифмическая операция по этому уравнению превращает мультипликативный шум в аддитивный шум, который, возможно, можно отфильтровать (?).
Теперь последний шаг - взять DCT вашего модифицированного сверху (однако в итоге он был модифицирован). Затем вы берете амплитуды этого окончательного результата, и это ваши MFCC. Я читал кое-что о выбрасывании высоких частот.
Так что я пытаюсь по-настоящему выяснить, как вычислить этих парней шаг за шагом, и, очевидно, некоторые вещи ускользают от меня сверху.
Кроме того, я слышал об использовании «банков фильтров» (в основном, массива полосовых фильтров) и не знаю, относится ли это к созданию кадров из исходного сигнала, или, может быть, вы делаете кадры после БПФ?
И наконец, что-то, что я видел в MFCC с 13 коэффициентами?