Извлечение функций cepstral из сегмента audio
The cepstralFeatureExtractor Системная object™ извлекает функции cepstral из аудиосегмента. Функции Cepstral обычно используются для характеристики речевых и музыкальных сигналов.
Чтобы извлечь cepstral функции:
Создайте cepstralFeatureExtractor Объекту и установите его свойства.
Вызывайте объект с аргументами, как будто это функция.
Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».
cepFeatures = cepstralFeatureExtractor создает Системный объект, 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 frequency cepstral (MFCC). Когда FilterBank установлено в Gammatoneобъект вычисляет коэффициенты gammatone cepstral (GTCC).
Типы данных: char | string
InputDomain - Область входного сигнала'Time' (по умолчанию) | 'Frequency'Область входного сигнала, заданная как 'Time' или 'Frequency'.
Типы данных: char | string
NumCoeffs - Количество возвращаемых коэффициентов13 (по умолчанию) | положительное целое числоКоличество возвращаемых коэффициентов, заданное в виде целого числа в области значений [2, v], где v количество допустимых полос пропускания. Количество допустимых полос пропускания зависит от типа банка фильтров:
Mel - Количество допустимых полос пропускания определяется как сумма . (BandEdges < = этаж (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 - Ленточные ребра mel filter bank (Гц)Края полосы ребер группы фильтров в Гц, заданные как неотрицательный монотонно увеличивающийся вектор-строка в области значений [0, ∞). Максимальная частота полосы пропускания может быть любым конечным числом. Количество полос пропускания должно быть в области значений [4, 80].
Диапазонные ребра по умолчанию разнесены линейно для первых десяти, а затем логарифмически после. Полосы ребер по умолчанию заданы как рекомендуемые [1].
Чтобы включить это свойство, задайте FilterBank на Mel.
Типы данных: single | double
FrequencyRange - Частотная область значений группы гамматоновых фильтров (Гц)[50 8000] (по умолчанию) | двухэлементный вектор-строкаЧастотная область значений группы фильтров в Гц, заданная как положительная, монотонно увеличивающаяся двухэлементный вектор-строка. Максимальная частота может быть любым конечным числом. Центральные частоты группы фильтров равномерно расположены между и hz2erb(FrequencyRange(1)) по шкале ERB.hz2erb(FrequencyRange(2))
Чтобы включить это свойство, задайте FilterBank на Gammatone.
Типы данных: single | double
FilterBankDesignDomain - Область для проекта банка мел-фильтров'Hz' (по умолчанию) | 'Bin'Область для проекта банка фильтров, заданный как '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'[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
[ возвращает коэффициенты cepstral, энергию логарифмического журнала, дельту и дельту.coeffs,delta,deltaDelta]
= cepFeatures(audioIn)
Энергетическое значение журнала готовит вектор коэффициента или заменяет первый элемент вектора коэффициентов на основе того, задаете ли вы LogEnergy свойство к 'Append' или 'Replace'. Для получения дополнительной информации см. coeffs.
audioIn - Входной сигналВходной сигнал, заданный как вектор-столбец или матрица. Если InputDomain установлено в 'Time', задайте audioIn как реальная система координат аудио данных. Если InputDomain установлено в 'Frequency', задайте audioIn как реальное или комплексное дискретное преобразование Фурье. Если задано в виде матрицы, столбцы обрабатываются как независимые аудиоканалы.
Типы данных: single | double
Поддержка комплексного числа: Да
coeffs - Коэффициенты CepstralКоэффициенты Cepstral, возвращенные как вектор-столбец или матрица. Если матрица коэффициентов является N -by - M матрицей, N определяется значениями, которые вы задаете в NumCoeffs и LogEnergy свойства. M равняется количеству входа аудиоканалов.
Когда LogEnergy для свойства задано значение:
'Append' - Объект готовит значение энергии журнала к вектору коэффициентов. Длина вектора коэффициентов 1 + NumCoeffs. Это настройка по умолчанию для LogEnergy свойство.
'Replace' -- Объект заменяет первый коэффициент на журнал энергию сигнала. Длина вектора коэффициентов NumCoeffs.
'Ignore' -- Объект не вычисляет и не возвращает энергию журнала.
Типы данных: single | double
delta - Изменение коэффициентовИзменение коэффициентов во время последовательных вызовов алгоритма, возвращаемое в виде вектора или матрицы. 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
deltaDelta - Изменение значений дельтыИзменение в 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 | Получите банк слуховых фильтров |
Извлеките 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;
В цикле аудиопотока:
Считайте один скачок отсчетов из аудио файла и сохраните отсчеты в буфер.
Считайте систему координат из 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
Визуализируйте коэффициенты 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)

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

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

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

Если вход (x) является сигналом временной области, энергия журнала вычисляется с помощью следующего уравнения:
Если вход (x) является сигналом частотного диапазона, энергия журнала вычисляется с помощью следующего уравнения:
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 Coder)
Cepstral Feature Extractor | gammatoneFilterBank | gtcc | mfcc | pitch | Voice Activity Detector | voiceActivityDetector
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.