- 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
9 ビュー (過去 30 日間)
古いコメントを表示
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/805274/image.png)
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 件のコメント
採用された回答
Adam Danz
2021 年 11 月 18 日
編集済み: Adam Danz
2021 年 11 月 18 日
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 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!