cepstralFeatureExtractor

Извлеките функции cepstral от аудио сегмента

Описание

Система cepstralFeatureExtractor object™ извлекает функции cepstral от аудио сегмента. Функции Cepstral обычно используются, чтобы охарактеризовать музыкальные сигналы и речь.

Извлекать функции cepstral:

  1. Создайте объект cepstralFeatureExtractor и установите его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

cepFeatures = cepstralFeatureExtractor
cepFeatures = cepstralFeatureExtractor(Name,Value)

Описание

пример

cepFeatures = cepstralFeatureExtractor создает Системный объект, cepFeatures, который вычисляет функции cepstral независимо через каждый входной канал. Столбцы входа обработаны, когда человек образовывает канал.

пример

cepFeatures = cepstralFeatureExtractor(Name,Value) наборы каждое свойство Name к заданному Value. Незаданные свойства имеют значения по умолчанию.

Пример: cepFeatures = cepstralFeatureExtractor('InputDomain','Frequency','SampleRate',fs,'LogEnergy','Replace') принимает сигнал в частотном диапазоне, выбранном на уровне Гц fs. Первый элемент содействующего вектора заменяется логарифмической энергетической ценностью.

Свойства

развернуть все

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и функция release разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

Тип набора фильтров, заданного или как 'Mel' или как 'Gammatone'. Когда FilterBank установлен в Mel, объект вычисляет частоту mel cepstral коэффициенты (MFCC). Когда FilterBank установлен в Gammatone, объект вычисляет gammatone cepstral коэффициенты (GTCC).

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

Область входного сигнала, заданного или как 'Time' или как 'Frequency'.

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

Количество коэффициентов, чтобы возвратиться, заданный как целое число в области значений [2, v], где v является количеством допустимых полос пропускания. Количество допустимых полос пропускания зависит от типа набора фильтров:

  • Mel – Количество допустимых полос пропускания задано как sum(BandEdges <= floor(SampleRate/2))-2.

  • Gammatone – Количество допустимых полос пропускания задано как ceil(hz2erb(FrequencyRange(2))-hz2erb(FrequencyRange(1))).

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

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

Зависимости

Чтобы включить это свойство, установите InputDomain на 'Time'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Задайте, как логарифмическую энергию показывают в содействующем векторе вывод, заданный как:

  • добавление Объект предварительно ожидает логарифмическую энергию к содействующему вектору. Длина содействующего вектора равняется 1 + NumCoeffs.

  • замена Объект заменяет первый коэффициент на логарифмическую энергию сигнала. Длиной содействующего вектора является NumCoeffs.

  • 'Ignore' – Объект не вычисляет или возвращает логарифмическую энергию.

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

Введите частоту дискретизации в Гц, заданном как действительная положительная скалярная величина.

Настраиваемый: да

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

Расширенные свойства

Ребра полосы набора фильтров в Гц, заданном как неотрицательный монотонно увеличивающийся вектор - строка в области значений [0, ∞). Максимум bandedge частота может быть любым конечным числом. Количество bandedges должно быть в области значений [4, 80].

Ребра полосы по умолчанию расположены с интервалами линейно для первых десяти и затем логарифмически после. Ребра полосы по умолчанию установлены, как рекомендуется [1].

Зависимости

Чтобы включить это свойство, установите FilterBank на Mel.

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

Частотный диапазон набора фильтров в Гц, заданном как положительное, монотонно увеличивающийся двухэлементный вектор - строка. Максимальная частота может быть любым конечным числом. Центральные частоты набора фильтров равномерно распределены между hz2erb(FrequencyRange(1)) и hz2erb(FrequencyRange(2)) в шкале ERB.

Зависимости

Чтобы включить это свойство, установите FilterBank на Gammatone.

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

Область для проекта набора фильтров, заданного или как 'Hz' или как 'Bin'. Набор фильтров разработан как перекрытые треугольники с ребрами полосы, заданными свойством BandEdges.

