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

В этом примере показано, как реализовать 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

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

Реализация 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 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