Я хочу извлечь локальный максимум из кадра 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) для достижения своей цели.
Может ли кто-нибудь указать мне? Любая помощь будет оценена по достоинству.
Итак, вы имеете в виду, если я использую 'ps', я извлекаю самый высокий градиент. Чтобы извлечь локальный максимум, я должен использовать 's' вместо этого. Кстати, извлечение локального максимума имеет какое-либо особое значение в контексте обработки спектрограмм.Потому что я прочитал его из статьи, и я пытаюсь понять, почему автор хочет извлечь локальный максимум – wqlin
. Кроме того, я обновил свой вопрос, поэтому, если у вас есть свободное время, можете ли вы взглянуть на него? Благодарю. – wqlin
Причина, по которой вы используете спектрограмму, которая является кратковременной FT, заключается в том, что входной сигнал нестационарен, т. Е. Частотный контент изменяется со временем. Поэтому, если вам интересно узнать резонансную частоту, то есть частоту с наибольшей амплитудой, в течение каждого временного окна вам нужен локальный максимум S. –