The method of how to calculate the FWHM.

27 views (last 30 days)
cheng wei
cheng wei on 11 Dec 2024 at 5:20
Answered: Star Strider on 11 Dec 2024 at 16:29
I have searched extensively on this website and the internet, but all the methods for calculating the FWHM (Full Width at Half Maximum) seem overly complex. I was wondering: can we simplify this by using a cut_index on the X-axis to determine the corresponding Y-axis values?
My idea is that we could compute the FWHM using the formula:
FWHM=(max_Y_value - min_Y_value)/2
and display the result accordingly in the window.
BTW, my sample is just a very simple Gaussian curve.
Would this approach be possible or effective? I’d like to discuss this idea further with the community. Thank you!

Answers (2)

Torsten
Torsten on 11 Dec 2024 at 14:47
Edited: Torsten on 11 Dec 2024 at 14:59
xmax = 0;
ymax = 4;
x = xmax:0.01:3;
f = -x.^2 + ymax;
FWHM = 2*interp1(f,x,ymax/2)
FWHM = 2.8284
Or directly use the inverse function of your Gaussian curve and evaluate it at ymax/2.

Star Strider
Star Strider on 11 Dec 2024 at 16:29
A different approach —
x = linspace(0, 10);
y = exp(-(x-5).^2*0.25);
ymin = min(y)
ymin = 0.0019
[ymax,idx] = max(y - ymin)
ymax = 0.9974
idx = 50
halfmax = ymax/2;
for k = 1:2
idxrng = (1:idx) + idx*(k-1);
xhalf(k) = interp1(y(idxrng), x(idxrng), halfmax + ymin);
end
xhalf
xhalf = 1×2
3.3364 6.6636
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
FWHM = diff(xhalf)
FWHM = 3.3272
figure
plot(x, y)
hold on
plot(xhalf, [1 1]*(halfmax+ymin), 'rs')
hold off
grid
text(mean(xhalf), (halfmax+ymin), sprintf('\\leftarrow FWHM = %.3f \\rightarrow', FWHM), 'Horiz','center')
.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!