Извлеките функции cepstral от аудио сегмента
Система cepstralFeatureExtractor object™ извлекает функции cepstral от аудио сегмента. Функции Cepstral обычно используются, чтобы охарактеризовать музыкальные сигналы и речь.
Извлекать функции cepstral:
Создайте объект cepstralFeatureExtractor и установите его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.
cepFeatures = cepstralFeatureExtractorcepFeatures = 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).
FilterBank — Тип набора фильтров'Mel' (значение по умолчанию) | 'Gammatone'Тип набора фильтров, заданного или как 'Mel' или как 'Gammatone'. Когда FilterBank установлен в Mel, объект вычисляет частоту mel cepstral коэффициенты (MFCC). Когда FilterBank установлен в Gammatone, объект вычисляет gammatone cepstral коэффициенты (GTCC).
Типы данных: char | string
InputDomain — Область входного сигнала'Time' (значение по умолчанию) | 'Frequency'Область входного сигнала, заданного или как 'Time' или как 'Frequency'.
Типы данных: char | string
NumCoeffs — Количество коэффициентов, чтобы возвратиться13 (значение по умолчанию) | положительное целое числоКоличество коэффициентов, чтобы возвратиться, заданный как целое число в области значений [2, v], где v является количеством допустимых полос пропускания. Количество допустимых полос пропускания зависит от типа набора фильтров:
Mel – Количество допустимых полос пропускания задано как . sum(BandEdges <= floor(SampleRate/2))-2
Gammatone – Количество допустимых полос пропускания задано как . ceil(hz2erb(FrequencyRange(2))-hz2erb(FrequencyRange(1)))
Типы данных: single | double
FFTLength — Длина БПФ[] (значение по умолчанию) | положительное целое числоДлина БПФ, заданная как положительное целое число. Значение по умолчанию, [], означает, что длина БПФ равна количеству строк во входном сигнале.
Чтобы включить это свойство, установите InputDomain на 'Time'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
LogEnergy — Задайте, как логарифмическую энергию показывают'Append' (значение по умолчанию) | 'Replace' | 'Ignore'Задайте, как логарифмическую энергию показывают в содействующем векторе вывод, заданный как:
добавление Объект предварительно ожидает логарифмическую энергию к содействующему вектору. Длина содействующего вектора равняется 1 + NumCoeffs.
замена Объект заменяет первый коэффициент на логарифмическую энергию сигнала. Длиной содействующего вектора является NumCoeffs.
'Ignore' – Объект не вычисляет или возвращает логарифмическую энергию.
Типы данных: char | string
SampleRate — Введите частоту дискретизации (Гц)16000 (значение по умолчанию) | положительная скалярная величинаВведите частоту дискретизации в Гц, заданном как действительная положительная скалярная величина.
Настраиваемый: да
Типы данных: single | double
BandEdges — Ребра полосы mel набора фильтров (Гц)Ребра полосы набора фильтров в Гц, заданном как неотрицательный монотонно увеличивающийся вектор - строка в области значений [0, ∞). Максимум bandedge частота может быть любым конечным числом. Количество bandedges должно быть в области значений [4, 80].
Ребра полосы по умолчанию расположены с интервалами линейно для первых десяти и затем логарифмически после. Ребра полосы по умолчанию установлены, как рекомендуется [1].
Чтобы включить это свойство, установите FilterBank на Mel.
Типы данных: single | double
FrequencyRange — Частотный диапазон gammatone набора фильтров (Гц)[50 8000] (значение по умолчанию) | двухэлементный вектор - строкаЧастотный диапазон набора фильтров в Гц, заданном как положительное, монотонно увеличивающийся двухэлементный вектор - строка. Максимальная частота может быть любым конечным числом. Центральные частоты набора фильтров равномерно распределены между и hz2erb(FrequencyRange(1)) в шкале ERB.hz2erb(FrequencyRange(2))
Чтобы включить это свойство, установите FilterBank на Gammatone.
Типы данных: single | double
FilterBankDesignDomain — Область для mel проекта набора фильтров'Hz' (значение по умолчанию) | 'Bin'Область для проекта набора фильтров, заданного или как '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' – 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
FilterBankNormalization — Нормируйте набор фильтров'Bandwidth' (значение по умолчанию) | 'Area' | 'None'Метод нормализации, используемый на весах набора фильтров, заданного как:
пропускная способность Веса каждого полосового фильтра нормированы соответствующей пропускной способностью фильтра.
область Веса каждого полосового фильтра нормированы соответствующей областью полосового фильтра.
'none' Веса фильтра не нормированы.
Типы данных: char | string
[coeffs,delta,deltaDelta]
= cepFeatures(audioIn)[ возвращает cepstral коэффициенты, логарифмическую энергию, дельту и дельту дельты.coeffs,delta,deltaDelta]
= cepFeatures(audioIn)
Логарифмическая энергетическая ценность предварительно ожидает вектор коэффициентов или заменяет первый элемент содействующего вектора на основе того, устанавливаете ли вы свойство LogEnergy на 'Append' или 'Replace'. Для получения дополнительной информации смотрите coefs.
audioIn — Аудиовход к cepstral показывает экстракторАудиовход к cepstral показывает экстрактор, заданный как вектор-столбец или матрица. Если задано как матрица, столбцы обработаны как независимые звуковые каналы.
Типы данных: single | double
coeffs — Коэффициенты CepstralКоэффициенты Cepstral, возвращенные как вектор-столбец или матрица. Если содействующей матрицей является N-by-M матрица, N определяется значениями, которые вы задаете в свойствах NumCoeffs и LogEnergy. M равняется количеству входных звуковых каналов.
Когда свойство LogEnergy установлено в:
добавление Объект предварительно ожидает логарифмическую энергетическую ценность к содействующему вектору. Длина содействующего вектора равняется 1 + NumCoeffs. Это - настройка по умолчанию свойства LogEnergy.
замена Объект заменяет первый коэффициент на логарифмическую энергию сигнала. Длиной содействующего вектора является NumCoeffs.
'Ignore' – Объект не вычисляет или возвращает логарифмическую энергию.
Типы данных: single | double
\delta Изменитесь в коэффициентахИзменитесь в коэффициентах по последовательным вызовам алгоритма, возвращенного как вектор или матрица. Массив 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
deltaDelta — Изменитесь в значениях дельтыИзменитесь в значениях 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;
В цикле аудиопотока:
Считайте один транзитный участок выборок от звукового файла и сохраните выборки в буфер.
Считайте кадр из buffer с заданным перекрытием от предыдущего кадра.
Вызовите речевой детектор действия, чтобы получить вероятность речи для кадра при анализе.
Если кадр при анализе имеет вероятность речи, больше, чем 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);
В цикле аудиопотока:
Читайте в кадре аудиоданных.
Извлеките GTCC от кадра аудио.
Визуализируйте GTCC.
Запишите аудио кадр в свое устройство.
while ~isDone(fileReader) audioIn = fileReader(); coeffs = cepFeatures(audioIn); scope(coeffs) deviceWriter(audioIn); end release(cepFeatures) release(scope) release(fileReader)