Свойство BandEdges задано в Гц. Когда вы устанавливаете область проекта на:

  • 'Hz' – Треугольники набора фильтров чертятся в Гц и сопоставлены на интервалы.

    Вот пример, который строит набор фильтров в интервалах, когда FilterBankDesignDomain установлен в 'Hz':

    [audioFile, fs] = audioread('NoisySpeech-16-22p5-mono-5secs.wav');
    duration = round(0.02*fs); % 20 ms audio segment
    audioSegment = audioFile(5500:5500+duration-1);
    cepFeatures = cepstralFeatureExtractor('SampleRate',fs)
    cepFeatures = 
     cepstralFeatureExtractor with properties:
    
       Properties
                    InputDomain: 'Time'
                      NumCoeffs: 13
                      FFTLength: []
                      LogEnergy: 'Append'
                     SampleRate: 22500
    
       Advanced Properties
                      BandEdges: [1×42 double]
         FilterBankDesignDomain: 'Hz'
        FilterBankNormalization: 'Bandwidth'
    Передайте аудио сегмент как вход к алгоритму экстрактора функции cepstral, чтобы заблокировать объект.
    [coeffs,delta,deltaDelta] = cepFeatures(audioSegment);
    Используя функцию getFilters, получите набор фильтров. Постройте набор фильтров.
    [filterbank, freq] = getFilters(cepFeatures);
    plot(freq(1:150),filterbank(1:150,:))

    Для получения дополнительной информации см. [1].

  • 'Bin' – bandedge частоты в 'Hz' преобразованы в интервалы. Треугольники набора фильтров чертятся симметрично в интервалах.

    Измените свойство FilterBankDesignDomain на 'Bin':

    release(cepFeatures);
    cepFeatures.FilterBankDesignDomain = 'Bin';
    [coeffs,delta,deltaDelta] = cepFeatures(audioSegment);
    [filterbank, freq] = getFilters(cepFeatures);
    plot(freq(1:150),filterbank(1:150,:))

    Для получения дополнительной информации см. [2].

Зависимости

Чтобы включить это свойство, установите FilterBank на Mel.

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

Метод нормализации, используемый на весах набора фильтров, заданного как:

  • пропускная способность Веса каждого полосового фильтра нормированы соответствующей пропускной способностью фильтра.

  • область Веса каждого полосового фильтра нормированы соответствующей областью полосового фильтра.

  • 'none' Веса фильтра не нормированы.

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

Использование

Синтаксис

[coeffs,delta,deltaDelta] = cepFeatures(audioIn)

Описание

пример

[coeffs,delta,deltaDelta] = cepFeatures(audioIn) возвращает cepstral коэффициенты, логарифмическую энергию, дельту и дельту дельты.

Логарифмическая энергетическая ценность предварительно ожидает вектор коэффициентов или заменяет первый элемент содействующего вектора на основе того, устанавливаете ли вы свойство LogEnergy на 'Append' или 'Replace'. Для получения дополнительной информации смотрите coefs.

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

развернуть все

Аудиовход к cepstral показывает экстрактор, заданный как вектор-столбец или матрица. Если задано как матрица, столбцы обработаны как независимые звуковые каналы.

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

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

развернуть все

Коэффициенты Cepstral, возвращенные как вектор-столбец или матрица. Если содействующей матрицей является N-by-M матрица, N определяется значениями, которые вы задаете в свойствах NumCoeffs и LogEnergy. M равняется количеству входных звуковых каналов.

Когда свойство LogEnergy установлено в:

  • добавление Объект предварительно ожидает логарифмическую энергетическую ценность к содействующему вектору. Длина содействующего вектора равняется 1 + NumCoeffs. Это - настройка по умолчанию свойства LogEnergy.

  • замена Объект заменяет первый коэффициент на логарифмическую энергию сигнала. Длиной содействующего вектора является NumCoeffs.

  • 'Ignore' – Объект не вычисляет или возвращает логарифмическую энергию.

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

Изменитесь в коэффициентах по последовательным вызовам алгоритма, возвращенного как вектор или матрица. Массив delta одного размера и тип данных как массив coeffs.

В этом примере cepFeatures является экстрактором функции cepstral, который принимает входной аудиосигнал, выбранный на уровне 12 кГц. Поток в трех сегментах звукового сигнала на трех последовательных вызовах объектного алгоритма. Возвратите cepstral коэффициенты набора фильтров и соответствующих значений delta.

cepFeatures = cepstralFeatureExtractor('SampleRate',12000);
[coeff1,delta1] = cepFeatures(audioIn);
[coeff2,delta2] = cepFeatures(audioIn);
[coeff3,delta3] = cepFeatures(audioIn);

delta2 вычисляется как coeff2-coeff1, в то время как delta3 вычисляется как coeff3-coeff2. Начальный массив, delta1, является массивом нулей.

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

