Этот пример показывает, как осуществить Voice Activity Detector (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 может использоваться для генерации кода C для 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.3132 seconds Time taken to run the MEX-File: 0.071528 seconds Speed-up by a factor of 4.3786 is achieved by creating the MEX-File
Рекомендация ITU-T G.729 - Приложение B: Схема сжатия молчания для G.729, оптимизированная для терминалов, соответствующих рекомендации ITU-T V.70