File Exchange

image thumbnail

Savitzky-Golay Smoothing Filter

version 1.2 (1.75 KB) by

Very simple function for Savitzky-Golay Smoothing

12 Downloads

Updated

View License

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')

Comments and Ratings (2)

Hi Roberto. I know this may be late.

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

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

Updates

1.2

Changed to the economy QR decomposition when calling QR. This increases speed and allows calculating more coefficients for the same amount memory.

1.1

Change MATLAB version information.

MATLAB Release
MATLAB 8.2 (R2013b)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video