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

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

[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')

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

[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')

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

Создайте 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')

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

свернуть все

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

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

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

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

  • Если f вектор, x интерпретирован как сигнал частотного диапазона и f интерпретирован как частоты, в Гц, соответствуя строкам x. В этом случае, x должен быть действительный L-by-M-by-N массив, где L является количеством спектральных значений на данных частотах f, M является количеством отдельных спектров, и 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, размер (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] Scheirer, E. и М. Слэни. "Конструкция и Оценка Устойчивого Различителя Речи/Музыки Мультифункции". Международная конференция IEEE по вопросам Акустики, Речи и Обработки сигналов. Объем 2, 1997, стр 1221–1224.

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

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

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

Введенный в R2019a