exponenta event banner

cepstralFeatureExtractor

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

Описание

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

Для извлечения кепстральных элементов:

  1. Создать cepstralFeatureExtractor и задайте его свойства.

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

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

Создание

Описание

пример

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

пример

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

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

Свойства

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

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

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

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Тип банка фильтров, указанный как 'Mel' или 'Gammatone'. Когда FilterBank имеет значение Mel, объект вычисляет кепстральные коэффициенты частоты mel (MFCC). Когда FilterBank имеет значение Gammatoneобъект вычисляет кэпстральные коэффициенты гамматона (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

Тип нелинейного выпрямления, указанный как '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 собственность.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В этом примере: cepFeatures - выделитель кепстральных характеристик, который принимает входной аудиосигнал, дискретизированный на частоте 12 кГц. Потоковая передача в трех сегментах звукового сигнала по трем последовательным вызовам алгоритма объекта. Возвращает кепстральные коэффициенты банка фильтров и соответствующие 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 массив имеет тот же размер и тот же тип данных, что и 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

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

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

release(obj)

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

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

Примеры

свернуть все

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

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

LogEnergy свойство имеет значение 'Append'. Первый элемент в векторе коэффициентов является логарифмическим значением энергии, а остальные элементы являются 13 кепстральными коэффициентами, вычисленными объектом. Количество кепстральных коэффициентов определяется значением, указанным в 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 мс в файле и извлеките кепстральные функции из этого сегмента.

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

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

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

Визуализация кепстральных коэффициентов во времени.

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