detectSpeech

Обнаружьте контуры речи в звуковом сигнале

Описание

пример

idx = detectSpeech(audioIn,fs) возвращает индексы audioIn это соответствует контурам речевых сигналов.

пример

idx = detectSpeech(audioIn,fs,Name,Value) задает опции с помощью одного или нескольких Name,Value парные аргументы.

Пример: detectSpeech(audioIn,fs,'Window',hann(512,'periodic'),'OverlapLength',256) обнаруживает речь с помощью периодического окна Hann с 512 точками с перекрытием с 256 точками.

пример

[idx,thresholds] = detectSpeech(___) также возвращается, пороги использовались для расчета контуров речи.

пример

detectSpeech(___) без выходных аргументов отображает график обнаруженных речевых областей во входном сигнале.

Примеры

свернуть все

Читайте в звуковом сигнале. Отсеките звуковой сигнал к 20 секундам.

[audioIn,fs] = audioread('Rainbow-16-8-mono-114secs.wav');
audioIn = audioIn(1:20*fs);

Вызовите detectSpeech. Не задайте выходные аргументы, чтобы отобразить график обнаруженных речевых областей.

detectSpeech(audioIn,fs);

Figure contains an axes. The axes with title Detected Speech contains 37 objects of type line, constantline, patch.

detectSpeech функционируйте использует алгоритм пороговой обработки на основе энергии и спектрального распространения на аналитическую систему координат. Можно изменить Window, OverlapLength, и MergeDistance подстраивать алгоритм для ваших определенных потребностей.

windowDuration = 0.074; % seconds
numWindowSamples = вокруг (windowDuration*fs);
победите = hamming (numWindowSamples,'periodic');

percentOverlap = 35;
перекройтесь = раунд (numWindowSamples*percentOverlap/100);

mergeDuration = 0.44;
mergeDist = вокруг (mergeDuration*fs);

detectSpeech (audioIn, фс,"Window", победите,"OverlapLength", перекройтесь,"MergeDistance", mergeDist)

Figure contains an axes. The axes with title Detected Speech contains 19 objects of type line, constantline, patch.

Читайте в звуковом файле, содержащем речь. Разделите звуковой сигнал в первую половину и вторую половину.

