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 cepstral коэффициентов (MFCC) часто используются с MFCC для машинного обучения и применения глубокого обучения.

Читайте в звуковом файле.

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

Используйте designAuditoryFilterBank функционируйте, чтобы спроектировать односторонний частотный диапазон mel набор фильтров.

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
график (t, melcc (: coefficientToDisplay+1))
yLabel 'Coefficient ' + представьте (coefficientToDisplay) в виде строки),
nexttile
график (t, melccDelta (: coefficientToDisplay+1))
yLabel 'Delta')
nexttile
график (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

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

свернуть все

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

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

Итоговое условие фильтра, возвращенного как вектор, матрица или многомерный массив. Итоговое условие возвращено как тот же размер как initialCondition.

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

Алгоритмы

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

delta=k=MMkx(k)k=MMk2

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

Ссылки

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

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

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

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

Введенный в R2020b