exponenta event banner

G.729 Обнаружение голосовой активности

Этот пример показывает, как осуществить 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

Начальное решение речевой активности принимается на следующем этапе с использованием областей многограничного решения в пространстве четырех разностных измерений. Активное голосовое решение дается как объединение областей решения, а неактивное голосовое решение является его дополняющим логическим решением. Энергетические соображения вместе с соседними решениями прошлых кадров используются для сглаживания решений. Текущие средние значения должны обновляться только при наличии фонового шума, а не при наличии речи. Проверяется адаптивное пороговое значение, и обновление происходит только в том случае, если соблюдается критерий порогового значения.

Внедрение VAD

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);

Создание и использование MEX-файла

Кодер 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