cepstralCoefficients

Извлечение коэффициентов cepstral

Описание

пример

coeffs = cepstralCoefficients(S) возвращает коэффициенты cepstral с течением времени. Вход, S, должен быть реальным спектрограммой или слуховой спектрограммой.

пример

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])

Figure contains an axes. The axes contains 20 objects of type line.

Преобразуйте аудиосигнал, используя 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)';

Figure contains an axes. The axes contains an object of type surface.

Функции 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);

В цикле аудиопотока:

  1. Считайте систему координат данных из аудио файлов.

  2. Запишите систему координат данных в буфер.

  3. Если для скачка доступно достаточно данных, считайте систему координат 30 мс из буфера с перекрытием 20 мс между системами координат.

  4. Преобразуйте данные в спектр величин.

  5. Примените mel filter bank, чтобы создать mel spectrum.

  6. Функции 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

Входные параметры

свернуть все

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Тип нелинейного выпрямления, примененного до дискретного косинусного преобразования, заданный как разделенная разделенными запятой парами, состоящая из 'Rectification' и 'log', 'cubic-root', или 'none'.

Типы данных: char | string

Выходные аргументы

свернуть все

Коэффициенты Cepstral, возвращенные как M -by- B матрица или M -by- B -by- N массив, где:

  • M -- Количество систем координат (столбцов) входа.

  • B -- Количество коэффициентов, возвращаемых на систему координат. Это определяется NumCoeffs.

  • N -- Количество каналов (страниц) входа.

Типы данных: single | double

Алгоритмы

Учитывая представление частоты во времени, cepstralCoefficients функция выполняет следующие операции на каждом спектре по отдельности, как описано в [1]:

  1. Исправляет спектр путем применения логарифма или кубического корня, как задано Rectification параметр.

  2. Преобразует выпрямленный спектр с помощью преобразования DCT-II.

  3. Возвращает первое NumCoeffs из представления cepstral.

Ссылки

[1] Рабинер, Лоуренс Р. и Рональд У. Шафер. Теория и приложения цифровой обработки речи. Upper Saddle River, NJ: Pearson, 2010.

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.

Массивы графических процессоров
Ускорите код, запустив на графическом процессорном модуле (GPU) с помощью Parallel Computing Toolbox™.

Введенный в R2020b