Извлеките функции cepstral от аудио сегмента
Система cepstralFeatureExtractor
object™ извлекает функции cepstral от аудио сегмента. Функции Cepstral обычно используются, чтобы охарактеризовать музыкальные сигналы и речь.
Извлекать функции cepstral:
Создайте объект cepstralFeatureExtractor
и установите его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.
cepFeatures = cepstralFeatureExtractor
cepFeatures = 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.