exponenta event banner

audioDelta

Вычислить дельта-функции

Описание

пример

delta = audioDelta(x) возвращает дельта-признаки ввода x. Столбцы x рассматриваются как независимые каналы.

пример

delta = audioDelta(x,deltaWindowLength) задает длину дельта-окна.

пример

delta = audioDelta(x,deltaWindowLength,initialCondition) задает начальное состояние фильтра.

пример

[delta,finalCondition] = audioDelta(x,___) также возвращает конечное условие фильтра.

Примеры

свернуть все

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

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

Создание audioFeatureExtractor обеспечение возможности выделения некоторых спектральных признаков во времени из звука. Звонить extract для извлечения звуковых функций.

afe = audioFeatureExtractor('SampleRate',fs, ...
    'spectralCentroid',true, ...
    'spectralSlope',true);

audioFeatures = extract(afe,audioIn);

Звонить audioDelta для аппроксимации первой производной спектральных признаков во времени.

deltaAudioFeatures = audioDelta(audioFeatures);

Постройте график спектральных характеристик и дельты спектральных характеристик.

map = info(afe);
tiledlayout(2,1)
nexttile
plot(audioFeatures(:,map.spectralCentroid))
ylabel('Spectral Centroid')
nexttile
plot(deltaAudioFeatures(:,map.spectralCentroid))
ylabel('Delta Spectral Centroid')
xlabel('Frame')

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

tiledlayout(2,1)
nexttile
plot(audioFeatures(:,map.spectralSlope))
ylabel('Spectral Slope')
nexttile
plot(deltaAudioFeatures(:,map.spectralSlope))
ylabel('Delta Spectral Slope')
xlabel('Frame')

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

Дельта и дельта-дельта частотных кепстральных коэффициентов (MFCC) часто используются с MFCC для машинного обучения и приложений глубокого обучения.

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

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

Используйте designAuditoryFilterBank создание одностороннего набора фильтров частотной области.

analysisWindowLength = round(fs*0.03);
fb = designAuditoryFilterBank(fs,"FFTLength",analysisWindowLength);

Используйте stft функция преобразования звукового сигнала в комплексное одностороннее представление в частотной области. Преобразуйте STFT в величину и примените фильтрацию в частотной области.

[S,~,t] = stft(audioIn,fs,"Window",hann(analysisWindowLength,"periodic"),"FrequencyRange","onesided");
auditorySTFT = fb*abs(S);

Позвоните в cepstralCoefficients функция извлечения MFCC.

melcc = cepstralCoefficients(auditorySTFT);

Позвоните в audioDelta для вычисления дельты MFCC. Звонить audioDelta снова для вычисления дельта-дельта MFCC. Постройте график результатов.

deltaWindowLength = 21;

melccDelta = audioDelta(melcc,deltaWindowLength);
melccDeltaDelta = audioDelta(melccDelta,deltaWindowLength);

coefficientToDisplay = 4;

tiledlayout(3,1)
nexttile
plot(t,melcc(:,coefficientToDisplay+1))
ylabel('Coefficient ' + string(coefficientToDisplay))
nexttile
plot(t,melccDelta(:,coefficientToDisplay+1))
ylabel('Delta')
nexttile
plot(t,melccDeltaDelta(:,coefficientToDisplay+1))
xlabel('Time (s)')
ylabel('Delta-Delta')

Figure contains 3 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line. Axes 3 contains an object of type line.

Можно вычислить дельту потоковых сигналов, передавая состояние в и из audioDelta функция.

Создать dsp.AudioFileReader объект для покадрового считывания аудиофайла. Создание audioDeviceWriter объект для записи звука в динамик. Создать timescope изобретение позволяет визуализировать изменение гармонического отношения во времени.

fileReader = dsp.AudioFileReader("FemaleSpeech-16-8-mono-3secs.wav","SamplesPerFrame",32,"PlayCount",3);
deviceWriter = audioDeviceWriter("SampleRate",fileReader.SampleRate);
scope = timescope("SampleRate",fileReader.SampleRate/fileReader.SamplesPerFrame, ...
    "TimeSpanSource","Property", ...
    "TimeSpan",3, ...
    "YLimits",[-1,1], ...
    "Title","Delta of Harmonic Ratio");

В то время как аудиофайл имеет непрочитанные кадры данных:

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

  2. Вычислить гармоническое отношение этого кадра

  3. Вычисление дельты гармонического отношения

  4. Запись аудиокадра в динамик

  5. Запишите изменение гармонического отношения в объем

При каждом вызове audioDelta, перезаписать предыдущее состояние. Инициализируйте состояние с помощью пустого массива.

z = [];
while ~isDone(fileReader)
    audioIn = fileReader();
    
    hr = harmonicRatio(audioIn,fileReader.SampleRate,"Window",hann(fileReader.SamplesPerFrame,'periodic'),"OverlapLength",0);
    
    [deltaHR, z] = audioDelta(hr,5,z);
    
    deviceWriter(audioIn);
    
    scope(deltaHR)
end
release(scope)

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

свернуть все

Звуковая функция, заданная как скаляр, вектор или матрица. Столбцы входа обрабатываются как независимые каналы.

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

Длина окна, по которой вычисляется дельта, заданная как нечетное целое число, равное или большее 3.

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

Начальное условие фильтра, используемого для вычисления дельты, заданного как вектор, матрица или многомерный массив. Первое измерение initialCondition должны равняться deltaWindowLength-1. Остальные размеры initialCondition должны соответствовать остальным размерам входа x. Исходное условие по умолчанию, [], эквивалентно инициализации состояния со всеми нулями.

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

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

свернуть все

Дельта звуковых функций, возвращаемых в виде вектора или матрицы с теми же размерами, что и входные данные x.

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

Конечное условие фильтра, возвращаемое в виде вектора, матрицы или многомерного массива. Окончательное условие возвращается в том же размере, что и initialCondition.

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

Алгоритмы

Функция audioDelta использует аппроксимацию наименьших квадратов локального наклона по области, центрированной на выборке x (k), которая включает в себя М выборок перед текущей выборкой и М выборок после текущей выборки.

delta=∑k=−MMk x (k) ∑k=−MMk2

M равно floor(deltaWindowLength/2). Для получения более подробной информации см. [1].

Ссылки

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

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

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

.

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

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