Этот пример показывает, как реализовать Речевой детектор действия (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 = dsp.TimeScope(2, 'SampleRate', [8000/80 8000], ... 'BufferLength', 80000, ... 'YLimits', [-0.3 1.1], ... 'ShowGrid', true, ... '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)}
Создание файлов 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.32013 seconds Time taken to run the MEX-File: 0.080115 seconds Speed-up by a factor of 3.9958 is achieved by creating the MEX-File
Рекомендация G.729 ITU-T - Приложение B: схема сжатия тишины для G.729, оптимизированного для терминалов, соответствующих Рекомендации V.70 ITU-T