В этом примере показано, как реализовать Речевой детектор действия (VAD) ITU-T G.729
Речевое обнаружение действия (VAD) является критической проблемой во многих речь/аудиоприложения включая речевое кодирование, распознавание речи или речевое улучшение. Например, стандарт ITU-T G.729 использует модули VAD, чтобы уменьшать скорость передачи в периоды тишины речи.
В первой стадии четыре параметрических функции извлечены из входного сигнала. Эти параметры являются энергиями системы координат полной полосы и низкой полосы, набором линейных спектральных частот (LSF) и нуля системы координат пересекающийся уровень. Если номер системы координат меньше 32, этап инициализации долгосрочных средних значений происходит, и речевое решение действия обеспечено к 1, если энергия системы координат от анализа LPC выше 21 дБ. В противном случае речевое решение действия обеспечено к 0. Если номер системы координат равен 32, этап инициализации для характеристических энергий фонового шума происходит.
На следующем этапе вычисляется набор параметров различия. Этот набор сгенерирован как мера по различию между текущими параметрами системы координат и рабочими средними значениями характеристик фонового шума. Вычисляются четыре меры по различию:
a) A spectral distortion
b) An energy difference
c) A low-band energy difference
d) A zero-crossing difference
Начальное речевое решение действия принято на следующем этапе, с помощью мультиграничных областей решения в течение четырех мер по различию. Решение действительного залога дано как объединение областей решения, и решение недействительного залога является своим дополнительным логическим решением. Энергетические факторы, вместе с соседними прошлыми решениями систем координат, используются для сглаживания решения. Рабочие средние значения должны быть обновлены только в присутствии фонового шума, а не в присутствии речи. Тестируется адаптивный порог, и обновление происходит, только если пороговому критерию соответствуют.
vadG729 является функцией, содержащей реализацию алгоритма.
Настройте источник аудиосигналов. Этот пример использует читателя звукового файла.
audioSource = dsp.AudioFileReader('SamplesPerFrame',80,... 'Filename','speech_dft_8kHz.wav',... 'OutputDataType', 'single'); % Note: You can use a microphone as a source instead by using an audio % device reader (NOTE: audioDeviceReader requires an Audio Toolbox % (TM) license) % audioSource = audioDeviceReader('OutputDataType', 'single', ... % 'NumChannels', 1, ... % 'SamplesPerFrame', 80, ... % 'SampleRate', 8000); % Create a time scope to visualize the VAD decision (channel 1) and the % speech data (channel 2) scope = timescope('SampleRate', [8000/80 8000], ... 'TimeSpanSource', 'property', ... 'TimeSpan', 10, ... 'YLimits', [-0.3 1.1], ... 'Title','Decision speech and speech data', ... 'TimeSpanOverrunAction','Scroll');
% Initialize VAD parameters VAD_cst_param = vadInitCstParams; clear vadG729 % Run for 10 seconds numTSteps = 1000; while(numTSteps) % Retrieve 10 ms of speech data from the audio recorder speech = audioSource(); % Call the VAD algorithm decision = vadG729(speech, VAD_cst_param); % Plot speech frame and decision: 1 for speech, 0 for silence scope(decision, speech); numTSteps = numTSteps - 1; end release(scope);
Закройте устройство аудиовхода и высвободите средства
release(audioSource);
MATLAB Coder может использоваться, чтобы сгенерировать код С для функции vadG729. Для того, чтобы сгенерировать файл MEX, выполните следующую команду.
codegen vadG729 -args {single(zeros(80,1)), coder.Constant(VAD_cst_param)}
Code generation successful.
Создание файлов MEX часто помогает достигнуть более быстрого времени выполнения для симуляций. Следующие строки кода сначала измеряют время, потраченное функцией MATLAB, и затем измеряют время для запуска соответствующего файла MEX. Обратите внимание на то, что фактор ускорения может отличаться для различных машин.
audioSource = dsp.AudioFileReader('speech_dft_8kHz.wav', ... 'SamplesPerFrame', 80, ... 'OutputDataType', 'single'); clear vadG729 VAD_cst_param = vadInitCstParams; tic; while ~isDone(audioSource) speech = audioSource(); decision = vadG729(speech, VAD_cst_param); end t1 = toc; reset(audioSource); tic; while ~isDone(audioSource) speech = audioSource(); decision = vadG729_mex(speech, VAD_cst_param); end t2 = toc; disp('RESULTS:') disp(['Time taken to run the MATLAB code: ', num2str(t1), ' seconds']); disp(['Time taken to run the MEX-File: ', num2str(t2), ' seconds']); disp(['Speed-up by a factor of ', num2str(t1/t2),... ' is achieved by creating the MEX-File']);
RESULTS: Time taken to run the MATLAB code: 0.60133 seconds Time taken to run the MEX-File: 0.11459 seconds Speed-up by a factor of 5.2476 is achieved by creating the MEX-File
Рекомендация G.729 ITU-T - Приложение B: схема сжатия тишины для G.729, оптимизированного для терминалов, соответствующих Рекомендации V.70 ITU-T