Речевое обнаружение действия G.729

В этом примере показано, как реализовать Речевой детектор действия (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 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