【发布时间】:2017-04-04 14:03:25
【问题描述】:
我想在用频谱图处理信号后从 FFT 帧中提取局部最大值。
具体来说,我有一个音频文件,它是一个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% 的任何局部最大值。
下面显示了使用上述数据时频谱图的样子: 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) 来实现我的目标。
谁能指出我?任何帮助将不胜感激。
【问题讨论】:
标签: matlab audio signal-processing spectrogram