oce.filter {oce}R Documentation

Filter a time-series, possibly recursively

Description

Filter a time-series, possibly recursively

Usage

oce.filter(b, a=1, x)

Arguments

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.

Details

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”.

Value

A numeric vector of the filtered results, y as denoted in “Details”.

Note

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.

Author(s)

Dan Kelley

Examples

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

[Package oce version 0.1-80 Index]