2016-11-21 3 views
1

Я хочу извлечь локальный максимум из кадра FFT после обработки сигнала со спектрограммой.Извлечь локальный максимум из кадра FFT после обработки спектрограммой с использованием matlab

В частности, сказал, что у меня есть аудио-файл, который является wav файл и он собирается в следующем порядке:

телефон пользователя держать смартфон приблизительно вытянутой руки, дышать в полном объеме легких, и с силой выдохнуть пока весь объем легких не будет выслан. Микрофон телефона записывает выдох и хранит данные в wav-файле.

Затем я обрабатывать аудио с помощью спектрограммы следующую процедуру:

Во-первых, я буфера аудио в 30ms кадров (с 50% перекрытием между кадрами). Затем каждый кадр устанавливается в окно с использованием окна помех, а |FFT|db берется для создания спектрограммы амплитуды сигнала.

Вот как я сделать это с помощью MATLAB:

[X, FS] = audioread('Rec_002.wav'); 
info = audioinfo('Rec_002.wav'); 
window = (30*0.001/info.Duration)*info.TotalSamples; 
[s,f,t,ps]=spectrogram(X, window, [], [], FS); 

Rec_002.wav мой аудиофайл. После обработки сигнала со спектрограммой я хочу извлечь резонансы с использованием локального максимума в каждом кадре, рассчитанного по скользящему окну. Затем сохраняется любой локальный максимум, превышающий 20% от глобального максимума.

Ниже показано, как спектрограмма выглядит при использовании данных выше: Spectrogram image

Это показывает, что резонансы должно выглядеть как после извлечения из спектрограммы

After extracting resonaces from spectrogram image

В настоящее время я использую один из вывода аргумент s - Кратковременное преобразование Фурье для извлечения локального максимума.

Вот мой код:

local_max=max(abs(s)); 
threshold=0.2*max(local_max,[],2); 
local_max=local(:,local_max>threashold); 

Рассматриваются вопросы, что я не уверен, является ли это правильно использовать s или я должен использовать ps - спектральная плотность мощности (PSD) для достижения своей цели.

Может ли кто-нибудь указать мне? Любая помощь будет оценена по достоинству.

ответ

0

выход спектрограмме, в с, амплитуда частотной составляющей в вашем сигнале между [t1, t2].

Мощность Спектральная плотность, может использоваться для расчета количества мощности в диапазоне частот для заданной продолжительности времени (STFT) посредством суммирования (интеграция, если домен CT). Это несколько интуитивно понятно из названия «плотность».

Итак, если применить пороговую логику пс вместо s, вы будете в конечном итоге с самым высоким градиентом (локальный) вместо максимума (местного).

+0

Итак, вы имеете в виду, если я использую 'ps', я извлекаю самый высокий градиент. Чтобы извлечь локальный максимум, я должен использовать 's' вместо этого. Кстати, извлечение локального максимума имеет какое-либо особое значение в контексте обработки спектрограмм.Потому что я прочитал его из статьи, и я пытаюсь понять, почему автор хочет извлечь локальный максимум – wqlin

+0

. Кроме того, я обновил свой вопрос, поэтому, если у вас есть свободное время, можете ли вы взглянуть на него? Благодарю. – wqlin

+0

Причина, по которой вы используете спектрограмму, которая является кратковременной FT, заключается в том, что входной сигнал нестационарен, т. Е. Частотный контент изменяется со временем. Поэтому, если вам интересно узнать резонансную частоту, то есть частоту с наибольшей амплитудой, в течение каждого временного окна вам нужен локальный максимум S. –

Смежные вопросы