audioFeatureExtractor

Оптимизация аудио редукции данных

Описание

audioFeatureExtractor инкапсулирует несколько экстракторов звуковых функций в упрощенную и модульную реализацию.

Создание

Описание

aFE = audioFeatureExtractor() создает экстрактор звуковых функций со значениями свойств по умолчанию.

пример

aFE = audioFeatureExtractor(Name,Value) задает свойства nondefault для aFE использование одного или нескольких аргументов пары "имя-значение".

Свойства

расширить все

Основные свойства

Окно анализа, заданное как вектор действительных чисел.

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

Длина перекрытия смежных окон анализа, заданная в виде целого числа в области значений [0, numel(Window)).

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

Длина БПФ, заданная в виде целого числа. Значение по умолчанию, [], означает, что длина БПФ равна длине окна, (numel(Window)).

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

Входная частота выборки в Гц, заданная как неотрицательный скаляр.

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

Вход в спектральные дескрипторы, заданный как "linearSpectrum", "melSpectrum", "barkSpectrum", или "erbSpectrum".

Спектральные дескрипторы, затронутые этим свойством:

Вход спектра для спектральных дескрипторов аналогичен выходному параметру из соответствующей функции:

Для примера, если вы задаете "SpectralDescriptorInput" на "barkSpectrum", и "spectralCentroid" на true, затем aFE возвращает центроид спектра Коры по умолчанию.

