- fit the curve to a gaussian and use the fit parameters to compute FWHM.
- Use findpeaks along with the half-height width reference. See demo.
Finding the full width half maximum (FWHM) of a rounded part of peak instead of sharp peaks
7 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Manny Kins
am 18 Nov. 2021
Kommentiert: Adam Danz
am 18 Nov. 2021
Hi, I have this plot where I want to find the FWHM around the main "bulge" of the plot (around the red line I have crudely drawn), ignoring the other sharper peaks. I have attached a file of the XY coordinates and would appreciate any help! Many thanks
0 Kommentare
Akzeptierte Antwort
Adam Danz
am 18 Nov. 2021
Bearbeitet: Adam Danz
am 18 Nov. 2021
This uses rmoutliers to remove the spike and then computes the FWHM of the resultant curve. You can play around with rmoutliers to get the expected curve or use a different method if you find something more suitable.
Other approaces:
data = load('FWHM_Help_Plot_Data.mat');
% Plot raw data
h(1) = plot(data.X, data.Z, 'DisplayName', 'RawData');
hold on
% Remove outliers
[Zm,idx] = rmoutliers(data.Z, 'movmedian', 300);
h(2) = plot(data.X(~idx), Zm, 'DisplayName', 'rmOutlier');
% Compute FWHM
halfMax = max(Zm)/2; % simple since the baseline is near 0
lrIdx = [find(Zm >= halfMax, 1, 'first'), find(Zm >= halfMax, 1, 'last')]; % L/R index of width
fwhm = diff(data.X(lrIdx));
% Show bounds
h(3) = yline(halfMax, 'k--', 'DisplayName', 'HalfHeight');
h(4) = xline(data.X(lrIdx(1)), 'DisplayName', 'WidthBounds');
xline(data.X(lrIdx(2)));
legend(h)
title(sprintf('FWHM = %g', fwhm))
2 Kommentare
Weitere Antworten (0)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!