Изменитесь в значениях delta по последовательным вызовам алгоритма, возвращенного как вектор или матрица. Массив deltaDelta одного размера и тип данных как массивы delta и coeffs.

В этом примере последовательные вызовы алгоритма экстрактора функции cepstral возвращают значения deltaDelta в дополнение к коэффициентам и значения delta.

cepFeatures = cepstralFeatureExtractor('SampleRate',12000);
[coeff1,delta1,deltaDelta1] = cepFeatures(audioIn);
[coeff2,delta2,deltaDelta2] = cepFeatures(audioIn);
[coeff3,delta3,deltaDelta3] = cepFeatures(audioIn);

deltaDelta2 вычисляется как delta2-delta1, в то время как deltaDelta3 вычисляется как delta3-delta2. Начальный массив, deltaDelta1, является массивом нулей.

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

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

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

getFiltersПолучите слуховой набор фильтров
cloneСоздайте объект дублированной системы
isLockedОпределите, используется ли Системный объект
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта
stepЗапустите алгоритм Системного объекта

Примеры

развернуть все

Извлеките mel частоту cepstral коэффициенты и логарифмическая энергетическая ценность сегментов в речевом файле. Возвратите delta, различие между током и предыдущими cepstral коэффициентами, и deltaDelta, различием между током и предыдущими значениями delta. Логарифмическая энергетическая ценность, которую вычисляет объект, может предварительно ожидать содействующий вектор или заменить первый элемент содействующего вектора. Это сделано на основе того, устанавливаете ли вы свойство LogEnergy объекта cepstralFeatureExtractor к 'Replace' или 'Append'.

Считайте звуковой сигнал из файла 'SpeechDFT-16-8-mono-5secs.wav'. Извлеките сегмент на 40 мс от аудиоданных. Создайте объект cepstralFeatureExtractor. cepstral коэффициенты, вычисленные объектом по умолчанию, являются mel коэффициентами частоты. Кроме того, объект вычисляет логарифмическую энергию, дельту и значения дельты дельты аудио сегмента.

[audioFile, fs] = audioread('SpeechDFT-16-8-mono-5secs.wav');
duration = round(0.04*fs); % 40 ms
audioSegment = audioFile(5500:5500+duration-1);
cepFeatures = cepstralFeatureExtractor('SampleRate',fs)
cepFeatures = 
  cepstralFeatureExtractor with properties:

   Properties
     FilterBank: 'Mel'
    InputDomain: 'Time'
      NumCoeffs: 13
      FFTLength: []
      LogEnergy: 'Append'
     SampleRate: 8000

  Show all properties

Свойство LogEnergy установлено в 'Append'. Первый элемент в содействующем векторе является логарифмической энергетической ценностью, и остающиеся элементы являются 13 cepstral коэффициентами, вычисленными объектом. Количество cepstral коэффициентов определяется значением, которое вы задаете в свойстве NumCoeffs.

[coeffs,delta,deltaDelta] = cepFeatures(audioSegment)
coeffs = 14×1

    3.8281
  -19.4827
   11.7649
   -6.2989
    5.8894
   -0.3366
    0.9583
    0.8768
   -2.0384
    2.3678
      ⋮

delta = 14×1

     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
      ⋮

deltaDelta = 14×1

     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
      ⋮

Начальные значения для delta и массивов deltaDelta всегда являются нулем. Рассмотрите другой аудио сегмент на 40 мс в файле и извлеките функции cepstral от этого сегмента.

audioSegmentTwo = audioFile(5820:5820+duration-1);
[coeffsTwo,deltaTwo,deltaDeltaTwo] = cepFeatures(audioSegmentTwo)
coeffsTwo = 14×1

    3.0899
  -20.4756
   10.4455
   -5.8759
    7.2215
   -1.2027
   -0.0236
    1.9183
   -1.2127
    2.0669
      ⋮

deltaTwo = 14×1

   -0.7382
   -0.9928
   -1.3194
    0.4230
    1.3321
   -0.8661
   -0.9819
    1.0415
    0.8257
   -0.3009
      ⋮

deltaDeltaTwo = 14×1

   -0.7382
   -0.9928
   -1.3194
    0.4230
    1.3321
   -0.8661
   -0.9819
    1.0415
    0.8257
   -0.3009
      ⋮

Проверьте, что различие между coeffsTwo и векторами coeffs равняется deltaTwo.

isequal(coeffsTwo-coeffs,deltaTwo)
ans = logical
   1

Проверьте, что различие между deltaTwo и векторами delta равняется deltaDeltaTwo.

