I got an error in line 82
"Subscript indices must either be real positive integers or logicals".
because in some case ipeak-indfwhms equals a negative number

I got an error in line 82
"Subscript indices must either be real positive integers or logicals".
because in some case ipeak-indfwhms equals a negative number

The above error is a flaw in the code. The programmer forgot to include a check for what happens during shifting of signal when the peak index is too small or too large (i.e., at the edges of the matrix).
One could include the following code just before the shifting to bypass all peaks near the edges. Just define number of elements to ignore on each edge.
% check if index too big
if ipeak >= length(y)-numElements
break
end
% check if index too small
if ipeak <= numElements
break
end

hi,
when i launch this programm i have an error :
Subscript indices must either be real positive integers or logicals.
Error in ==> autopeak at 75
y_shift2(ifwhms(1)-1:ifwhms(1)+1) = y_shift2(ifwhms(1)-1:ifwhms(1)+1) + peak(i);

yy = smooth(y) smooths the data in the column vector y using a moving average filter. Results are returned in the column vector yy. The default span for the moving average is 5.
The first few elements of yy are given by
yy(1) = y(1)
yy(2) = (y(1) + y(2) + y(3))/3
yy(3) = (y(1) + y(2) + y(3) + y(4) + y(5))/5
yy(4) = (y(2) + y(3) + y(4) + y(5) + y(6))/5
So if you do not have the MATLAB "Curve Fitting Toolbox", you can make your own smooth function from the above description.

Comment only