[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
firstHalf = audioIn(1:floor(numel(audioIn)/2));
secondHalf = audioIn(numel(firstHalf):end);

Вызовите detectSpeech на первой половине звукового сигнала. Задайте два выходных аргумента, чтобы возвратить индексы, соответствующие областям обнаруженной речи и порогам, используемым для решения.

[speechIndices,thresholds] = detectSpeech(firstHalf,fs);

Вызовите detectSpeech на второй половине без выходных аргументов, чтобы построить области обнаруженной речи. Задайте пороги, определенные от предыдущего вызова до detectSpeech.

detectSpeech(secondHalf,fs,'Thresholds',thresholds)

Работа с большими наборами данных

Многократное использование речевых порогов обнаружения обеспечивает значительный вычислительный КПД, когда вы работаете с большими наборами данных, или когда вы развертываете глубокое обучение или конвейер машинного обучения для вывода в реальном времени. Загрузите и извлеките набор данных [1].

url = 'https://storage.googleapis.com/download.tensorflow.org/data/speech_commands_v0.01.tar.gz';

downloadFolder = tempdir;
datasetFolder = fullfile(downloadFolder,'google_speech');

if ~exist(datasetFolder,'dir')
    disp('Downloading data set (1.9 GB) ...')
    untar(url,datasetFolder)
end

Создайте аудио datastore, чтобы указать на записи. Используйте имена папок в качестве меток.

ads = audioDatastore(datasetFolder,'IncludeSubfolders',true,'LabelSource','foldernames');

Уменьшайте набор данных на 95% в целях этого примера.

ads = splitEachLabel(ads,0.05,'Exclude','_background_noise');

Создайте два хранилища данных: один для обучения и один для тестирования.

[adsTrain,adsTest] = splitEachLabel(ads,0.8);

Вычислите средние пороги по обучающему набору данных.

thresholds = zeros(numel(adsTrain.Files),2);
for ii = 1:numel(adsTrain.Files)
    [audioIn,adsInfo] = read(adsTrain);
    [~,thresholds(ii,:)] = detectSpeech(audioIn,adsInfo.SampleRate);
end
thresholdAverage = mean(thresholds,1);

Используйте предварительно вычисленные пороги, чтобы обнаружить речевые области на файлах от набора тестовых данных. Постройте обнаруженную область для трех файлов.

[audioIn,adsInfo] = read(adsTest);
detectSpeech(audioIn,adsInfo.SampleRate,'Thresholds',thresholdAverage);

[audioIn,adsInfo] = read(adsTest);
detectSpeech(audioIn,adsInfo.SampleRate,'Thresholds',thresholdAverage);

[audioIn,adsInfo] = read(adsTest);
detectSpeech(audioIn,adsInfo.SampleRate,'Thresholds',thresholdAverage);

Ссылки

[1] Начальник, Пит. "Речевые команды: общедоступный набор данных для распознавания речи отдельного слова". Распределенный TensorFlow. Приписывание Creative Commons 4.0 лицензии.

Читайте в звуковом файле и слушайте его. Постройте spectrogram.

[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');

sound(audioIn,fs)

spectrogram(audioIn,hann(1024,'periodic'),512,1024,fs,'yaxis')

Figure contains an axes. The axes contains an object of type image.

Для приложений машинного обучения вы часто хотите извлечь функции из звукового сигнала. Вызовите spectralEntropy функция на звуковом сигнале, затем постройте histogram отобразить распределение спектральной энтропии.

entropy = spectralEntropy(audioIn,fs);

numBins = 40;
histogram(entropy,numBins,'Normalization','probability')
title('Spectral Entropy of Audio Signal')

Figure contains an axes. The axes with title Spectral Entropy of Audio Signal contains an object of type histogram.

В зависимости от вашего приложения вы можете хотеть извлечь спектральную энтропию только из областей речи. Получившиеся статистические данные являются более характеристическими для динамика и менее характеристическими для канала. Вызовите detectSpeech на звуковом сигнале и затем создают новый сигнал, который содержит только области обнаруженной речи.

speechIndices = detectSpeech(audioIn,fs);
speechSignal = [];
for ii = 1:size(speechIndices,1)
    speechSignal = [speechSignal;audioIn(speechIndices(ii,1):speechIndices(ii,2))];
end

Слушайте речь, сигнализируют и строят спектрограмму.

sound(speechSignal,fs)

spectrogram(speechSignal,hann(1024,'periodic'),512,1024,fs,'yaxis')

Figure contains an axes. The axes contains an object of type image.

Вызовите spectralEntropy функция на речевом сигнале и затем строит histogram отобразить распределение спектральной энтропии.

entropy = spectralEntropy(speechSignal,fs);

histogram(entropy,numBins,'Normalization','probability')
title('Spectral Entropy of Speech Signal')

Figure contains an axes. The axes with title Spectral Entropy of Speech Signal contains an object of type histogram.

Входные параметры

свернуть все

Аудиовход в виде вектор-столбца.

Типы данных: single | double

Частота дискретизации в Гц в виде скаляра.

Типы данных: single | double

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: detectSpeech(audioIn,fs,'MergeDistance',100)

Окно, примененное во временном интервале в виде разделенной запятой пары, состоящей из 'Window'и вектор действительных чисел. Число элементов в векторе должно быть в области значений [2, размер (audioIn,1)]. Число элементов в векторе должно также быть больше OverlapLength.

Типы данных: single | double

Количество выборок, перекрывающихся между смежными окнами в виде разделенной запятой пары, состоящей из 'OverlapLength'и целое число в области значений [0, размер (Window,1)).

Типы данных: single | double

Количество выборок, по которым можно объединить положительные речевые решения обнаружения в виде разделенной запятой пары, состоящей из 'MergeDistance'и неотрицательный скаляр.

Примечание

Разрешение для речевого обнаружения дано длиной транзитного участка, где длина транзитного участка равна numel (Window) − OverlapLength.

Типы данных: single | double

Пороги для решения в виде разделенной запятой пары, состоящей из 'Thresholds'и двухэлементный вектор.

  • Если вы не задаете Thresholds, detectSpeech функция выводит пороги при помощи гистограмм функций, вычисленных по текущему входному кадру.

  • Если вы задаете Thresholds, detectSpeech функционируйте пропускает деривацию новых порогов решения. Многократное использование речевых порогов решения обеспечивает значительный вычислительный КПД, когда вы работаете с большими наборами данных, или когда вы развертываете глубокое обучение или конвейер машинного обучения для вывода в реальном времени.

Типы данных: single | double

Выходные аргументы

свернуть все

Индексы начала и конца речевых областей, возвращенных как N-by-2 матрица. N соответствует количеству отдельных речевых обнаруженных областей. Первый столбец соответствует, чтобы запустить индексы речевых областей, и второй столбец соответствует индексам конца речевых областей.

Типы данных: single | double

Пороги используются для решения, возвращенного как двухэлементный вектор. Пороги находятся в порядке [Energy Threshold, Spectral Spread Threshold].

Типы данных: single | double

Алгоритмы

detectSpeech алгоритм основан [1], несмотря на то, что изменено так, чтобы статистические данные к порогу были краткосрочной энергией и спектральным распространением вместо краткосрочной энергии и спектральным центроидом. Схема и шаги предоставляют общий обзор алгоритма. Для получения дополнительной информации см. [1].

Sequence of stages in algorithm.

  1. Звуковой сигнал преобразован в представление частоты времени с помощью заданного Window и OverlapLength.

  2. Краткосрочная энергия и спектральное распространение вычисляются для каждой системы координат. Спектральное распространение вычисляется согласно spectralSpread.

  3. Гистограммы создаются и для краткосрочной энергии и для спектральных распределений распространения.

  4. Для каждой гистограммы порог определяется согласно T=W×M1+M2W+1, где M 1 и M 2 является первыми и вторыми локальными максимумами, соответственно. W установлен в 5.

  5. И спектральное распространение и краткосрочная энергия сглаживаются через время путем прохождения через последовательные движущиеся средние фильтры с пятью элементами.

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

  7. Маски объединены. Для системы координат, которая будет объявлена как речь, и краткосрочная энергия и спектральное распространение должны быть выше их соответствующих порогов.

  8. Области, объявленные как речь, объединены, если расстояние между ними меньше MergeDistance.

Ссылки

[1] Джиэннэкопулос, Теодорос. "Метод для удаления тишины и сегментации речевых сигналов, реализованных в MATLAB", (Университет Афин, Афин, 2009).

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2020a