spectralRolloffPoint

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

Синтаксис

rolloffPoint = spectralRolloffPoint(x,f)
rolloffPoint = spectralRolloffPoint(x,f,Name,Value)

Описание

пример

rolloffPoint = spectralRolloffPoint(x,f) возвращает спектральную точку спада сигнала, x, в зависимости от времени. То, как функция интерпретирует x, зависит от формы f.

пример

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

Примеры

свернуть все

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

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

t = linspace(0,size(audioIn,1)/fs,size(rolloffPoint,1));
plot(t,rolloffPoint)
xlabel('Time (s)')
ylabel('Rolloff Point (Hz)')

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

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

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

rolloffPoint = spectralRolloffPoint(s,cf);

plot(t,rolloffPoint)
xlabel('Time (s)')
ylabel('Rolloff Point (Hz)')

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

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

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

rolloffPoint = spectralRolloffPoint(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(rolloffPoint,1));
plot(t,rolloffPoint)
xlabel('Time (s)')
ylabel('Rolloff Point (Hz)')

Создайте объект 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();
    rolloffPoint = spectralRolloffPoint(audioIn,fileReader.SampleRate, ...
                                       'Window',win, ...
                                       'OverlapLength',0);
    logger(rolloffPoint)
end

plot(logger.Buffer)
ylabel('Rolloff Point (Hz)')

Используйте dsp.AsyncBuffer если

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

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

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

Создайте объект 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);

        rolloffPoint = spectralRolloffPoint(audioBuffered,fs, ...
                                   'Window',win, ...
                                   'OverlapLength',0);
        logger(rolloffPoint)
    end

end
release(fileReader)

Постройте записанные данные.

plot(logger.Buffer)
ylabel('Rolloff Point (Hz)')

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

свернуть все

Входной сигнал, заданный как вектор, матрица или трехмерный массив. То, как функция интерпретирует 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 является количеством каналов.

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

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

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

Примечание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

Алгоритмы

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

rolloffPoint=i

таким образом, что

k=b1isk=κk=b1b2sk

где

  • sk является спектральным значением в интервале k.

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

  • κ является процентом полной энергии, содержавшей между b 1 и i. Можно установить κ с помощью Threshold.

Ссылки

[1] Scheirer, E. и М. Слэни, "Конструкция и Оценка Устойчивого Различителя Речи/Музыки Мультифункции", Международная конференция IEEE по вопросам Акустики, Речи и Обработки сигналов. Объем 2, 1997, стр 1221–1224.

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

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

Введенный в R2019a