Извлечь локальный максимум из кадра БПФ после обработки спектрограммой с использованием Matlab

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

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

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

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

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

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

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

После извлечения резонансов из изображения спектрограммы

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

Вот мой код:

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

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

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


person wqlin    schedule 21.11.2016    source источник


Ответы (1)


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

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

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

person Sriharsha Madala    schedule 21.11.2016
comment
Вы имеете в виду, что если я использую ps, я получаю самый высокий градиент. Чтобы извлечь локальный максимум, я должен использовать вместо этого s. Кстати, имеет ли извлечение локального максимума особый смысл в контексте обработки спектрограмм. Потому что я читал это из статьи и пытаюсь понять, почему автор хочет извлечь локальный максимум - person wqlin; 22.11.2016
comment
Кроме того, я обновил свой вопрос, так что если у вас есть свободное время, можете ли вы его взглянуть? Спасибо. - person wqlin; 22.11.2016
comment
Причина, по которой вы используете спектрограмму, которая является кратковременной FT, заключается в том, что входной сигнал нестационарен, то есть частотный состав изменяется со временем. Поэтому, если вы хотите узнать резонансную частоту, то есть частоту с наибольшей амплитудой, в каждом временном окне, вам нужен локальный максимум S. - person Sriharsha Madala; 22.11.2016
comment
Хорошо, я понимаю. Кстати, подскажите, что это |FFT|db означает? - person wqlin; 23.11.2016
comment
Это просто означает величину БПФ в дБ. - person Sriharsha Madala; 23.11.2016
comment
Если не возражаете, можете поделиться ссылкой на эту статью. Мне интересно. - person Sriharsha Madala; 23.11.2016
comment
да, это совершенно нормально. SpiroSmart: использование микрофона для измерения функции легких на мобильном телефоне. Вот ссылка на эту статью. Сейчас я работаю над spectrogram processing разделом, но застрял в нем. Так что, если вы найдете что-нибудь полезное, не могли бы вы сообщить мне? Спасибо! - person wqlin; 24.11.2016