Documentation

This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

Filter Data

Filter Difference Equation

Filters are data processing techniques that can smooth out high-frequency fluctuations in data or remove periodic trends of a specific frequency from data. In MATLAB®, the filter function filters a vector of data x according to the following difference equation, which describes a tapped delay-line filter.

a(1)y(n)=b(1)x(n)+b(2)x(n1)++b(Nb)x(nNb+1)                 a(2)y(n1)a(Na)y(nNa+1)

In this equation, a and b are vectors of coefficients of the filter, Na is the feedback filter order, and Nb is the feedforward filter order. n is the index of the current element of x. The output y(n) is a linear combination of the current and previous elements of x and y.

The filter function uses specified coefficient vectors a and b to filter the input data x. For more information on difference equations describing filters, see [1].

Moving-Average Filter of Traffic Data

This example shows how to smooth traffic flow data using a moving-average filter with a 4-hour sliding window. The following difference equation describes a filter that averages the current hour and the three previous hours of data.

$$y(n)=\frac{1}{4}x(n)+\frac{1}{4}x(n-1)+\frac{1}{4}x(n-2)+\frac{1}{4}x(n-3)$$

Import the traffic data and assign the first column of vehicle counts to the vector x.

load count.dat
x = count(:,1);

Create the filter coefficient vectors.

a = 1;
b = [1/4 1/4 1/4 1/4];

Compute the 4-hour moving average of the data, and plot both the original data and the filtered data.

y = filter(b,a,x);

t = 1:length(x);
plot(t,x,'--',t,y,'-')
legend('Original Data','Filtered Data')

Modify Amplitude of Data

This example shows how to modify the amplitude of a vector of data by applying a transfer function.

In digital signal processing, filters are often represented by a transfer function. The Z-transform of the difference equation

$$\begin{array}{rcl}
a(1)y(n) &=& b(1)x(n)+b(2)x(n-1)+...+b(N_{b})x(n-N_{b}+1)\\
&&{}-a(2)y(n-1)-...-a(N_{a})y(n-N_{a}+1)\end{array}$$

is the following transfer function.

$$Y(z) = H(z^{-1})X(z) =
\frac{b(1)+b(2)z^{-1}+...+b(N_{b})z^{-N_{b}+1}}{a(1)+a(2)z^{-1}+...+a(N_{a})z^{-N_{a}+1}}X(z)$$

Use the transfer function

$$H(z^{-1}) = \frac{b(z^{-1})}{a(z^{-1})} =
\frac{2+3z^{-1}}{1+0.2z^{-1}}$$

to modify the amplitude of the data in count.dat.

Load the data and assign the first column to the vector x.

load count.dat
x = count(:,1);

Create the filter coefficient vectors according to the transfer function $H(z^{-1})$.

a = [1 0.2];
b = [2 3];

Compute the filtered data, and plot both the original data and the filtered data. This filter primarily modifies the amplitude of the original data.

y = filter(b,a,x);

t = 1:length(x);
plot(t,x,'--',t,y,'-')
legend('Original Data','Filtered Data')

References

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice-Hall, 1999.

Was this topic helpful?