# Help using butterworth filters

Started by cool...@hotmail.com ●November 3, 2005

`Hello, I'm currently taking an Electrical Engineering class but I'm a
Mathematics Graduate student so I'm missing some of the screws that put this
whole shebang together so I'm having some trouble with some probably very basic
things for all of you. Anyways, I'm trying to construct 7 butterworth bandpass
filters but they're not coming out how I want them to. I'm used to using the
fir1 filter and I can do that but there's a difference with the butterworth
filters that I can't figure out why it doesn't work. For example: I type in this
to create a bandpass filter centered at 697 Hz:`

[b,a]=butter(50,[692 702]./4000);freqz(b,a,2^7,8000)

but the frequency plot doesn't show this. Also, how do you apply a butterworth
filter to a signal? Usually with the fir1 filter I just convoluted the impulse
response with the signal directly but the butterworth filter gives me 2 sets of
coefficients I don't know how to use. Any help would be appreciated :)

Posted by Jeff Winter ●November 3, 2005

`Hi,`

If you have the signal processing toolbox, try using the fdatool (type help

fdatool at the Matlab prompt for more detail). This tool makes things a lot

easier.

With Butterworth (as with other filters, not just analog ones) you should

first specify your filter design. This should include passband and stopband

frequencies and attenuation levels.

Using your example of a bandpass filter (I have extended it a little).

% Design a bandpass filter with passband of 692 Hz to 702 Hz, with less than

3 dB of ripple in the passband, and %40 dB attenuation in the stopbands that

are 50 Hz wide on both sides of the passband. The sampling frequency is %

8kHz:

Fs = 8e3; HalfFs = Fs/2

Wp = [692 702]/HalfFs; Ws = [642 752]/HalfFs;

Rp = 3; Rs = 40;

% Calculate the minimum order of Butterworth filter required to meet the

filter design specifications

[n,Wn] = buttord(Wp,Ws,Rp,Rs) % Where: n is the filter order and Wn the

normalised cut-off frequencies

% Design the Butterworth filter

[b,a] = butter(n,Wn);

% Plot the frequency response

% Freqz uses an FFT to estimate the frequency response. In this example

1024 is the size of the FFT used.

freqz(b,a,1024,Fs)
If you run this code in Matlab, you will see the filter order (n) is 2.

Where did you get an order of 50 from? If I take your code and reduce the

order to say 5, the result is more realistic.

In order to apply this filter design to a signal, simply use:

y = filter(b,a,X); % Where X is your input signal and y is the filtered

signal

This filters the data in vector X with the filter described by numerator

coefficient vector b and denominator coefficient vector a.
Hope this helps, good luck,

Jeff
************************************

Jeff Winter

Snr Signal Processing Engineer

Aeroflex

www.aeroflex.com
Check out our PXI RF digitizer:

www.aeroflex.com/pxi
-----Original Message-----

From: matlab@matl... [mailto:matlab@matl...]On Behalf Of

coolmemin@cool...

Sent: 03 November 2005 02:14

To: matlab@matl...

Subject: [matlab] Help using butterworth filters
Hello, I'm currently taking an Electrical Engineering class but I'm a

Mathematics Graduate student so I'm missing some of the screws that put this

whole shebang together so I'm having some trouble with some probably very

basic things for all of you. Anyways, I'm trying to construct 7 butterworth

bandpass filters but they're not coming out how I want them to. I'm used to

using the fir1 filter and I can do that but there's a difference with the

butterworth filters that I can't figure out why it doesn't work. For

example: I type in this to create a bandpass filter centered at 697 Hz:

[b,a]=butter(50,[692 702]./4000);freqz(b,a,2^7,8000)

but the frequency plot doesn't show this. Also, how do you apply a

butterworth filter to a signal? Usually with the fir1 filter I just

convoluted the impulse response with the signal directly but the butterworth

filter gives me 2 sets of coefficients I don't know how to use. Any help

would be appreciated :)