Извлечение кепстральных функций из аудиосегмента
cepstralFeatureExtractor Системный object™ извлекает кепстральные функции из аудиосегмента. Кепстральные особенности обычно используются для характеристики речевых и музыкальных сигналов.
Для извлечения кепстральных элементов:
Создать cepstralFeatureExtractor и задайте его свойства.
Вызовите объект с аргументами, как если бы это была функция.
Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.
cepFeatures = cepstralFeatureExtractor создает объект System, cepFeatures, который вычисляет кепстральные признаки независимо по каждому входному каналу. Столбцы ввода обрабатываются как отдельные каналы.
cepFeatures = cepstralFeatureExtractor( задает каждое свойство Name,Value)Name к указанному Value. Неопределенные свойства имеют значения по умолчанию.
cepFeatures = cepstralFeatureExtractor('InputDomain','Frequency','SampleRate',fs,'LogEnergy','Replace') принимает сигнал в частотной области, дискретизированный в fs Гц. Первый элемент вектора коэффициентов заменяется логарифмическим значением энергии.Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.
Если свойство настраивается, его значение можно изменить в любое время.
Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.
FilterBank - Тип банка фильтров'Mel' (по умолчанию) | 'Gammatone'Тип банка фильтров, указанный как 'Mel' или 'Gammatone'. Когда FilterBank имеет значение Mel, объект вычисляет кепстральные коэффициенты частоты mel (MFCC). Когда FilterBank имеет значение Gammatoneобъект вычисляет кэпстральные коэффициенты гамматона (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
Rectification - Тип нелинейного выпрямления'Log' (по умолчанию) | 'Cubic-Root'Тип нелинейного выпрямления, указанный как 'Log' или 'Cubic-Root'.
Типы данных: char | string
FFTLength - длина БПФ[] (по умолчанию) | положительное целое числоДлина БПФ, заданная как положительное целое число. Значение по умолчанию, [], означает, что длина БПФ равна количеству строк во входном сигнале.
Чтобы включить это свойство, установите InputDomain кому 'Time'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
LogEnergy - Укажите способ отображения энергии журнала'Append' (по умолчанию) | 'Replace' | 'Ignore'Укажите, как логарифмическая энергия отображается на выходе вектора коэффициентов, указанного как:
'Append' - Объект добавляет логарифмическую энергию к вектору коэффициентов. Длина вектора коэффициентов равна 1 + NumCoeffs.
'Replace' - Объект заменяет первый коэффициент логарифмической энергией сигнала. Длина вектора коэффициентов равна NumCoeffs.
'Ignore' - Объект не вычисляет и не возвращает энергию журнала.
Типы данных: char | string
SampleRate - Частота входных выборок (Гц)16000 (по умолчанию) | положительный скалярЧастота входных выборок в Гц, заданная как действительный положительный скаляр.
Типы данных: single | double
BandEdges - Ленточные кромки набора фильтров (Гц)Границы полос набора фильтров в Гц, определяемые как неотрицательный монотонно увеличивающийся вектор строки в диапазоне [0, ∞). Максимальная частота полосы пропускания может быть любым конечным числом. Число полос пропускания должно находиться в диапазоне [4, 80].
Кромки полос по умолчанию расположены линейно для первых десяти, а затем логарифмически после. Границы области данных по умолчанию устанавливаются в соответствии с рекомендациями [1].
Чтобы включить это свойство, установите FilterBank кому Mel.
Типы данных: single | double
FrequencyRange - Частотный диапазон набора гамматоновых фильтров (Гц)[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' - Частоты полосы пропускания в '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'Метод нормализации, используемый для весов набора фильтров, указанный как:
'Bandwidth' - Веса каждого полосового фильтра нормализуются соответствующей полосой пропускания фильтра.
'Area' - Веса каждого полосового фильтра нормируются соответствующей областью полосового фильтра.
'None' - Веса фильтра не нормализованы.
Типы данных: char | string
[ возвращает кепстральные коэффициенты, логарифмическую энергию, дельту и дельту-дельту.coeffs,delta,deltaDelta] = cepFeatures(audioIn)
Логарифмическое значение энергии дополняет вектор коэффициентов или заменяет первый элемент вектора коэффициентов в зависимости от того, установлен ли параметр LogEnergy свойство для 'Append' или 'Replace'. Для получения более подробной информации см. coeffs.
audioIn - Входной сигналВходной сигнал, заданный как вектор столбца или матрица. Если InputDomain имеет значение 'Time', указать audioIn в качестве кадра аудиоданных с действительным значением. Если InputDomain имеет значение 'Frequency', указать audioIn как действительное или комплексное дискретное преобразование Фурье. Если указано как матрица, столбцы обрабатываются как независимые аудиоканалы.
Типы данных: single | double
Поддержка комплексного номера: Да
coeffs - Цепстральные коэффициентыКэпстральные коэффициенты, возвращаемые в виде вектора-столбца или матрицы. Если матрица коэффициентов является матрицей N-by-M, N определяется значениями, указанными в NumCoeffs и LogEnergy свойства. M равно количеству входных аудиоканалов.
Когда LogEnergy свойство имеет значение:
'Append' - Объект добавляет логарифмическое значение энергии к вектору коэффициентов. Длина вектора коэффициентов равна 1 + NumCoeffs. Это установка по умолчанию для LogEnergy собственность.
'Replace' - Объект заменяет первый коэффициент логарифмической энергией сигнала. Длина вектора коэффициентов равна NumCoeffs.
'Ignore' - Объект не вычисляет и не возвращает энергию журнала.
Типы данных: single | double
delta - Изменение коэффициентовИзменение коэффициентов при последовательных вызовах алгоритма, возвращаемых в виде вектора или матрицы. 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
deltaDelta - Изменение значений дельтыИзменение в 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 | Получить банк слуховых фильтров |
Извлеките частотные кепстральные коэффициенты и логарифмические значения энергии сегментов в речевом файле. Вернуть 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;
В цикле аудиопотока:
Прочитайте один прыжок образцов из аудиофайла и сохраните образцы в буфере.
Считывание кадра из buffer с указанным перекрытием из предыдущего кадра.
Вызовите детектор речевой активности, чтобы получить вероятность речи для анализируемого кадра.
Если анализируемый кадр имеет вероятность речи более 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')

Создать 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)

Коэффициенты слухового кепстра являются популярными признаками, извлеченными из речевых сигналов для использования в задачах распознавания. В модели «источник-фильтр» речи кепстральные коэффициенты понимаются как представляющие фильтр (речевой тракт). Частотная характеристика голосового тракта является относительно гладкой, тогда как источник озвученной речи может быть смоделирован как импульсный поезд. В результате речевой тракт может быть оценен по спектральной огибающей речевого сегмента.
Мотивирующая идея кепстральных коэффициентов заключается в сжатии информации о голосовом тракте (сглаженном спектре) в небольшое количество коэффициентов, основанных на понимании улитки. Хотя нет жёсткого стандарта для вычисления коэффициентов, основные шаги очерчены диаграммой.

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

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

Если вход (x) является сигналом временной области, логарифмическая энергия вычисляется с использованием следующего уравнения:
x2))
Если вход (x) является сигналом частотной области, логарифмическая энергия вычисляется с использованием следующего уравнения:
FFTLength)
cepstralFeatureExtractor будет удаленНе рекомендуется начинать с R2020b
cepstraFeatureExtractor будет удален. Используйте mfcc и gtcc функции для вычисления одних и тех же функций для пакетных сигналов. Для критической по времени обработки используйте комбинацию designAuditoryFilterBank, cepstralCoefficients, и audioDelta для вычисления одних и тех же элементов. При извлечении нескольких звуковых функций используйте audioFeatureExtractor объект.
[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)
Экстрактор элементов Cepstral | gammatoneFilterBank | gtcc | mfcc | pitch | Детектор речевой активности | voiceActivityDetector
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.