Извлеките функции cepstral из аудио сегмента
cepstralFeatureExtractor
Система object™ извлекает функции cepstral из аудио сегмента. Функции Cepstral обычно используются, чтобы охарактеризовать музыкальные сигналы и речь.
Извлекать функции cepstral:
Создайте cepstralFeatureExtractor
объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?.
cepFeatures = cepstralFeatureExtractor
создает Системный объект, cepFeatures
, это вычисляет функции cepstral независимо через каждый входной канал. Столбцы входа обработаны, когда индивидуум образовывает канал.
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 cepstral коэффициенты (MFCC). Когда FilterBank
установлен в Gammatone
, объект вычисляет gammatone cepstral коэффициенты (GTCC).
Типы данных: char |
string
InputDomain
— Область входного сигнала'Time'
(значение по умолчанию) | 'Frequency'
Область входного сигнала в виде любого 'Time'
или 'Frequency'
.
Типы данных: char |
string
NumCoeffs
— Количество коэффициентов, чтобы возвратиться
(значение по умолчанию) | положительное целое числоКоличество коэффициентов, чтобы возвратиться в виде целого числа в области значений [2, v], где v является количеством допустимых полос пропускания. Количество допустимых полос пропускания зависит от типа набора фильтров:
Mel
– Количество допустимых полос пропускания задано как сумма (
. BandEdges
<= пол (SampleRate
/2))-2
Gammatone
– Количество допустимых полос пропускания задано, как перекрывают (
. 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
— Введите частоту дискретизации (Гц)
(значение по умолчанию) | положительная скалярная величинаВведите частоту дискретизации в Гц в виде действительной положительной скалярной величины.
Типы данных: single
| double
BandEdges
— Ребра полосы mel набора фильтров (Гц)Ребра полосы набора фильтров в Гц в виде неотрицательного монотонно увеличивающегося вектора-строки в области значений [0, ∞). Максимум bandedge частота может быть любым конечным числом. Количество bandedges должно быть в области значений [4, 80].
Ребра полосы по умолчанию расположены с интервалами линейно для первых десяти и затем логарифмически после. Ребра полосы по умолчанию установлены, как рекомендуется [1].
Чтобы включить это свойство, установите FilterBank
к Mel
.
Типы данных: single
| double
FrequencyRange
— Частотный диапазон gammatone набора фильтров (Гц)
(значение по умолчанию) | двухэлементный вектор-строкаЧастотный диапазон набора фильтров в Гц в виде положительного, монотонно увеличивающегося двухэлементного вектора-строки. Максимальная частота может быть любым конечным числом. Центральные частоты набора фильтров равномерно распределены между
и 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'
Метод нормализации, используемый на весах набора фильтров в виде:
'Bandwidth'
– Веса каждого полосового фильтра нормированы на соответствующую пропускную способность фильтра.
'Area'
– Веса каждого полосового фильтра нормированы на соответствующую область полосового фильтра.
'None'
– Веса фильтра не нормированы.
Типы данных: char |
string
[
возвращает cepstral коэффициенты, логарифмическую энергию, дельту и дельту дельты.coeffs
,delta
,deltaDelta
]
= cepFeatures(audioIn
)
Логарифмическая энергетическая ценность предварительно ожидает вектор коэффициентов или заменяет первый элемент содействующего вектора на основе того, устанавливаете ли вы LogEnergy
свойство к 'Append'
или 'Replace'
. Для получения дополнительной информации смотрите coefs.
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
— Изменитесь в коэффициентахИзменитесь в коэффициентах по последовательным вызовам алгоритма, возвращенного как вектор или матрица. 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
массив одного размера и тип данных с 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;
В цикле аудиопотока:
Считайте один транзитный участок выборок от звукового файла и сохраните выборки в буфер.
Считайте систему координат из 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 коэффициенты, как изучают, представляют фильтр (речевой тракт). Частотная характеристика речевого тракта относительно является гладкой, тогда как источник речевой речи может быть смоделирован, когда импульс обучается. В результате речевой тракт может быть оценен спектральным конвертом речевого сегмента.
Идея мотивации cepstral коэффициентов состоит в том, чтобы сжать информацию о речевом тракте (сглаживавший спектр) в небольшое количество коэффициентов на основе понимания улитки уха. Несмотря на то, что нет никакого твердого стандарта для вычисления коэффициентов, основные шаги обрисованы в общих чертах схемой.
Две популярных реализации набора фильтров являются mel набором фильтров и gammatone набором фильтров.
Значение по умолчанию mel набор фильтров линейно располагает первые 10 треугольных фильтров с интервалами и логарифмически располагает остающиеся фильтры с интервалами.
Значение по умолчанию gammatone набор фильтров состоит из фильтров gammatone, расположенных с интервалами линейно по шкале ERB между 50 и 8 000 Гц. Набор фильтров спроектирован 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.