# filter: Filter a signal In signal: Signal Processing

## Description

Generic filtering function. The default is to filter with an ARMA filter of given coefficients. The default filtering operation follows Matlab/Octave conventions.

## Usage

 ``` 1 2 3 4 5 6 7 8 9 10 11``` ```## Default S3 method: filter(filt, a, x, init, init.x, init.y, ...) ## S3 method for class 'Arma' filter(filt, x, ...) ## S3 method for class 'Ma' filter(filt, x, ...) ## S3 method for class 'Zpg' filter(filt, x, ...) ```

## Arguments

 `filt` For the default case, the moving-average coefficients of an ARMA filter (normally called ‘b’). Generically, `filt` specifies an arbitrary filter operation. `a` the autoregressive (recursive) coefficients of an ARMA filter. `x` the input signal to be filtered.

init, init.x, init.y

 `init, init.x, init.y` allows to supply initial data for the filter - this allows to filter very large timeseries in pieces. `...` additional arguments (ignored).

## Details

The default filter is an ARMA filter defined as:

a*y[n] + a*y[n-1] + … + a[n]*y = b*x[n] + b*x[m-1] + … + b[m]*x

The default filter calls `stats:::filter`, so it returns a time-series object.

Since `filter` is generic, it can be extended to call other filter types.

## Value

The filtered signal, normally of the same length of the input signal `x`.

## Author(s)

Tom Short, EPRI Solutions, Inc., (tshort@eprisolutions.com)

## References

Octave Forge https://octave.sourceforge.io/

`filter` in the stats package, `Arma`, `fftfilt`, `filtfilt`, and `runmed`.
 ```1 2 3 4 5 6``` ```bf <- butter(3, 0.1) # 10 Hz low-pass filter t <- seq(0, 1, len = 100) # 1 second sample x <- sin(2*pi*t*2.3) + 0.25*rnorm(length(t)) # 2.3 Hz sinusoid+noise z <- filter(bf, x) # apply filter plot(t, x, type = "l") lines(t, z, col = "red") ```