www.gusucode.com > matlab程序,用于计算波的半宽源码程序 > matlab程序,用于计算波的半宽源码程序/main.txt

    function width = fwhm(x,y) 
 
% function width = fwhm(x,y) 
% 
% Full-Width at Half-Maximum (FWHM) of the waveform y(x) 
% and its polarity. 
% The FWHM result in 'width' will be in units of 'x' 
% 
% 
% Rev 1.2, April 2006 (Patrick Egan) 
 
 
y = y / max(y); 
N = length(y); 
lev50 = 0.5; 
if y(1) < lev50                  % find index of center (max or min) of pulse 
    [garbage,centerindex]=max(y); 
    Pol = +1; 
    disp('Pulse Polarity = Positive') 
else 
    [garbage,centerindex]=min(y); 
    Pol = -1; 
    disp('Pulse Polarity = Negative') 
end 
i = 2; 
while sign(y(i)-lev50) == sign(y(i-1)-lev50) 
    i = i+1; 
end                                   %first crossing is between v(i-1) & v(i) 
interp = (lev50-y(i-1)) / (y(i)-y(i-1)); 
tlead = x(i-1) + interp*(x(i)-x(i-1)); 
i = centerindex+1;                    %start search for next crossing at center 
while ((sign(y(i)-lev50) == sign(y(i-1)-lev50)) & (i <= N-1)) 
    i = i+1; 
end 
if i ~= N 
    Ptype = 1;   
    disp('Pulse is Impulse or Rectangular with 2 edges') 
    interp = (lev50-y(i-1)) / (y(i)-y(i-1)); 
    ttrail = x(i-1) + interp*(x(i)-x(i-1)); 
    width = ttrail - tlead; 
else 
    Ptype = 2;  
    disp('Step-Like Pulse, no second edge') 
    ttrail = NaN; 
    width = NaN; 
end