На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD, nsh
  
> Вычисление мел-кепстра и распознавние DTW , Подробности реализации
    Привет братьям по несчастью =) Перед мной тоже стоит задача сравнить два файла (записаных с микрофона), содержащие одну и ту же фразу. Я делаю так:

    1 Считываю файлы (по 2с) Частота дискретизации = 12КГц
    2 Обрезаю лишнее (шум) остается приблизительно 1/3 сигнала
    3 Делю их на фреймы (кадры) по 20мс с перекрытием в 2/3

    3.1 Беру один фрейм. Применяю к нему "pre-emphasise". Формула:
    v(n) = s(n) - a * s(n - 1),
    где s(n) - исходный сигнал, а - переметр фильтрации (0.9375), v(n) - отфильтрованный сигнал.

    3.2 Умножаю фрейм на окно Хемминга. Формула:
    f(i) = y(i) * w(i),
    y(i) - исходный сигнал, w(i) - оконная функция:
    w(n) = 0.54 - 0.46 * cos(2 * pi * (n - 1) / (N - 1)); (n = 0..N)
    N - кол-во отсчетов оконной функции. Оно равно длине фрейма.

    3.3 Произвожу БПФ(600)
    12КГц / 20мс = 600 отсчетов (300 в одну сторону и 300 симметричных)

    3.4 Далее формирую 300 пар по принципу описаного в этой теме:
    s(k) = y(k) ^ 2 + y((N + 1) - k) ^ 2; (k = 1..300; N = 600)
    Первый с последним, второй с предпоследним и т д

    3.5 Логаифмирую: s_log(k) = log(s(k));

    3.6 Взял 24 частоты.
    FHZ = [20,100,200,300,400,510,630,770,920,1080,1270,1480,1720,2000,2320,2700,3150,3700,4400,5300,6400,7700,9500,12000];
    Перевожу их в МЕЛ-шкалу:
    mel(i) = 1127 * log(1 + FHZ(i) / 700); (i = 1..24)

    3.7 Усредняю (взятое из той же темы)
    ExpandedWrap disabled
      Fs = 12000 / 300;
      for j = 2:23
          kj = round(FHZ(j) / Fs);
          kl = round(FHZ(j - 1) / Fs);
          kr = round(FHZ(j + 1) / Fs);
          l = kj - kl;
          r = kr - kj;
          Aj = 0;
          
          for i = 1:l
              mi = i / l;
              Aj = Aj + s_log(kl + i) * mi;
          end
          for i = 1:r - 1
              mi = i / r;
              Aj = Aj + s_log(kr - i) * mi;
          end
          A(j) = Aj / (l + r - 1);
      end

    3.8 Вычисление кепстральных коеффициентов (КК) через cos-преобразование:
    N - кол-во СПЕКТРальных коеф. = 22 (без двух крайних)
    ExpandedWrap disabled
      for k = 1:12
          c(k) = 0;
          for i = 2:23
              c(k) = c(k) + A(i) * cos(pi * k * (2 * (i - 1) + 1) / 2 / N);
          end
      end

    4 Сравнение с помощью DTW:
    D(x,y) = sqrt(sum( (x[i] - y[i])^2 ) );
    x - входной вектор
    y - эталонный вектор словаря

    ----------------------------
    Подвожу итог: в результате этих всех преобразований мы получим по 12 КК для каждого фрейма. А фреймов у меня (с перекрытием 2/3) в обрезаном сигнале 88. Тоесть получается матрица 12х88. Тоже самое я делаю для другого звукового сигнала. Проделав это все ничего не получается. Например слово "восемь" одинаково похоже на слово "девять", "восемь". Кстати графики получившихся КК визуально пхожи друг на друга формой. Если нужно я могу выложить графический результат любого шага.
    ----------------------------
    * Может я DTW неправильно делаю, или мне нужно взять другой метод сравнивания?
    * Может нужно сперва сделать pre-emphasise и Хемминга для всего сигнала, а потом только брать опять по одному фрейму и делать 3.3...3.8 ?
    * Я так и не понял что делать частотами, переведенными в мел шкалу. Пункт 3.6
    * Кол-во отсчетов БПФ влияет както на распознавание? И правильно ли я подобрал их кол-во?
    * Правильно ли я подсчитал Fs?

    Эта тема была разделена из темы "Нормирование речевого сигнала"
      В целом всё правильно вроде

      Цитата
      3.5 Логаифмирую: s_log(k) = log(s(k));


      Обычно логарифмы берут уже от результатов фильтрации гребенки. В этом случае всего 20 логарифмов нужно посчитать, а не 300.

      Цитата
      где s(n) - исходный сигнал, а - переметр фильтрации (0.9375), v(n) - отфильтрованный сигнал.


      Обычно 0.97 фильтрация

      Цитата
      Может я DTW неправильно делаю, или мне нужно взять другой метод сравнивания?


      DTW подразумевает прямой и обратный проходы, вы их точно делаете? У Вас только формула написана одна.
        Цитата nsh @
        Цитата
        где s(n) - исходный сигнал, а - переметр фильтрации (0.9375), v(n) - отфильтрованный сигнал.

        Обычно 0.97 фильтрация

        Что значит "обычно"? Мне например больше нравится коэффициент 0.5 Это как хорошо или плохо? По идее точность распознования должна меняться с изменением этого коэффициента. nsh, вы много чего читали и читаете, может вы сможете прояснить этот вопрос?
        Сообщение отредактировано: KoPoBuH -
          Цитата
          3.3 Произвожу БПФ(600)
          12КГц / 20мс = 600 отсчетов (300 в одну сторону и 300 симметричных)


          Это как так? Ведь 20мс при частоте 12 000Гц - это 240 отсчётов.
          12 000 - 1000мс
          x - 20мс

          х = 240;
            Цитата

            Что значит "обычно"? Мне например больше нравится коэффициент 0.5 Это как хорошо или плохо? По идее точность распознования должна меняться с изменением этого коэффициента. nsh, вы много чего читали и читаете, может вы сможете прояснить этот вопрос?


            Этот фильтр для предусиления высоких частот используется, собственно и коэффициент фильта подобран, чтобы нужные частоты предусиливались. Я так понимаю, там 6dB на 3kHz как раз получается. Никогда не смотрел точно. Ещё недавно читал, что такое предусиление не особо нужно, потому что его эффект затем нормализацией CMN убирается.

            Для меня полезность такого фильтра только в том, что он DC убирает, поэтому его перед простым VAD считающим энергию ставить можно.
              Цитата
              Обычно логарифмы берут уже от результатов фильтрации гребенки. В этом случае всего 20 логарифмов нужно посчитать, а не 300.

              Сделал, теперь логарифмирую после усреднения.

              Цитата
              Обычно 0.97 фильтрация

              Я нашол на форуме ссылку на сайт, там лежат исходники. Судя по коду их писали здоровые дядьки. Я решил полностью им доверится. Так вот у них этот коэффициент равен 0.9375

              Цитата
              DTW подразумевает прямой и обратный проходы, вы их точно делаете? У Вас только формула написана одна.

              А насчет DTW - видимо я гдето недочитал, буду разбираться.

              Парочка вопросов:
              * Кол-во отсчетов БПФ влияет на точность распознавания?
              * Вы так и не ответили зачем нужен перевод в МЕЛ-шкалу (пункт 3.6)?
              Можетбыть далее при усреднении (пункт 3.7) вместо массива FHZ = [20,100,200...7700,9500,12000] нужно использовать массив МЕЛ-частот m[]?
              ExpandedWrap disabled
                ...
                for j = 2:23
                    kj = round(FHZ(j) / Fs);
                    kl = round(FHZ(j - 1) / Fs);
                    kr = round(FHZ(j + 1) / Fs);
                    l = kj - kl;
                    r = kr - kj;
                ...
                Цитата
                3.4 Далее формирую 300 пар по принципу описаного в этой теме:
                s(k) = y(k) ^ 2 + y((N + 1) - k) ^ 2; (k = 1..300; N = 600)
                Первый с последним, второй с предпоследним и т д


                Поясните, зачем первый с последним, второй с предпоследним.
                Может быть просто
                Цитата
                s[k}=a[k]*a[k]+b[k]*b[k]; (для всех k)
                (из поста Анатоля ) исходя их ссылки в вашем пункте 3.4
                Как я понимаю просто находим модуль комплексного числа которым является результат FFT z = x+iy z*z = x*x+y*y
                  Цитата nsh @
                  Этот фильтр для предусиления высоких частот используется, собственно и коэффициент фильта подобран, чтобы нужные частоты предусиливались.

                  У любого цифрового фильтра коэффициенты могут быть любые. Это зависят в первую очередь от того, какую частотную характеристику вы хотите получить на выходе. Если вы собираетесь использовать этот же фильтр (т.е. ту же самую АЧХ) с другой тактовой частотой, коэффициенты необходимо пересчитывать. "Обычно 0.97" это глупость.

                  Этот фильтр полностью убирает DC только при коэффициенте 1.0. При всех прочих DC остается. Цель использования этого фильтра - скорректировать АЧХ речи, которая в среднем имеет характеристику -6дБ/окт. Гораздо лучше с этим справляется оыбчный ФВЧ первого порядка, у которого характеристика +6дБ/окт и на выходе ни при каких уловиях не может быть DC
                  Сообщение отредактировано: KoPoBuH -
                    mjpronin, вы хотите сказать, что a[k] - истенная часть, а b[k] - мнимая? И мне нужно вместо того, как я делал раньше:
                    ExpandedWrap disabled
                      a[1]*a[1] + b[300]*b[300]
                      a[2]*a[2] + b[299]*b[299]
                      ...
                      a[148]*a[148] + b[151]*b[151]
                      a[149]*a[149] + b[150]*b[150]

                    где a[k], b[k] - один и тотже массив

                    сделать вот так:
                    ExpandedWrap disabled
                      a[1]*a[1] + b[1]*b[1]
                      a[2]*a[2] + b[2]*b[2]
                      ...
                      a[149]*a[149] + b[149]*b[149]
                      a[150]*a[150] + b[150]*b[150]

                    где a[k] - истенная часть, а b[k] - мнимая. (k =1..150). Тогда выходит вторую часть спектра мы вобще не трогаем. Я правильно понимаю?

                    Если чесно, то я незнаю как правельнее, пусть нам подскажут эксперты =)
                      Цитата -unGod
                      Если чесно, то я незнаю как правельнее, пусть нам подскажут эксперты =)


                      В разных процедур вычисления БПФ выходные даные могут размещатся в различном порядке.
                      Обычно в таком: а0,б0,а1,б1,а2,б2...
                      Но могут и иначе.
                      Если Ви не знаете что выдает на выходе ваша процедура БПФ, то эксперементируйте. Подайте на вход известный сигнал (синус определённой частоты) и смотрите, что на выходе.
                        Цитата
                        Если вы собираетесь использовать этот же фильтр (т.е. ту же самую АЧХ) с другой тактовой частотой, коэффициенты необходимо пересчитывать. "Обычно 0.97" это глупость.


                        Да, тут я был неправ.

                        Цитата
                        Гораздо лучше с этим справляется оыбчный ФВЧ первого порядка, у которого характеристика +6дБ/окт и на выходе ни при каких уловиях не может быть DC


                        Согласен.

                        Цитата
                        Вы так и не ответили зачем нужен перевод в МЕЛ-шкалу (пункт 3.6)?


                        Мел шкала использовалась, чтобы получить параметры гребёнки фильтров

                        FHZ = [ 20,100,200,300,400,510,630,770,920,1080,1270,1480,1720,2000,2320,2700,3150,3700,4400,5300...

                        У Вас они уже заданы в табличном виде, а можно было их вычислить по вышеприведённой формуле.
                          KoPoBuH
                          Цитата
                          Гораздо лучше с этим справляется оыбчный ФВЧ первого порядка, у которого характеристика +6дБ/окт и на выходе ни при каких уловиях не может быть DC

                          А не могли ли Вы чуть подробней пояснить, какой вид имеет обычный ФВЧ первого порядка, у которого.....?


                          Просто я если и использовал фильтры в своих работах, то обычно использовал полосовые 4 порядка или ФНЧ(ФВЧ) 2 порядка с передаточной функцией апроксимированной полиномами чебышева второго рода, генерацию коэфициентов производил в Matlab, благо там это просто. Хотя всегда подозревал, что можно попробовать что-то другое :)
                            Цитата KoPoBuH @
                            Если вы собираетесь использовать этот же фильтр (т.е. ту же самую АЧХ) с другой тактовой частотой, коэффициенты необходимо пересчитывать. "Обычно 0.97" это глупость.


                            1. АЧХ этих фильтров сколько-нибудь заметно отличаются только на самых низких частотах:
                            для 8кГц на 100 герцах отличие около 1 дБ
                            для 20кГц на 100 герцах-~4 дБ, на 200 герцах - ~2дБ.

                            дальше - меньше.

                            2. Пересчитывать надо, если собираетесь использовать одни и те же модели на всех частотах квантования, чего никто не делает.
                            И вообще, пересчитывать - это слишком громко сказано. Можно минуты за 3 подобрать коэффициент, который обеспечит совпадение АЧХ на нижних частотах для любых частот квантования.

                            3.Самое главное:
                            Цитата nsh @
                            такое предусиление не особо нужно, потому что его эффект затем нормализацией CMN убирается.

                            И правильно, тем более, что абсолютная величина признаков при вероятностном подходе роли не играет - PDF будет такой же.

                            Так что 0.97 - это традиция из времён ДП, которая ничего не стоит и лишь выравнивает спектр для более удобного обозрения.
                            Кстати, эта операция, проведённая в частотной области, меньше шумит. Так что можно преобразовывать прямо
                            спектр и забыть про мягкое дифференцирование.

                            Цитата -unGod- @
                            зачем нужен перевод в МЕЛ-шкалу (пункт 3.6)?
                            - опять для понижения размерности - подробный спектр на высоких частотах не содержит различительных признаков и не воспринимается слухом. См. работы по речевосприятию.
                            Сообщение отредактировано: nsh -
                              И вообще, пересчитывать - это слишком громко сказано. Можно минуты за 3 подобрать коэффициент, который обеспечит совпадение АЧХ на нижних частотах для любых частот квантования

                              Чистой воды схоластика - мы не будем расчитывать, мы будет подбирать

                              Так что 0.97 - это традиция из времён ДП, которая ничего не стоит и лишь выравнивает спектр для более удобного обозрения.
                              Кстати, эта операция, проведённая в частотной области, меньше шумит. Так что можно преобразовывать прямо
                              спектр и забыть про мягкое дифференцирование.


                              Традиция переросшая в религию

                              Кстати, эта операция, проведённая в частотной области, меньше шумит

                              Интересно знать откуда берутся дополнительные шумы при линейной операции.

                              iitta, я не понимаю ваш странный способ опровергать, пересказывая своими словами то, что вы опровергаете
                              Сообщение отредактировано: KoPoBuH -
                                Перевод в МЕЛ-шкалу, я задействовал нужным образом.

                                А тот пункт 3.4 (из первого поста). Я просто взял из 300 отсчетов ровно половину и повозносил их в квадрат. Поскольку взять отдельно истенную и мнимую часть неполучилось =(

                                Наборы КЕПСТРальных коэффициентов у меня получились похожие на глаз. А вот алгоритм DTW их не сильно "одобряет". Напимер, слова "один", "три", "четыре", "семь", "восемь", "девять" - распознает с вероятностью в диапазоне 35%..60%, а вот слово "пять" путает с "семь". У "шесть" и "три" процент очень мал.

                                Из всего вышепроделанного я понял, что для хорошего распознавания команды нужно правильно ее отделить от шума. Ведь при обрезании возможен такой случай когда шум обрежится некоректно и в результате мы можем получить команду с небольшим хвостиком шума сзади, например. Эта ошибка может сильно повлиять на распознавание. Так как при распознавании эталона - хвостика небыло.

                                И еще один момент. Я много где читал, что люди доводили распознавание аж до 97%. А у меня ели ели 60% и незнаю как улучшить =(

                                Будьте любезны, напишите свои мнения по этому поводу
                                  Внес небольшие изменения в алгоритм:
                                  Массив частот FHZ раньше был до 12000, а теперь до 150 (поскольку 150 отсчетов в БПФ/2). Кол-во элеметов сделал 20. Частоты в Герцах.

                                  FHZ = [7,15,22,30,37,45,52,60,67,75,82,90,97,105,112,120,127,135,142,150];

                                  Результат:
                                  Значительное улучшение распознавания приблизительно на 20..30%. У меня теперь слово "семь" распознает на 90% =) Также хорошо распознаются длинные команды: "наушники", "микрофон"
                                    Цитата mjpronin @
                                    А не могли ли Вы чуть подробней пояснить, какой вид имеет обычный ФВЧ первого порядка, у которого.....?

                                    читать здесь
                                      Цитата KoPoBuH @
                                      Интересно знать откуда берутся дополнительные шумы при линейной операции.

                                      Похоже опять вы не в теме.Нам еще на 3 курсе говорили, что умножение спектра на АЧХ часто более помехоустойчиво, чем фильтрация во временной области
                                        Это замечательно, что вы в курсе данного вопроса. Вот и обьясните откуда в данном случае могут возникать дополнительные шумы, если корректировать АЧХ во временной области
                                        Сообщение отредактировано: KoPoBuH -
                                          Цитата KoPoBuH @
                                          Цитата mjpronin @
                                          А не могли ли Вы чуть подробней пояснить, какой вид имеет обычный ФВЧ первого порядка, у которого.....?

                                          читать здесь


                                          Я имел ввиду, какую передаточную функцию (формулу,выражение) в контексте цифровой обработки данных, а не схемотехники.
                                            Цитата mjpronin @
                                            Я имел ввиду, какую передаточную функцию (формулу,выражение) в контексте цифровой обработки данных, а не схемотехники.

                                            Yt = A*(Xt - Xt-1) - B*Yt-1

                                            A = y/(1+y)
                                            B = (1-y)/(1+y)
                                            y = cos(w)/sin(w)
                                            w = PI*f/fc
                                              Цитата KoPoBuH @
                                              Вот и обьясните откуда в данном случае могут возникать дополнительные шумы, если корректировать АЧХ во временной области

                                              Дополнительных шумов никто и не обещал, а вот уменьшение шума наблюдается за счёт участия всех компонент окна анализа в получении спектра. Хотя судя по вашим предыдущим заявлениям, объяснить вам ничего невозможно

                                              Добавлено
                                              Цитата KoPoBuH @
                                              Yt = A*(Xt - Xt-1) - B*Yt-1

                                              A = y/(1+y)
                                              B = (1-y)/(1+y)
                                              y = cos(w)/sin(w)
                                              w = PI*f/fc




                                              А это уже напоминает высокомерное издевательство над неопытным человеком.

                                              АЧХ КИХ фильтра с одним нулем (y[i] = x[i] - a*x[i-1]):

                                              SQRT(1 + a*a - 2*a*cos(2*PI*f/F)), где F-частота квантования.

                                              Зачем было присобачивать полюс и делать фильтр рекурсивным надо бы объяснить.

                                              А для фильтра с полюсом АЧХ:

                                              SQRT((1 + a*a - 2*a*cos(2*PI*f/F))/(1 + b*b + 2*b*cos(2*PI*f/F))),
                                              а к половинному аргументу привести косинус поручить младшему брату.
                                              Сообщение отредактировано: antonsrv8 -
                                                antonsrv8, То что написал Коровин - понятно.
                                                А то, что Вы написали - непонятно. Какой-то корень, висящий в воздухе.
                                                  Цитата Анатоль @
                                                  antonsrv8, То что написал Коровин - понятно.
                                                  А то, что Вы написали - непонятно. Какой-то корень, висящий в воздухе.


                                                  корень из всего, что внутри (скобки вроде правильно поставил)

                                                  Ну, если
                                                  Цитата Анатоль @
                                                  То что написал Коровин - понятно.

                                                  скажите, зачем А умножать на Xt-Xt-1 - это полное дифференцирование с коэффициентом усиления А.
                                                  Исходя из формул, А и В зависят от частоты - это тоже объясните.

                                                  Понятно, что для фильтра
                                                  Yt = Xt - A*Xt-1 - B*Yt-1
                                                  наклон АЧХ можно эффективно регулировать дополнительным полюсом.
                                                  Непонятно только зачем это наворачивать, если и простой фильтр Yt = Xt - A*Xt-1 не особо нужен
                                                    Цитата antonsrv8,
                                                    корень из всего, что внутри

                                                    И что с этим корнем делать?

                                                    Из сообщения Коровина ясно как вычислять У зная Х и предыдуший У.
                                                    (У него есть формулы для А и В)

                                                    У Вас же для вчисления у нужен коэфициент а.
                                                    А как его найти - не понятно.
                                                    Он входит в какой-то корень. Ну и что?
                                                    Как его можно вычислить, если корень ни к чему не приравнен, а просто висит себе в воздухе?
                                                      Цитата antonsrv8 @
                                                      Дополнительных шумов никто и не обещал, а вот уменьшение шума наблюдается за счёт участия всех компонент окна анализа в получении спектра. Хотя судя по вашим предыдущим заявлениям, объяснить вам ничего невозможно

                                                      Т.е. тем самым вы утверждаете, что если я хочу уменьшить шум в сигнале, то мне достаточно перевести сигнал из временного представления в спектральное и обратно. Звучит очень революционно. У меня только один вопрос - сколько раз я должен проделать эти преобразования, чтобы уменьшить шум на 10дБ?

                                                      antonsrv8, мне почему-то кажется что прична несколько в другом. При линейной обработке сигнала шумам просто неоткуда взяться. На то она и линейная обработка. Все шумы появляются от нелинейности. В случае цифровой фильтрации источником шума является усечение результата из-за ограничений на разрядность аккумулятора и элементов задержки фильтра. Если говорим об устойчивости фильтра, то нужно сюда добавить разрядность коэффициентов. Фильтры бывают КИХ и БИХ. БИХ фильтры наиболее чувствительны к величине разрядности, но это совершенно пустая фраза, потому как устойчивость фильтра зависит как от его архитектуры так и от его параметров. Т.е. устойчивость понятие частное. При одной и той же архитектуре, при одной и той же разрядности БИХ фильтр может быть устойчивым, малошумящим, а может и нет. Это зависит от характера фильтра. В частности насколько шумит БИХ фильтр зависит от его частоты среза. КИХ фильтры этим не грешат. В данном конкретном случае мы имеем КИХ фильтр, поэтому совет iitta, что коррекция АЧХ в спектральной области якобы меньше шумит, чем во временной, совершенно не поделу и по сути является еще одной религиозной догмой от науки. Даже если предположить, что результат после дифференциатора усекается до 16 бит, мы имеем шум на выходе на уровне половины младшего разряда. Если при этом учесть, что динамический диапазон реального речевого сигнала в самом лучшем случае составляет порядка 50дБ (что нужно еще постараться получить), что есть в свою очередь 8 старших разрядов из 16, то получается шум КИХ фильтра лежит на уровне порядка -50дБ от уровня шумов речевого сигнала. Так с чем же идет пресловутая борьба? Все это было актуально в прошлом веке. Сегодня вычисления с плавающей точкой быстрее по сравнению с целочисленными и поэтому проблем с ограниченной разрядностью порождающей шумы по сути не существует

                                                      Цитата antonsrv8 @
                                                      Непонятно только зачем это наворачивать, если и простой фильтр Yt = Xt - A*Xt-1 не особо нужен

                                                      Что значит не особо нужен? Кто-то делает CMN, кто-то нет, в любом случае не будет лишним, а речь шла о постоянной составляющей, которая полностью не убирается этим мягким дифференцированием из-за требований к корректирующей АЧХ
                                                      Сообщение отредактировано: KoPoBuH -
                                                        Цитата Анатоль @
                                                        И что с этим корнем делать?

                                                        Вы что, модуль комплексного числа никогда не вычисляли - извлекать его, если хотите амплитудную характеристику.
                                                        Коэффициент 'а' находится из ваших же требований к АЧХ.
                                                        Цитата Анатоль @
                                                        Из сообщения Коровина ясно как вычислять У зная Х и предыдуший У.
                                                        (У него есть формулы для А и В)

                                                        Прошу все таки объяснить - А и В зависят от f? вы сами-то понимаете, что там написано?

                                                        Цитата KoPoBuH @
                                                        Звучит очень революционно. У меня только один вопрос - сколько раз я должен проделать эти преобразования, чтобы уменьшить шум на 10дБ?

                                                        Какая там революционность - студентам преподают. что же мне - слушать вашу ахинею про разрядности и забыть чему учили? Один раз уже послушал - оказалось полная чушь
                                                          Цитата antonsrv8,
                                                          А это уже напоминает высокомерное издевательство над неопытным человеком


                                                          Я о чём?
                                                          Вот я неопытный человек.
                                                          Я знаю, что фильтр должен что-то пропускать, а что-то задерживать (ослаблять).
                                                          И чем Ваш пост помог мне? Чем он не "высокомерное издевательство"?
                                                          Тем что Вы говорите про какие-то полюса, нули...?

                                                          Если уж Вы критикуете кого-то за "высокомерное издевательство над неопытным человеком", то хотелось бы ожидать от Вас снисхождения к объекту Вашей заботы и понятного объяснения.
                                                            Цитата Анатоль @
                                                            И чем Ваш пост помог мне? Чем он не "высокомерное издевательство"?

                                                            я дал формулы АЧХ как функции частоты f. Постройте и увидите, что это фильтр, усиливающий высокие.Если А=1, то это просто 2*sin(PI*f/F), 0<f<F/2.

                                                            А теперь постройте АЧХ по этим формулам:

                                                            Цитата KoPoBuH @

                                                            Yt = A*(Xt - Xt-1) - B*Yt-1

                                                            A = y/(1+y)
                                                            B = (1-y)/(1+y)
                                                            y = cos(w)/sin(w)
                                                            w = PI*f/fc


                                                            ваще не понятно - А и В - это коэффициенты фильтра или функции частоты?
                                                            Когда же объясните - я уже 3 раза прошу.

                                                            Если бы А и В были константы, то всё понятно, только А бестолково усиливает, надо:

                                                            Yt = Xt - А*Xt-1 - B*Yt-1

                                                            Про полюса, раз не знаете:

                                                            Z преобразование от этого фильтра будет:

                                                            Y = X - AX/Z - BY/Z,

                                                            отсюда АЧХ в Z представлении:

                                                            H(z) = Y/X = (1-A/z)/(1+B/z), то есть фильтр имеет ноль в z=A и полюс в z=-B. Оба действительные.
                                                            Если А около 1, то будут давиться низкие частоты, около -1 - высокие (понятно, фильтр Yt = Xt + Xt-1 зануляет частоты около Найквиста).
                                                            Если В стремится к 1, то будет пик на частоте Найквиста (без нуля фильтр будет
                                                            Yt = Xt - Yt-1 - неустойчивый фильтр, усиливающий высокие)

                                                            Ну, выложил все как на духу. Может теперь все таки объясните мне, что вы поняли в формулах Коровина - он не снисходит. Может iitta выскажется - он тоже заваривал эту кашу, в том числе про фильтрацию в частотной области
                                                              Любой цифровой фильтр имеет вид Yt = A0Xt + A1Xt-1 + ... + B1Yt-1 + B2Yt-2 + ...
                                                              Aj и Bj некие костанты, вычисляются один раз исходя из требований частоты среза фильтра
                                                              f - частота среза, fc - тактовая частота
                                                              Сообщение отредактировано: KoPoBuH -
                                                                Цитата -unGod- @
                                                                Внес небольшие изменения в алгоритм:
                                                                Массив частот FHZ раньше был до 12000, а теперь до 150 (поскольку 150 отсчетов в БПФ/2). Кол-во элеметов сделал 20. Частоты в Герцах.

                                                                FHZ = [7,15,22,30,37,45,52,60,67,75,82,90,97,105,112,120,127,135,142,150];

                                                                Результат:
                                                                Значительное улучшение распознавания приблизительно на 20..30%. У меня теперь слово "семь" распознает на 90% =) Также хорошо распознаются длинные команды: "наушники", "микрофон"


                                                                Кто-нибудь может пояснить, я если честно не понял, это как так?
                                                                Товарищь вот берёт массив FHZ = [7,15,22,30,37,45,52,60,67,75,82,90,97,105,112,120,127,135,142,150]; и усредняет по нему, но что это за массив частот, что это такое вообще?
                                                                Ведь как я понял усредняют по массиву частот вплоть до частоты в половину частоты дискретизации, ведь надо усреднять по массиву частот, который corresponds to the first 24 critical bands of hearing?
                                                                Разве можно усреднять по другому массиву, а не по 20, 100, 200, 300, 400, 510, 630, 770, 920, 1080, 1270, 1480, 1720, 2000, 2320, 2700, 3150, 3700, 4400, 5300, 6400, 7700, 9500, 12000, 15500.

                                                                Подскажите, пожалуйста?
                                                                Или можно усреднять по любому массиву, в котором элементы изменяются по логорифму??? :wall: :crazy:
                                                                  Цитата mjpronin,
                                                                  Или можно усреднять по любому массиву, в котором элементы изменяются по логорифму???


                                                                  Вот именно. Причём и "усреднять" можно по разному.
                                                                  Например можно взять максимальное значение в каждой критической полосе.
                                                                  Сообщение отредактировано: Анатоль -
                                                                    Поддерживаю Анатолия. Я проводил эксперимент. Брал звук делал БПФ патом выше указанные полосы- просто усреднял, усреднял по треугольной функции , брал просто максимумы , далее делал обратное преобразование и слушал какой вариант лучше. Мене показалось, что брать просто максимумы лучше, разборчивость речи была выше .
                                                                      Цитата

                                                                      Fs = 12000 / 300;
                                                                      for j = 2:23
                                                                      kj = round(FHZ(j) / Fs);
                                                                      kl = round(FHZ(j - 1) / Fs);
                                                                      kr = round(FHZ(j + 1) / Fs);
                                                                      l = kj - kl;
                                                                      r = kr - kj;
                                                                      Aj = 0;

                                                                      for i = 1:l
                                                                      mi = i / l;
                                                                      Aj = Aj + s_log(kl + i) * mi;
                                                                      end
                                                                      for i = 1:r - 1
                                                                      mi = i / r;
                                                                      Aj = Aj + s_log(kr - i) * mi;
                                                                      end
                                                                      A(j) = Aj / (l + r - 1);
                                                                      end


                                                                      Что значит
                                                                      Цитата
                                                                      взять максимальное значение в каждой критической полосе
                                                                      ?, т.е для каждого FHZ(j) складывать только наибольшее Aj.
                                                                      Или Вы имеете в виду усреднять по массиву FHZ[] в котором брать элементы не граничные частоты (т.е. 100-200-300-400-510-630), а центральные (т.е. 50-150-250-350-450-570)


                                                                      Вот например при частоте дискретизации 22050 и при FFT-256точек (полученных из 512 точек сигнала) я использую реализацию предложенную Анатолем в предыдущих постах и темах т.е. то что в начале моего сообщения

                                                                      Цитата

                                                                      Fs = 11025 / 256;
                                                                      FHZ[22] = {20, 100, 200, 300, 400,
                                                                      510, 630, 770, 920, 1080,
                                                                      1270, 1480, 1720, 2000, 2320,
                                                                      2700, 3150, 3700, 4400, 5300,6400,7700,9500}; //вплоть до 12000(не включая т.к. 11050 < 12000)



                                                                      Так каким образом мне улучшить качество распознования? Другой FHZ взять или Aj только максимальные складывать.
                                                                        Цитата
                                                                        Подскажите, пожалуйста?
                                                                        Или можно усреднять по любому массиву, в котором элементы изменяются по логорифму???

                                                                        Обьясняю:
                                                                        1) Берете общее кол-во отсчетов спектра. У меня это 300, но я взял 150, так как вторая половина симетрична.
                                                                        2) Выбераете для себя кол-во СПЕКТРальных коефициентов (можете брать 20, как у меня).
                                                                        3) Далее диапазон 150 разбиваете на 20 частей, тоесть 150/20=7.5. Чтобы небало дробной части я сделал так:

                                                                        ExpandedWrap disabled
                                                                          FHZ = [7,15,22,30,37,45,52,60,67,75,82,90,97,105,112,120,127,135,142,150];

                                                                        4) Это частоты в Герцах. Я их перевел в "МЕЛы". По принципу:

                                                                        ExpandedWrap disabled
                                                                          for i = 1:SPECT_KOEF_COL
                                                                              mel(i) = 1127 * log(1 + FHZ(i) / 700);
                                                                          end

                                                                        5) В результате получил массив mel, который потом использовал сдесь:

                                                                        ExpandedWrap disabled
                                                                          Fs = max(mel) / (N / 2);
                                                                           
                                                                          for j = 2:SPECT_KOEF_COL - 1
                                                                              kj = round(mel(j) / Fs);
                                                                              kl = round(mel(j - 1) / Fs);
                                                                              kr = round(mel(j + 1) / Fs);
                                                                              l = kj - kl;
                                                                              r = kr - kj;
                                                                              Aj = 0;
                                                                           
                                                                              for i = 1:l
                                                                                  mi = i / l;
                                                                                  Aj = Aj + s(kl + i) * mi;
                                                                              end
                                                                              for i = 1:r - 1
                                                                                  mi = i / r;
                                                                                  Aj = Aj + s(kr - i) * mi;
                                                                              end
                                                                              A(j) = Aj / (l + r - 1);
                                                                          end

                                                                        SPECT_KOEF_COL - кол-во СПЕКТРальных коеф.
                                                                        N - кол-во отсчетов в фурье (в данном случае = 300)
                                                                        Эта часть кода нужна для усреднения. Подробнее рассказать немогу так как сам неочень прошарен.

                                                                        6) После усреднения нужно сделать логарифм.
                                                                        7) И множете на COS-преобразование.
                                                                          Цитата antonsrv8 @
                                                                          Может iitta выскажется - он тоже заваривал эту кашу, в том числе про фильтрацию в частотной области

                                                                          Нет уж, разбирайтесь сами. У человека корень висит в воздухе, а вы ему про нули и полюса. После фразы
                                                                          Цитата Анатоль @
                                                                          И чем Ваш пост помог мне? Чем он не "высокомерное издевательство"?
                                                                          Тем что Вы говорите про какие-то полюса, нули...?

                                                                          могли бы догадаться, что здесь не до Z-преобразования. Вы бы ещё про интегрирование по вычетам рассказали. Человек считает, что что-то понял, ну и оставьте его в покое.
                                                                          Про фильтр (Yt = A*(Xt - Xt-1) - B*Yt-1) всё понятно, естественно, в вашей интерпретации. Коэффициент А не нужен. Делаем замену X'=AX и возвращаемя к нашим баранам. Полюс может позволить приблизить АЧХ к непрерывному случаю – линейный рост с частотой (на ограниченном участке) вместо sin(PI*f/F), который обеспечивает 6дб на октаву только с точностью первого члена разложения Тейлора (sin(PI*f/F)~PI*f/F), то есть на низких частотах. Все эти красоты довольно бесполезны и с вычитанием среднего кепстра вообще теряют смысл, учитывая, что согласно кривой равной громкости значение гармоник выше 4 кГц падает, простой фильтр Yt = Xt - АXt-1 может оказаться лучше даже для алгоритмов, в которых амплитуда гармоник имеет значение.
                                                                          Про фильтрацию в частотной области - я вообще не понимаю, о чём здесь спорить. Я прочитал об этом несколько лет назад в не помню какой статье (и даже не использовал – по статье выигрыш в несильных шумах невелик), вам рассказали на лекции. Это не предмет для спора – вам что, хотят доказать, что вы этого не слышали? В любом случае сведениям из приличной статьи я доверяю, а за мнение Коровина гроша ломаного не дам. Вы же не будете тратить время на то, чтобы проводить эксперименты или искать статью, чтобы что-то ему доказать? (Правильно – бесполезно). А без аргументов всё превращается в обычный бессмысленный спор: «я прав» - «нет я», дополненный высосанными из пальца глупостями, вроде особой простоты русского языка для распознавания.
                                                                          Займитесь лучше якобианами и VTLN-ами, не втягивайтесь в мелочные споры по пустякам – вы же подняли интересный вопрос. Мне очень понравилась та статья, на которую я ссылался: Sankaran Panchapagesan, Abeer Alwan, «Frequency Warping for VTLN and Speaker Adaptation by Linear Transformation of Standard MFCC», 2008. Преобразование MFCC коэффициентов сделано корректно, объяснены нелинейности и допущения + много ссылок. Мне кажется, что для русского языка метод VTLN должен быть особенно эффективен из-за рекордного разброса формант мужских и женских голосов.
                                                                            -unGod-

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


                                                                            Может быть кто-нибудь подскажет, а в чем физический смысл усреднения (например) до частоты 150Hz, если (например) FFT отражает сигнал вплоть до 11025Hz.(при частоте дискр. 22050Hz)?


                                                                            Цитата Анатоль @
                                                                            Вот именно. Причём и "усреднять" можно по разному.
                                                                            Например можно взять максимальное значение в каждой критической полосе.


                                                                            Вы имеете ввиду для каждой полосы взять только наибольшее Aj?
                                                                              mjpronin, усреднение идет не до частоты 150 Гц, а до 150 отсчёта в преобразовании Фурье.
                                                                              Этот отсчёт соответсвует частоте 11 кГц в теории, то есть максимальной для данной частоты
                                                                              дискретизации. На практике у -unGod- может быть все не так радужно.
                                                                                Цитата mjpronin,
                                                                                Вы имеете ввиду для каждой полосы взять только наибольшее Aj?


                                                                                Я не следил, что такое у Вас Aj.
                                                                                Пусть у Вас есть 128 (например) значений спектра (после БПФ).
                                                                                Вы разбиваете весь частотный диапазон на 20 (например) критических полос.
                                                                                В каждой полосе будет несколько значений спектра (чем шире полоса - тем больше). Из них берёте максимальное.
                                                                                  Цитата Анатоль @
                                                                                  Я не следил, что такое у Вас Aj.
                                                                                  Пусть у Вас есть 128 (например) значений спектра (после БПФ).
                                                                                  Вы разбиваете весь частотный диапазон на 20 (например) критических полос.
                                                                                  В каждой полосе будет несколько значений спектра (чем шире полоса - тем больше). Из них берёте максимальное.


                                                                                  1.Беру максимольное после применения триугольного фильтра, или в этом случаи можно обойтись вообще без применения триугольного фильтра.
                                                                                  2. Обязательно ли разбивать на критические полосы, которые имеют строгое соответствие шкале Барк 20, 100, 200, 300, 400, 510.....
                                                                                  или можно отойти от этих граничных (рекомендованных) значений.
                                                                                    Цитата mjpronin,
                                                                                    или в этом случаи можно обойтись вообще без применения триугольного фильтра.

                                                                                    Именно.
                                                                                    Цитата mjpronin,
                                                                                    Обязательно ли разбивать на критические полосы, которые имеют строгое соответствие шкале Барк 20, 100, 200, 300, 400, 510.....
                                                                                    или можно отойти от этих граничных (рекомендованных) значений

                                                                                    На критические полосы нужно разбивать.
                                                                                    Критические полосы характеризуются не границами, а шириной.
                                                                                    Границы и количество критических полос, которые надо брать ... здесь возможен нек. произвол.
                                                                                    Но желательно, чтоб они перекрывали телефоннй диапазон (300-3000гц.)
                                                                                    А лучше 150-5500гц.
                                                                                      Цитата -unGod- @
                                                                                      2 Обрезаю лишнее (шум) остается приблизительно 1/3 сигнала
                                                                                      3 Делю их на фреймы (кадры) по 20мс с перекрытием в 2/3

                                                                                      4 Сравнение с помощью DTW:
                                                                                      D(x,y) = sqrt(sum( (x[i] - y[i])^2 ) );
                                                                                      x - входной вектор
                                                                                      y - эталонный вектор словаря


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

                                                                                      и по 4 дальше в теме было написано что DTW неполностью реализован, как вы его изменили?
                                                                                      Сообщение отредактировано: Father -
                                                                                        Father, метод DTW я взял из Википедии, там хорошо расписано и код прилагается. То что я писал в самом первом посте про DTW - шопопало.
                                                                                        В конечном итоге сравнение я меня происходит следующим образом:
                                                                                        1 Получив матрицу Nх12 (N - кол-во фреймов). Получается для каждого фрейма по 12 КЕПСТРальных коефициентов.
                                                                                        2 Беру эту матрицу и сравниваю с эталонными (заранее сохраненными в файле например).
                                                                                        3 Сравнение посходит построчно. 1й с 1м, 2й со 2м, 3й с 3м и т д. Этот шаг какраз и делает та функция с Википедии.

                                                                                        Например у нас есть входящий неизвестный фрейм (строчку матрицы) и 10 эталонных. Задача найти более подходящий. Другими словами, при сравнении с которым DTW вернет минимальное число.

                                                                                        4 Анализирую все N типов, и тот который встретился наиболее чаще и будет ответом.

                                                                                        В итоге конечно никогда неполучится так что массивы будут всегда одного размера. У себя я ставил проверки. Если вдруг неизвесная команда больше эталонной, уменьшал вероятность. Незнаю как это обьяснить. Вобщем чем больше команда превосходила эталон по длине - тем меньше она на него была похожа.
                                                                                        Сообщение отредактировано: -unGod- -
                                                                                          Народ, подскажите.

                                                                                          Обратил внимание на следкющую особенность, если так можно сказать.

                                                                                          Вродебы при усреднении как по шкале барк так и по шкале мел исходят из одних и тех же соображений, но почему получается так, что:

                                                                                          1. При усреднении по барк ширина полос усредения в зависимости от частоты становится шире
                                                                                          2. При усреднении по мел наоборот - т.е. с увеличением частоты ширина полос уменьшается.


                                                                                          Так какому ходу мысли надо следовать, ведь методы приводят к диаметрально противоположным выводам.

                                                                                          Я так понимаю, с увеличением частоты чувствительность падает, можно усреднять грубее - по более широкой полосе, тогда из каких рассуждении результаты шкалы мел.
                                                                                            Цитата mjpronin,
                                                                                            2. При усреднении по мел наоборот - т.е. с увеличением частоты ширина полос уменьшается.


                                                                                            Увеличивается.
                                                                                              Кто-нибудь обьясните пожалуйста для чего выполняется логарифмирование и зачем нужны кепстральные коэффициенты??почему нельзя также посчитать расстояние между спектральными???
                                                                                                Человек воспринимает громкость сигнала не пропорционально энергии, а пропорционально её логарифму.
                                                                                                Кепстральных коэфициентов меньше чем спектральных, они независымы и стойки к изменению амплитуды сигнала.
                                                                                                  Спасибо.
                                                                                                    Подскажите,каким образом принимается решение о том что слово распознано,какие условия должны выполняться.И ещё пишут что,там 80 %,там 90 % распознования,что имеется ввиду??(10 раз сказал слово ->9 раз выполнились условия=90%? или например 10 раз сказал слово ->10 раз разница = 0.1 при максимальной разнице (например=1) =90%?? дайте ссылку на подробное описание алгоритма, а то я что то пока плаваю.
                                                                                                      KarpovDeniska
                                                                                                      ссылка
                                                                                                      по последней ссылке - алгоритм кросс-кореляции.
                                                                                                        Цитата -unGod- @
                                                                                                        2 Обрезаю лишнее (шум) остается приблизительно 1/3 сигнала

                                                                                                        Как ты обрезаешь лишнее(шум)?

                                                                                                        Добавлено
                                                                                                        Цитата -unGod- @
                                                                                                        3.2 Умножаю фрейм на окно Хемминга. Формула:
                                                                                                        f(i) = y(i) * w(i),
                                                                                                        y(i) - исходный сигнал, w(i) - оконная функция:
                                                                                                        w(n) = 0.54 - 0.46 * cos(2 * pi * (n - 1) / (N - 1)); (n = 0..N)
                                                                                                        N - кол-во отсчетов оконной функции. Оно равно длине фрейма.

                                                                                                        -unGod-, Длина фрейма берется в байтах? т.е. в данном случае по 480 байт?
                                                                                                        Сообщение отредактировано: BashOrgRu -
                                                                                                          Цитата
                                                                                                          Как ты обрезаешь лишнее(шум)?

                                                                                                          Звуковой файл (2 сек) с записанной командой содержит 2/3 тишины, ее я и обрезаю. Как это происходит:
                                                                                                          - подсчет мощности шума первого фрейма (будет использоватся как базовый)
                                                                                                          - подсчет мощности каждого след. фрейма, и откидывание его, до тех пор, пока мощность не станет как минимум раз в 20 выше, чем в базовом (это и будет началом команды)
                                                                                                          аналогично и для конца

                                                                                                          Цитата
                                                                                                          Длина фрейма берется в байтах? т.е. в данном случае по 480 байт?

                                                                                                          Длина фрейма берется в отсчетах. Оконная функция должна быть такойже длинны как и фрейм. У меня длинна фрейма была 240 отсчетов.
                                                                                                            -unGod- Вы не могли бы подсказать, как у Вас реализована порезка сигнала на фреймы? А то уже ищу, ищу, и понять не могу, как же это закодить. Хоть в общих чертах, что применяете.
                                                                                                              Цитата KarpovDeniska @
                                                                                                              Подскажите,каким образом принимается решение о том что слово распознано,какие условия должны выполняться.И ещё пишут что,там 80 %,там 90 % распознования,что имеется ввиду??(10 раз сказал слово ->9 раз выполнились условия=90%? или например 10 раз сказал слово ->10 раз разница = 0.1 при максимальной разнице (например=1) =90%?? дайте ссылку на подробное описание алгоритма, а то я что то пока плаваю.

                                                                                                              Приветствую всех!!! Меня интересует, тот же вопрос, что и в цитате, но указанная ссылка которую дал уважаемый MedEx, не робит. У кого есть, по данному вопросу инфа дайти плиз ссылку или может, кто обьеснит? Может уважаемый MedEx, даст еще ссылку рабочую? Заранее всем спасибо!!!! :)
                                                                                                                Если речь от DTW то первая ссылка в google

                                                                                                                https://en.wikipedia.org/wiki/Dynamic_time_warping

                                                                                                                Критерий задаёте вы сами
                                                                                                                Сообщение отредактировано: zamir -
                                                                                                                  Я не пойму, как считается процент распознаваемого слова. Например, мы сказали слово один, нашли коэффециенты линейного предсказания или мел коэффициенты, сравнили с акустическими моделями построенные с помощью GMM, разных слов с помощью мин. дистанции Манахонолобиса или других подобных,если апроксимировали тремя гауссианоми, то в указанные переменные у нас сохраняются вероятностные значения совпадений дискриптора( коэффициентов линейного предсказания) слова(один) с имеющимися акустическими моделями, по максимальному значению принимается решение о произнесенном слове, если 80-90 процентов, то это слово значит принадлежит этой акустической модели, а эта акустическая модель слова (один). Я не пойму, что делать с значениями которые мы получили после вероятностного сравнения с акустическими моделями, если апроксимировали тремя гауссианами, то полученные значения разделяются на три гауссиана и получаем результаты совпаденией в каждый гауссиан, т.е в трех гауссианов, а если апроксимировали 2 гауссианами, то получаем результаты совпадений для 2 гауссианов. Чтобы получит общее число необходимо сложить, что ли все полученные значения совподений в разных гауссианов. Например в первом гауссиане мы получили 0,2, во втором 0,1, в третьем 0,6. То в результате мы получим вероятность 0,9 или не правильно? И как считают процент совподения? Например указывают, что слово один распознано с 90%, а слово два с 60%, это значит что ли, что слво один имеет вероятносное совпадение с акустической моделью равной 0,9, а слово два 0,6 и просто умножаем на 100% и получим процент распознавания 90% и 60%. Правильно ли, я понял? Примеры с опраксимацией 2 и тремя Гауссианами в приложении. :oops:
                                                                                                                  Прикреплённый файлПрикреплённый файл2_Гауссиана.png (49,8 Кбайт, скачиваний: 441)
                                                                                                                  Прикреплённый файлПрикреплённый файл3Гауссиана.png (51,04 Кбайт, скачиваний: 395)
                                                                                                                    сравниваете с разными моделями максимально охватывающие рапознаваниемые данные
                                                                                                                    где наибольшее совпадение с моделью - той модели и принадлежит распознаваемый кусок данных

                                                                                                                    если у вас есть несколько критериев сравнения - то согласно теории вероятности вы перемножате между собой все критерии перед сравнением

                                                                                                                    p.s. что бы критерий вероятности 0.0000089062 представить ввиде например 78% вам необходима точка отчёта которую вы можете получить обработав статистику распознавания вашими моделями
                                                                                                                    Сообщение отредактировано: zamir -
                                                                                                                      Блин че, я туповат, уже месяца четыре пытаюсь найти ответ на этот вопрос и не могу. Метод критерия сравнения у меня один, это понятно, что если максимальное значение по мойму может принять 1(по теории вероятности) то это слово пренадлижит этой вероятности. Я не пойму, как считается процент достоверности распозноваемого слова, например после сравнения у меня получилось значение 0,86, что это означает, какой процент достоверно распознан?
                                                                                                                      С Уважением.М!
                                                                                                                        если:
                                                                                                                        Цитата
                                                                                                                        максимальное значение вероятности - 1,0

                                                                                                                        и
                                                                                                                        Цитата
                                                                                                                        после сравнения у меня получилось значение вероятности - 0,86

                                                                                                                        то получается речь идёт о схожести 86% =)

                                                                                                                        Цитата
                                                                                                                        не пойму, как считается процент распознаваемого слова

                                                                                                                        я на самом деле не особо разбирался гаусянами, возможно такой вариант вам подойдёт:
                                                                                                                        если у вас есть несколько моделей/классов - получается сумма верояностей этих классов 100%
                                                                                                                        например для 5-ти классов
                                                                                                                        получаеся N*(p1+p2+p3+p4+p5)=1.0, где N - некий коэфициент нормализации который можно посчитать 1.0/sum(P)
                                                                                                                        теперь что бы привести вероятность P к нормальному виду можно уможить её на N
                                                                                                                          Цитата zamir @
                                                                                                                          если:
                                                                                                                          Цитата
                                                                                                                          максимальное значение вероятности - 1,0

                                                                                                                          и
                                                                                                                          Цитата
                                                                                                                          после сравнения у меня получилось значение вероятности - 0,86

                                                                                                                          то получается речь идёт о схожести 86% =)

                                                                                                                          Цитата
                                                                                                                          не пойму, как считается процент распознаваемого слова

                                                                                                                          я на самом деле не особо разбирался гаусянами, возможно такой вариант вам подойдёт:
                                                                                                                          если у вас есть несколько моделей/классов - получается сумма верояностей этих классов 100%
                                                                                                                          например для 5-ти классов
                                                                                                                          получаеся N*(p1+p2+p3+p4+p5)=1.0, где N - некий коэфициент нормализации который можно посчитать 1.0/sum(P)
                                                                                                                          теперь что бы привести вероятность P к нормальному виду можно уможить её на N

                                                                                                                          БОЛЬШОЕ СПАСИБО zamir! Я так и догадывался, что все так считают, но в литературе сколько искал, так и нечего не находил. Максимально, что находил, это пример в Матлабе, какие функции используют для сравнения и все.
                                                                                                                          У меня еще куча вопросов, что бы разьяснить кашу в моей голове. Я не пойму, есть у меня например акустические модели произнесенных цифр 1,2,4,6, как создается файл (так называемый словарь) с этими акустичечкими моделями? :wall:
                                                                                                                          С Уважение.М!
                                                                                                                            Пожалуйста =)

                                                                                                                            Цитата
                                                                                                                            есть у меня например акустические модели произнесенных цифр 1,2,4,6, как создается файл (так называемый словарь) с этими акустичечкими моделями?


                                                                                                                            формат файла с моделями может быть любой. главное что бы информации было достаточно для восстановления модели.
                                                                                                                            зачастую в готовых библиотеках есть функции сохранения моделей и восстановления моделей.
                                                                                                                            по matlab у меня нет того опыта, который позволил бы ответить на ваш вопрос.
                                                                                                                              Я думал,что мы построили например акустическую модель GMM и сохраняем в какойто общий фаил все модели. А тут, информация для востановления, про это я не че не слышал, может есть литература где про это поподробней можно прочесть? :huh:
                                                                                                                              С Уважением.М!
                                                                                                                                Приветствую всех! Что, не кто не поделится литературой?
                                                                                                                                с Уважением.М!
                                                                                                                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                                                                                                                0 пользователей:


                                                                                                                                Рейтинг@Mail.ru
                                                                                                                                [ Script execution time: 0,3607 ]   [ 16 queries used ]   [ Generated: 20.05.24, 00:27 GMT ]