Извлечение коэффициентов cepstral
задает опции с использованием одного или нескольких coeffs = cepstralCoefficients(S,Name,Value)Name,Value аргументы в виде пар.
Для примера, coeffs = cepstralCoefficients(S,'Rectification','cubic-root') использует кубический корень выпрямления, чтобы вычислить коэффициенты.
Чтение аудио файла в рабочую область.
[audioIn,fs] = audioread('SpeechDFT-16-8-mono-5secs.wav');Преобразуйте аудиосигнал в представление частотного диапазона с помощью окон 30 мс с перекрытием 15 мс. Поскольку вход действителен, и, следовательно, спектр симметричен, можно использовать только одну сторону представления частотного диапазона без какой-либо потери информации. Преобразуйте комплексный спектр в спектр величин: информация о фазе отбрасывается при вычислении мел частотных кепстральных коэффициентов (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 spectrogram.
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);
Создайте одностороннюю группу гамматоновых фильтров частотного диапазона. Примените банк фильтров к представлению частотного диапазона, чтобы создать гамматоновую спектрограмму.
filterBank = designAuditoryFilterBank(fs,'FFTLength',windowLength,"FrequencyScale","erb"); gammaSpec = filterBank*S;
Функции cepstralCoefficients с гамматоновой спектрограммой для создания гамматоновых частотных кепстральных коэффициентов. Используйте кубический корень выпрямления.
gammacc = cepstralCoefficients(gammaSpec,"Rectification","cubic-root");
Коэффициенты Cepstral обычно используются как компактные представления аудиосигналов. Обычно они вычисляются после того, как аудиосигнал передается через банк фильтров, и энергия в отдельных фильтрах суммируется. Исследователи предложили различные банки фильтров, основанные на психоакустических экспериментах (таких как mel, Bark и ERB). Использование cepstralCoefficients можно задать свой собственный пользовательский банк фильтров, а затем проанализировать получившиеся коэффициенты cepstral.
Чтение в аудио файла для анализа.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');Проектируйте блок фильтров, который состоит из 20 треугольных фильтров с полосы ребер на область значений от 62,5 Гц до 8000 Гц. Равномерно распределите фильтры в области журнала. Для простоты проектируйте фильтры в интервалах. Большинство популярных банков слуховых фильтров спроектированы в непрерывной области, такой как Гц, мел или Барк, а затем деформированы обратно в интервалы.
numFilters =20; filterbankStart =
62.5; filterbankEnd =
8000; numBandEdges = numFilters + 2; NFFT = 1024; filterBank = нули (numFilters, NFFT); bandEdges = logspace (log10 (filterbankStart), log10 (filterbankEnd), numBandEdges); bandEdgesBins = round ((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 filter bank, который совместим с 30 мс окнами.
windowLength = round(0.03*fileReader.SampleRate); filterBank = designAuditoryFilterBank(fileReader.SampleRate,"FFTLength",windowLength,"OneSided",false);
В цикле аудиопотока:
Считайте систему координат данных из аудио файлов.
Запишите систему координат данных в буфер.
Если для скачка доступно достаточно данных, считайте систему координат 30 мс из буфера с перекрытием 20 мс между системами координат.
Преобразуйте данные в спектр величин.
Примените mel filter bank, чтобы создать mel spectrum.
Функции cepstralCoefficients для возврата коэффициентов mel frequency 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 -- Количество систем координат
N -- Количество каналов
Типы данных: single | double
Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.
'NumCoeffs',16'NumCoeffs' - Количество возвращенных коэффициентов cepstral13 (по умолчанию) | положительное целое число, больше единицыКоличество коэффициентов, возвращенных для каждого окна данных, заданное как разделенная разделенными запятой парами, состоящая из '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] Рабинер, Лоуренс Р. и Рональд У. Шафер. Теория и приложения цифровой обработки речи. Upper Saddle River, NJ: Pearson, 2010.
audioDelta | audioFeatureExtractor | designAuditoryFilterBank | gtcc | melSpectrogram | mfcc | stft
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.