# Filter Implementation and Analysis | MATLAB Tutorial

### Convolution and Filtering

The mathematical foundation of filtering is convolution. The conv function performs standard one-dimensional convolution, convolving one vector with another:

conv([1 1 1],[1 1 1])

ans =

1     2     3     2     1

A digital filter‘s output y(k) is related to its input x(k) by convolution with its impulse response h(k).

If a digital filter‘s impulse response h(k) is finite in length, and the input x(k) is also of finite length, you can implement the filter using conv.

Store x(k) in a vector x, h(k) in a vector h, and convolve the two:

```x = randn(5,1);% A random vector of length 5
h = [1 1 1 1]/4;% Length 4 averaging filter
y = conv(h,x);
```

The length of the output is the sum of the finite-length input vectors minus 1.

Filters and Transfer Functions

In general, the z-transform Y(z) of a discrete-time filter‘s output y(n) is related to the z-transform X(z) of the input by

where H(z) is the filter’s transfer function. Here, the constants b(i) and a(i) are the filter coefficients and the order of the filter is the maximum of n and m.

MATLAB filter functions store the coefficients in two vectors, one for the numerator and one for the denominator. By convention, it uses row vectors for filter coefficients.

### Filter Coefficients and Filter Names

Many standard names for filters reflect the number of a and b coefficients present:

• When n= 0 (that is, b is a scalar), the filter is an Infinite Impulse Response (IIR), all-pole, recursive, or autoregressive (AR) filter.
• When m= 0 (that is, a is a scalar), the filter is a Finite Impulse Response (FIR), all-zero, nonrecursive, or moving-average (MA) filter.
• If both n and m are greater than zero, the filter is an IIR, pole-zero, recursive, or autoregressive moving-average (ARMA) filter.

The acronyms AR, MA, and ARMA are usually applied to filters associated with filtered stochastic processes.

### Filtering with the filter Function

It is simple to work back to a difference equation from the Z-transform relation shown earlier. Assume that a(1) = 1. Move the denominator to the left side and take the inverse Z-transform.

y(k)+a(2)y(k−1)+…+a(m+1)y(km)=b(1)x(k)+b(2)x(k−1)+…+b(n+1)x(kn)

In terms of current and past inputs, and past outputs, y(k) is

y(k)=b(1)x(k)+b(2)x(k−1)+…+b(n+1)x(kn)−a(2)y(k−1)−…−a(m+1)y(km)

This is the standard time-domain representation of a digital filter, computed starting with y(1) and assuming a causal system with zero initial conditions. This representation’s progression is

A filter in this form is easy to implement with the filter function. For example, a simple single-pole filter (lowpass) is

B = 1;          % Numerator

A = [1 -0.9];   % Denominator

where the vectors B and A represent the coefficients of a filter in transfer function form. Note that the A coefficient vectors are written as if the output and input terms are separated in the difference equation. For the example, the previous coefficient vectors represent a linear constant-coefficient difference equation of

y(n)−0.9y(n−1)=x(n)

Changing the sign of the A(2) coefficient, results in the difference equation

y(n)+0.9y(n−1)=x(n)

The previous coefficients are represented as:

```B = 1; %Numerator
A = [1 0.9]; %Denominator
```

and results in a highpass filter.

To apply this filter to your data, use

```y = filter(B,A,x);
```

filter gives you as many output samples as there are input samples, that is, the length of y is the same as the length of x. If the first element of a is not 1, filter divides the coefficients by a(1) before implementing the difference equation.

##### Anushi Maheshwari

Anushi is pursuing graduation degree in Electronics & Communication from HBTI, Kanpur (Now HBTU). She has a keen interest towards Competitive Programming & loves to solve coding Challenges.

### Recommended Posts

##### Test Post

17 Feb 2018 - Tutorial

##### Counters using conditionally executed subsystems | Simulink Tutorial

16 Feb 2018 - Simulink, Tutorial

##### Regulating drum boiler pressure

16 Feb 2018 - Simulink, Tutorial