[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
aFE = audioFeatureExtractor("SampleRate",fs, ...
                            "SpectralDescriptorInput","barkSpectrum", ...
                            "spectralCentroid",true);
barkSpectralCentroid = extract(aFE,audioIn);
Если задано значение nondefault barkSpectrum использование setExtractorParams, тогда nondefault Bark спектр является входом к спектральным дескрипторам. Для примера, если вы звоните setExtractorParams(aFE,"barkSpectrum","NumBands",40), затем aFE возвращает центроид 40-диапазонного спектра Барка.

setExtractorParams(aFE,"barkSpectrum","NumBands",40)
bark40SpectralCentroid = extract(aFE,audioIn);

Типы данных: char | string

Функции для извлечения

Извлеките односторонний линейный спектр, указанный как true или false.

Чтобы задать параметры выделения линейного спектра, используйте setExtractorParams:

setExtractorParams(aFE,"linearSpectrum","Name",Value)
Установимые параметры для выделения линейного спектра:

  • "FrequencyRange" - Частотная область значений извлеченного спектра в Гц, заданный как разделенная разделенными запятой парами, состоящая из "FrequencyRange" и двухэлементный вектор увеличивающихся чисел в области значений [0, SampleRate/2]. Если не задано, FrequencyRange значение по умолчанию [0, SampleRate/2].

  • "SpectrumType" -- Тип спектра, заданный как разделенная разделенными запятой парами, состоящая из "SpectrumType" и "power" или "magnitude". Если не задано, SpectrumType по умолчанию является "power".

  • "WindowNormalization" -- Применить нормализацию окна, заданную как разделенная разделенными запятой парами, состоящая из "WindowNormalization" и true или false. Если не задано, WindowNormalization по умолчанию является true.

Типы данных: logical

Извлеките односторонний mel- спектра, указанный как true или false.

Чтобы задать параметры извлечения спектра mel, используйте setExtractorParams:

setExtractorParams(aFE,"melSpectrum","Name",Value)
Настраиваемые параметры для извлечения спектра mel:

  • "FrequencyRange" - Частотная область значений извлеченного спектра в Гц, заданный как разделенная разделенными запятой парами, состоящая из "FrequencyRange" и двухэлементный вектор увеличивающихся чисел в области значений [0, SampleRate/2]. Если не задано, FrequencyRange значение по умолчанию [0, SampleRate/2].

  • "SpectrumType" -- Тип спектра, заданный как разделенная разделенными запятой парами, состоящая из "SpectrumType" и "power" или "magnitude". Если не задано, SpectrumType по умолчанию является "power".

  • "NumBands" - Количество полос mel, заданное как разделенная запятой пара, состоящее из "NumBands" и целое число. Если не задано, NumBands по умолчанию является 32.

  • "FilterBankNormalization" - Нормализация, применяемая к полосно-пропускающим фильтрам, задается как разделенная разделенными запятой парами, состоящая из "FilterBankNormalization" и "bandwidth", "area", или "none". Если не задано, FilterBankNormalization по умолчанию является "bandwidth".

  • "WindowNormalization" -- Применить нормализацию окна, заданную как разделенная разделенными запятой парами, состоящая из "WindowNormalization" и true или false. Если не задано, WindowNormalization по умолчанию является true.

  • "FilterBankDesignDomain" - Область, в котором разработан банк фильтров, заданный как разделенная разделенными запятой парами, состоящая из FilterBankDesignDomain и любой из них "linear" или "warped". Если не задано, FilterBankDesignDomain по умолчанию является "linear".

Типы данных: logical

Извлеките односторонний спектр Коры, указанный как true или false.

Для установки параметров выделения спектра коры используйте setExtractorParams:

setExtractorParams(aFE,"barkSpectrum","Name",Value)
Для выделения спектра Корка можно установить следующие параметры:

  • "FrequencyRange" - Частотная область значений извлеченного спектра в Гц, заданный как разделенная разделенными запятой парами, состоящая из "FrequencyRange" и двухэлементный вектор увеличивающихся чисел в области значений [0, SampleRate/2]. Если не задано, FrequencyRange значение по умолчанию [0, SampleRate/2].

  • "SpectrumType" -- Тип спектра, заданный как разделенная разделенными запятой парами, состоящая из "SpectrumType" и "power" или "magnitude". Если не задано, SpectrumType по умолчанию является "power".

  • "NumBands" - Количество полос коры, заданное как разделенная разделенными запятой парами, состоящая из "NumBands" и целое число. Если не задано, NumBands по умолчанию является 32.

  • "FilterBankNormalization" - Нормализация, применяемая к полосно-пропускающим фильтрам, задается как разделенная разделенными запятой парами, состоящая из "FilterBankNormalization" и "bandwidth", "area", или "none". Если не задано, FilterBankNormalization по умолчанию является "bandwidth".

  • "WindowNormalization" -- Применить нормализацию окна, заданную как разделенная разделенными запятой парами, состоящая из "WindowNormalization" и true или false. Если не задано, WindowNormalization по умолчанию является true.

  • "FilterBankDesignDomain" - Область, в котором разработан банк фильтров, заданный как разделенная разделенными запятой парами, состоящая из FilterBankDesignDomain и любой из них "linear" или "warped". Если не задано, FilterBankDesignDomain по умолчанию является "linear".

Типы данных: logical

Извлеките односторонний спектр ERB, указанный как true или false.

Чтобы задать параметры извлечения спектра ERB, используйте setExtractorParams:

setExtractorParams(aFE,"erbSpectrum","Name",Value)
Установимые параметры для извлечения спектра ERB:

  • "FrequencyRange" - Частотная область значений извлеченного спектра в Гц, заданный как разделенная разделенными запятой парами, состоящая из "FrequencyRange" и двухэлементный вектор увеличивающихся чисел в области значений [0, SampleRate/2]. Если не задано, FrequencyRange значение по умолчанию [0, SampleRate/2].

  • "SpectrumType" -- Тип спектра, заданный как разделенная разделенными запятой парами, состоящая из "SpectrumType" и "power" или "magnitude". Если не задано, SpectrumType по умолчанию является "power".

  • "NumBands" - Количество полос ERB, заданное как разделенная разделенными запятой парами, состоящая из "NumBands" и целое число. Если не задано, NumBands по умолчанию - ceil (hz2erb(FrequencyRange (2)) -hz2erb(FrequencyRange (1)).

  • "FilterBankNormalization" - Нормализация, применяемая к полосно-пропускающим фильтрам, задается как разделенная разделенными запятой парами, состоящая из "FilterBankNormalization" и "bandwidth", "area", или "none". Если не задано, FilterBankNormalization по умолчанию является "bandwidth".

  • "WindowNormalization" -- Применить нормализацию окна, заданную как разделенная разделенными запятой парами, состоящая из "WindowNormalization" и true или false. Если не задано, WindowNormalization по умолчанию является true.

Типы данных: logical

Извлечение мел-частотных кепстральных коэффициентов (MFCC), заданных как true или false.

Для установки параметров извлечения MFCC используйте setExtractorParams:

setExtractorParams(aFE,"mfcc","Name",Value)
Настраиваемые параметры для извлечения MFCC:

  • "NumCoeffs" - Количество коэффициентов, возвращаемых для каждого окна, заданное как разделенная разделенными запятой парами, состоящая из "NumCoeffs" и положительное целое число. Если не задано, NumCoeffs по умолчанию является 13.

  • "DeltaWindowLength" - Длина окна дельты, заданная как разделенная разделенными запятой парами, состоящая из "DeltaWindowLength" и нечетное целое число, больше 2. Если не задано, DeltaWindowLength по умолчанию является 9. Этот параметр влияет на mfccDelta и mfccDeltaDelta функции.

  • "Rectification" -- Тип нелинейного выпрямления, заданный как разделенная разделенными запятой парами, состоящая из "Rectification" и "log" или "cubic-root".

Мел-частотные кепстральные коэффициенты вычисляются с использованием melSpectrum.

Типы данных: logical

Экстракция дельты MFCC, заданная как true или false.

Дельта MFCC вычисляется на основе извлеченного MFCC. Параметры, установленные на mfcc влияют на mfccDelta.

Типы данных: logical

Экстракция дельта-дельты MFCC, заданная как true или false.

Дельта-дельта MFCC вычисляется на основе извлеченного MFCC. Параметры, установленные на mfcc влияют на mfccDeltaDelta.

Типы данных: logical

Экстракция гамматоновых кепстральных коэффициентов (GTCC), заданная как true или false.

Чтобы задать параметры извлечения GTCC, используйте setExtractorParams:

setExtractorParams(aFE,"gtcc","Name",Value)
Настраиваемые параметры для извлечения GTCC:

  • "NumCoeffs" - Количество коэффициентов, возвращаемых для каждого окна, заданное как разделенная разделенными запятой парами, состоящая из "NumCoeffs" и положительное целое число. Если не задано, NumCoeffs по умолчанию является 13.

  • "DeltaWindowLength" - Длина окна дельты, заданная как разделенная разделенными запятой парами, состоящая из "DeltaWindowLength" и нечетное целое число, больше 2. Если не задано, DeltaWindowLength по умолчанию является 9. Этот параметр влияет на gtccDelta и gtccDeltaDelta функции.

  • "Rectification" -- Тип нелинейного выпрямления, заданный как разделенная разделенными запятой парами, состоящая из "Rectification" и "log" или "cubic-root".

Коэффициенты гамматона цепстрала вычисляются с помощью erbSpectrum.

Типы данных: logical

Экстракция дельты GTCC, заданная как true или false.

Дельта GTCC рассчитывается на основе извлеченного GTCC. Параметры, установленные на gtcc влияют на gtccDelta.

Типы данных: logical

Экстракт дельта-дельта GTCC, указанный как true или false.

GTCC дельта-дельта рассчитывается на основе извлеченного GTCC. Параметры, установленные на gtcc влияют на gtccDeltaDelta.

Типы данных: logical

Извлечение спектрального центроида, заданное как true или false.

Спектральный центроид вычисляется на одном из следующих спектральных представлений, как задано свойством SpectralDescriptorInput:

Типы данных: logical

Извлечение спектрального креста, заданное как true или false.

Спектральный крест вычисляется на одном из следующих спектральных представлений, как задано свойством SpectralDescriptorInput:

Типы данных: logical

Извлечение спектрального уменьшения, заданное как true или false.

Спектральное уменьшение вычисляется на одном из следующих спектральных представлений, как задано свойством SpectralDescriptorInput:

Типы данных: logical

Экстракция спектральной энтропии, заданная как true или false.

Спектральная энтропия вычисляется на одной из следующих спектральных представлений, как задано свойством SpectralDescriptorInput:

Типы данных: logical

Экстракция спектральной плоскостности, заданная как true или false.

Спектральная плоскостность вычисляется на одной из следующих спектральных представлений, как задано свойством SpectralDescriptorInput:

Типы данных: logical

Извлеките спектральный поток, заданный как true или false.

Спектральный поток вычисляется на одном из следующих спектральных представлений, как задано свойством SpectralDescriptorInput:

Чтобы задать параметры спектрального выделения потока, используйте setExtractorParams:

setExtractorParams(aFE,"spectralFlux","Name",Value)
Установимые параметры для спектрального выделения потока:

  • "NormType" - Нормальный тип, используемый для вычисления спектрального потока, заданный как разделенная разделенными запятой парами, состоящая из "NormType" и a 1 или 2. Если не задано, NormType по умолчанию является 2.

Типы данных: logical

Экстракт спектрального куртоза, заданный как true или false.

Спектральный куртоз вычисляется на одной из следующих спектральных представлений, как задано свойством SpectralDescriptorInput:

Типы данных: logical

Извлеките спектральную точку спуска, заданную как true или false.

Спектральная точка поворота вычисляется на одном из следующих спектральных представлений, как задано свойством SpectralDescriptorInput:

Чтобы задать параметры выделения спектральной точки прокатки, используйте setExtractorParams:

setExtractorParams(aFE,"spectralRolloffPoint","Name",Value)
Установимые параметры для спектрального выделения потока:

  • "Threshold" -- Порог точки отклонения, заданное как разделенная разделенными запятой парами, состоящая из "Threshold" и скаляром в области значений (0, 1). Если не задано, Threshold по умолчанию является 0.95.

Типы данных: logical

Извлечение спектрального искривления, заданное как true или false.

Спектральное искривление вычисляется на одном из следующих спектральных представлений, как задано свойством SpectralDescriptorInput:

Типы данных: logical

Извлечение спектрального наклона, заданное как true или false.

Спектральный наклон вычисляется на одном из следующих спектральных представлений, как задано свойством SpectralDescriptorInput:

Типы данных: logical

Извлечение спектрального спреда, заданное как true или false.

Спектральный разброс вычисляется на одной из следующих спектральных представлений, как задано свойством SpectralDescriptorInput:

Типы данных: logical

Извлечение тангажа, заданное как true или false.

Чтобы задать параметры выделения тангажа, используйте setExtractorParams:

setExtractorParams(aFE,"pitch","Name",Value)
Настраиваемые параметры для выделения тангажа:

  • "Method" -- Метод, используемый для вычисления тангажа, заданный как разделенная разделенными запятой парами, состоящая из "Method" и "PEF", "NCF", "CEP", "LHS", или "SRH". Если не задано, Method по умолчанию является "NCF". Для описания доступных методов извлечения тангажа см. pitch.

  • "Range" -- Область значений внутри для поиска тангажа в Гц, заданный как разделенная разделенными запятой парами, состоящая из "Range" и двухэлементный вектор-строка с увеличением значений. Если не задано, Range по умолчанию является [50,400].

  • "MedianFilterLength" - Медианная длина фильтра, используемая для сглаживания оценок тангажа с течением времени, заданная как разделенная разделенными запятой парами, состоящая из "MedianFilterLength" и положительное целое число. Если не задано, MedianFilterLength по умолчанию является 1 (без медианной фильтрации).

Типы данных: logical

Коэффициент извлечения гармоник, заданный как true или false.

Типы данных: logical

Функции объекта

extractИзвлечение аудио функций
setExtractorParamsУстановите значения параметров nondefault для отдельных экстракторов функций
infoВыходное отображение и параметры извлечения отдельных функций
generateMATLABFunctionСоздайте функцию MATLAB, совместимую с генерацией кода C/C + +

Примеры

свернуть все

Считывайте аудиосигнал.

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

Создайте audioFeatureExtractor объект для извлечения MFCC, дельта MFCC, дельта-дельта MFCC, тангажа и спектрального центроида аудиосигнала. Используйте окно анализа 30 мс с перекрытием 20 мс.

aFE = audioFeatureExtractor( ...
    "SampleRate",fs, ...
    "Window",hamming(round(0.03*fs),"periodic"), ...
    "OverlapLength",round(0.02*fs), ...
    "mfcc",true, ...
    "mfccDelta",true, ...
    "mfccDeltaDelta",true, ...
    "pitch",true, ...
    "spectralCentroid",true);

Функции extract для извлечения аудио функций из аудиосигнала.

features = extract(aFE,audioIn);

Использование info определить, какой столбец матрицы редукции данных соответствует запрошенному извлечению тангажа.

idx = info(aFE)
idx = struct with fields:
                mfcc: [1 2 3 4 5 6 7 8 9 10 11 12 13]
           mfccDelta: [14 15 16 17 18 19 20 21 22 23 24 25 26]
      mfccDeltaDelta: [27 28 29 30 31 32 33 34 35 36 37 38 39]
    spectralCentroid: 40
               pitch: 41

Постройте график обнаруженного тангажа с течением времени.

t = linspace(0,size(audioIn,1)/fs,size(features,1));
plot(t,features(:,idx.pitch))
title('Pitch')
xlabel('Time (s)')
ylabel('Frequency (Hz)')

Figure contains an axes. The axes with title Pitch contains an object of type line.

Создайте audio datastore, который указывает на выборки, включенные в Audio Toolbox ®.

folder = fullfile(matlabroot,'toolbox','audio','samples');
ads = audioDatastore(folder);

Найдите все файлы, которые соответствуют частоте дискретизации 44,1 кГц, и затем subset datastore.

keepFile = cellfun(@(x)contains(x,'44p1'),ads.Files);
ads = subset(ads,keepFile);

Преобразуйте данные в tall массив. tall массивы оцениваются только при явном запросе с помощью gather. MATLAB ® автоматически оптимизирует вычисления в очереди, минимизируя количество проходов через данные. Если у вас есть Parallel Computing Toolbox™, можно распределить вычисления по нескольким машинам. Аудио данных представлено как M-by-1 tall массиву ячеек, где M - количество файлов в audio datastore.

adsTall = tall(ads)
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

adsTall =

  M×1 tall cell array

    { 539648×1 double}
    { 227497×1 double}
    {   8000×1 double}
    { 685056×1 double}
    { 882688×2 double}
    {1115760×2 double}
    { 505200×2 double}
    {3195904×2 double}
        :         :
        :         :

Создайте audioFeatureExtractor объект для извлечения спектра mel, спектра Bark, спектра ERB и линейного спектра из каждого аудио файла. Используйте окно анализа по умолчанию и длину перекрытия для извлечения спектра.

aFE = audioFeatureExtractor('SampleRate',44.1e3, ...
    'melSpectrum',true, ...
    'barkSpectrum',true, ...
    'erbSpectrum',true, ...
    'linearSpectrum',true);

Задайте cellfun функция так, чтобы аудио функции были извлечены из каждой камеры длинный массив. Функции gather для вычисления длинный массив.

specsTall = cellfun(@(x)extract(aFE,x),adsTall,"UniformOutput",false);
specs = gather(specsTall);
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 12 sec
Evaluation completed in 12 sec

The specs переменная, возвращенная из сбора, является numFiles-by-1 массивом ячеек, где numFiles - количество файлов в datastore. Каждый элемент массива ячеек является массивом numHops-by-numFeatures-by-numChannels, где количество скачков и количество каналов зависит от длины и количества каналов аудио файла, а количество функций является запрошенным количеством функций от аудио данных.

numFiles = numel(specs)
numFiles = 12
[numHops1,numFeaturesFile1,numChanelsFile1] = size(specs{1})
numHops1 = 1053
numFeaturesFile1 = 620
numChanelsFile1 = 1
[numHops2,numFeaturesFile2,numChanelsFile2] = size(specs{2})
numHops2 = 443
numFeaturesFile2 = 620
numChanelsFile2 = 1

Алгоритмы

The audioFeatureExtractor создает трубопровод редукции данных на основе выбранных функций. Чтобы уменьшить расчеты, audioFeatureExtractor повторно использует промежуточные представления. Некоторые промежуточные представления могут быть выведены как функции:

Для примера, чтобы создать объект, который извлекает центроид спектра Коры, поток спектра Барка, тангаж, гармоническое отношение и дельта-дельта MFCC, задайте audioFeatureExtractor как:

 aFE = audioFeatureExtractor( ...
     "SpectralDescriptorInput","barkSpectrum", ...
     "spectralCentroid",true, ...
     "spectralFlux",true, ...
     "pitch",true, ...
     "harmonicRatio",true, ...
     "mfccDeltaDelta",true)
aFE = 

  audioFeatureExtractor with properties:

   Properties
                     Window: [1024×1 double]
              OverlapLength: 512
                 SampleRate: 44100
                  FFTLength: []
    SpectralDescriptorInput: 'barkSpectrum'

   Enabled Features
     mfccDeltaDelta, spectralCentroid, spectralFlux, pitch, harmonicRatio

   Disabled Features
     linearSpectrum, melSpectrum, barkSpectrum, erbSpectrum, mfcc, mfccDelta
     gtcc, gtccDelta, gtccDeltaDelta, spectralCrest, spectralDecrease, spectralEntropy
     spectralFlatness, spectralKurtosis, spectralRolloffPoint, spectralSkewness, spectralSlope, spectralSpread


   To extract a feature, set the corresponding property to true.
   For example, obj.mfcc = true, adds mfcc to the list of enabled features.
Это строение соответствует подсвеченному трубопроводу редукции данных:

Примечание

Потому что audioFeatureExtractor повторно использует промежуточные представления, функции вывода audioFeatureExtractor может не соответствовать строению функций по умолчанию, выводимой соответствующими отдельными экстракторами функций.

Вопросы совместимости

расширить все

Поведение изменено в R2020b

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

.
Введенный в R2019b