Как сделать алгоритм MFCC? - PullRequest
       33

Как сделать алгоритм MFCC?

5 голосов
/ 28 октября 2009

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

После завершения FTT нам нужно «отобразить мощности спектра, полученного выше, на шкалу плавления, используя треугольные перекрывающиеся окна».

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

Если треугольники определены, как мне отобразить мощность спектра, полученного выше, в шкалу плавления?

Это так: Суммируйте частоты внутри треугольника, а затем передайте его для плавления шкалы? или же Суммируйте частоты внутри треугольника в соответствии со значением веса (определяемым высотой треугольника в этой точке), а затем передайте его в шкалу плавления? или же Пройдите все частоты внутри треугольника, чтобы плавить шкалу в соответствии со значением weith? Еще одна вещь?

Может кто-нибудь объяснить мне это

1 Ответ

5 голосов
/ 28 октября 2009

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

Затем вычислите взвешенную сумму, используя эти треугольники вдоль линейной оси X. (На этом предыдущем этапе я думаю, что некоторые подходы нормализуются по площади треугольника фильтра, а некоторые нет, и я, честно говоря, не уверен насчет окончательных последствий здесь, хотя я подозреваю, что это может не иметь большого значения, кроме как модифицировать окончательная интерпретация, которая в любом случае является относительным сравнением. Один сохраняет общую энергию, а другой дает одинаково взвешенные вклады для каждой полосы.) Затем возьмите логарифм этого (который преобразует общий коэффициент объема в смещение).

Edit: Чтобы быть более понятным в применении фильтров ... Каждый треугольник представляет отдельный фильтр, производящий отдельную взвешенную сумму. Если в вашем банке фильтров двадцать фильтров, то будет рассчитано двадцать треугольников и двадцать взвешенных сумм. Чтобы применить каждый фильтр, для каждого значения оси x умножьте значение фильтра в этом месте x на значение функции в этом месте x и добавьте это к сумме для этого конкретного фильтра. Большинство значений по оси X имеют два фильтра, которые присутствуют там, поэтому в каждой точке X вносится вклад в два фильтра.

...