isequal(deltaTwo-delta,deltaDeltaTwo)
ans = logical
   1

Много методов выделения признаков работают с частотным диапазоном. Преобразование звукового сигнала к частотному диапазону только однажды эффективно. В этом примере вы преобразовываете сигнал передачи потокового аудио в частотный диапазон и канал, которые сигнализируют в речевой детектор действия. Если речь присутствует, функции mel-частоты cepstral коэффициентов (MFCC) извлечены от сигнала частотного диапазона использование cepstralFeatureExtractor System object™.

Создайте Системный объект dsp.AudioFileReader, чтобы читать из звукового файла.

fileReader = dsp.AudioFileReader('Counting-16-44p1-mono-15secs.wav');
fs = fileReader.SampleRate;

Обработайте аудио в кадрах на 30 мс с транзитным участком на 10 мс. Создайте объект dsp.AsyncBuffer по умолчанию управлять перекрытием между аудио кадрами.

samplesPerFrame = ceil(0.03*fs);
samplesPerHop = ceil(0.01*fs);
samplesPerOverlap = samplesPerFrame - samplesPerHop;

fileReader.SamplesPerFrame = samplesPerHop;
buffer = dsp.AsyncBuffer;

Создайте Системный объект voiceActivityDetector и Системный объект cepstralFeatureExtractor. Укажите, что они действуют в частотном диапазоне. Создайте dsp.SignalSink, чтобы регистрировать извлеченные функции cepstral.

VAD = voiceActivityDetector('InputDomain','Frequency');
cepFeatures = cepstralFeatureExtractor('InputDomain','Frequency','SampleRate',fs,'LogEnergy','Replace');
sink = dsp.SignalSink;

В цикле аудиопотока:

  1. Считайте один транзитный участок выборок от звукового файла и сохраните выборки в буфер.

  2. Считайте кадр из buffer с заданным перекрытием от предыдущего кадра.

  3. Вызовите речевой детектор действия, чтобы получить вероятность речи для кадра при анализе.

  4. Если кадр при анализе имеет вероятность речи, больше, чем 0,75, извлечение cepstral функции, и регистрируйте функции с помощью приемника сигнала. Если кадр при анализе имеет вероятность речи меньше чем 0,75, запишите вектор NaNs к приемнику.

threshold = 0.75;
nanVector = nan(1,13);
while ~isDone(fileReader)
    audioIn = fileReader();
    write(buffer,audioIn);
    
    overlappedAudio = read(buffer,samplesPerFrame,samplesPerOverlap);
    X = fft(overlappedAudio,2048);
    
    probabilityOfSpeech = VAD(X);
    if probabilityOfSpeech > threshold
        xFeatures = cepFeatures(X);
        sink(xFeatures')
    else
        sink(nanVector)
    end
end

Визуализируйте cepstral коэффициенты в зависимости от времени.

timeVector = linspace(0,15,size(sink.Buffer,1));
plot(timeVector,sink.Buffer)
xlabel('Time (s)')
ylabel('MFCC Amplitude')
legend('Log-Energy','c1','c2','c3','c4','c5','c6','c7','c8','c9','c10','c11','c12')

Создайте объект dsp.AudioFileReader читать в покадровых аудиоданных. Создайте audioDeviceWriter, чтобы записать аудио в вашу звуковую карту. Создайте dsp.ArrayPlot, чтобы визуализировать GTCC в зависимости от времени.

fileReader = dsp.AudioFileReader('RandomOscThree-24-96-stereo-13secs.aif');
deviceWriter = audioDeviceWriter(fileReader.SampleRate);
scope = dsp.ArrayPlot;

Создайте cepstralFeatureExtractor, который извлекает GTCC.

cepFeatures = cepstralFeatureExtractor('FilterBank','Gammatone', ...
                                       'SampleRate',fileReader.SampleRate);

В цикле аудиопотока:

  1. Читайте в кадре аудиоданных.

  2. Извлеките GTCC от кадра аудио.

  3. Визуализируйте GTCC.

  4. Запишите аудио кадр в свое устройство.

while ~isDone(fileReader)
    audioIn = fileReader();
    coeffs = cepFeatures(audioIn);
    scope(coeffs)
    deviceWriter(audioIn);
end

release(cepFeatures)
release(scope)
release(fileReader)

Алгоритмы

развернуть все

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

Введенный в R2018a

Для просмотра документации необходимо авторизоваться на сайте