spectralSkewness

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

Описание

пример

skewness = spectralSkewness(x,f) возвращает спектральную наклонность сигнала, x, со временем. Как интерпретируется функция x зависит от формы f.

пример

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

[skewness,spread,centroid] = spectralSkewness(___) возвращает спектральный спред и спектральный центроид.

Примеры

свернуть все

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

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

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

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

skewness = spectralSkewness(s,cf);

plot(t,skewness)
xlabel('Time (s)')
ylabel('Skewness')

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 для вычисления перекоса. Постройте график результатов.

skewness = spectralSkewness(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(skewness,1));
plot(t,skewness)
xlabel('Time (s)')
ylabel('Skewness')

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

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

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

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

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

  2. Вычислите спектральную наклонность для системы координат аудио.

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

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

win = hamming(fileReader.SamplesPerFrame);
while ~isDone(fileReader)
    audioIn = fileReader();
    skewness = spectralSkewness(audioIn,fileReader.SampleRate, ...
                               'Window',win, ...
                               'OverlapLength',0);
    logger(skewness)
end

plot(logger.Buffer)
ylabel('Skewness')

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

Использование dsp.AsyncBuffer если

  • Вход в цикл аудиопотока имеет переменную samples-per-кадр.

  • Вход в цикл аудиопотока имеет несогласованные выборки-в-кадре с окном анализа spectralSkewness.

  • Вы хотите вычислить спектральную перекрываемость для перекрывающихся данных.

Создайте dsp.AsyncBuffer объект, сбросьте logger и отпустите средство чтения файлов.

buff = dsp.AsyncBuffer;
reset(logger)
release(fileReader)

Задайте, что спектральный перекос вычисляется для систем координат 50 мс с перекрытием 25 мс.

fs = fileReader.SampleRate;

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

samplesPerHop = samplesPerFrame - samplesOverlap;

win = hamming(samplesPerFrame);

while ~isDone(fileReader)
    audioIn = fileReader();
    write(buff,audioIn);
    
    while buff.NumUnreadSamples >= samplesPerHop
        audioBuffered = read(buff,samplesPerFrame,samplesOverlap);
        
        skewness = spectralSkewness(audioBuffered,fs, ...
                                   'Window',win, ...
                                   'OverlapLength',0);
        logger(skewness)
    end
    
end
release(fileReader)

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

plot(logger.Buffer)
ylabel('Skewness')

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 - количество каналов.

  • Количество строк x, L, должно быть равно количеству элементов f.

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

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

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

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

Примечание

Следующие аргументы пары "имя-значение" применяются, если 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

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

свернуть все

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

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

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

Алгоритмы

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

skewness=k=b1b2(fkμ1)3sk(μ2)3k=b1b2sk

где

  • fk - частота в Гц, соответствующая k интервала.

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

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

  • μ 1 является спектральным центроидом, вычисленным как описано spectralCentroid функция.

  • μ 2 является спектральным расширением, вычисленным как описано spectralSpread функция.

Ссылки

[1] Peeters, G. «A Large Set of Audio Features for Sound Description (Simility and Classification) in the CUIDADO Project». Технический отчет; IRCAM: Париж, Франция, 2004.

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

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

.

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

Введенный в R2019a
Для просмотра документации необходимо авторизоваться на сайте