Как создать алгоритм MFCC?
-
08-07-2019 - |
Вопрос
Я хочу создать низкочастотный алгоритм Cepstrum, но есть некоторые вещи, которые я не понимаю.
После завершения FTT нам нужно "Отобразить мощности полученного выше спектра на шкалу mel, используя треугольные перекрывающиеся окна".
Я знаю, как вычислять треугольники, и я также знаю, как перейти к мелкому масштабу.Я просто не знаю, что с ними делать.
Если треугольники определены, как мне отобразить мощность полученного выше спектра на шкалу mel?
Неужели это так:Суммируйте частоты внутри треугольника, а затем передайте их в mel scale?или Суммируйте частоты внутри треугольника в соответствии со значением веса (определяемым высотой треугольника в этой точке), а затем передайте его в mel scale?или Перевести все частоты внутри треугольника в мелкомасштабную шкалу в соответствии со значением weith?Еще кое-что?
Может ли кто-нибудь разъяснить мне это
Решение
Я думаю, что этот этап процесса немного странный и не имеет полного смысла (во всяком случае, для меня).Центры полос фильтра расположены на равном расстоянии друг от друга по шкале mel, но представляют собой треугольники в линейном масштабе, т.е.точно так же, как на рисунке здесь.
Затем вычислите взвешенную сумму, используя эти треугольники вдоль линейной оси x.(На этом предыдущем шаге я думаю, что некоторые подходы нормализуются по площади фильтра-треугольника, а некоторые нет, и я, честно говоря, не уверен в конечных последствиях здесь, хотя я подозреваю, что это может мало что значить, кроме изменения окончательной интерпретации, которая в любом случае является относительным сравнением.Один поддерживает общую энергию, а другой дает одинаково взвешенные вклады для каждого диапазона.) Затем возьмите логарифм этого значения (который преобразует общий коэффициент громкости в смещение).
Редактировать: Чтобы было более понятно, как применять фильтры...Каждый треугольник представляет собой отдельный фильтр, выдающий отдельную взвешенную сумму.Если в вашем банке фильтров двадцать фильтров, то будет двадцать треугольников и двадцать взвешенных сумм для вычисления.Чтобы применить каждый фильтр, для каждого значения по оси x умножьте значение фильтра в этом местоположении x на значение функции в этом местоположении x и добавьте это к сумме для этого конкретного фильтра.Большинство значений по оси x содержат два фильтра, которые присутствуют там, поэтому в каждом местоположении x вносится вклад в два фильтра.