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:
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
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);
legend('Noisy Signal', 'Smooth Signal')
Hi Roberto. I know this may be late.
Modify savGol to calculate the derivative of the local polynomial and thus produce the needed coefficients.
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
Changed to the economy QR decomposition when calling QR. This increases speed and allows calculating more coefficients for the same amount memory.
Change MATLAB version information.
Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.