exponenta event banner

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 с помощью 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 если

  • Вход в контур аудиопотока имеет переменную выборку на кадр.

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

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

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

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.

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

свернуть все

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

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

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

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

  • Если f является вектором, x интерпретируется как сигнал частотной области, и f интерпретируется как частоты, в Гц, соответствующие строкам x. В этом случае x должен быть действительным массивом L-за-M-за-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, size(Window,1)).

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

Количество ячеек, используемых для вычисления DFT входных выборок с окнами, указанных как разделенная запятыми пара, состоящая из '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 (фк мк1) 3ск (мк2) 3∑k=b1b2sk

где

  • fk - частота в Гц, соответствующая ячейке k.

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

  • b1 и b2 являются краями полосы в ячейках, по которым вычисляется спектральная асимметрия.

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

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

Ссылки

[1] Peeters, G. «Большой набор звуковых функций для описания звука (подобие и классификация) в проекте CUIDADO». Технический отчет; ИРКАМ: Париж, Франция, 2004 год.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.

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

Представлен в R2019a