MATLAB Function Reference |

Filter data with an infinite impulse response (IIR) or finite impulse response (FIR) filter

**Syntax**

y = filter(b,a,X) [y,zf] = filter(b,a,X) [y,zf] = filter(b,a,X,zi) y = filter(b,a,X,zi,dim) [...] = filter(b,a,X,[],dim)

**Description**

The `filter`

function filters a data sequence using a digital filter which works for both real and complex inputs. The filter is a *direct form II transposed* implementation of the standard difference equation (see "Algorithm").

```
y = filter(b,a,X)
```

filters the data in vector `X`

with the filter described by numerator coefficient vector `b`

and denominator coefficient vector `a`

. If `a(1)`

is not equal to `1`

, `filter`

normalizes the filter coefficients by `a(1)`

. If `a(1)`

equals `0`

, `filter`

returns an error.

If `X`

is a matrix, `filter`

operates on the columns of `X`

. If `X`

is a multidimensional array, `filter`

operates on the first nonsingleton dimension.

```
[y,zf] = filter(b,a,X)
```

returns the final conditions, `zf`

, of the filter delays. If `X`

is a row or column vector, output `zf`

is a column vector of `max(length(a),length(b))-1`

. If `X`

is a matrix, `zf`

is an array of such vectors, one for each column of `X`

, and similarly for multidimensional arrays.

```
[y,zf] = filter(b,a,X,zi)
```

accepts initial conditions, `zi`

, and returns the final conditions, `zf`

, of the filter delays. Input `zi`

is a vector of length `max(length(a),length(b))-1`

, or an array with the leading dimension of size `max(length(a),length(b))-1`

and with remaining dimensions matching those of `X`

.

```
y = filter(b,a,X,zi,dim) and [...] = filter(b,a,X,[],dim)
```

operate across the dimension `dim`

.

**Example**

You can use `filter`

to find a running average without using a `for`

loop. This example finds the running average of a 16-element vector, using a window size of 5.

data = [1:0.2:4]'; windowSize = 5; filter(ones(1,windowSize)/windowSize,1,data) ans = 0.2000 0.4400 0.7200 1.0400 1.4000 1.6000 1.8000 2.0000 2.2000 2.4000 2.6000 2.8000 3.0000 3.2000 3.4000 3.6000

**Algorithm**

The `filter`

function is implemented as a direct form II transposed structure,

where `n-1`

is the filter order, and which handles both FIR and IIR filters [1].

The operation of `filter`

at sample is given by the time domain difference equations

The input-output description of this filtering operation in the -transform domain is a rational transfer function,

**See Also**

`filtfilt`

, `filtic`

in the Signal Processing Toolbox

**References**

[1] Oppenheim, A. V. and R.W. Schafer. *Discrete-Time Signal Processing*,
Englewood Cliffs, NJ: Prentice-Hall, 1989, pp. 311-312.

fill3 | filter2 |