
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.207] |
![]() |
|
Страницы: (3) 1 [2] 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Я, кажется, поторопился с выводами. Ответьте пожалуйста на вопрос: мы посылаем в mfcc(ref double[] signal) весь исходный сигнал или разбиваем его на кадры и посылаем туда? Просто я в литературе и на форуме прочитал, что в итоге должен получиться не один массив(из 12 элементов) коэффициентов кепстра для всего входного сигнала, а якобы мы должны получить массив кепстров для каждого кадра входящего сигнала. Как правильно?
|
Сообщ.
#17
,
|
|
|
На кадры.
|
Сообщ.
#18
,
|
|
|
Цитата goodass @ 2) Спектральные коэффициенты усредняются с использованием параметра количества каналов фильтра, которые представляют из себя гребенку треугольных окон, расположенных на мел-шкале (обычно треугольные фильтры перекрывают область частот от нуля и вплоть до частоты Найквиста ). Не очень понятен данный шаг... Под гребёнку треугольных окон нашёл формулу: http://en.wikipedia.org/wiki/Window_functi...angular_windows сама формула: http://upload.wikimedia.org/wikipedia/en/m...14e8418a54a.png а как далее её применять? На первом шаге мы берём ФФТ от некоторого сигнала. Получаем распределение частот. Далее мы проходим окнами с перекрытиями по нему или нет? Откуда берётся понятие "количество каналов фильтра"? Что это за каналы?) |
Сообщ.
#19
,
|
|
|
mel шкала выглядет так:
![]() зависимость шкалы - логарифмическая в результате при выборке например 512 значений фурье для определения частоты, после прохождения через mel фильтр, получим например около 40 значений если затем отобразить полученный спектр, то визуально распределение энергии будет выглядеть гораздо нагляднее чем в чистном спектре после преборазования фурье всё заключается в том что чем выше частота тем больше может быть разброс по частоте человеческое ухо адаптировалось к этому и не улавливает разброс в высоких частотах mel фильтр эмулирует восприятие сигнала человеческим ухом http://people.ece.cornell.edu/land/courses...j355/index.html |
Сообщ.
#20
,
|
|
|
Цитата zamir @ в результате при выборке например 512 значений фурье для определения частоты, после прохождения через mel фильтр, получим например около 40 значений Я как раз вот этого момента и не понимаю ![]() У нас есть 512 значений. Изначально мы переводим наши частоты в шкалу Мела, по логарифмической формуле как указано в Вашей статье: m = 2595 * log10(1 + f./700); После этого у нас же опять получается 512 значений. Далее мы применяем к этим 512 значениям - обратное косинусное преобразование? (по формуле: http://www1.icsi.berkeley.edu/Speech/docs/.../node64_mn.html ) 40 - это и есть у нас NUMCHANS (N) из нашей формулы? |
Сообщ.
#21
,
|
|
|
Смотрите рисунок сверху
Это фильтр гребёнка Каждый треугольник - это одно значение Поэтому если у вас значений будет 512 или 1024, то проходя через этот фильто вы всё равно получите столько значенией - сколько изображено треугольников p.s. дискретное преобразование по косинусу - это следующий шаг для сжания энегрии и сокращения размерности |
Сообщ.
#22
,
|
|
|
Для наглядности
Вот спектр ![]() Вот спектр после прохождения mel фильтра с 20ю контейнерами ![]() Вот спектр после прохождения mel фильтра с 40 контейнерами ![]() Сравните как выглядят выскоие частоты |
Сообщ.
#23
,
|
|
|
Цитата zamir @ Для наглядности Вот спектр ![]() Вот спектр после прохождения mel фильтра с 20ю контейнерами ![]() Вот спектр после прохождения mel фильтра с 40 контейнерами ![]() Сравните как выглядят выскоие частоты Я не понимаю как выбирается количество вот этих контейнеров и какая вообще формула этой гребёнки... ![]() |
Сообщ.
#24
,
|
|
|
Цитата Я не понимаю как выбирается количество вот этих контейнеров можно выбирать на глаз (для начала придётся научиться читать спектрограммы) можно использовать устоявшиеся значения 31 для сигнала sample rate 8000 Цитата и какая вообще формула этой гребёнки... сначала по формуле m = 2595 * log10(1 + f./700) делате mel шкалу - визуально получаете треугольники обходите каждый треуголник и умножаете частоту на коэфициент в треугольнике соответвествующей этой частоте и складываете в контейнер задача не сложная, интерпритируя иначе: надо уменьшить высоту картинки - но не линейно а по mel шкале |
Сообщ.
#25
,
|
|
|
Цитата zamir @ сначала по формуле m = 2595 * log10(1 + f./700) делате mel шкалу - визуально получаете треугольники f - это мои частоты после FFT? 1hz, 2hz, 3hz...? ![]() ![]() ![]() Если же в формулу подставлять мои результаты из FFT: m = 2595 * log10(1 + FFT[i]/700) то получается просто немного "сглаженный" тот же самый график... Проблема у меня вот в чём: У меня есть формула треугольного окна: http://upload.wikimedia.org/wikipedia/en/m...14e8418a54a.png Я могу пробежаться по FFT (сигналу после FFT) разбить его на определённое количество окон (можно с перекрытиями) и в каждом домножить сигнал на треугольное окно. Но проблема в том, что шкала от этого не измениться по ОХ, то бишь - размер каждого окна будет одинаковый, а на этих графиках (как и на Вашем), размеры окон разные, увеличивающиеся к концу. Не понимаю как это достигается... |
Сообщ.
#26
,
|
|
|
Треугольное окно относится к преобразованиию фурье
Для этого преобразования это не лучшее решение После пребразования вы получите спектр значения после преобразования это не совсем частоты это отсчеты частот А в формулу надо подставлять именно частоты для начала просто получите спектр и попробуйте его сжать по шкале частоты |
Сообщ.
#27
,
|
|
|
Цитата zamir @ После пребразования вы получите спектр значения после преобразования это не совсем частоты это отсчеты частот Попробую поэтапно свериться и рассказать, что я делаю на этом этапе ![]() По пропорции получаем, что частота определённого отсчёта вычисляется так: 5512 * порядковый_номер_отсчёта / 3000 Затем подставляем эту формулу вместо символа f в формулу перевода в мел-шкалу и получаем: m = 2595 * log10( 1 + ( 5512 * порядковый_номер_отсчёта / 3000 ) / 700 ) Это пока что верно или уже здесь напортачил? ![]() |
Сообщ.
#28
,
|
|
|
Похоже на правду
Вам ещё в процессе потребуется обратное преобраззование из mel шкалы Выглядит оно так: f = 700 * (pow(10, m / 2595.0) - 1) прежде чем подставлять значение после пребразования Фурье, лучше создать банк фильтров той самой гребёнки из например 40 значений каждое значение будет определять диапазон часто для данного банка/треугольника для линейной зависимости просто делим вашу ось частоты 5512 на 40 и получаем 40 диапазонов частот для логарифмической зависимости придётся проделать чуть больше арифметических вычислений Полагаю вы суть уловили ![]() Забегая немного вперёд: При работе с фильтром определяются так же диапазоны частот Например человеческая речь находится приблизитетельно в диапазоне частот от 80 до 9000Гц Поэтому для фильтра берут например отрезок от 100 до 4000Гц и деляет его на контейнеры. Частоты выше и ниже отбрасывают. |
Сообщ.
#29
,
|
|
|
Цитата zamir @ прежде чем подставлять значение после пребразования Фурье, лучше создать банк фильтров той самой гребёнки из например 40 значений А как это делается? ![]() ![]() |
Сообщ.
#30
,
|
|
|
Цитата для линейной зависимости просто делим вашу ось частоты 5512 на 40 и получаем 40 диапазонов частот для логарифмической зависимости придётся проделать чуть больше арифметических вычислений я полагал вот тут вы суть уловите ![]() если я не ошибаюсь то делал это так (поправьте меня если я не прав): сначала работаем в mel шкале - делим участок частот на равные отрезки затем переводим наши отрезки на реальную плоскость частот и получаем пасположение углов треугольника зарисуйте на бумажке - всё должно сойтись примерно с тем что изозражено на графике |