Извлеките cepstral коэффициенты
задает опции с помощью одного или нескольких coeffs
= cepstralCoefficients(S
,Name,Value
)Name,Value
парные аргументы.
Например, coeffs = cepstralCoefficients(S,'Rectification','cubic-root')
исправление кубического корня использования, чтобы вычислить коэффициенты.
Считайте звуковой файл в рабочую область.
[audioIn,fs] = audioread('SpeechDFT-16-8-mono-5secs.wav');
Преобразуйте звуковой сигнал в представление частотного диапазона с помощью 30 MS Windows с перекрытием на 15 мс. Поскольку вход действителен, и поэтому спектр симметричен, можно использовать всего одну сторону представления частотного диапазона без любой потери информации. Преобразуйте комплексный спектр в спектр величины: информация о фазе отбрасывается при вычислении частоты mel cepstral коэффициентов (MFCC).
windowLength = round(0.03*fs); overlapLength = round(0.015*fs); S = stft(audioIn,"Window",hann(windowLength,"periodic"),"OverlapLength",overlapLength,"FrequencyRange","onesided"); S = abs(S);
Спроектируйте односторонний частотный диапазон mel набор фильтров. Примените набор фильтров к представлению частотного диапазона, чтобы создать mel спектрограмму.
filterBank = designAuditoryFilterBank(fs,'FFTLength',windowLength);
melSpec = filterBank*S;
Вызовите cepstralCofficients
с mel спектрограммой, чтобы создать MFCC.
melcc = cepstralCoefficients(melSpec);
Считайте звуковой сигнал и преобразуйте его в одностороннее кратковременное преобразование Фурье величины. Используйте периодическое Окно Хэмминга на 50 мс с транзитным участком на 10 мс.
[audioIn,fs] = audioread('NoisySpeech-16-22p5-mono-5secs.wav'); windowLength = round(0.05*fs); hopLength = round(0.01*fs); overlapLength = windowLength - hopLength; S = stft(audioIn,"Window",hamming(windowLength,'periodic'),"OverlapLength",overlapLength,"FrequencyRange","onesided"); S = abs(S);
Спроектируйте односторонний частотный диапазон gammatone набор фильтров. Примените набор фильтров к представлению частотного диапазона, чтобы создать gammatone спектрограмму.
filterBank = designAuditoryFilterBank(fs,'FFTLength',windowLength,"FrequencyScale","erb"); gammaSpec = filterBank*S;
Вызовите cepstralCoefficients
с gammatone спектрограммой, чтобы создать gammatone частоту cepstral коэффициенты. Используйте кубически-корневое исправление.
gammacc = cepstralCoefficients(gammaSpec,"Rectification","cubic-root");
Коэффициенты Cepstral обычно используются в качестве компактных представлений звуковых сигналов. Обычно они вычисляются после того, как звуковой сигнал передается через набор фильтров, и энергия в отдельных фильтрах суммирована. Исследователи предложили различные наборы фильтров на основе психоакустических экспериментов (таких как mel, Кора и ERB). Используя cepstralCoefficients
функция, можно задать собственный набор фильтров и затем анализировать получившиеся cepstral коэффициенты.
Читайте в звуковом файле для анализа.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');
Спроектируйте набор фильтров, который состоит из 20 треугольных фильтров с ребрами полосы в области значений 62,5 Гц к 8 000 Гц. Распространите фильтры равномерно в логарифмической области. Для простоты спроектируйте фильтры в интервалах. Большинство популярных слуховых наборов фильтров спроектировано в непрерывной области, такой как Гц, mel, или Кора, и затем деформировалось назад к интервалам.
numFilters =20; filterbankStart =
62.5; filterbankEnd =
8000; numBandEdges = numFilters + 2; NFFT = 1024; filterBank = нули (numFilters, NFFT); bandEdges = logspace (log10 (filterbankStart), log10 (filterbankEnd), numBandEdges); bandEdgesBins = вокруг ((bandEdges/fs) *NFFT) + 1; for ii = 1:numFilters filt = triang (bandEdgesBins (ii+2)-bandEdgesBins(ii)); leftPad = bandEdgesBins (ii); rightPad = NFFT - numel (filt) - leftPad; filterBank (ii, :) = [нули (1, leftPad), filt', нули (1, rightPad)]; end
Постройте набор фильтров.
frequencyVector = (fs/NFFT)*(0:NFFT-1);
plot(frequencyVector,filterBank');
xlabel('Hz')
axis([0 frequencyVector(NFFT/2) 0 1])
Преобразуйте звуковой сигнал с помощью stft
функция, и затем применяет пользовательский набор фильтров. Примените набор фильтров к представлению частотного диапазона, чтобы создать пользовательскую слуховую спектрограмму. Постройте спектрограмму.
[S,~,t] = stft(audioIn,fs,"Window",hann(NFFT,'periodic'),"FrequencyRange","twosided"); S = abs(S); spec = filterBank*S; surf(t,bandEdges(2:end-1),10*log10(spec),'EdgeColor','none') view([0,90]) axis([t(1) t(end) bandEdges(2) bandEdges(end-1)]) xlabel('Time (s)') ylabel('Frequency (Hz)') c = colorbar; c.Label.String = 'Power (dB)';
Вызовите cepstralCoefficients
с пользовательской слуховой спектрограммой, чтобы создать пользовательские cepstral коэффициенты.
ccc = cepstralCoefficients(S);
Создайте dsp.AudioFileReader
возразите, чтобы читать в покадровом аудио. Создайте dsp.AsyncBuffer
возразите, чтобы буферизовать вход в перекрытые системы координат.
fileReader = dsp.AudioFileReader("Ambiance-16-44p1-mono-12secs.wav");
buff = dsp.AsyncBuffer;
Спроектируйте двухсторонний mel набор фильтров, который совместим с 30 MS Windows.
windowLength = round(0.03*fileReader.SampleRate); filterBank = designAuditoryFilterBank(fileReader.SampleRate,"FFTLength",windowLength,"OneSided",false);
В цикле аудиопотока:
Считайте систему координат данных из звукового файла.
Запишите систему координат данных к буферу.
Если достаточно данных доступно для транзитного участка, считайте систему координат на 30 мс данных из буфера с перекрытием на 20 мс между системами координат.
Преобразуйте данные к спектру величины.
Примените mel набор фильтров, чтобы создать mel спектр.
Вызовите cepstralCoefficients
возвратить частоту mel cepstral коэффициенты (MFCC).
win = hann(windowLength,'periodic'); overlapLength = round(0.02*fileReader.SampleRate); hopLength = windowLength - overlapLength; while ~isDone(fileReader) audioIn = fileReader(); write(buff,audioIn); while buff.NumUnreadSamples > hopLength x = read(buff,windowLength,overlapLength); X = abs(fft(x.*win)); melSpectrum = filterBank*X; melcc = cepstralCoefficients(melSpectrum); end end
S
— Спектрограмма или слуховая спектрограммаСпектрограмма или слуховая спектрограмма в виде L-by-M матрица или L-by-M-by-N трехмерный массив, где:
L Количество диапазонов частот
M NumberOfFrames
N Количество каналов
Типы данных: single
| double
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'NumCoeffs',16
NumCoeffs
— Количество cepstral коэффициентов возвращено
(значение по умолчанию) | положительное целое число, больше, чем одноКоличество коэффициентов, возвращенных для каждого окна данных в виде разделенной запятой пары, состоящей из 'NumCoeffs'
и положительное целое число, больше, чем одно.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Rectification
— Тип нелинейного исправления'log'
(значение по умолчанию) | 'cubic-root'
| 'none'
Тип нелинейного исправления, примененного до дискретного косинусного преобразования в виде разделенной запятой пары, состоящей из 'Rectification'
и 'log'
, 'cubic-root'
, или 'none'
.
Типы данных: char |
string
coeffs
— Коэффициенты CepstralКоэффициенты Cepstral, возвращенные как M-by-B матрица или M-by-B-by-N массив, где:
M Количество кадров (столбцы) входа.
B Количество коэффициентов возвращено на систему координат. Это определяется NumCoeffs
.
N Количество каналов (страницы) входа.
Типы данных: single
| double
Учитывая представление частоты времени, cepstralCoefficients
функция выполняет следующие операции на каждом спектре, индивидуально, как описано в [1]:
Исправляет спектр путем применения логарифма или кубического корня, как задано Rectification
параметр.
Преобразовывает исправленный спектр с помощью DCT-II, преобразовывают.
Возвращает первый NumCoeffs
от cepstral представления.
[1] Rabiner, Лоуренс Р. и Рональд В. Шафер. Теория и приложения цифровой речевой обработки. Верхний Сэддл-Ривер, NJ: Пирсон, 2010.
mfcc
| gtcc
| audioDelta
| designAuditoryFilterBank
| melSpectrogram
| audioFeatureExtractor
| stft
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.