我需要使用matlab找到音频信号的最大峰值 . 我使用 wavread 命令获得输入,并使用FFT将信号转换为频域 . 找到它的大小后,我需要存储峰值以便进一步计算 . 我怎样才能做到这一点?
wavread
我猜你的 IN_MAG 不是真正的向量,这意味着你要存储FFT的实部和虚部 . 我建议你阅读matlab文档的 doc fft ,这样你就可以创建一个合适的向量 .
IN_MAG
doc fft
如果你想完成这个,如果你想要一个独特的峰值,最大值,只需使用函数 max . 如果不是,你可以个性化你找到的东西,
max
假设找到最小高度为0.5且距离彼此相距10个点的前3个峰值,
[pks, locs] = findpeaks(IN_MAG, 'NPEAKS', 3, 'MINPEAKHEIGHT', 0.5, 'MINPEAKDISTANCE', 10);
那么 pks 就是你的 y 而 locs 是你的峰值的共同点 .
pks
y
locs
编辑:
至于FFT,
我们说 sig 是你的信号,
sig
t = linspace(0,L/Fs,L); % Fs is the sampling rate in Hz and L the signal length NFFT = 2^nextpow2(L); f = Fs/2*linspace(0,1,NFFT/2+1); fft_sig = fft(sig, NFFT)/L; magnitude_sig = = 2*abs(fft_sig(1:NFFT/2+1));
这是你正确的fft幅度信号 .
1 回答
我猜你的
IN_MAG
不是真正的向量,这意味着你要存储FFT的实部和虚部 . 我建议你阅读matlab文档的doc fft
,这样你就可以创建一个合适的向量 .如果你想完成这个,如果你想要一个独特的峰值,最大值,只需使用函数
max
. 如果不是,你可以个性化你找到的东西,假设找到最小高度为0.5且距离彼此相距10个点的前3个峰值,
那么
pks
就是你的y
而locs
是你的峰值的共同点 .编辑:
至于FFT,
我们说
sig
是你的信号,这是你正确的fft幅度信号 .