我需要使用matlab找到音频信号的最大峰值。我使用wavread
命令获得输入,并使用FFT将信号转换为频域。找到它的大小后,我需要存储峰值以便进一步计算。我怎样才能做到这一点?
答案 0 :(得分:0)
我猜你的IN_MAG
不是真正的向量,这意味着你要存储FFT的实部和虚部。我建议你阅读matlab文档的doc fft
,这样你就可以创建一个合适的向量。
如果您可以完成此操作,如果您想要一个唯一的峰值,最大值,只需使用函数max
。如果不是,你可以个性化你要找的东西,
假设找到前3个峰值,最小高度为0.5,彼此距离为10个点,
[pks, locs] = findpeaks(IN_MAG, 'NPEAKS', 3, 'MINPEAKHEIGHT', 0.5, 'MINPEAKDISTANCE', 10);
然后pks
是你的y
而locs
是你的x
坐标高峰。
编辑:
关于FFT,
让我们说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幅度信号。