Signal Processing Toolbox | Help Desk |
butter
Butterworth analog and digital filter design.
[b,a] = butter(n,Wn) [b,a] = butter(n,Wn,'ftype
') [b,a] = butter(n,Wn,'s') [b,a] = butter(n,Wn,'ftype
','s') [z,p,k] = butter(...) [A,B,C,D] = butter(...)
butter
designs lowpass, bandpass, highpass, and bandstop digital and analog Butterworth filters. Butterworth filters are characterized by a magnitude response that is maximally flat in the passband and monotonic overall.
Butterworth filters sacrifice rolloff steepness for monotonicity in the pass- and stopbands. Unless the smoothness of the Butterworth filter is needed, an elliptic or Chebyshev filter can generally provide steeper rolloff characteristics with a lower filter order.
[b,a] = butter(n,Wn)
designs an order n
lowpass digital Butterworth filter with cutoff frequency Wn
. It returns the filter coefficients in length n + 1
row vectors b
and a
, with coefficients in descending powers of z:sqrt(1/2)
. For butter
, the cutoff frequency Wn
must be a number between 0 and 1, where 1 corresponds to half the sampling frequency (the Nyquist frequency).
If Wn
is a two-element vector, Wn = [w1 w2]
, butter
returns an order 2*n
digital bandpass filter with passband w1 <
< w2
.
[b,a] = butter(n,Wn,'ftype
')
designs a highpass or bandstop filter, where ftype
is
high
for a highpass digital filter with cutoff frequency Wn
stop
for an order 2*n
bandstop digital filter if Wn
is a two-element vector, Wn = [w1 w2]
The stopband is w1
< < w2
.
butter
directly obtains other realizations of the filter. To obtain zero-pole-gain form, use three output arguments:
[z,p,k] = butter(n,Wn)
or
[z,p,k] = butter(n,Wn,'ftype
')
butter
returns the zeros and poles in length n
column vectors z
and p
, and the gain in the scalar k
.
To obtain state-space form, use four output arguments:
[A,B,C,D] = butter(n,Wn)
or
[A,B,C,D] = butter(n,Wn,'ftype
')
where A
, B
, C
, and D
are[b,a] = butter(n,Wn,'s')
designs an order n
lowpass analog Butterworth filter with cutoff frequency Wn
. It returns the filter coefficients in the length n + 1
row vectors b
and a
, in descending powers of s:butter
's cutoff frequency Wn
must be greater than 0.
If Wn
is a two-element vector with w1
< w2
, butter(n,Wn,
's')
returns an order 2*n
bandpass analog filter with passband w1
< < w2
.
[b,a] = butter(n,Wn,'ftype
','s')
designs a highpass or bandstop filter, where ftype
is
high
for a highpass analog filter with cutoff frequency Wn
stop
for an order 2*n
bandstop analog filter if Wn
is a two-element vector, Wn = [w1 w2]
The stopband is w1
< < w2
.
butter
directly obtains other realizations of the analog filter. To obtain zero-pole-gain form, use three output arguments:
[z,p,k] = butter(n,Wn,'s')
or
[z,p,k] = butter(n,Wn,'ftype
','s')
returns the zeros and poles in length n
or 2*n
column vectors z
and p
and the gain in the scalar k
.
To obtain state-space form, use four output arguments:
[A,B,C,D] = butter(n,Wn,'s')
or
[A,B,C,D] = butter(n,Wn,'ftype
','s')
where A
, B
, C
, and D
are[b,a] = butter(9,300/500,'high')The filter's frequency response is
freqz(b,a,128,1000)Design a 10th-order bandpass Butterworth filter with a passband from 100 to 200 Hz and plot its impulse response, or unit sample response:
n = 5; Wn = [100 200]/500; [b,a] = butter(n,Wn); [y,t] = impz(b,a,101); stem(t,y)For high order filters, the state-space form is the most numerically accurate, followed by the zero-pole-gain form. The transfer function coefficient form is the least accurate; numerical problems can arise for filter orders as low as 15.
butter
uses a five-step algorithm:
buttap
function.
butter
uses bilinear
to convert the analog filter into a digital filter through a bilinear transformation with frequency prewarping. Careful frequency adjustment guarantees that the analog filters and the digital filters will have the same frequency response magnitude at Wn
or w1
and w2
.