How to calculate the width that contains 60% of the total area of peaks?
1 view (last 30 days)
Show older comments
So starting from the center (where the max peak always lies), I want to calculate automatically the width that contains 60% of the total area under multiple peaks. How can I do that? Attached is the normalized intensities and positions.
Below is the code to an attempt to get the contribution of the main peak only from the total area:
TotalArea=trapz(x2,Int);
lims = (x2>= -3.90625E-5 ) & (x2<= 3.90625E-5); %manually selected
MainPeakArea=trapz(x2(lims),Int(lims));
MainLobePower = (MainPeakArea/TotalArea)*100;
0 Comments
Accepted Answer
Chunru
on 25 Apr 2022
load position
load Intensity
whos
plot(x2, Int); hold on
% find the max
[maxI, idx] = max(Int);
maxX = x2(idx)
n = length(x2);
Atotal = trapz(x2, Int);
for w=1:length(x2)
ii = max(idx-w, 1):min(idx+w, n);
A = trapz(x2(ii), Int(ii));
if A/Atotal>=0.6
break
end
end
area(x2(ii), Int(ii));
plot(x2(idx), Int(idx), 'r^');
xlim([-1 1]*1e-3)
title(sprintf('Width: %g - %g', x2(ii(1)), x2(ii(end)) ));
More Answers (1)
Bruno Luong
on 25 Apr 2022
Edited: Bruno Luong
on 25 Apr 2022
load Intensity.mat
load position.mat
ifun=@(x) interp1(x2,Int,x,'linear','extrap');
I0=integral(ifun,x2(1),x2(end))
x = fzero(@(x) integral(ifun,-x,x)-0.6*I0,0) % the interval is (-x,x) width is 2*x
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!