exponenta event banner

cepstralCoefficients

Извлечение кепстральных коэффициентов

Описание

пример

coeffs = cepstralCoefficients(S) возвращает кепстральные коэффициенты с течением времени. Вход, 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.

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");

Кэпстральные коэффициенты обычно используются как компактные представления звуковых сигналов. Обычно они вычисляются после прохождения аудиосигнала через набор фильтров и суммирования энергии в отдельных фильтрах. Исследователи предложили различные банки фильтров, основанные на психоакустических экспериментах (таких как mel, Bark и ERB). Использование cepstralCoefficients можно определить собственный пользовательский банк фильтров, а затем проанализировать полученные кепстральные коэффициенты.

Чтение аудиофайла для анализа.

[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');

Спроектируйте набор фильтров, состоящий из 20 треугольных фильтров с краями полос в диапазоне от 62,5 Гц до 8000 Гц. Равномерно распределите фильтры в домене журнала. Для простоты спроектируйте фильтры в бункерах. Большинство популярных банков слуховых фильтров разработаны в непрерывной области, такой как Hz, mel или Bark, а затем деформированы обратно в бункеры.

numFilters = 20;

filterbankStart = 62.5;
filterbankEnd = 8000;

numBandEdges = numFilters + 2;
NFFT = 1024;
filterBank = zeros(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,:) = [zeros(1,leftPad),filt',zeros(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 с помощью пользовательской слуховой спектрограммы для создания пользовательских кепстральных коэффициентов.

ccc = cepstralCoefficients(S);

Создать dsp.AudioFileReader объект для чтения в аудио покадровом режиме. Создать dsp.AsyncBuffer объект для буферизации входных данных в перекрывающиеся кадры.

fileReader = dsp.AudioFileReader("Ambiance-16-44p1-mono-12secs.wav");
buff = dsp.AsyncBuffer;

Спроектируйте двусторонний банк фильтров mel, совместимый с окнами 30 мс.

windowLength = round(0.03*fileReader.SampleRate);
filterBank = designAuditoryFilterBank(fileReader.SampleRate,"FFTLength",windowLength,"OneSided",false);

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

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

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

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

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

  5. Примените набор фильтров mel для создания спектра mel.

  6. Звонить cepstralCoefficients для возврата кепстральных коэффициентов частоты mel (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

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

свернуть все

Спектрограмма или слуховая спектрограмма, определенная как матрица Д на М или 3D множество Д на М на Н, где:

  • 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

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

свернуть все

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

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

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

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

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

Алгоритмы

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

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

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

  3. Возвращает первый NumCoeffs из кепстрального представления.

Ссылки

[1] Рабинер, Лоуренс Р. и Рональд В. Шефер. Теория и применение цифровой обработки речи. Река Верхнее Седло, Нью-Джерси: Пирсон, 2010.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.

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

Представлен в R2020b