Bessel analog filter design
returns the transfer function coefficients of an
a] = besself(
lowpass analog Bessel filter, where
Wo is the angular
frequency up to which the filter's group delay is approximately constant. Larger
n produce a group delay that better approximates
a constant up to
function does not support the design of digital Bessel filters.
Frequency Response of Lowpass Bessel Filter
Design a fifth-order analog lowpass Bessel filter with approximately constant group delay up to rad/second. Plot the magnitude and phase responses of the filter using
[b,a] = besself(5,10000); freqs(b,a)
Compute the group delay response of the filter as the derivative of the unwrapped phase response. Plot the group delay to verify that it is approximately constant up to the cutoff frequency.
[h,w] = freqs(b,a,1000); grpdel = diff(unwrap(angle(h)))./diff(w); clf semilogx(w(2:end),grpdel) xlabel('Frequency (rad/s)') ylabel('Group delay (s)')
Bandpass Bessel Filter
Design a 12th-order bandpass Bessel filter with the passband ranging from 300 rad/s to 500 rad/s. Compute the frequency response of the filter.
[b,a] = besself(6,[300 500],'bandpass'); [h,w] = freqs(b,a);
Plot the magnitude and phase responses of the filter. Unwrap the phase response to avoid and jumps and convert it from radians to degrees. As expected, the phase response is close to linear over the passband.
subplot(2,1,1) plot(w,20*log10(abs(h))) ylabel('Magnitude') subplot(2,1,2) plot(w,180*unwrap(angle(h))/pi) ylabel('Phase (degrees)') xlabel('Frequency (rad/s)')
Comparison of Analog IIR Lowpass Filters
Design a 5th-order analog Butterworth lowpass filter with a cutoff frequency of 2 GHz. Multiply by to convert the frequency to radians per second. Compute the frequency response of the filter at 4096 points.
n = 5; fc = 2e9; [zb,pb,kb] = butter(n,2*pi*fc,"s"); [bb,ab] = zp2tf(zb,pb,kb); [hb,wb] = freqs(bb,ab,4096);
Design a 5th-order Chebyshev Type I filter with the same edge frequency and 3 dB of passband ripple. Compute its frequency response.
[z1,p1,k1] = cheby1(n,3,2*pi*fc,"s"); [b1,a1] = zp2tf(z1,p1,k1); [h1,w1] = freqs(b1,a1,4096);
Design a 5th-order Chebyshev Type II filter with the same edge frequency and 30 dB of stopband attenuation. Compute its frequency response.
[z2,p2,k2] = cheby2(n,30,2*pi*fc,"s"); [b2,a2] = zp2tf(z2,p2,k2); [h2,w2] = freqs(b2,a2,4096);
Design a 5th-order elliptic filter with the same edge frequency, 3 dB of passband ripple, and 30 dB of stopband attenuation. Compute its frequency response.
[ze,pe,ke] = ellip(n,3,30,2*pi*fc,"s"); [be,ae] = zp2tf(ze,pe,ke); [he,we] = freqs(be,ae,4096);
Design a 5th-order Bessel filter with the same edge frequency. Compute its frequency response.
[zf,pf,kf] = besself(n,2*pi*fc); [bf,af] = zp2tf(zf,pf,kf); [hf,wf] = freqs(bf,af,4096);
Plot the attenuation in decibels. Express the frequency in gigahertz. Compare the filters.
plot([wb w1 w2 we wf]/(2e9*pi), ... mag2db(abs([hb h1 h2 he hf]))) axis([0 5 -45 5]) grid xlabel("Frequency (GHz)") ylabel("Attenuation (dB)") legend(["butter" "cheby1" "cheby2" "ellip" "besself"])
The Butterworth and Chebyshev Type II filters have flat passbands and wide transition bands. The Chebyshev Type I and elliptic filters roll off faster but have passband ripple. The frequency input to the Chebyshev Type II design function sets the beginning of the stopband rather than the end of the passband. The Bessel filter has approximately constant group delay along the passband.
Wo — Cutoff frequency
scalar | two-element vector
Cutoff frequency, specified as a scalar or a two-element vector. A cutoff frequency is an upper or lower bound of the frequency range in which the filter's group delay is approximately constant. Cutoff frequencies must be expressed in radians per second and can take on any positive value.
Wois scalar, then
besselfdesigns a lowpass or highpass filter with cutoff frequency
Wois a two-element vector
[w1 w2], where
besselfdesigns a bandpass or bandstop filter with lower cutoff frequency
w1and higher cutoff frequency
ftype — Filter type
Filter type, specified as:
'low'— a lowpass filter with cutoff frequency
'low'is the default for scalar
'high'— a highpass filter with cutoff frequency
'bandpass'— a bandpass filter of order 2
Wois a two-element vector.
'bandpass'is the default when
Wohas two elements.
'stop'— a bandstop filter of order 2
Wois a two-element vector.
a — Transfer function coefficients
Transfer function coefficients of the filter, returned as row vectors of
n + 1 for lowpass and highpass filters
n + 1 for bandpass and bandstop filters.
The transfer function is expressed in terms of
k — Zeros, poles, and gain
column vectors, scalar
Zeros, poles, and gain of the filter, returned as two column vectors of
n for bandpass and
bandstop designs) and a scalar. The transfer function is expressed in terms
D — State-space matrices
State-space representation of the filter, returned as matrices. If
n for lowpass and
highpass designs and
m = 2
n for bandpass
and bandstop filters, then
m × m,
B is m × 1,
C is 1 × m, and
D is 1 × 1.
The state-space matrices relate the state vector x, the input u, and the output y through
besself designs analog Bessel filters, which are characterized by
an almost constant group delay across the entire passband, thus preserving the wave
shape of filtered signals in the passband.
Lowpass Bessel filters have a monotonically decreasing magnitude response, as do lowpass Butterworth filters. Compared to the Butterworth, Chebyshev, and elliptic filters, the Bessel filter has the slowest rolloff and requires the highest order to meet an attenuation specification.
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.
besself uses a four-step algorithm:
Find lowpass analog prototype poles, zeros, and gain using the
Convert the poles, zeros, and gain into state-space form.
If required, use a state-space transformation to convert the lowpass filter into a bandpass, highpass, or bandstop filter with the desired frequency constraints.
Convert the state-space filter back to transfer function or zero-pole-gain form, as required.
 Parks, Thomas W., and C. Sidney Burrus. Digital Filter Design. New York: John Wiley & Sons, 1987.
Introduced before R2006a