spectralFlatness

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

Описание

пример

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

пример

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

[flatness,arithmeticMean,geometricMean] = spectralFlatness(___) возвращает спектральное среднее арифметическое и спектральное среднее геометрическое.

Примеры

свернуть все

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

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

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

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

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

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

flatness = spectralFlatness(s,cf);

plot(t,flatness)
xlabel('Time (s)')
ylabel('Flatness')

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

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

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

flatness = spectralFlatness(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(flatness,1));
plot(t,flatness)
xlabel('Time (s)')
ylabel('Flatness')

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

свернуть все

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

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

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

Алгоритмы

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

плоскость=(k=b1b2sk)1b2b11b2b1k=b1b2sk

где

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

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

Ссылки

[1] Джонстон, J.d. "Преобразуйте Кодирование Звуковых сигналов Используя Перцепционные Шумовые Критерии". Журнал IEEE на Выбранных областях в Коммуникациях. Издание 6, Номер 2, 1988, стр 314–323.

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

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

Введенный в R2019a