На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD, nsh
  
> MFCC для дикторонезависимой системы
    Приветствую.
    Разрабатываю дикторонезависимую систему распознавания речи пофонемную. Использую НС Кохонена, на вход подаю MFCC коэффициенты фрейма (около 10-16 мс, точно уже не помню), на небольшом словаре фонем часто срабатывает корректно (60-70%), но бывает прихватывает с собой еще несколько, например, после "О" может "А" вставить, будто затухание идет, и смотрит следующую фонему.
    Стоит ли добавить дельту и дельту дельты, а энергию? Или скорее всего энергия не подойдет - так как у каждого диктора своя.
    Находил формулы дельты
    delta[i]=(c(i+1)-c(i-1))/2. Но при начальном i и конечном, как быть? Если приравнивать, т.е. (c(0)-c(0))/2.. Тогда ноль будет..
      Цитата
      на вход подаю MFCC коэффициенты фрейма


      Обычно подают 20-30 фреймов. Чем больше фреймов тем больше точность распознавания.

      Цитата
      часто срабатывает корректно (60-70%)


      На стандартном тесте TIMIT должно быть 77% по крайней мере

      Цитата
      Стоит ли добавить дельту и дельту дельты, а энергию?


      Если много фреймов давать сразу, то не нужно.

      Цитата
      Или скорее всего энергия не подойдет - так как у каждого диктора своя.


      C0 достаточно вместо энергии. Обязательно CMN нормализацию нужно делать - среднее отнимать.

      Цитата
      Если приравнивать, т.е. (c(0)-c(0))/2.. Тогда ноль будет..


      Ноль это не страшно, обычно так и делают.
        Я использую кольцевой буфер для записи с микрофона. Разбиваю на фреймы, применяю весовую функцию, FFT, нахожу спектр амплитуд |Sn|=sqrt(Re^2+Im^2). Нужно ли логарифмировать спектр амплитуд? В некоторых источниках видел, но их крайне мало (20%). Я так понимаю это для кепстра.. Определяю мел-шкалу, строю 20 треугольных полосных фильтров от 150Гц до 4000Гц, раньше было 300-3400, но решил расширить диапазон, для лучшего распознавания.. Пока сомнительно, хотя иногда помогает. Вычисляю энергию для каждого фильтра Ln(Sum(|Sn|^2*Filter)). Вычисляю DCT, получаю 12 MFCC, не считая 0-го, его исключаю..

        Сразу несколько фреймов? Я думал, что в 1 фрейме есть сама фонема.. Весовые коэффициенты НС задаю отдельно для каждого кластера. Пробовал случайными числами, с последующей корректировкой - такое себе..
        Это при обучении mfcc фрейма подаю, а при работе, там потоково идет, т.е. по фреймам..

        Нужна ли энергия для дикторонезависимой? Много статей видел, где для обработки используют 12 mfcc + энергия, 13 дельт, 13 дельт дельт = 39. Но это скорее всего для распознавания диктора..

        А если использовать для обучения усиление микрофона (+20), в настройках windows, может потом повлиять на результат, да и при использовании?

        Добавлено
        CMN.
        y[n]=x[n]-1/N*(Sum(x[n]). Где сумма n=1..N, где N - количество коэффициентов MFCC? Таким образом y[n]=x[n]-Sum(x[n])/12 ?

        Добавлено
        Хотя видел, что N - количество фреймов на произнесении.. А если 1..
        Сообщение отредактировано: Nkey -
          Обучаю по кластерам так: задаю кластеру определенную фонему. Изначально нулевые веса, произношу фонему, по нажатию на кнопку, в момент ее нажатия, берутся коэффициенты из текущего фрейма. Если веса были до этого нулевые, то записываю нормализованные входные данные, иначе нормализую их и корректирую веса циклом w[j]=w[j]=alpha*(input[i]-w[j]), где alpha - скорость обучения = 0.7,0.6..0.1
            Цитата
            Обычно подают 20-30 фреймов.

            Фонемы могут быть и быстрее же, это для слогов больше подойдет, я думаю
              Если брать энергию C0, то в нормализации ее не использовать, верно? :huh:
                Цитата
                Я думал, что в 1 фрейме есть сама фонема..


                Чем больше контекста, тем точнее определяется звук.

                Цитата
                Если брать энергию C0, то в нормализации ее не использовать, верно? :huh:


                Нет, не верно. Нормализовать нужно.
                  Цитата
                  Чем больше контекста, тем точнее определяется звук.

                  Предположим берем 10 фреймов. На вход подаем, если по 13 параметров на 1 фрейм = 130, или находим те же 13 сразу для всех?

                  Добавлено
                  А так, пока что на небольшом наборе фонем, если пофреймово, помимо нужной фонемы может другая прихватиться вместе с ней на вывод, только если паузу ставить на ввод, после определения фонемы, но это частично только поможет

                  А то, что несколько фреймов, это по времени сжимать, растягивать скорее всего понадобится, например DTW.. но это уже не к НС
                    Как дельту энергии считать, она же одна? :o Если только совместно со всеми коэффициентами..
                      НС у меня неправильно организована, переделаю, лучше может станет..
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0352 ]   [ 15 queries used ]   [ Generated: 19.03.24, 09:23 GMT ]