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.

Дельта и дельта-дельта коэффициентов mel frequency cepstral (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);

contefficentToDisplay = 4;

tiledlayout (3,1)
nexttile
график (t, melcc (:, коэффициентToDisplay + 1))
ylabel ('Coefficient ' + строка (коэффициентToDisplay))
nexttile
график (t, melccDelta (:, коэффициентToDisplay + 1))
ylabel ('Delta')
nexttile
график (t, melccDeltaDelta (:, коэффициентToDisplay + 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), которая включает M выборки перед текущей выборкой и M выборки после текущей выборки.

delta=k=MMkx(k)k=MMk2

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

Ссылки

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

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

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

.

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

Введенный в R2020b