File Exchange

## Savitzky-Golay Smoothing Filter

version 1.2 (1.75 KB) by

Very simple function for Savitzky-Golay Smoothing

Updated

After looking at a lot of the Savitzky-Golay implementations on File Exchange, I could not find one as simple but as effective as this one. savGol is from the Book, "Solving Problems in Scientific Computing Using Maple and Matlab" by Walter Gander and others. Gander cites Teukolsky from Computers in Physics from 1990. Here is a link to the book website:
http://www.solvingproblems.ethz.ch/
g = savGol(f, nl, nr, M)

f: noisy data

nl: number of points to left of reference point

nr: number of points to right of reference point

M: Order of least squares polynomial

Example:
x = [0:1000-1]'/(1000-1);
signal = exp (- 100*(x - 1/5).^2) + exp (- 500*(x - 2/5).^2) + exp (-2500*(x - 3/5).^2) + exp (-12500*(x - 4/5).^2);
randn ('seed', 0);
noisySignal = signal + 0.1* randn (size (x));

smoothSignal = savGol(noisySignal, 16, 16, 4);

plot(x,noisySignal)
hold on;
plot(x, smoothSignal,'r','LineWidth',3)
legend('Noisy Signal', 'Smooth Signal')

Jason Nicholson

### Jason Nicholson (view profile)

Hi Roberto. I know this may be late.

Modify savGol to calculate the derivative of the local polynomial and thus produce the needed coefficients.

Roberto Paolinelli

### Roberto Paolinelli (view profile)

Hi Jason,
very good job!
I need to filter with an asymmetrical window and that fits for me.
But I also need 1st derivative of smoothed signal.
Using diff operator does not produce good results compared to using differentiator coefficients as explained in sgolay help.
But sgolay is for symmetrical windows... :(

Thanks a lot
Best Regards
Roberto