На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD, nsh
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> MFCC
    Я, кажется, поторопился с выводами. Ответьте пожалуйста на вопрос: мы посылаем в mfcc(ref double[] signal) весь исходный сигнал или разбиваем его на кадры и посылаем туда? Просто я в литературе и на форуме прочитал, что в итоге должен получиться не один массив(из 12 элементов) коэффициентов кепстра для всего входного сигнала, а якобы мы должны получить массив кепстров для каждого кадра входящего сигнала. Как правильно?
      На кадры.
        Цитата goodass @
        2) Спектральные коэффициенты усредняются с использованием параметра количества каналов фильтра, которые представляют из себя гребенку треугольных окон, расположенных на мел-шкале (обычно треугольные фильтры перекрывают область частот от нуля и вплоть до частоты Найквиста ).

        Не очень понятен данный шаг... Под гребёнку треугольных окон нашёл формулу: http://en.wikipedia.org/wiki/Window_functi...angular_windows
        сама формула: http://upload.wikimedia.org/wikipedia/en/m...14e8418a54a.png

        а как далее её применять? На первом шаге мы берём ФФТ от некоторого сигнала. Получаем распределение частот. Далее мы проходим окнами с перекрытиями по нему или нет? Откуда берётся понятие "количество каналов фильтра"? Что это за каналы?)
        Сообщение отредактировано: Black*Eternal -
          mel шкала выглядет так:

          user posted image

          зависимость шкалы - логарифмическая
          в результате при выборке например 512 значений фурье для определения частоты, после прохождения через mel фильтр, получим например около 40 значений
          если затем отобразить полученный спектр, то визуально распределение энергии будет выглядеть гораздо нагляднее чем в чистном спектре после преборазования фурье
          всё заключается в том что чем выше частота тем больше может быть разброс по частоте
          человеческое ухо адаптировалось к этому и не улавливает разброс в высоких частотах
          mel фильтр эмулирует восприятие сигнала человеческим ухом

          http://people.ece.cornell.edu/land/courses...j355/index.html
            Цитата 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) из нашей формулы?
            Сообщение отредактировано: Black*Eternal -
              Смотрите рисунок сверху
              Это фильтр гребёнка
              Каждый треугольник - это одно значение
              Поэтому если у вас значений будет 512 или 1024, то проходя через этот фильто вы всё равно получите столько значенией - сколько изображено треугольников

              p.s.
              дискретное преобразование по косинусу - это следующий шаг для сжания энегрии и сокращения размерности
                Для наглядности

                Вот спектр
                user posted image

                Вот спектр после прохождения mel фильтра с 20ю контейнерами
                user posted image

                Вот спектр после прохождения mel фильтра с 40 контейнерами
                user posted image

                Сравните как выглядят выскоие частоты
                  Цитата zamir @
                  Для наглядности

                  Вот спектр
                  user posted image

                  Вот спектр после прохождения mel фильтра с 20ю контейнерами
                  user posted image

                  Вот спектр после прохождения mel фильтра с 40 контейнерами
                  user posted image

                  Сравните как выглядят выскоие частоты

                  Я не понимаю как выбирается количество вот этих контейнеров и какая вообще формула этой гребёнки... :(
                    Цитата
                    Я не понимаю как выбирается количество вот этих контейнеров

                    можно выбирать на глаз (для начала придётся научиться читать спектрограммы)
                    можно использовать устоявшиеся значения
                    31 для сигнала sample rate 8000

                    Цитата
                    и какая вообще формула этой гребёнки...

                    сначала по формуле m = 2595 * log10(1 + f./700) делате mel шкалу - визуально получаете треугольники
                    обходите каждый треуголник и умножаете частоту на коэфициент в треугольнике соответвествующей этой частоте и складываете в контейнер

                    задача не сложная, интерпритируя иначе:
                    надо уменьшить высоту картинки - но не линейно а по mel шкале
                    Сообщение отредактировано: zamir -
                      Цитата zamir @
                      сначала по формуле m = 2595 * log10(1 + f./700) делате mel шкалу - визуально получаете треугольники

                      f - это мои частоты после FFT? 1hz, 2hz, 3hz...? :) Тогда получается просто логарифм без треугольников :)

                      user posted image

                      Если же в формулу подставлять мои результаты из FFT:
                      m = 2595 * log10(1 + FFT[i]/700)

                      то получается просто немного "сглаженный" тот же самый график...

                      Проблема у меня вот в чём: У меня есть формула треугольного окна: http://upload.wikimedia.org/wikipedia/en/m...14e8418a54a.png
                      Я могу пробежаться по FFT (сигналу после FFT) разбить его на определённое количество окон (можно с перекрытиями) и в каждом домножить сигнал на треугольное окно. Но проблема в том, что шкала от этого не измениться по ОХ, то бишь - размер каждого окна будет одинаковый, а на этих графиках (как и на Вашем), размеры окон разные, увеличивающиеся к концу. Не понимаю как это достигается...
                      Сообщение отредактировано: Black*Eternal -
                        Треугольное окно относится к преобразованиию фурье
                        Для этого преобразования это не лучшее решение
                        После пребразования вы получите спектр
                        значения после преобразования это не совсем частоты это отсчеты частот
                        А в формулу надо подставлять именно частоты
                        для начала просто получите спектр и попробуйте его сжать по шкале частоты
                          Цитата zamir @
                          После пребразования вы получите спектр
                          значения после преобразования это не совсем частоты это отсчеты частот

                          Попробую поэтапно свериться и рассказать, что я делаю на этом этапе :) У меня после Фурье на выходе получается, скажем 3000 точек. Это просто упорядоченные отсчёты. Сигнал у меня в формате 11025герц, поэтому после Фурье я получу набор частот от 0 до 5512гц.

                          По пропорции получаем, что частота определённого отсчёта вычисляется так: 5512 * порядковый_номер_отсчёта / 3000

                          Затем подставляем эту формулу вместо символа f в формулу перевода в мел-шкалу и получаем:

                          m = 2595 * log10( 1 + ( 5512 * порядковый_номер_отсчёта / 3000 ) / 700 )

                          Это пока что верно или уже здесь напортачил? :)
                          Сообщение отредактировано: Black*Eternal -
                            Похоже на правду
                            Вам ещё в процессе потребуется обратное преобраззование из mel шкалы
                            Выглядит оно так:
                            f = 700 * (pow(10, m / 2595.0) - 1)

                            прежде чем подставлять значение после пребразования Фурье, лучше создать банк фильтров той самой гребёнки из например 40 значений
                            каждое значение будет определять диапазон часто для данного банка/треугольника
                            для линейной зависимости просто делим вашу ось частоты 5512 на 40 и получаем 40 диапазонов частот
                            для логарифмической зависимости придётся проделать чуть больше арифметических вычислений
                            Полагаю вы суть уловили :)

                            Забегая немного вперёд:
                            При работе с фильтром определяются так же диапазоны частот
                            Например человеческая речь находится приблизитетельно в диапазоне частот от 80 до 9000Гц
                            Поэтому для фильтра берут например отрезок от 100 до 4000Гц и деляет его на контейнеры. Частоты выше и ниже отбрасывают.
                              Цитата zamir @
                              прежде чем подставлять значение после пребразования Фурье, лучше создать банк фильтров той самой гребёнки из например 40 значений

                              А как это делается? :lol: Я вот этого никак и не могу понять как эти гребёнки делать :lol:
                                Цитата
                                для линейной зависимости просто делим вашу ось частоты 5512 на 40 и получаем 40 диапазонов частот
                                для логарифмической зависимости придётся проделать чуть больше арифметических вычислений

                                я полагал вот тут вы суть уловите :)
                                если я не ошибаюсь то делал это так (поправьте меня если я не прав):
                                сначала работаем в mel шкале - делим участок частот на равные отрезки
                                затем переводим наши отрезки на реальную плоскость частот и получаем пасположение углов треугольника
                                зарисуйте на бумажке - всё должно сойтись примерно с тем что изозражено на графике
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0480 ]   [ 14 queries used ]   [ Generated: 18.07.25, 01:29 GMT ]