melSpectrogram

Спектрограмма Мэла

Синтаксис

S = melSpectrogram(audioIn,fs)
S = melSpectrogram(audioIn,fs,Name,Value)
[S,F,T] = melSpectrogram(___)
melSpectrogram(___)

Описание

пример

S = melSpectrogram(audioIn,fs) возвращает mel спектрограмму аудиовхода на уровне частоты дискретизации fs. Функция обрабатывает столбцы входа, когда человек образовывает канал.

пример

S = melSpectrogram(audioIn,fs,Name,Value) задает опции с помощью одного или нескольких аргументов пары Name,Value.

пример

[S,F,T] = melSpectrogram(___) возвращает центральные частоты полос в Гц и местоположении каждого окна данных в секундах. Местоположение соответствует центру каждого окна. Можно использовать этот выходной синтаксис с любым из предыдущих входных синтаксисов.

пример

melSpectrogram(___) строит mel спектрограмму на поверхности в текущей фигуре.

Примеры

свернуть все

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

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

S = melSpectrogram(audioIn,fs);

[numBands,numFrames] = size(S);
fprintf("Number of bandpass filters in filterbank: %d\n",numBands)
fprintf("Number of frames in spectrogram: %d\n",numFrames)
Number of bandpass filters in filterbank: 32
Number of frames in spectrogram: 1551

Постройте mel спектрограмму.

melSpectrogram(audioIn,fs)

Вычислите mel спектры окон с 2048 точками с перекрытием с 1024 точками. Преобразуйте в частотный диапазон с помощью БПФ с 4096 точками. Передайте представление частотного диапазона через 64 полуперекрытых треугольных полосовых фильтра, которые порождают линейную оболочку столбцов от 62,5 Гц до 8 кГц.

[audioIn,fs] = audioread('FunkyDrums-44p1-stereo-25secs.mp3');

S = melSpectrogram(audioIn,fs, ...
                   'WindowLength',2048,...
                   'OverlapLength',1024, ...
                   'FFTLength',4096, ...
                   'NumBands',64, ...
                   'FrequencyRange',[62.5,8e3]);

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

melSpectrogram(audioIn,fs, ...
               'WindowLength',2048,...
               'OverlapLength',1024, ...
               'FFTLength',4096, ...
               'NumBands',64, ...
               'FrequencyRange',[62.5,8e3])

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

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

[audioIn,fs] = audioread('AudioArray-16-16-4channels-20secs.wav');

[S,cF,t] = melSpectrogram(audioIn,fs);

S = 10*log10(S+eps); % Convert to dB for plotting

for i = 1:size(S,3)
    figure(i)
    surf(t,cF,S(:,:,i),'EdgeColor','none');
    xlabel('Time (s)')
    ylabel('Frequency (Hz)')
    view([0,90])
    title(sprintf('Channel %d',i))
    axis([t(1) t(end) cF(1) cF(end)])
end

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

свернуть все

Аудиовход, заданный как вектор-столбец или матрица. Если задано как матрица, функция обрабатывает столбцы как независимые звуковые каналы.

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

Введите частоту дискретизации в Гц, заданном как положительная скалярная величина.

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

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

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

Пример: 'WindowLength',1024

Длина окна Analysis в выборках, заданных как пара, разделенная запятой, состоящая из 'WindowLength' и целого числа в области значений [2, size(audioIn,1)].

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

Окно Analysis перекрывает длину в выборках, заданных как пара, разделенная запятой, состоящая из 'OverlapLength' и целого числа в области значений [0, (WindowLength - 1)].

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

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

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

Количество mel полосовых фильтров, заданных как пара, разделенная запятой, состоящая из 'NumBands' и положительного целого числа.

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

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

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

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

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

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

свернуть все

Спектрограмма Мэла, возвращенная как вектор-столбец, матрица или трехмерный массив. Размерностями S является L-by-M-by-N, где:

  • L является количеством интервалов частоты в каждом mel спектре. NumBands и fs определяют L.

  • M является количеством кадров, в которые разделен звуковой сигнал. size(audioIn,1), WindowLength и OverlapLength определяют M.

  • N является количеством каналов, таким образом что N = size(audioIn,2).

Запаздывающие одноэлементные размерности удалены из вывода S.

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

Центральные частоты mel полосовых фильтров в Гц, возвращенном как вектор - строка с длиной size(S,1).

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

Местоположение каждого аналитического окна аудио в секундах, возвращенных как длина вектора - строки size(S,2). Местоположение соответствует центру каждого окна.

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

Алгоритмы

свернуть все

Функция melSpectrogram следует общему алгоритму, чтобы вычислить mel спектрограмму, как описано в [1].

В этом алгоритме аудиовход сначала буферизуется в кадры количества WindowLength выборок. Кадры перекрываются количеством OverlapLength выборок. Периодическое окно hamming применяется к каждому кадру, и затем кадр преобразован в представление частотного диапазона с числом точек FFTLength. Представление частотного диапазона может быть или значением или степенью, заданной SpectrumType. Каждый кадр представления частотного диапазона проходит через mel набор фильтров. Спектральные значения вывод от mel набора фильтров суммирован, и затем каналы, конкатенированы так, чтобы каждый кадр был преобразован к NumBands - вектор-столбец элемента.

Проект набора фильтров

mel набор фильтров разработан как полуперекрытые треугольные фильтры, равномерно распределенные в шкале mel. NumBands управляет количеством mel полосовых фильтров. средства управления FrequencyRange ребра полосы первого и последнего просачиваются mel набор фильтров. Фильтры нормированы их пропускной способностью, так, чтобы, если белый шум вводится к системе, каждый фильтр вывел равную сумму энергии.

Ссылки

[1] Rabiner, Лоуренс Р. и Рональд В. Шафер. Теория и приложения цифровой речевой обработки. Верхний Сэддл-Ривер, NJ: Пирсон, 2010.

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

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

Введенный в R2019a