oce.filter {oce} | R Documentation |
Filter a time-series, possibly recursively
oce.filter(b, a=1, x)
b |
a vector of numeric values, giving the b coefficients (see “Details”). |
a |
a vector of numeric values, giving the a coefficients (see “Details”). |
x |
a vector of numeric values, to be filtered as a time series. |
The filter is defined as e.g. y[i]=b[1]*x[i] + b[2]*x[i-1] + b[3]*x[i-2] +
... - a[2]*y[i-1] - a[3]*y[i-2] - a[4]*y[i-3] - ..., where some of
the illustrated terms will be omitted if the lengths of a
and
b
are too small, and terms are dropped at the start of the
time series where the index on x
would be less than 1.
By contrast with the filter
function of R,
oce.filter
lacks the option to do a circular filter. As a
consequence, oce.filter
introduces a phase lag. One way to
remove this lag is to run the filter forwards and then backwards, as
in the “Examples”.
A numeric vector of the filtered results, y as denoted in “Details”.
The first value in the a
vector is ignored, and if
length(a)
equals 1, the result is a non-recursive filter. This
somewhat odd convention is followed so that this will match exactly
the Matlab function named filter
.
Dan Kelley
library(oce) b <- rep(1,5)/5 a <- 1 x <- seq(1, 4, by=0.2) y <- oce.filter(b, a, x) plot(x, y) points(x, x, pch="x", col="red") # note that y is offset # remove the phase lag y <- rev(oce.filter(b, a, rev(oce.filter(b, a, x)))) points(x, y, pch="+", col="blue")