So, i have this code:
[sound,fs,bits] = wavread(file);
[S,F,T] = spectrogram(sound, 256, 200, 256, fs);
plot(F,abs(S));
[sorted index] = sort(list,'descend');
现在我需要在S中找到最高的3个振幅峰值(在频率0到1000,1000和2000之间以及> 2000之间),为此,我做了以下几点:
ind = length(F);
for k=1:1:ind
if F(k) >= 0 && F(k) < 1000
listaAmpF1(k) = sorted(k);
else
if F(k) >= 1000 && F(k) < 2000
listaAmpF2(k) = sorted(k);
else
if F(k) >= 2000
listaAmpF3(k) = sorted(k);
end
end
end
end
maxAmpF1 = max(listaAmpF1);
maxAmpF2 = max(listaAmpF2);
maxAmpF3 = max(listaAmpF3);
假设我现在拥有所需的所有最大3安培,我现在需要找到相应的频率,我该怎么做?
编辑:S和F有不同的长度
答案 0 :(得分:0)
您可以使用findpeaks
功能:
F = [100 15 2010 1350 450 2500 1100 720 2900 26]; % just to make an example.
S = [1.1 2.9 3.7 4.0 3.0 1.1 2.9 3.7 4.0 3.0]; % just to make an example.
spect_orig = timeseries(abs(S), F,'Name','spect');
spect_resampled = resample(spect_orig, [1:max(F)]);
[peak_values, peak_frequencies] = findpeaks(reshape(spect_resampled.data, 1, []), 'MINPEAKDISTANCE', 500);
您可以调整参数MINPEAKDISTANCE
,使峰值位于您想要的间隔内。