spectralFlux

Спектральный поток для аудиосигналов и слуховых спектрограмм

Описание

пример

flux = spectralFlux(x,f) возвращает спектральный поток сигнала, x, со временем. Спектральный поток является мерой изменчивости спектра с течением времени. Как интерпретируется функция x зависит от формы f.

пример

flux = spectralFlux(x,f,initialCondition) задает предыдущее спектральное состояние. Этот синтаксис поддерживается только для входов частотного диапазона.

пример

flux = spectralFlux(___,Name,Value) задает опции с использованием одного или нескольких Name,Value аргументы в виде пар.

Для примера, flux = spectralFlux(x,f,'NormType',1) вычисляет спектральный поток по норме типа 1.

пример

[flux,finalCondition] = spectralFlux(___) также возвращает окончательное спектральное состояние.

Примеры

свернуть все

Прочтите в аудио файла, вычислите поток с помощью параметров по умолчанию, а затем постройте график результатов.

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

t = linspace(0,size(audioIn,1)/fs,size(flux,1));
plot(t,flux)
xlabel('Time (s)')
ylabel('Flux')

Figure contains an axes. The axes contains an object of type line.

Прочтите в аудио файла, а затем вычислите mel spectrogram с помощью melSpectrogram функция. Вычислите поток мел-спектрограммы с течением времени. Постройте график результатов.

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

[s,cf,t] = melSpectrogram(audioIn,fs);

flux = spectralFlux(s,cf);

plot(t,flux)
xlabel('Time (s)')
ylabel('Flux')

Figure contains an axes. The axes contains an object of type line.

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

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

Вычислите поток спектра степени с течением времени. Вычислите поток для 50 мс Окон Хэмминга данных с перекрытием 25 мс. Используйте область значений от 62,5 Гц до fs/ 2 для вычисления потока. Постройте график результатов.

flux = spectralFlux(audioIn,fs, ...
                    'Window',hamming(round(0.05*fs)), ...
                    'OverlapLength',round(0.025*fs), ...
                    'Range',[62.5,fs/2]);
                        
t = linspace(0,size(audioIn,1)/fs,size(flux,1));
plot(t,flux)
xlabel('Time (s)')
ylabel('Flux')

Figure contains an axes. The axes contains an object of type line.

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

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

fileReader = dsp.AudioFileReader('Counting-16-44p1-mono-15secs.wav');
inputBuffer = dsp.AsyncBuffer;
logger = dsp.AsyncBuffer;

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

  1. Чтение в систему координат аудио данных из вашего источника.

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

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

  4. Вычислите одностороннюю величину короткого преобразования Фурье.

  5. Вычислите спектральный поток.

  6. Логгирование спектрального потока для последующего графического изображения.

fs = fileReader.SampleRate;

samplesPerFrame = round(fs*0.05);
samplesOverlap = round(fs*0.025);

samplesPerHop = samplesPerFrame - samplesOverlap;

win = hamming(samplesPerFrame,'periodic');

Sprev = [];
while ~isDone(fileReader)
    audioIn = fileReader();
    write(inputBuffer,audioIn);
    
    while inputBuffer.NumUnreadSamples >= samplesPerHop
        audioBuffered = read(inputBuffer,samplesPerFrame,samplesOverlap);
        [S,f] = stft(audioBuffered,fs,"Window",win,"OverlapLength",samplesOverlap,"FrequencyRange","onesided");
        [flux,Sprev] = spectralFlux(abs(S),f,Sprev);
        write(logger,flux);
    end
    
end
release(fileReader)

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

plot(read(logger))
ylabel('Flux')

Figure contains an axes. The axes contains an object of type line.

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

свернуть все

Входной сигнал, заданный как вектор, матрица или трехмерный массив. Как интерпретируется функция x зависит от формы f.

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

