cepstralFeatureExtractor

Извлечение функций cepstral из сегмента audio

Описание

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

Чтобы извлечь cepstral функции:

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

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

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

пример

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

пример

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

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

Свойства

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

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

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

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

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

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

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

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

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

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

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

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

Нелинейный тип выпрямления, заданный как 'Log' или 'Cubic-Root'.

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

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

Зависимости

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

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

Задайте, как энергия журнала показана в выходе вектора коэффициентов, заданном как:

  • 'Append' - Объект готовит энергию журнала к вектору коэффициентов. Длина вектора коэффициентов 1 + NumCoeffs.

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

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

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

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

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

Дополнительные свойства

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

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

Зависимости

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

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

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

Зависимости

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

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

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

The 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' - Полосы пропускания в '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

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

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

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

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

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

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

Описание

пример

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

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

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

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

Входной сигнал, заданный как вектор-столбец или матрица. Если InputDomain установлено в 'Time', задайте audioIn как реальная система координат аудио данных. Если InputDomain установлено в 'Frequency', задайте audioIn как реальное или комплексное дискретное преобразование Фурье. Если задано в виде матрицы, столбцы обрабатываются как независимые аудиоканалы.

Типы данных: single | double
Поддержка комплексного числа: Да

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

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

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

Когда LogEnergy для свойства задано значение:

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

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

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

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

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

В этом примере cepFeatures cepstral функции extractor, который принимает аудио входного сигнала, дискретизированные с частотой 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 значения за последовательные вызовы алгоритма, возвращенные в виде вектора или матрицы. The deltaDelta массив имеет тот же размер и тип данных, что и coeffs и delta массивы.

В этом примере последовательные вызовы алгоритма извлечения функция возвращают 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 frequency cepstral коэффициенты и логарифмические энергетические значения сегментов в речевом файле. Возврат delta, различие между текущим и предыдущими коэффициентами cepstral и deltaDelta, различие между текущим и предыдущим delta значения. Значение энергии журнала, которое вычисляет объект, может подготовить вектор коэффициентов или заменить первый элемент вектора коэффициентов. Это делается на основе того, задаете ли вы LogEnergy свойство cepstralFeatureExtractor объект к 'Replace' или 'Append'.

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

[audioFile, fs] = audioread('Counting-16-44p1-mono-15secs.wav');
duration = round(0.04*fs); % 40 ms
audioSegment = audioFile(40000:40000+duration-1);
cepFeatures = cepstralFeatureExtractor('SampleRate',fs)
cepFeatures = 
  cepstralFeatureExtractor with properties:

   Properties
       FilterBank: 'Mel'
      InputDomain: 'Time'
        NumCoeffs: 13
    Rectification: 'Log'
        FFTLength: []
        LogEnergy: 'Append'
       SampleRate: 44100

  Show all properties

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

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

    5.2999
   -4.9406
    3.6130
    0.4397
   -0.2280
   -1.1068
    0.6679
    0.6367
   -0.3869
    0.6127
      ⋮

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

   -0.1582
  -15.9507
    2.4295
    0.2835
    0.4345
    0.4382
    0.6040
    0.4168
    0.1846
    0.2636
      ⋮

deltaTwo = 14×1

   -5.4581
  -11.0101
   -1.1836
   -0.1561
    0.6625
    1.5449
   -0.0639
   -0.2199
    0.5715
   -0.3491
      ⋮

deltaDeltaTwo = 14×1

   -5.4581
  -11.0101
   -1.1836
   -0.1561
    0.6625
    1.5449
   -0.0639
   -0.2199
    0.5715
   -0.3491
      ⋮

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

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

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

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

Многие редукции данных техники работают на частотном диапазоне. Преобразование аудиосигнала в частотный диапазон только один раз эффективно. В этом примере вы преобразовываете сигнал передачи потокового аудио в частотный диапазон и подаете этот сигнал в детектор голосовой активности. Если речь присутствует, функции mel-частотных кепстральных коэффициентов (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, извлеките кепстральные функции и логгируйте функции, используя приемник сигнала. Если анализируемая система координат имеет вероятность речи менее 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')

Figure contains an axes. The axes contains 13 objects of type line. These objects represent 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)

Алгоритмы

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

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

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

Не рекомендуемый запуск в R2020b

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

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