На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD, nsh
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> VAD (Voice Activity Detection) , Реализация VAD
    Здравствуйте.
    Узнал про такую вещь как Voice Activity Detection. Кто-нибудь подскажет как её реализовать программно (готовые алгоритмы). Мне нужно реализовать это на C#. При этом мне нужно лишь выделять паузы в аудио файле ссодержащем речь, т.е. никуда потом это передавать это не надо. Т.е. грубо говоря проигрывать речь без пауз.
    Посоветуйте пожалуйста возможно ли такое и если да то насколько это сложно (возможно есть уже какие-нибудь реализации) Заранее спасибо
    Сообщение отредактировано: zip-imp -
      VAD, основанный на статистической модели
      Сообщение отредактировано: antonsrv8 -
        ну по логике
        1.определить уровень фонового шума.
        2.если амплитуда сигнала выше фонового шума - запись буфера
          antonsrv 8 Спасибо за ссылку.
          Цитата

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

          Логика вещь полезная, но при курсовом проектировании необходима теоретическая подоплёка более научного характера. Вот и хотелось бы посмотреть на какие-нибудь обзорные статьи с методами и алгоритмами.
            На сколько я понял методов достаточно много. Но как понять какой из них лучше и приемлемее. Если есть у кого какие мысли по этому поводу - поделитесь.
              Цитата zip-imp @
              На сколько я понял методов достаточно много. Но как понять какой из них лучше и приемлемее. Если есть у кого какие мысли по этому поводу - поделитесь.

              1. Реализовать все методы, проанализировать результаты и выбрать лучший.
              2. Подождать, пока это не проделает кто-нибудь другой.
              3. Поискать результаты ранее проделанных исследований.
                Народ)у кого нибудь есть готовые коды по данной теме?или алгоритмы
                У меня имееться один,к сожалению не могу до конца разобраться с его работой...

                ExpandedWrap disabled
                  %Задача:определение речевой активности
                  %Входные параметры:речевой сигнал,длина сигнала
                  %Выходные параметры:признаки речевой активности
                  %Начальное значение первого кадра сигнала с помощью БПФ квадрат модуля значений
                  %начальной энергии делать, плюс небольшой начальное значение
                  %********************************************************************
                   
                  [file path]=uigetfile('D:\*.wav')
                  S=strcat(path,file);
                  signal= wavread(S);
                  L=128;                                               %длина сигнала(L-мера всех остальных коэфф.),кол-во отчётов в кадре
                  N=floor(length(signal)./L) ;               %общий сигнал кол-во кадров(отсчетов)   ,кол-во кадров
                  input_signal=signal(1:L.*N);
                  %size(input_signal);
                  firstframe = input_signal(1:L);           %первый кадр
                  fftfirstframe = fft(firstframe)             %БПФ первого кадра
                  lambda = ones(L,1).*(abs(fftfirstframe).^2);
                  lambda0 = ones(L,1).*((100./(2.^15)).^2);   %Избегайте молчать, в случае бесконечного с/ш  
                  beta = lambda+lambda0;                             %Отношение сигнал / шум, используемые для расчета энергии фонового шума
                  %=================================
                  %snrbuffer = zeros(10,1);
                  snrthr=8;                                                          %пороговое отношение сигнал шум (snr)-сигнал/шум
                  %snrtempcnt=0;
                  %=================================
                  snr = zeros(N,1);
                  snrtemp=zeros(N,1);
                  proratio = 10;                                                    % ????
                  for i = 1 : N
                      signalframe = input_signal((i-1).*L+1 : i.*L);      %по кадрам ведем анализ
                      framesigfft = fft(signalframe);
                      snr = (1./L).*sum(abs(framesigfft).^2./beta)     %с/ш
                      snrtemp(i) = snr;                                                  %с/ш для i-го кадра
                   
                      if i <= 20                                                              %почему  первые 20????
                          speechactive(i) = 1;                                        %активность речи(первые 20 кадров)=1
                       else
                           if speechactive(i-1)==1
                                if snrtemp(i) > snrthr                                   %проверка с/ш кадра с пороговым
                                    speechactive(i) = 1;
                                else
                                    logi = (snrtemp(i-19 : i-1) > snrthr);        %вектор со значениями с/ш кадра>c/ш порог.
                                    if sum(logi) >= 3
                                        speechactive(i) =1;
                                    else
                                        speechactive(i) =0;
                                    end
                                end
                            else
                                if (snrtemp(i) > snrthr && snrtemp(i-1) > snrthr)
                                    speechactive(i) = 1;
                                else
                                    speechactive(i) = 0;
                                end
                          end
                      end
                      
                       if speechactive(i) == 0
                          lambda =(1./(1+snr.*proratio)).*abs(framesigfft).^2+(snr.*proratio/(1+snr.*proratio)).*lambda;
                          beta = lambda + lambda0;
                    
                          end
                    
                  end
                  figure;
                  plot([1:1:L.*N],input_signal);
                  hold on
                  plot([1:L:L.*N],speechactive.*0.35,'r');


                проблемы с пониманием что делаеться в цикле(начиная с if i<=20 ....)

                это статья по алгоритму
                A VOICE ACTIVITY DETECTOR EMPLOYING SOFT DECISION BASED NOISE
                SPECTRUM ADAPTATION
                Сообщение отредактировано: nsh -
                  Люди пож-та откликнитесь....
                    Для оценки сигнал/шум используются уровень шума предыдущих 20 кадров (строка 41). В начале эта статистика просто накапливается, определения сигнал шум не происходит. Поэтому в начале 20 кадров пропускаются. В течение 20 кадров выставляется наличие сигнала. чтобы оценку в строке 57 не обновлять.
                      спасибо большое!
                      А алглритм обнаружения речи и пауз на основе вычисления кратковременной энергии и среднего числа переходов через ноль,случайно не отображает этот код?
                      (там также используеться определенный интервал в котором вычисляеться порог кратковременной энергии и среднего числа переходов через ноль)

                      непонятна вот эта часть кода
                      if speechactive(i) == 0
                      lambda =(1./(1+snr.*proratio)).*abs(framesigfft).^2+(snr.*proratio/(1+snr.*proratio)).*lambda;
                      beta = lambda + lambda0;

                      end
                        "А алглритм обнаружения речи и пауз на основе вычисления кратковременной энергии и среднего числа переходов через ноль..."
                        это точно не он.sorry,сглупил
                          Цитата
                          непонятна вот эта часть кода
                          if speechactive(i) == 0
                          lambda =(1./(1+snr.*proratio)).*abs(framesigfft).^2+(snr.*proratio/(1+snr.*proratio)).*lambda;
                          beta = lambda + lambda0;


                          Это переоценка порога в соответствии с формулой (14) на третьей странице статьи.
                            Спасибо большое,а есть ли похожие статьи на русском языке?
                              НАРООД!!!!пож-та подскажите!!! что писать в DATADIR файл какого формата должен быть s=load(datadir)?????
                              ExpandedWrap disabled
                                [B][COLOR=red]function [datacropped,speechlength,speechflag] = endpoint1([COLOR=blue]datadir[/COLOR],fs,win,fl,inc);[/COLOR][/B]
                                %
                                % Endpoint Detection Using Short-term Energy and Zero-crossing Rate.
                                % <Inputs>
                                % datadir : Directory of the txt file containing speech signal.
                                % fs : Sampling frequency in Hz (Default 8000).
                                % win : Window type 'R' Rectangular window in time.
                                % 'N' Hannning window in time.
                                % 'H' Hamming window in time.
                                % fl :Frame length (Default 80 samples corresponding to 10 ms).
                                % inc :Increment in num of samples (Default 40).
                                % <Outputs>
                                % datacropped : This returns the cropped speech signal based on endpoint
                                % detection.
                                % speechflag : If any speechflag is set for warning any single one or
                                % combination of the following problems might have occurred.
                                % 1. Split data file may be corrupt if norm(s)<0.1
                                % 2. Infinite loop in raw search algorithm for speech
                                % boundaries if there is no signal detected that has 20 frames or longer
                                % duration.
                                % 3. Speech portion of the signal starting too early
                                % might indicate a possible noise sequence in the beginning due to
                                % bad recording.
                                % All above cases need further investigation after cropping speech to determine if
                                % the cropped data is corrupt.
                                % speechlength : It is the length of the cropped speech signal.
                                %
                                108
                                % <References>
                                % [1] L. R. Rabiner and M. R. Sambur, “An algorithm for determining the endpoints
                                % of isolated utterances,” The Bell System Technical Journal, February 1975.
                                %
                                %------------------------------------------------------------------------------------------------------
                                clc, clear('s');
                                if nargin < 2 fs = 8000; end
                                if nargin < 3 win = 'R'; end % Default Rectangular Window.
                                if nargin < 4 fl = fs/100; end % Default frame length is 80 for 10 ms.
                                if nargin < 5 inc = fl/2; end % Default inc.in overlapping window is 40.
                                if win == 'R'
                                % Default Rectangular Window of length 80 for 10 ms frames.
                                w = rectwin(fl);
                                else if win =='N' w = hann(fl);
                                else if win =='H' w = hamming(fl); end
                                end
                                end
                                [COLOR=red][B]s = load([COLOR=blue]datadir[/COLOR])[/B][/COLOR];
                                sm = s-mean(s); % Takes the mean out of data before processing.
                                speechflag = 0;
                                ....


                              часть кода из статьи SPEECH ENDPOINT DETECTION FROM THE SHORT-TERM ENERGY AND ZERO-CROSSING RATE(стр107)
                              http://www.dtic.mil/cgi-bin/GetTRDoc?Location=U2&doc=GetTRDoc.pdf&AD=ADA445459

                              Добавлено
                              Просто раньше пользовался

                              ExpandedWrap disabled
                                [file path]=uigetfile('D:\*.wav')
                                S=strcat(path,file);
                                signal= wavread(S);

                              а тут встал в тупик

                              M
                              Пожалуйста, используйте тег CODE для оформления кода
                              Сообщение отредактировано: nsh -
                                Артем ну что в итоге нашёл что-нибудь деловое, работающее и поддающееся объяснению??
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0449 ]   [ 15 queries used ]   [ Generated: 21.05.24, 20:08 GMT ]