Слуховые коэффициенты кепстра являются популярными функциями, извлеченными от речевых сигналов для использования в задачах распознавания. В модели фильтра источника речи, cepstral коэффициенты, как понимают, представляют фильтр (речевой тракт). Частотная характеристика речевого тракта относительно сглаженна, тогда как источник речевой речи может быть смоделирован как импульсный train. В результате речевой тракт может быть оценен спектральным конвертом речевого сегмента.
Идея мотивации cepstral коэффициентов состоит в том, чтобы сжать информацию о речевом тракте (сглаживавший спектр) в небольшое количество коэффициентов на основе понимания улитки уха. Несмотря на то, что нет никакого твердого стандарта для вычисления коэффициентов, основные шаги обрисованы в общих чертах схемой.

Две популярных реализации набора фильтров являются mel набором фильтров и gammatone набором фильтров.
Значение по умолчанию mel набор фильтров линейно располагает первые 10 треугольных фильтров с интервалами и логарифмически располагает остающиеся фильтры с интервалами.

Значение по умолчанию gammatone набор фильтров состоит из фильтров gammatone, расположенных с интервалами линейно в шкале ERB между 50 и 8 000 Гц. Набор фильтров разработан gammatoneFilterBank.

Если вход (x) является сигналом временного интервала, логарифмическая энергия вычисляется с помощью следующего уравнения:
Если вход (x) является сигналом частотного диапазона, логарифмическая энергия вычисляется с помощью следующего уравнения:
[1] Слуховой тулбокс. https://engineering.purdue.edu/~malcolm/interval/1998-010/AuditoryToolboxTechReport.pdf
[2] ETSI ES 201 108 V1.1.3 (2003-09). https://www.etsi.org/deliver/etsi_es/201100_201199/201108/01.01.03_60/es_201108v010103p.pdf
Указания и ограничения по применению:
Системные объекты в Генерации кода MATLAB (MATLAB Coder)
Экстрактор функции Cepstral | Речевой детектор действия | gammatoneFilterBank | gtcc | mfcc | pitch | voiceActivityDetector
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.