spectralCrest

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

Описание

пример

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

пример

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

[crest,spectralPeak,spectralMean] = spectralCrest(___) возвращает спектральное пиковое и спектральное среднее значение.

Примеры

свернуть все

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

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

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

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

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

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

Вычислите гребень mel спектрограммы в зависимости от времени. Постройте график результатов.

crest = spectralCrest(s,cf);

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

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

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

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

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

crest = spectralCrest(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(crest,1));
plot(t,crest)
xlabel('Time (s)')
ylabel('Crest')

Figure contains an axes object. The axes object 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. Регистрируйте спектральный гребень для более позднего графического вывода.

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

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

while ~isDone(fileReader)
    audioIn = fileReader();
    crest = spectralCrest(audioIn,fileReader.SampleRate, ...
                          'Window',hamming(size(audioIn,1)), ...
                          'OverlapLength',0);
    logger(crest)
end

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

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

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

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

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

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

Создайте 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);
        
        crest = spectralCrest(audioBuffered,fs, ...
                              'Window',win, ...
                              'OverlapLength',0);
        logger(crest)
    end
    
end
release(fileReader)

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

plot(logger.Buffer)
ylabel('Crest (Hz)')

Figure contains an axes object. The axes object 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 является количеством спектральных значений на данных частотах f, M является количеством отдельных спектров, и N является количеством каналов.

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

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

Аргументы name-value

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

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

Примечание

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

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

свернуть все

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

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

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

Алгоритмы

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

crest=max(sk[b1,b2])1b2b1k=b1b2sk

где

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

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

Ссылки

[1] Петерс, G. "Большой набор функций аудио для звукового описания (Подобие и классификация) в проекте CUIDADO". Технический отчет; IRCAM: Париж, Франция, 2004.

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

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

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

Введенный в R2019a