- Function File:
`y`=**sgolayfilt***(*`x`) - Function File:
`y`=**sgolayfilt***(*`x`,`p`) - Function File:
`y`=**sgolayfilt***(*`x`,`p`,`n`) - Function File:
`y`=**sgolayfilt***(*`x`,`p`,`n`,`m`) - Function File:
`y`=**sgolayfilt***(*`x`,`p`,`n`,`m`,`ts`) - Function File:
`y`=**sgolayfilt***(*`x`,`p`,`n`,`m`,`ts`) - Function File:
`y`=**sgolayfilt***(*`x`,`f`) Smooth the data in x with a Savitsky-Golay smoothing filter of polynomial order p and length n, n odd, n > p. By default, p=3 and n=p+2 or n=p+3 if p is even.

If

`f`is given as a matrix, it is expected to be a filter as computed by`sgolay`

.These filters are particularly good at preserving lineshape while removing high frequency squiggles. Particularly, compare a 5 sample averager, an order 5 butterworth lowpass filter (cutoff 1/3) and sgolayfilt(x, 3, 5), the best cubic estimated from 5 points:

[b, a] = butter (5, 1/3); x = [zeros(1,15), 10*ones(1,10), zeros(1,15)]; plot (sgolayfilt (x), "r;sgolayfilt;", ... filtfilt (ones (1,5)/5, 1, x), "g;5 sample average;", ... filtfilt (b, a, x), "c;order 5 butterworth;", ... x, "+b;original data;");

**See also:**sgolay.

The following code

[b, a] = butter(5,1/3); x=[zeros(1,15), 10*ones(1,10), zeros(1,15)]; subplot(121); plot(sgolayfilt(x),"r;sgolay(3,5);",... filtfilt(ones(1,5)/5,1,x),"g;5 sample average;",... filtfilt(b,a,x),"c;order 5 butterworth;",... x,"+b;original data;"); axis([1 40 -2 15]); title("boxcar"); x=x+randn(size(x))/2; subplot(122); plot(sgolayfilt(x,3,5),"r;sgolay(3,5);",... filtfilt(ones(1,5)/5,1,x),"g;5 sample average;",... filtfilt(b,a,x),"c;order 5 butterworth;",... x,"+b;original data;"); axis([1 40 -2 15]); title("boxcar+noise");

Produces the following figure

Figure 1 |
---|

The following code

[b, a] = butter(5,1/3); t = 0:0.01:1.0; % 1 second sample x=cos(2*pi*t*3); % 3 Hz sinusoid subplot(121); plot(t,sgolayfilt(x,3,5),"r;sgolay(3,5);",... t,filtfilt(ones(1,5)/5,1,x),"g;5 sample average;",... t,filtfilt(b,a,x),"c;order 5 butterworth;",... t,x,"+b;original data;"); axis([0 1 -1.5 2.5]); title("sinusoid"); x=x+0.2*randn(size(x)); % signal+noise subplot(122); plot(t,sgolayfilt(x',3,5),"r;sgolay(3,5);",... t,filtfilt(ones(1,5)/5,1,x),"g;5 sample average;",... t,filtfilt(b,a,x),"c;order 5 butterworth;",... t,x,"+b;original data;"); axis([0 1 -1.5 2.5]); title("sinusoid+noise");

Produces the following figure

Figure 1 |
---|

Package: signal