Learn R Programming

oce (version 0.1-80)

oce.filter: 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.

Value

  • A numeric vector of the filtered results, $y$ as denoted in Details.

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.

Examples

Run this code
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")

Run the code above in your browser using DataLab