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

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

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

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

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

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

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

  6. Вызовите 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

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

свернуть все

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

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

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

Типы данных: 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] Rabiner, Лоуренс Р. и Рональд В. Шафер. Теория и приложения цифровой речевой обработки. Верхний Сэддл-Ривер, NJ: Пирсон, 2010.

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

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

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

Введенный в R2020b