Извлечение коэффициентов 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
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.