В этом примере показано, как реализовать ITU-T G.729 детектор речевой активности (VAD)
Обнаружение речевой активности (VAD) является критической проблемой во многих речевых/аудио приложениях, включая кодирование речи, распознавание речи или улучшение речи. Например, стандарт G.729 ITU-T использует модули 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.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
Рекомендация G.729 МСЭ-Т - Приложение B: Схема сжатия тишины для G.729 оптимизированной для терминалов, соответствующих Рекомендации МСЭ-Т V.70