Obtaining 2 highest peaks of spectrum in dB
3 views (last 30 days)
Show older comments
Ashlyn McCann
on 11 Mar 2021
Commented: Mathieu NOE
on 12 Mar 2021
Pr= 20*(10^-6); %reference sound pressure level
n=length(y);
npoints= 2^nextpow2(n);
Ss = abs(fft(y)); % gets the spectrum, y is in Pa
SS = Ss/2
f = (0:n-1)*(fs/n); %gets x axis in frequencies
plot(f,SS)
[maxpks, maxloc]=findpeaks(SS(1:40000),'MinPeakProminence',5,'MinPeakDistance',50);
figure(1)
plot(f,(SS))
hold on
plot(f(maxloc), maxpks, 'r*')
sortpks=sort(maxpks);
[j,h]=size(sortpks);
h1=(sortpks(j)) %obtain highest peak
h2=(sortpks(j-1)) %obtain second highest peak
Pr= 20*(10^-6); %reference sound pressure level
H1 = (10*log10(h1.^2/Pr^2)) %convert to dB This value is double what it should be
H2 = (10*log10(h2.^2/Pr^2)) %convert to dB This value is just not picking up the value in dB of highest peak
H1H2 = (H1 - H2)
Accepted Answer
Mathieu NOE
on 11 Mar 2021
hello again !
you should probably use findpeaks once the spectrum is in dB (my own preference)
otherwise , you have seen in your other post how to use it with sorting options
6 Comments
More Answers (0)
See Also
Categories
Find more on Audio Processing Algorithm Design in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!