Частота дискретизации или вектор частоты в Гц, заданная в виде скаляра или вектора, соответственно. Как интерпретируется функция x зависит от формы f:

  • Если f является скаляром, x интерпретируется как сигнал временной области и f интерпретируется как частота дискретизации. В этом случае x должен быть вектором действительных чисел или матрицей. Если x задается как матрица, столбцы интерпретируются как отдельные каналы.

  • Если f является вектором, x интерпретируется как сигнал частотного диапазона и f интерпретируется как частоты в Гц, соответствующие строкам x. В этом случае x должен быть вещественным L -by M -by N массивом, где L - количество спектральных значений на заданных частотах fM - количество отдельных спектров, а N - количество каналов.

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

Предыдущее спектральное состояние, заданное как L -by - N матрица, где:

  • L - количество интервалов в одностороннем спектральном представлении, равное numel (f).

  • N - количество каналов аудио данных, равное размеру (x,3).

Если initialCondition не задан, или задан как пустой, spectralFlux рассматривает первый спектр как повторяющийся. То есть первый flux выход равен нулю.

Зависимости

Этот входной параметр действителен, только если вход, x, является представлением аудио в частотном диапазоне. spectralFlux функция интерпретирует область входа x на основе размера f.

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

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'Window',hamming(256)

Нормальный тип, используемый для вычисления потока, задается как разделенная разделенными запятой парами, состоящая из 'NormType' и 2 или 1.

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

Примечание

Следующие аргументы пары "имя-значение" применяются, если x является сигналом временной области. Если x является сигналом частотного диапазона, следующие аргументы пары "имя-значение" игнорируются.

Окно, примененное во временном интервале, задается как разделенная разделенными запятой парами, состоящая из 'Window' и вектор действительных чисел. Количество элементов в векторе должно быть в области значений [1, size (x,1)]. Количество элементов в векторе также должно быть больше OverlapLength.

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

Количество выборок, перекрывающихся между смежными окнами, заданное как разделенная разделенными запятой парами, состоящая из 'OverlapLength' и целое число в области значений [0, размер (Window,1)).

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

Количество интервалов, используемых для вычисления ДПФ оконных входных выборок, заданное как разделенная разделенными запятой парами, состоящая из 'FFTLength' и положительное скалярное целое число. Если не задано, FFTLength по умолчанию задается количество элементов в Window.

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

Частотная область значений в Гц, заданный как разделенная разделенными запятой парами, состоящая из 'Range' и двухэлементный вектор-строка с увеличением вещественных значений в области значений [0, f/2].

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

Тип спектра, заданный как разделенная разделенными запятой парами, состоящая из 'SpectrumType' и 'power' или 'magnitude':

  • 'power' - Спектральный поток вычисляется для одностороннего спектра степени.

  • 'magnitude' - Спектральный поток вычисляется для одностороннего спектра величин.

Типы данных: char | string

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

свернуть все

Спектральный поток в Гц, возвращаемый в виде скаляра, вектора или матрицы. Каждая строка flux соответствует спектральному потоку окна x. Каждый столбец flux соответствует независимому каналу.

Окончательное спектральное состояние, возвращенное как L -by - N матрица, где:

  • L - количество интервалов в одностороннем спектральном представлении, равное numel (f).

  • N - количество каналов аудио данных, равное размеру (x,3).

Зависимости

Этот выходной аргумент действителен, только если вход, x, является представлением аудио в частотном диапазоне. spectralFlux функция интерпретирует область входа x на основе размера f.

Алгоритмы

Спектральный поток вычисляется как описано в [1]:

flux(t)=(k=b1b2|sk(t)sk(t1)|P)1P

где

  • sk - спектральное значение в k интервала.

  • b 1 и b 2 являются краями диапазона в интервалах, по которым можно вычислить спектральный поток.

  • P является типом нормы. Тип нормы можно задать используя NormType.

Ссылки

[1] Шейрер, Э. и М. Слейни. «Конструкция и оценка робастного мультифеатурного речевого/музыкального дискриминатора». Международная конференция IEEE по акустике, речи и обработке сигналов. Том 2, 1997, с. 1221-1224.

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

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

.

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

Введенный в R2019a