Извлечение функций 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.