cepstralFeatureExtractor

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

Описание

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

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

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

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

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

Создание

Описание

пример

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

пример

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

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

Свойства

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

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

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

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

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

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

Область входного сигнала в виде любого 'Time' или 'Frequency'.

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

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

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

  • Gammatone – Количество допустимых полос пропускания задано, как перекрывают (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, ∞). Максимум 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

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

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

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

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

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

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

Описание

пример

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

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

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

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

Входной сигнал в виде вектор-столбца или матрицы. Если 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

Изменитесь в коэффициентах по последовательным вызовам алгоритма, возвращенного как вектор или матрица. 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 массив одного размера и тип данных с coeffs и delta массивы.

В этом примере последовательные вызовы алгоритма экстрактора функции 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'.

Считайте звуковой сигнал из '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

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-частоты 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')

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