ELEC6218 · Signal Processing Analog & Digital Filter Design
Signal Processing · Lecture notes Prof. Çelik
ELEC6218 · Signal Processing
Lecture 5

Analog Filter Design

An ideal filter is a useful target, but it cannot be built because its response is non-causal and extends for ever. Practical analog design starts with a realisable low-pass prototype. We study the Butterworth, Chebyshev and elliptic families, then transform the prototype into the filter shape we need.

Quiz
Podcast ↓ MP3
InstructorProf. Abdulkadir Çelik (https://akadircelik.com) ModuleELEC6218 TopicsButterworth · Chebyshev I/II · elliptic (Cauer) · frequency transformations · LPF/HPF/BPF/BSF
▸ The ideal filter cannot be built ▸ One prototype, four filters ▸ Maximally flat vs. equiripple ▸ Fewer poles for the same spec
Learning outcomes

By the end of this lecture, you will be able to:

  • Explain why a brick-wall filter cannot be implemented exactly, and follow the standard design sequence from a normalized low-pass prototype to a practical filter.
  • Calculate the order and cutoff of a Butterworth low-pass filter from passband and stopband requirements, then locate its stable poles.
  • Compare Butterworth, Chebyshev I, Chebyshev II and elliptic filters in terms of order, ripple, transition width and phase behaviour.
  • Transform a low-pass prototype into a high-pass, band-pass or band-stop filter and predict the resulting pole, zero and order changes.
Lecture 5

Contents

First, connect poles and zeros to magnitude and phase, then build a practical design specification. The remaining sections introduce the main analog filter families, show how to transform a low-pass prototype into other filter types, and compare the trade-offs.

iNotation used in this lecture
\(\Omega_p,\Omega_s\)
passband and stopband edge frequencies (rad/s)
\(A_p,A_s\)
minimum passband gain and maximum stopband gain (linear, not dB)
\(N\)
filter order — the number of poles
\(\Omega_c\)
cutoff frequency, the \(-3\,\text{dB}\) point (Butterworth)
\(\varepsilon\)
Chebyshev/elliptic ripple factor, fixed by the passband spec
LPP
low-pass prototype, normalized to \(\Omega_c=1\,\text{rad/s}\)
LPF/HPF/BPF/BSF
low-/high-/band-pass/band-stop filter

Gain convention. Specifications are often given in dB (e.g. \(G_p=-1\,\text{dB}\)); convert to linear gain with \(A=10^{G/20}\) before using any formula in this lecture. All magnitude formulas below use the linear \(A_p,A_s\), not the dB values directly.

5.1  From \(H(s)\) to a filter: magnitude and phase

An analog LTI system is described by its transfer function \(H(s)\). To see how it affects sinusoids at different frequencies, evaluate the transfer function on the imaginary axis by setting \(s=j\Omega\):

$$\boxed{\,H(j\Omega)=H(s)\big|_{s=j\Omega}=|H(j\Omega)|\,e^{j\angle H(j\Omega)}\,}$$
(5.1)

If \(H(s)\) is written in pole–zero form, its magnitude is determined by the distances from \(j\Omega\) to every pole and zero, while its phase is determined by the corresponding angles:

$$ |H(j\Omega)|=|K|\,\frac{\prod_k|j\Omega-z_k|}{\prod_\ell|j\Omega-p_\ell|}, \qquad \angle H(j\Omega)=\angle K+\sum_k\angle(j\Omega-z_k)-\sum_\ell\angle(j\Omega-p_\ell). $$
(5.2)
Magnitude tells you

How much each frequency is amplified or attenuated — the shape that earns a filter its name: low-pass, high-pass, band-pass, band-stop.

Phase tells you

How much each frequency is delayed. A linear phase (Section 2.9.4) delays every frequency equally and distorts nothing; a curved one does not.

LPF HPF BPF BSF
Figure 5.1.a. The four ideal magnitude shapes — a brick-wall pass region and a brick-wall reject region, drawn as if any transition could be instantaneous. Section 5.2 explains why real filters can only approximate the corner.

5.1.1  Basic circuit realizations, and the filter type ideal shapes leave out

Simple RC and RLC circuits already produce basic low-pass and band-pass responses. Their component values set the cutoff or centre frequency, and Eq. (5.2) gives the corresponding magnitude and phase.

Figure 5.1.b. Basic analog LPF, \(H(s)=(1/\tau)/(s+1/\tau)\): a single real pole at \(s=-1/\tau\) sets \(\Omega_c=1/\tau\); \(|H(j\Omega)|\) decays smoothly, \(\angle H(j\Omega)\) from \(0\) toward \(-\pi/2\). Drag \(j\Omega\) along the axis, or drag the pole to change \(\tau\); the readout evaluates Eq. (5.2) for the single pole vector. At \(\Omega=\Omega_c\) the vector makes \(45^\circ\) with the real axis, so \(|H|=1/\sqrt{2}\) and \(\angle H=-\pi/4\).
Figure 5.1.c. Basic analog BPF, \(H(s)=1/(s^2+2\alpha s+\alpha^2+\Omega_0^2)\): a conjugate pole pair at \((-\alpha,\pm\Omega_0)\) — the RLC resonance of Example 2.7, read as a filter; \(|H(j\Omega)|\) peaks near \(\Omega_0\). Drag either pole: moving it toward the \(j\Omega\)-axis (smaller \(\alpha\)) shortens the vector from \(p_1\) near \(\Omega_0\), so the peak grows taller and narrower.

An all-pass filter (APF) has unity magnitude at every frequency but changes phase. It does not alter the amplitude spectrum, yet it can change the timing and shape of a waveform:

$$ H_{\text{AP}}(s)=\frac{s-a}{s+a},\ \ a>0 \quad\Longrightarrow\quad |H_{\text{AP}}(j\Omega)|=\frac{|j\Omega-a|}{|j\Omega+a|}=1\ \ \forall\Omega $$
(5.0)

The pole at \(s=-a\) and zero at \(s=+a\) are mirror images across the \(j\Omega\)-axis. Their distances to \(j\Omega\) are equal, so their magnitude effects cancel. Their angles are different, so a frequency-dependent phase shift remains. Cascading an all-pass section with another filter can therefore adjust phase without changing the designed magnitude response.

Figure 5.1.d. The all-pass filter \(H(s)=(s-a)/(s+a)\): a pole and zero mirrored across the \(j\Omega\)-axis, so their magnitude vectors are always equal — \(|H(j\Omega)|=1\) for every \(\Omega\), while the phase runs from \(\pi\) at \(\Omega=0\) down toward \(0\), the one filter type in this catalogue defined entirely by what it does to phase, useful precisely because Section 6.3 shows no IIR filter's phase is under the designer's direct control otherwise. Drag the pole or the zero to change \(a\): the two vectors stay equal in length, and \(\angle H\) passes \(\pi/2\) at \(\Omega=a\).

5.2  The ideal filter cannot be built

Take the ideal low-pass of Figure 5.1.a literally, \(H_i(j\Omega)=\mathrm{rect}(\Omega/2\Omega_c)\), and invert it with the CTFT pair of Section 2.9.1 (duality: a rectangle in frequency is a sinc in time):

$$ h_i(t)=\frac{\Omega_c}{\pi}\,\mathrm{sinc}\!\left(\frac{\Omega_c t}{\pi}\right) $$
(5.3)

The ideal impulse response is both non-causal, because it is non-zero before the input arrives, and infinite in duration. A physical circuit cannot implement either property exactly.

Step
What it costs
1. Make it causal
\(h_1(t)=h_i(t)u(t)\)
Throws away the \(t<0\) half, losing 50% of the energy and, with it, the ideal shape.
2. Delay it
\(h_2(t)=h_i(t-\tau)u(t)\)
A pure delay only adds linear phase (Eq. 2.22); it does not touch \(|H(j\Omega)|\), so shifting first and truncating second keeps more of the response.
3. Truncate
\(h_3=h_2\cdot u(T_d-t)\)
Now finite and causal — but a hard cut is a rectangular window (Section 2.9.3), and windowing convolves the ideal spectrum with a sinc: ripple (Gibbs) appears at the corner.
4. Taper
\(h_{\text{prac}}=h_2\cdot w(t)\)
A smooth window \(w(t)\) trades main-lobe width for lower ripple — the same rectangular-vs-tapered trade Section 2.9.3 already made for the DFT.
Causal, shifted, and truncated impulse response of the ideal LPF
Figure 5.2. Steps 1–3 made visible: (a) truncating \(h_i(t)\) to \(t\ge0\) throws away its symmetric left half; (b) delaying by \(\tau\) restores that lost half without touching \(|H(j\Omega)|\) — only the peak moves, to \(t=\tau\); (c) truncating at \(t=T_d\) finally makes it finite, ready for Step 4's windowing.

Classical analog design does not build \(h(t)\) directly at all; it works backwards from a target magnitude shape that a real RLC network (or an active op-amp circuit) can realise exactly, which is the subject of the rest of this lecture.

5.3  The design framework: one prototype, four filters

Why bother with a prototype at all

The main design choice is the low-pass prototype: its family and order determine ripple, transition sharpness and complexity. Standard frequency transformations then convert that prototype into a high-pass, band-pass or band-stop filter.

5.3.1  A first look at the four classical families

Sections 5.4, 5.6 and 5.7 derive three of these families in full; naming all four now, side by side, gives every derivation that follows a place to land.

Bessel, Butterworth, Chebyshev and Elliptic magnitude responses compared
Figure 5.3.a. The four families on one low-pass specification: Bessel's gentlest roll-off (no ripple, best phase), Butterworth's monotonic curve, Chebyshev's passband ripple, and elliptic's sharpest transition — all meeting the same \(-3\,\text{dB}\) point, at very different cost.
Family
Passband
Stopband / transition
Phase & order
Bessel
Monotonic, no ripple
Gentlest roll-off of the four
Best linear phase; highest order for a given cutoff sharpness
Butterworth
Monotonic, maximally flat (Eq. 5.4)
Smooth, moderate roll-off
Moderate phase distortion; moderate order
Chebyshev I/II
Equiripple (I) or flat (II)
Sharper than Butterworth for the same order
Worse phase than Butterworth; fewer poles for the same spec
Elliptic
Equiripple (Eq. 5.13)
Sharpest of the four
Worst phase linearity; lowest order of all four

5.3.2  The vocabulary every specification is written in

Whatever the family, a specification is always drawn as three regions of \(|H(j\Omega)|\) separated by two frequencies:

Passband

\(\Omega<\Omega_p\): gain must stay at or above \(A_p\) — the signal must pass through.

Transition band

\(\Omega_p<\Omega<\Omega_s\): no constraint is placed here — the filter is free to roll off however it can.

Stopband

\(\Omega>\Omega_s\): gain must stay at or below \(A_s\) — the signal must be rejected.

Ap As Ωp Ωs PASSBAND TRANSITION STOPBAND Ω |H(jΩ)|
Figure 5.3.b. The three regions every specification divides \(|H(j\Omega)|\) into: a guaranteed passband below \(\Omega_p\), a free transition band, and a guaranteed stopband above \(\Omega_s\). Eq. (5.5)–(5.6) and their Chebyshev/elliptic counterparts are exactly the algebra that finds the smallest filter satisfying these four numbers, \((A_p,\Omega_p,A_s,\Omega_s)\).

5.4  The Butterworth prototype: maximally flat

Butterworth's defining property is a magnitude-squared that is as flat as a rational function of order \(N\) can possibly be at \(\Omega=0\) — no ripple, only a smooth monotonic roll-off:

$$ |H(j\Omega)|^2=\frac{1}{1+\left(\Omega/\Omega_c\right)^{2N}} $$
(5.4)

A Butterworth design must determine two quantities: the order \(N\) and the cutoff \(\Omega_c\). The specification gives a minimum allowed gain \(A_p\) at the passband edge \(\Omega_p\) and a maximum allowed gain \(A_s\) at the stopband edge \(\Omega_s\). Both gains enter the design formulas as linear magnitudes, but specifications are usually written in decibels, so the first job is the conversion:

Specification: dB

\(G_p,\ G_s\): gains in dB, both \(\le 0\), e.g. \(G_p=-1\,\text{dB}\) at \(\Omega_p\) and \(G_s=-40\,\text{dB}\) at \(\Omega_s\). A specification quoted as a positive attenuation (“1 dB ripple”, “40 dB rejection”) means the same values with a minus sign.

Design formulas: linear

\(A_p=10^{G_p/20}\), \(A_s=10^{G_s/20}\), both between 0 and 1. For the values on the left, \(A_p=10^{-1/20}\approx0.8913\) and \(A_s=10^{-40/20}=0.01\). Eqs. (5.5), (5.6) and (5.10) take these linear values, never the dB numbers.

Derivation · order and cutoff from the specification
1
Convert the specification

Convert the dB gains to linear magnitudes:

$$ A_p=10^{G_p/20},\qquad A_s=10^{G_s/20}. $$

For \(G_p=-1\,\text{dB}\) and \(G_s=-40\,\text{dB}\): \(A_p=10^{-1/20}\approx0.8913\) and \(A_s=10^{-40/20}=0.01\).

2
Passband edge

Require \(|H(j\Omega_p)|=A_p\), the smallest gain the passband allows. Eq. (5.4) is already squared, so substitute \(\Omega=\Omega_p\), invert both sides and subtract 1:

$$ A_p^2=\frac{1}{1+(\Omega_p/\Omega_c)^{2N}}\;\Longrightarrow\;1+\left(\frac{\Omega_p}{\Omega_c}\right)^{2N}=\frac{1}{A_p^2}\;\Longrightarrow\;\left(\frac{\Omega_p}{\Omega_c}\right)^{2N}=\frac{1}{A_p^2}-1.\qquad\text{(i)} $$
3
Stopband edge

Require \(|H(j\Omega_s)|=A_s\), the largest gain the stopband allows. The same three moves give

$$ \left(\frac{\Omega_s}{\Omega_c}\right)^{2N}=\frac{1}{A_s^2}-1.\qquad\text{(ii)} $$
4
Eliminate \(\Omega_c\)

Divide (ii) by (i). Both left-hand sides carry \(\Omega_c^{-2N}\), which cancels:

$$ \frac{(\Omega_s/\Omega_c)^{2N}}{(\Omega_p/\Omega_c)^{2N}}=\left(\frac{\Omega_s}{\Omega_p}\right)^{2N}=\frac{1/A_s^2-1}{1/A_p^2-1}. $$
5
Solve for \(N\)

Take the natural log of both sides and divide by \(2\ln(\Omega_s/\Omega_p)\), which is positive because \(\Omega_s>\Omega_p\):

$$ 2N\ln\frac{\Omega_s}{\Omega_p}=\ln\frac{1/A_s^2-1}{1/A_p^2-1}\;\Longrightarrow\;N_{\text{real}}=\frac{\ln\big[(1/A_s^2-1)/(1/A_p^2-1)\big]}{2\ln(\Omega_s/\Omega_p)}\;\Longrightarrow\;N=\left\lceil N_{\text{real}}\right\rceil. $$

\(N_{\text{real}}\) is rarely an integer, so the ceiling \(\lceil\cdot\rceil\) rounds it up to the next integer. A higher order only steepens the roll-off, so both edges are still met, whereas a lower order cannot meet both with any \(\Omega_c\). This is Eq. (5.5).

6
Solve for \(\Omega_c\)

Return to (i) with the integer \(N\), take the \(2N\)-th root and invert:

$$ \frac{\Omega_p}{\Omega_c}=\left(\frac{1}{A_p^2}-1\right)^{1/(2N)}\;\Longrightarrow\;\Omega_c=\Omega_p\left(\frac{1}{A_p^2}-1\right)^{-1/(2N)}. $$

This is Eq. (5.6). The passband edge is met exactly and, because \(N\) was rounded up, the stopband edge is met with margin. Solving (ii) instead meets the stopband edge exactly; any \(\Omega_c\) between the two values satisfies both. At \(\Omega=\Omega_c\), Eq. (5.4) gives \(|H|^2=1/2\), i.e. \(20\log_{10}(1/\sqrt2)\approx-3.01\,\text{dB}\), which is why \(\Omega_c\) is called the \(-3\,\text{dB}\) point.

Steps 5 and 6 give the two Butterworth design equations:

$$ \left(\frac{\Omega_s}{\Omega_p}\right)^{2N}=\frac{1/A_s^2-1}{1/A_p^2-1} \quad\Longrightarrow\quad \boxed{N=\left\lceil \frac{\ln\!\big[(1/A_s^2-1)/(1/A_p^2-1)\big]}{2\ln(\Omega_s/\Omega_p)} \right\rceil} $$
(5.5)
$$ \boxed{\Omega_c=\Omega_p\left(\frac{1}{A_p^2}-1\right)^{-1/(2N)}} $$
(5.6)

A Butterworth response approaches the ideal low-pass shape as the order increases. Each additional pole makes the transition steeper, but also increases circuit complexity and sensitivity.

For a normalized prototype with \(\Omega_c=1\), the poles are equally spaced on the unit circle. Only the left-half-plane poles are used, because they have negative real parts and therefore produce a stable causal filter.

Derivation · where the Butterworth poles come from
1
From \(|H(j\Omega)|^2\) to \(H(s)H(-s)\)

For a filter with real coefficients \(H(-j\Omega)=H^*(j\Omega)\), so \(|H(j\Omega)|^2=H(j\Omega)H(-j\Omega)\). Replace \(j\Omega\) by \(s\), i.e. \(\Omega=s/j\), in Eq. (5.4):

$$ H(s)H(-s)=\frac{1}{1+\big(s/(j\Omega_c)\big)^{2N}}. $$
2
Roots of the denominator

Write \(-1\) in polar form, \(-1=e^{j(2k-1)\pi}\) for any integer \(k\), and take the \(2N\)-th root:

$$ \left(\frac{s}{j\Omega_c}\right)^{2N}=-1=e^{j(2k-1)\pi}\;\Longrightarrow\;\frac{s}{j\Omega_c}=e^{j(2k-1)\pi/(2N)},\quad k=1,\dots,2N. $$
3
Rotate by \(j\)

Since \(j=e^{j\pi/2}\) (a unit vector at \(90^\circ\)), multiplying by \(j\Omega_c=\Omega_c\,e^{j\pi/2}\) scales each root by \(\Omega_c\) and rotates it by \(\pi/2\):

$$ s_k=\Omega_c\,e^{j\left(\frac{\pi}{2}+\frac{(2k-1)\pi}{2N}\right)},\quad k=1,\dots,2N. $$

All \(2N\) roots lie on the circle \(|s|=\Omega_c\), adjacent roots \(\theta=\pi/N\) apart.

4
Keep the stable half

For \(k=1,\dots,N\) the angle runs from \(\pi/2+\pi/(2N)\) to \(3\pi/2-\pi/(2N)\), strictly inside the left half-plane; these are the poles of \(H(s)\). The other \(N\) roots are their mirror images in the \(j\Omega\)-axis and belong to \(H(-s)\). With \(\theta_k=(2k-1)\pi/(2N)\), \(e^{j(\pi/2+\theta_k)}=-\sin\theta_k+j\cos\theta_k\), the form used in Figure 5.4.a and in Eq. (5.11).

5
Assemble \(H(s)\)

\(H(s)\) has no finite zeros, so it is a constant over the product of its \(N\) pole factors. Eq. (5.4) requires \(|H(j0)|=1\). The poles occur in conjugate pairs, each contributing \((-s_k)(-s_k^*)=|s_k|^2=\Omega_c^2\), plus the real pole \(s=-\Omega_c\) when \(N\) is odd, so \(\prod_{k=1}^{N}(-s_k)=\Omega_c^N\) and the constant is \(\Omega_c^N\):

$$ H(s)=\frac{\Omega_c^N}{\prod_{k=1}^{N}(s-s_k)},\quad s_k=\Omega_c\,e^{j\left(\frac{\pi}{2}+\frac{(2k-1)\pi}{2N}\right)}. $$

For \(N=2\), \(s_{1,2}=\Omega_c(-1\pm j)/\sqrt2\) and \(H(s)=\Omega_c^2/(s^2+\sqrt2\,\Omega_c s+\Omega_c^2)\).

Setting \(\Omega_c=1\) in Step 3 and keeping \(k=1,\dots,N\) gives the normalized poles:

$$ \bar p_k=e^{j\left(\frac{\pi}{2}+\frac{(2k-1)\pi}{2N}\right)},\ \ k=1,\dots,N, \qquad p_k=\Omega_c\,\bar p_k. $$
(5.7)
Figure 5.4.a. Butterworth order explorer. Left: Eq. (5.7) places the \(N\) poles on the circle of radius \(\Omega_c=1\) (the LPF prototype's normalized cutoff), each separated from its neighbour by exactly \(\theta=180^\circ/N\), with the outermost pair \(\theta/2\) from the \(j\Omega\)-axis, so pole \(k\) sits at \(\theta_k=(2k-1)\theta/2\) from the positive \(j\Omega\)-axis — only the left half is kept, since the right-half poles that complete the uniform spacing (shown in grey) would be unstable (Eq. 4.8). No pole sits closer to the \(j\Omega\)-axis than any other; that uniform angular spacing is precisely what “maximally flat” means geometrically, and it is why no single frequency near \(\Omega_c\) gets singled out for a resonant peak the way Section 6.5's two-pole resonator deliberately creates one. Right: Eq. (5.4) for the chosen \(N\), with lower orders in grey and the band where \(|H|\) falls from 0.9 to 0.1 shaded. As \(N\) grows from 1 to 10, \(\theta\) shrinks from \(180^\circ\) to \(18^\circ\) and the curve hugs the \(90^\circ\) corner more and more tightly, converging on the ideal brick wall in the limit \(N\to\infty\) — but every extra order in Eq. (5.4) is another pole, i.e. another reactive component and another degree of design and tuning complexity in the real circuit. Sharper is never free; it is only ever purchased with hardware.
EXAMPLE 5.1 · Designing a Butterworth low-pass filter

An analog LPF must satisfy \(f_p=10\,\text{kHz}\), \(f_s=21\,\text{kHz}\), \(G_p=-1\,\text{dB}\), \(G_s=-40\,\text{dB}\). Find \(N\), \(\Omega_c\), and \(H(s)\).

1
Linear gains and edges

\(A_p=10^{-1/20}\approx0.8913\), \(A_s=10^{-40/20}=0.01\), \(\Omega_p=2\pi f_p\), \(\Omega_s/\Omega_p=f_s/f_p=2.1\).

2
Order

Recall Eq. (5.5):

$$ N=\left\lceil \frac{\ln\!\big[(1/A_s^2-1)/(1/A_p^2-1)\big]}{2\ln(\Omega_s/\Omega_p)} \right\rceil $$

Here \(1/A_p^2-1\approx0.259\), \(1/A_s^2-1=9999\), so \((\Omega_s/\Omega_p)^{2N}\approx3.86\times10^4\) and

$$N_{\text{real}}=\frac{\ln(3.86\times10^4)}{2\ln(2.1)}\approx7.12 \ \Longrightarrow\ \boxed{N=8.}$$
3
Cutoff

Recall Eq. (5.6):

$$ \Omega_c=\Omega_p\left(\frac{1}{A_p^2}-1\right)^{-1/(2N)} $$

With \(N=8\): \((0.259)^{-1/16}\approx1.088\), so \(\Omega_c\approx\Omega_p\cdot1.088\approx6.84\times10^4\,\text{rad/s}\) (\(f_c\approx10.9\,\text{kHz}\)).

4
Check

Recall Eq. (5.4), written as a magnitude:

$$ |H(j\Omega)|=\frac{1}{\sqrt{1+(\Omega/\Omega_c)^{2N}}} $$

At the passband edge \((\Omega_p/\Omega_c)^{16}=0.259\) by construction (Step 3), and at the stopband edge \((\Omega_s/\Omega_c)^{16}=(2.1/1.088)^{16}\approx3.7\times10^4\).

\(|H(j\Omega_p)|=1/\sqrt{1+0.259}=0.8913=A_p\ \checkmark\), and \(|H(j\Omega_s)|\approx0.0051\le A_s=0.01\ \checkmark\) (with margin, since \(N\) was rounded up).

The rounding in Step 2 is why the stopband check has margin to spare: real designs almost never land exactly on the boundary.

5
Transfer function

With \(N=8\) and \(\Omega_c\) from Step 3, the poles follow from Eq. (5.7):

$$ p_k=\Omega_c\,e^{j\left(\frac{\pi}{2}+\frac{(2k-1)\pi}{16}\right)},\qquad k=1,\dots,8. $$
$$ H(s)=\frac{\Omega_c^8}{\prod_{k=1}^{8}(s-p_k)}. $$
MATLAB Corner for Example 5.1

This script reproduces Example 5.1 from scratch, computing \(N\) and \(\Omega_c\) by hand-coding Eqs. (5.5)–(5.6), then builds \(H(s)\) with butter and evaluates \(H(j\Omega)\) manually via polyval — the same Eq. (5.2) split into magnitude and phase, done numerically.

Goal: compute \(N\) and \(\Omega_c\) for Example 5.1's specification (Eqs. 5.5-5.6), then plot the magnitude with the spec points \(f_p,f_s\) marked and simulated exactly, plus the resulting pole-zero layout in the \(s\)-plane.

butterworth.m
MATLAB
%% butterworth.m - Butterworth LPF (fp=10 kHz, fs=21 kHz, Ap=1 dB, As=40 dB)
fp = 10e3; fs = 21e3; Ap = 1; As = 40; % specs, Hz and dB
Ap_lin = 10^(-Ap/20); As_lin = 10^(-As/20);
 
%% Step 1: order N
N_real = log((As_lin^-2-1)/(Ap_lin^-2-1)) / (2*log(fs/fp)); % Eq. (5.5)
N = ceil(N_real);
fprintf('Butterworth order N = %.2f -> using N = %d\n', N_real, N);
 
%% Step 2: cutoff frequency wc (rad/s)
wc = 2*pi*fp * (Ap_lin^-2-1)^(-1/(2*N)); % Eq. (5.6)
fc = wc/(2*pi);
fprintf('Cutoff frequency fc = %.2f kHz\n', fc/1e3);
 
%% Step 3: H(s) via butter (s-domain design)
[zb, pb, kb] = butter(N, wc, 's'); % analog Butterworth prototype
[b, a] = zp2tf(zb, pb, kb); % numerator/denominator polynomials
 
%% Figure 1: magnitude response, larger fonts and markers
f_max = 25e3; w = linspace(0, 2*pi*f_max, 2000); f = w/(2*pi);
H = polyval(b, 1j*w) ./ polyval(a, 1j*w);
HdB = 20*log10(abs(H));
H_fp = polyval(b,1j*2*pi*fp)./polyval(a,1j*2*pi*fp);
H_fs = polyval(b,1j*2*pi*fs)./polyval(a,1j*2*pi*fs);
 
figure('Color','w'); plot(f, HdB, 'LineWidth',1.8); grid on; hold on;
xlabel('Frequency (Hz)','FontSize',14); ylabel('Magnitude (dB)','FontSize',14);
title(sprintf('Butterworth LPF (N=%d, f_c \\approx %.1f kHz)', N, fc/1e3), ...
'FontSize',16,'FontWeight','bold');
yline(-Ap, '--g', sprintf('A_p = -%d dB', Ap), 'LabelHorizontalAlignment','right', ...
'FontSize',12,'LineWidth',1.2);
yline(-As, '--r', sprintf('A_s = -%d dB', As), 'LabelHorizontalAlignment','right', ...
'FontSize',12,'LineWidth',1.2);
xline(fp, '--k', 'f_p', 'FontSize',12,'LineWidth',1.0);
xline(fs, '--k', 'f_s', 'FontSize',12,'LineWidth',1.0);
plot(fp, 20*log10(abs(H_fp)), 'o','MarkerSize',10,'MarkerFaceColor','g', ...
'MarkerEdgeColor','k','LineWidth',1.2);
plot(fs, 20*log10(abs(H_fs)), 'o','MarkerSize',10,'MarkerFaceColor','r', ...
'MarkerEdgeColor','k','LineWidth',1.2);
xlim([0 f_max]); ylim([-80 5]);
lg = legend('Magnitude', sprintf('A_p = %d dB',Ap), sprintf('A_s = %d dB',As));
lg.FontSize = 12;
 
%% Figure 2: pole-zero plot, larger text and markers
figure('Color','w'); zplane(zb, pb); grid on;
title(sprintf('Pole-Zero Plot (Analog Butterworth, N=%d)', N), 'FontSize',16);
hlines = findobj(gca,'Type','Line');
for k = 1:numel(hlines)
set(hlines(k), 'MarkerSize', 10, 'LineWidth', 1.2);
end
ax = gca; ax.FontSize = 12;
Butterworth LPF magnitude response with fp, fs, Ap, As annotated Butterworth pole-zero plot, N=8, eight poles on a circle
Figure 5.4.b. Checking the Butterworth design in MATLAB. The green marker at the passband edge \(f_p\) remains above the \(-1\,\text{dB}\) limit, while the red marker at \(f_s\) lies below the required \(-40\,\text{dB}\) stopband level. The curve decreases smoothly without ripple, which is the defining Butterworth behaviour. The pole–zero plot gives a second check: all eight poles lie on the circle \(|s|=\Omega_c\approx6.84\times10^4\,\text{rad/s}\), and only the left-half-plane roots are used. Their negative real parts make the realised filter stable.

5.5  Frequency transformations: one prototype, four filters

Every classical analog design, whatever the target shape, follows the same five moves:

1 · Normalize

Passband/stopband edges and gains become the dimensionless numbers \((A_p,\Omega_p,A_s,\Omega_s)\).

2 · Design LPP

Build a low-pass prototype at \(\Omega_c=1\,\text{rad/s}\) — Sections 5.4, 5.6, 5.7.

3 · Transform

Apply \(s\mapsto F(s)\) to turn the LPP into an HPF, BPF or BSF (this section).

4 · Denormalize

Scale the normalized cutoff up to the real \(\Omega_c\).

sz
5 · Optional

Bilinear-transform \(s\to z\) for a digital filter — Lecture 6.

A low-pass prototype \(\bar H(s)\), normalized to cutoff 1, can be converted into a high-pass, band-pass or band-stop filter by replacing \(s\) in \(\bar H(s)\) with a standard function of \(s\). For band filters, \(\Omega_0=\sqrt{\Omega_{p1}\Omega_{p2}}\) is the centre frequency and \(B=\Omega_{p2}-\Omega_{p1}\) is the bandwidth:

Target
Substitute \(s\to\) … in the LPP \(\bar H(s)\)
HPF
\(\Omega_c/s\) — same order \(N\); the LPP cutoff 1 maps to \(\Omega_c\), and \(N\) zeros appear at \(s=0\).
BPF
\((s^2+\Omega_0^2)/(Bs)\) — order doubles to \(2N\); each LPP pole becomes a conjugate pair.
\(\Omega_0=\sqrt{\Omega_{p1}\Omega_{p2}}\), \(B=\Omega_{p2}-\Omega_{p1}\), where \(\Omega_{p1}<\Omega_{p2}\) are the lower and upper passband edges.
BSF
\(Bs/(s^2+\Omega_0^2)\) — order doubles; zeros land exactly at \(\pm j\Omega_0\), a deep notch.
\(\Omega_0=\sqrt{\Omega_{p1}\Omega_{p2}}\), \(B=\Omega_{p2}-\Omega_{p1}\), where \(\Omega_{p1}<\Omega_{p2}\) are the passband edges either side of the stopband.

Figure 5.5.a applies each substitution to a Butterworth prototype. The top row is the prototype itself, normalized to \(\Omega_c=1\); the bottom row is the filter the substitution produces once the real cutoff frequencies are chosen. The specification levels are fixed at \(G_p=-1\,\text{dB}\) and \(G_s=-40\,\text{dB}\), so changing \(N\) or the cutoff moves the passband and stopband edges where the response crosses those levels.

Figure 5.5.a. One low-pass prototype, four filters. Pick the target type, the order \(N\) and the cutoff: \(f_c\) for LPF and HPF, the \(-3\,\text{dB}\) band edges \(f_1,f_2\) for BPF and BSF. The prototype's passband, transition and stopband (shaded green, amber and red, as in Figure 5.3.b) map onto the corresponding regions of the target. The LPF and HPF keep \(N\) poles on the circle \(|s|=\Omega_c\), and the HPF adds \(N\) zeros at \(s=0\). The BPF and BSF double the order to \(2N\): the BPF places \(N\) zeros at \(s=0\), the BSF places \(N\) zeros at each of \(\pm j\Omega_0\). Band edges are geometrically symmetric about \(f_0=\sqrt{f_1f_2}\), which is why the two transition bands have different widths on a linear frequency axis.

Apply the HPF mapping \(s\to\Omega_c/s\) to the order-8 LPP of Example 5.1, \(\bar H(s)=1/\prod_{k=1}^{8}(s-\bar p_k)\) with \(\bar p_k\) from Eq. (5.7), and multiply through by \(s^8\). Step 5 of the derivation with \(\Omega_c=1\) gives \(\prod_{k}(-\bar p_k)=1\):

$$ H_{HP}(s)=\bar H\!\left(\frac{\Omega_c}{s}\right)=\frac{s^8}{\prod_{k=1}^{8}\left(\Omega_c-\bar p_k s\right)}=\frac{s^8}{\prod_{k=1}^{8}\left(s-\Omega_c/\bar p_k\right)} $$
(5.8)

For the low-pass-to-high-pass transformation, each prototype pole \(\bar p_k\) maps to \(\Omega_c/\bar p_k\). A stable left-half-plane pole remains in the left half-plane, so the transformation preserves stability.

EXAMPLE 5.2 · Turning Example 5.1's LPF into a highpass

An analog HPF must satisfy \(f_p=10\,\text{kHz}\), \(f_s=4.76\,\text{kHz}\), \(G_p=-1\,\text{dB}\), \(G_s=-40\,\text{dB}\). Find \(N\), \(\Omega_c\), and \(H(s)\).

1
Normalize

Convert the gains: \(A_p=10^{-1/20}\approx0.8913\), \(A_s=10^{-40/20}=0.01\). Then map the highpass edges onto the prototype's frequency axis. Under the HPF substitution \(s\to\Omega_{\text{ref}}/s\), a highpass frequency \(\Omega\) corresponds to the prototype frequency \(\bar\Omega=\Omega_{\text{ref}}/\Omega\). Normalizing by the passband edge, \(\Omega_{\text{ref}}=\Omega_p\):

$$ \bar\Omega_p=\frac{\Omega_p}{\Omega_p}=1,\qquad \bar\Omega_s=\frac{\Omega_p}{\Omega_s}=\frac{10\,\text{kHz}}{4.76\,\text{kHz}}\approx2.1. $$

The highpass stopband (below \(\Omega_s\)) becomes the prototype stopband (above \(\bar\Omega_s\)), so the normalized specification \((A_p,\bar\Omega_p,A_s,\bar\Omega_s)=(0.8913,\,1,\,0.01,\,2.1)\) is the same as Example 5.1's.

2
Design the LPP

Recall Eq. (5.5) and apply it to the normalized specification:

$$ N=\left\lceil\frac{\ln\!\big[(1/A_s^2-1)/(1/A_p^2-1)\big]}{2\ln(\bar\Omega_s/\bar\Omega_p)}\right\rceil=\left\lceil\frac{\ln(9999/0.259)}{2\ln(2.1)}\right\rceil=\lceil7.12\rceil=\boxed{8}. $$

Recall Eq. (5.6) for the prototype-domain cutoff that meets the passband edge exactly:

$$ \bar\Omega_c=\bar\Omega_p\left(\frac{1}{A_p^2}-1\right)^{-1/(2N)}=(0.259)^{-1/16}\approx1.088. $$

The prototype itself is built at \(\Omega_c=1\) from Eq. (5.7):

$$ H_{LPP}(s)=\frac{1}{\prod_{k=1}^{8}(s-\bar p_k)},\qquad \bar p_k=e^{j\left(\frac{\pi}{2}+\frac{(2k-1)\pi}{16}\right)},\qquad k=1,\dots,8. $$
3
Transform

Apply the LP-to-HP substitution with unit cutoff, \(s\to1/s\), and multiply numerator and denominator by \(s^8\):

$$ H_{HP,n}(s)=H_{LPP}(1/s)=\frac{1}{\prod_{k=1}^{8}(1/s-\bar p_k)}=\frac{s^8}{\prod_{k=1}^{8}(s-\bar p_k)}. $$

The last step uses \(\prod(-\bar p_k)=1\), since the poles lie on the unit circle in conjugate pairs, and \(1/\bar p_k=\bar p_k^*\), which runs over the same set of poles. The transformation adds \(N=8\) zeros at \(s=0\) and keeps the poles on the unit circle.

4
Denormalize

The prototype-domain cutoff \(\bar\Omega_c\) maps back through the Step 1 relation \(\Omega=\Omega_p/\bar\Omega\):

$$ \Omega_c=\frac{\Omega_p}{\bar\Omega_c}=\Omega_p\left(\frac{1}{A_p^2}-1\right)^{1/(2N)}\approx\frac{6.28\times10^4}{1.088}\approx\boxed{5.77\times10^4\,\text{rad/s}}\quad(f_c\approx9.19\,\text{kHz}). $$

Scale the normalized highpass with \(s\to s/\Omega_c\). Together, Steps 3 and 4 are the table's substitution \(s\to\Omega_c/s\):

$$ H(s)=H_{HP,n}(s/\Omega_c)=\frac{s^8}{\prod_{k=1}^{8}(s-p_k)},\qquad p_k=\Omega_c\,\bar p_k. $$

The numerator \(s^8\) places all \(N=8\) zeros at \(s=0\). The cutoff lies below the passband edge, whereas Example 5.1's lowpass cutoff lay above it.

5
Check

From Step 4, \(|H(j\Omega)|=1/\sqrt{1+(\Omega_c/\Omega)^{2N}}\), which is Eq. (5.4) with \(\Omega/\Omega_c\) replaced by \(\Omega_c/\Omega\). At the passband edge \((\Omega_c/\Omega_p)^{16}=0.259\), so \(|H(j\Omega_p)|=0.8913=A_p\ \checkmark\). At the stopband edge \((\Omega_c/\Omega_s)^{16}\approx3.7\times10^4\), so \(|H(j\Omega_s)|\approx0.0052\ (-45.7\,\text{dB})\le A_s=0.01\ \checkmark\).

Move 5, the bilinear transform, is not needed for an analog design. The MATLAB corner below follows the same moves: it computes \(N\) and \(\Omega_c\) by hand, builds the prototype with buttap(8), and applies lp2hp at \(\Omega_c\), which performs Steps 3 and 4 together.

MATLAB Corner for Example 5.2

Goal: transform a Butterworth LPF prototype into an analog HPF via lp2hp, and confirm the zeros land at \(s=0\) exactly as Eq. (5.8) predicts.

Butterworth_HPF.m
MATLAB
%% Butterworth_HPF.m - LP prototype transformed to an analog HPF (Eq. 5.8)
fp = 10e3; fs = 4.76e3; Ap = 1; As = 40; % HPF: passband f >= fp, stopband f <= fs
wp = 2*pi*fp; ws = 2*pi*fs;
Ap_lin = 10^(-Ap/20); As_lin = 10^(-As/20);
n = ceil(log((As_lin^-2-1)/(Ap_lin^-2-1)) / (2*log(wp/ws))); % Steps 1-2: normalized LPP order, Eq. (5.5)
Wc = wp * (Ap_lin^-2-1)^(1/(2*n)); % Step 4: denormalized HPF cutoff, below wp
[z_lp, p_lp, k_lp] = buttap(n); % normalized LP prototype, Wc=1
[num_lp, den_lp] = zp2tf(z_lp, p_lp, k_lp);
figure('Color','w');
subplot(1,2,1);
plot(real(p_lp), imag(p_lp), 'x','Color','r','LineWidth',1.5); hold on;
plot(real(z_lp), imag(z_lp), 'o','Color','b');
th = linspace(0,2*pi,400); plot(cos(th), sin(th), ':k');
axis equal; grid on; xlabel('Real(s)'); ylabel('Imag(s)');
title(sprintf('LP prototype poles/zeros (n=%d)', n));
subplot(1,2,2);
w_proto = logspace(-1,1,1024);
semilogx(w_proto, 20*log10(abs(freqs(num_lp,den_lp,w_proto))),'LineWidth',1.2);
ylim([-45 5]); grid on; xlabel('rad/s'); ylabel('dB');
title('LP prototype magnitude (cutoff = 1 rad/s)');
%% Steps 3-4: LP -> HP transform and denormalize (s -> Wc/s)
[num_hp, den_hp] = lp2hp(num_lp, den_lp, Wc);
z_hp = roots(num_hp); p_hp = roots(den_hp); % zeros land at s=0 (mult. n)
w_hp = logspace(log10(ws)-1, log10(wp)+1, 2048);
figure('Color','w');
semilogx(w_hp/(2*pi), 20*log10(abs(freqs(num_hp,den_hp,w_hp))),'LineWidth',1.2);
grid on; hold on; ylim([-45 5]);
xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)');
title(sprintf('Analog Butterworth HPF (order %d), from LP prototype', n));
xline(fp,'r--','f_p'); xline(fs,'m--','f_s');
% Ensure a fresh figure and visible markers for HPF poles/zeros
figure('Color','w');
plot(real(p_hp), imag(p_hp), 'x', 'Color','r', 'MarkerSize',14, 'LineWidth',1.6); hold on;
plot(real(z_hp), imag(z_hp), 'o', 'Color','b', 'MarkerFaceColor','b', 'MarkerSize',12, 'LineWidth',1.2);
grid on; axis equal;
xlabel('Real(s)', 'FontSize',14); ylabel('Imag(s)', 'FontSize',14);
title('HPF poles and zeros (s-plane) - after lp2hp', 'FontSize',16);
set(gca, 'FontSize',12);
axis tight; % or set specific limits, e.g., axis([-wp wp -wp wp]);
drawnow;
LP prototype poles/zeros and magnitude, n=8 Analog Butterworth HPF magnitude, order 8, from LP prototype HPF poles and zeros, s-plane, after lp2hp
Figure 5.5.b. What changes in the low-pass-to-high-pass transformation. MATLAB first designs the low-pass prototype and then applies lp2hp. The transformation moves each prototype pole from \(p_k\) to \(\Omega_c^2/p_k\), in agreement with Eq. (5.8). It also places \(n\) zeros at \(s=0\). Those zeros force the gain to zero at DC, which is exactly what a high-pass filter requires. The transformed magnitude is small below the cutoff and approaches its passband level at high frequency.
EXAMPLE 5.3 · Designing a band-pass from scratch

An analog BPF must satisfy \(f_{p1}=15\,\text{kHz}\), \(f_{p2}=20\,\text{kHz}\), \(f_{s1}=12\,\text{kHz}\), \(f_{s2}=25\,\text{kHz}\), \(G_p=-1\,\text{dB}\), \(G_s=-40\,\text{dB}\). Find \(N\), \(\Omega_0\), \(B\), and \(H(s)\).

1
Normalize

Convert the gains: \(A_p=10^{-1/20}\approx0.8913\), \(A_s=10^{-40/20}=0.01\). The centre frequency and bandwidth come from the passband edges:

$$ \Omega_0=\sqrt{\Omega_{p1}\Omega_{p2}}=2\pi\sqrt{15\times20}\,\text{kHz}\approx2\pi\times17.32\,\text{kHz},\qquad B=\Omega_{p2}-\Omega_{p1}=2\pi\times5\,\text{kHz}. $$

Under the BPF substitution \(s\to(s^2+\Omega_0^2)/(Bs)\), setting \(s=j\Omega\) gives \(j(\Omega^2-\Omega_0^2)/(\Omega B)\), so a band-pass frequency \(\Omega\) corresponds to the prototype frequency

$$ \bar\Omega=\frac{|\Omega^2-\Omega_0^2|}{\Omega B}=\frac{|f^2-f_0^2|}{f\,(f_{p2}-f_{p1})}. $$

Here \(f_0^2=f_{p1}f_{p2}=300\,\text{kHz}^2\) and \(f_{p2}-f_{p1}=5\,\text{kHz}\). Normalized passband edge \(\bar\Omega_p\), evaluated at both passband edges:

$$ \bar\Omega_{p1}=\frac{|15^2-300|}{15\times5}=\frac{75}{75}=1,\qquad \bar\Omega_{p2}=\frac{|20^2-300|}{20\times5}=\frac{100}{100}=1\quad\Longrightarrow\quad\bar\Omega_p=1. $$

Both equal 1 by construction, since \(\Omega_0\) and \(B\) were defined from these edges. Normalized stopband edge \(\bar\Omega_s\), evaluated at both stopband edges:

$$ \bar\Omega_{s1}=\frac{|12^2-300|}{12\times5}=\frac{156}{60}=2.6,\qquad \bar\Omega_{s2}=\frac{|25^2-300|}{25\times5}=\frac{325}{125}=2.6\quad\Longrightarrow\quad\bar\Omega_s=\min(\bar\Omega_{s1},\bar\Omega_{s2})=2.6. $$

The smaller value is taken because it is the tighter requirement. Here the two agree because \(f_{s1}f_{s2}=12\times25=300=f_0^2\). The normalized specification is \((A_p,\bar\Omega_p,A_s,\bar\Omega_s)=(0.8913,\,1,\,0.01,\,2.6)\).

2
Design the LPP

Recall Eq. (5.5) and apply it to the normalized specification:

$$ N=\left\lceil\frac{\ln\!\big[(1/A_s^2-1)/(1/A_p^2-1)\big]}{2\ln(\bar\Omega_s/\bar\Omega_p)}\right\rceil=\left\lceil\frac{\ln(9999/0.259)}{2\ln(2.6)}\right\rceil=\lceil5.53\rceil=\boxed{6}. $$

Recall Eq. (5.6) for the prototype-domain cutoff that meets the passband edge exactly:

$$ \bar\Omega_c=\bar\Omega_p\left(\frac{1}{A_p^2}-1\right)^{-1/(2N)}=(0.259)^{-1/12}\approx1.119. $$

The prototype itself is built at \(\Omega_c=1\) from Eq. (5.7):

$$ H_{LPP}(s)=\frac{1}{\prod_{k=1}^{6}(s-\bar p_k)},\qquad \bar p_k=e^{j\left(\frac{\pi}{2}+\frac{(2k-1)\pi}{12}\right)},\qquad k=1,\dots,6. $$
3
Transform

To meet the passband edge exactly the prototype is used at cutoff \(\bar\Omega_c\), i.e. as \(H_{LPP}(s/\bar\Omega_c)\). Apply the table's BPF substitution to it:

$$ H(s)=H_{LPP}\!\left(\frac{s^2+\Omega_0^2}{\bar\Omega_c\,B\,s}\right). $$

For each factor, \(\dfrac{s^2+\Omega_0^2}{\bar\Omega_c Bs}-\bar p_k=\dfrac{s^2-\bar p_k\bar\Omega_c Bs+\Omega_0^2}{\bar\Omega_c Bs}\), so every prototype pole becomes a quadratic: \(N=6\) prototype poles give \(2N=12\) band-pass poles.

4
Denormalize

\(\Omega_0\) and \(B\) are already in rad/s, so the substitution returns the real-frequency filter directly. The only scaling left is the prototype cutoff, which widens the bandwidth used in the transform from the passband width \(B\) (measured between the \(-1\,\text{dB}\) edges) to \(B_{3\text{dB}}\), the width between the two \(-3\,\text{dB}\) frequencies:

$$ B_{3\text{dB}}=\bar\Omega_c\,B\approx1.119\times2\pi\times5\,\text{kHz}\approx2\pi\times5.60\,\text{kHz}. $$

Collecting the six factors from Step 3:

$$ H(s)=\frac{(B_{3\text{dB}}\,s)^6}{\prod_{k=1}^{6}\left(s^2-\bar p_k B_{3\text{dB}}\,s+\Omega_0^2\right)}. $$

The roots of each quadratic, \(\tfrac12\big[\bar p_kB_{3\text{dB}}\pm\sqrt{(\bar p_kB_{3\text{dB}})^2-4\Omega_0^2}\big]\), are the 12 poles, arranged around \(\pm j\Omega_0\). The numerator places \(N=6\) zeros at \(s=0\). At \(s=j\Omega_0\) the argument of \(H_{LPP}\) is 0, so the gain at the centre frequency is \(H_{LPP}(0)=1\).

5
Check

From Steps 1 and 3, \(|H(j\Omega)|=1/\sqrt{1+(\bar\Omega/\bar\Omega_c)^{2N}}\). At both passband edges \(\bar\Omega=1\), so \((1/\bar\Omega_c)^{12}=0.259\) and \(|H|=0.8913=A_p\ \checkmark\). At both stopband edges \(\bar\Omega=2.6\), so \((2.6/1.119)^{12}\approx2.5\times10^4\) and \(|H|\approx0.0064\ (-43.9\,\text{dB})\le A_s=0.01\ \checkmark\).

Move 5, the bilinear transform, is not needed for an analog design. The MATLAB corner below builds the same prototype with buttap(6) and applies lp2bp at \(\Omega_0\) with the unscaled bandwidth \(B\), which places the \(-3\,\text{dB}\) points (rather than the \(-1\,\text{dB}\) points) on the passband edges; passing \(\bar\Omega_cB\) instead reproduces Step 4. Its pole–zero plot shows the 12 poles straddling \(f_0\approx17.3\,\text{kHz}\).

MATLAB Corner for Example 5.3

Goal: build an analog BPF two ways — directly with butter(...,'bandpass') and via lp2bp from a LP prototype — and confirm they agree, then read the doubled pole count off the pole-zero plot.

Butterworth_BPF.m
MATLAB
%% Butterworth_BPF.m - LP prototype transformed to an analog BPF (Eq. 5.8-kin)
fp1=15e3; fp2=20e3; fs1=12e3; fs2=25e3; Ap=1; As=40;
Wp = 2*pi*[fp1 fp2]; Ws = 2*pi*[fs1 fs2];
[n, Wn] = buttord(Wp, Ws, Ap, As, 's');
 
[z_lp,p_lp,k_lp] = buttap(n); [num_lp,den_lp] = zp2tf(z_lp,p_lp,k_lp);
W0 = sqrt(Wp(1)*Wp(2)); Bw = Wp(2)-Wp(1); % centre and bandwidth
[num_bp, den_bp] = lp2bp(num_lp, den_lp, W0, Bw);
 
% cross-check against direct analog design
[z_d,p_d,k_d] = butter(n, Wn, 'bandpass', 's'); [num_d,den_d] = zp2tf(z_d,p_d,k_d);
 
w = logspace(log10(Wp(1))-0.6, log10(Wp(2))+0.6, 8192);
figure('Color','w');
semilogx(w/(2*pi), 20*log10(abs(freqs(num_d,den_d,w))), 'b-','LineWidth',1.2); hold on;
semilogx(w/(2*pi), 20*log10(abs(freqs(num_bp,den_bp,w))), 'r--','LineWidth',1);
grid on; xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)');
title(sprintf('Analog Butterworth BPF (n=%d): direct vs. lp2bp', n));
legend('butter(...,''bandpass'')','lp2bp(prototype)');
xline(fp1,'g--'); xline(fp2,'g--'); xline(fs1,'r--'); xline(fs2,'r--');
 
figure('Color','w');
p_bp = roots(den_bp); z_bp = roots(num_bp);
plot(real(p_bp), imag(p_bp), 'x','Color','r','LineWidth',1.5); hold on;
plot(real(z_bp), imag(z_bp), 'o','Color','b');
axis equal; grid on; xlabel('Real(s)'); ylabel('Imag(s)');
title(sprintf('BPF poles/zeros: W_0=%.1f kHz, Bw=%.1f kHz', W0/2/pi/1e3, Bw/2/pi/1e3));
Analog Butterworth BPF magnitude, direct vs lp2bp, with fp1/fp2/fs1/fs2 marked BPF poles and zeros, s-plane, poles on both sides of the passband
Figure 5.5.c. Checking the band-pass transformation. The direct butter result and the transformed lp2bp result lie on top of each other, showing that the two design routes produce the same transfer function. A low-pass filter of order \(n\) becomes a band-pass filter of order \(2n\): every prototype pole produces a pair of poles around the centre frequency. The response is largest between the two passband edges and decreases on both sides, while the pole–zero map confirms the expected doubled order.
EXAMPLE 5.4 · An asymmetric band-stop, and why both edges must be checked

An analog BSF must satisfy \(f_{p1}=10\,\text{kHz}\), \(f_{p2}=32\,\text{kHz}\), \(f_{s1}=15\,\text{kHz}\), \(f_{s2}=27\,\text{kHz}\), \(G_p=-1\,\text{dB}\), \(G_s=-40\,\text{dB}\). Find \(N\), \(\Omega_0\), \(B\), and \(H(s)\).

1
Normalize

Convert the gains: \(A_p=10^{-1/20}\approx0.8913\), \(A_s=10^{-40/20}=0.01\). The centre frequency and bandwidth come from the passband edges either side of the stopband:

$$ \Omega_0=\sqrt{\Omega_{p1}\Omega_{p2}}=2\pi\sqrt{10\times32}\,\text{kHz}\approx2\pi\times17.89\,\text{kHz},\qquad B=\Omega_{p2}-\Omega_{p1}=2\pi\times22\,\text{kHz}. $$

Under the BSF substitution \(s\to Bs/(s^2+\Omega_0^2)\), setting \(s=j\Omega\) gives \(j\Omega B/(\Omega_0^2-\Omega^2)\), so a band-stop frequency \(\Omega\) corresponds to the prototype frequency

$$ \bar\Omega=\frac{\Omega B}{|\Omega_0^2-\Omega^2|}=\frac{f\,(f_{p2}-f_{p1})}{|f_0^2-f^2|}. $$

This is the reciprocal of the band-pass mapping in Example 5.3. Here \(f_0^2=f_{p1}f_{p2}=320\,\text{kHz}^2\) and \(f_{p2}-f_{p1}=22\,\text{kHz}\). Normalized passband edge \(\bar\Omega_p\), evaluated at both passband edges:

$$ \bar\Omega_{p1}=\frac{10\times22}{|320-10^2|}=\frac{220}{220}=1,\qquad \bar\Omega_{p2}=\frac{32\times22}{|320-32^2|}=\frac{704}{704}=1\quad\Longrightarrow\quad\bar\Omega_p=1. $$

Normalized stopband edge \(\bar\Omega_s\), evaluated at both stopband edges:

$$ \bar\Omega_{s1}=\frac{15\times22}{|320-15^2|}=\frac{330}{95}\approx3.47,\qquad \bar\Omega_{s2}=\frac{27\times22}{|320-27^2|}=\frac{594}{409}\approx1.45\quad\Longrightarrow\quad\bar\Omega_s=\min(\bar\Omega_{s1},\bar\Omega_{s2})\approx1.45. $$

Unlike Example 5.3, the two values differ, because \(f_{s1}f_{s2}=15\times27=405\ne320=f_0^2\): the specification is not geometrically symmetric about \(f_0\). The smaller value is the tighter requirement, so the \(27\,\text{kHz}\) edge sets the design. The normalized specification is \((A_p,\bar\Omega_p,A_s,\bar\Omega_s)=(0.8913,\,1,\,0.01,\,1.45)\).

2
Design the LPP

Recall Eq. (5.5) and apply it to the normalized specification:

$$ N=\left\lceil\frac{\ln\!\big[(1/A_s^2-1)/(1/A_p^2-1)\big]}{2\ln(\bar\Omega_s/\bar\Omega_p)}\right\rceil=\left\lceil\frac{\ln(9999/0.259)}{2\ln(1.45)}\right\rceil=\lceil14.2\rceil=\boxed{15}. $$

Using \(\bar\Omega_{s1}=3.47\) instead would give \(\lceil\ln(3.86\times10^4)/(2\ln3.47)\rceil=\lceil4.24\rceil=5\), a third of the required order. Recall Eq. (5.6) for the prototype-domain cutoff:

$$ \bar\Omega_c=\bar\Omega_p\left(\frac{1}{A_p^2}-1\right)^{-1/(2N)}=(0.259)^{-1/30}\approx1.046. $$

The prototype itself is built at \(\Omega_c=1\) from Eq. (5.7):

$$ H_{LPP}(s)=\frac{1}{\prod_{k=1}^{15}(s-\bar p_k)},\qquad \bar p_k=e^{j\left(\frac{\pi}{2}+\frac{(2k-1)\pi}{30}\right)},\qquad k=1,\dots,15. $$
3
Transform

Use the prototype at cutoff \(\bar\Omega_c\), i.e. as \(H_{LPP}(s/\bar\Omega_c)\), and apply the table's BSF substitution:

$$ H(s)=H_{LPP}\!\left(\frac{(B/\bar\Omega_c)\,s}{s^2+\Omega_0^2}\right). $$

For each factor, \(\dfrac{(B/\bar\Omega_c)s}{s^2+\Omega_0^2}-\bar p_k=\dfrac{-\bar p_k\big(s^2-(B/\bar\Omega_c)\bar p_k^{-1}s+\Omega_0^2\big)}{s^2+\Omega_0^2}\). As in Example 5.2, \(\prod(-\bar p_k)=1\), and \(\bar p_k^{-1}=\bar p_k^*\) runs over the same set of poles, so every prototype pole becomes a quadratic in \(s\): \(N=15\) prototype poles give \(2N=30\) band-stop poles.

4
Denormalize

\(\Omega_0\) and \(B\) are already in rad/s. For the band-stop the prototype cutoff divides the bandwidth, giving the width between the two \(-3\,\text{dB}\) frequencies:

$$ B_{3\text{dB}}=\frac{B}{\bar\Omega_c}\approx\frac{2\pi\times22\,\text{kHz}}{1.046}\approx2\pi\times21.0\,\text{kHz}. $$

Collecting the 15 factors from Step 3:

$$ H(s)=\frac{\left(s^2+\Omega_0^2\right)^{15}}{\prod_{k=1}^{15}\left(s^2-\bar p_k B_{3\text{dB}}\,s+\Omega_0^2\right)}. $$

The numerator places \(N=15\) zeros at each of \(s=\pm j\Omega_0\), which forces \(|H(j\Omega_0)|=0\). At \(s=0\) every factor reduces to \(\Omega_0^2\), so the DC gain is 1. The \(-3\,\text{dB}\) points sit inside the passband edges here, whereas in Example 5.3 they sat outside: the band-pass multiplies \(B\) by \(\bar\Omega_c\), the band-stop divides by it.

5
Check both stopband edges

From Steps 1 and 3, \(|H(j\Omega)|=1/\sqrt{1+(\bar\Omega/\bar\Omega_c)^{2N}}\). At both passband edges \(\bar\Omega=1\), so \((1/\bar\Omega_c)^{30}=0.259\) and \(|H|=0.8913=A_p\ \checkmark\). At \(27\,\text{kHz}\), \(\bar\Omega=1.45\): \((1.45/1.046)^{30}\approx1.9\times10^4\), so \(|H|\approx0.0073\ (-42.7\,\text{dB})\le A_s\ \checkmark\). At \(15\,\text{kHz}\), \(\bar\Omega=3.47\), so \(|H|\) is far below \(A_s\) \(\checkmark\).

With the \(N=5\) from the \(15\,\text{kHz}\) edge alone, \(\bar\Omega_c=(0.259)^{-1/10}\approx1.145\) and the \(27\,\text{kHz}\) edge gives \(|H|=1/\sqrt{1+(1.45/1.145)^{10}}\approx0.29\ (-10.7\,\text{dB})\), which fails the \(-40\,\text{dB}\) requirement by about 29 dB. In an asymmetric specification Eq. (5.5) must be applied to every stopband edge. Move 5, the bilinear transform, is not needed for an analog design. The MATLAB corner below builds the prototype with buttap(15) and applies lp2bs with the unscaled bandwidth \(B\), which places the \(-3\,\text{dB}\) points on the passband edges; passing \(B/\bar\Omega_c\) instead reproduces Step 4.

MATLAB Corner for Example 5.4

Goal: build the band-stop counterpart with lp2bs, and confirm its zeros land exactly at \(\pm j\Omega_0\) — the deep notch Section 5.5 promised.

Butterworth_BSF.m
MATLAB
%% Butterworth_BSF.m - LP prototype transformed to an analog BSF
fp1=10e3; fp2=32e3; fs1=15e3; fs2=27e3; Ap=1; As=40;
Wp = 2*pi*[fp1 fp2]; Ws = 2*pi*[fs1 fs2];
[n, Wn_bs] = buttord(Wp, Ws, Ap, As, 's');
[z_lp,p_lp,k_lp] = buttap(n); [num_lp,den_lp] = zp2tf(z_lp,p_lp,k_lp);
W0 = sqrt(Wp(1)*Wp(2)); Bw = Wp(2)-Wp(1);
[num_bs, den_bs] = lp2bs(num_lp, den_lp, W0, Bw); % zeros land at +-j*W0
[z_d,p_d,k_d] = butter(n, Wn_bs, 'stop', 's'); [num_d,den_d] = zp2tf(z_d,p_d,k_d);
w = logspace(log10(min([Ws Wp]))-0.6, log10(max([Ws Wp]))+0.6, 8192);
figure('Color','w');
h1 = semilogx(w/(2*pi), 20*log10(abs(freqs(num_d,den_d,w))), 'b-', 'LineWidth',1.4);
hold on;
h2 = semilogx(w/(2*pi), 20*log10(abs(freqs(num_bs,den_bs,w))), 'r--', 'LineWidth',1.4);
xlim([5e3, 5e4])
% plot xlines but exclude them from legend
xl1 = xline(fp1,'g--','f_{p1}'); xl1.Annotation.LegendInformation.IconDisplayStyle = 'off';
xl2 = xline(fp2,'g--','f_{p2}'); xl2.Annotation.LegendInformation.IconDisplayStyle = 'off';
xl3 = xline(fs1,'r--','f_{s1}'); xl3.Annotation.LegendInformation.IconDisplayStyle = 'off';
xl4 = xline(fs2,'r--','f_{s2}'); xl4.Annotation.LegendInformation.IconDisplayStyle = 'off';
 
% set DisplayName (optional) and create legend from handles
set(h1, 'DisplayName', 'butter(...,''stop'') - direct');
set(h2, 'DisplayName', 'lp2bs(prototype) - transform');
legend([h1 h2], 'Location','best', 'FontSize', 11);
 
figure('Color','w');
p_bs = roots(den_bs); z_bs = roots(num_bs); % zeros exactly at +-j*W0
plot(real(p_bs), imag(p_bs), 'x','Color','r','LineWidth',1.5); hold on;
plot(real(z_bs), imag(z_bs), 'o','Color','b');
axis equal; grid on; xlabel('Real(s)'); ylabel('Imag(s)');
title(sprintf('BSF poles/zeros: W_0=%.1f kHz, Bw=%.1f kHz', W0/2/pi/1e3, Bw/2/pi/1e3));
Analog Butterworth BSF magnitude, direct vs lp2bs, with fp1/fp2/fs1/fs2 marked BSF poles and zeros, s-plane, zeros on the imaginary axis
Figure 5.5.d. Checking the band-stop transformation. The direct design and the transformed prototype give almost identical magnitude curves. Their small difference at the bottom of the notch is numerical round-off: both theoretical responses are zero there. The pole–zero map explains the notch. Zeros at \(s=\pm j\Omega_0\) place a zero directly on the frequency axis at the centre frequency, forcing \(|H(j\Omega_0)|=0\). The surrounding poles set the width and shape of the rejected band.

5.6  Chebyshev prototypes: trading flatness for a sharper corner

Butterworth filters use their degrees of freedom to keep the passband smooth and monotonic. Chebyshev filters allow an equiripple error that moves between fixed limits. Accepting this ripple gives a steeper transition for the same order, or a lower order for the same specification.

5.6.1  Type I: ripple in the passband

$$ |H(j\Omega)|^2=\frac{1}{1+\varepsilon^2\,C_N^2(\Omega/\Omega_p)} $$
(5.9)

The Chebyshev polynomial \(C_N\) oscillates between bounded values for \(|x|\le1\), which creates the passband ripple, and grows rapidly for \(|x|>1\), which creates the sharp stopband roll-off. The passband requirement determines the ripple factor \(\varepsilon\), and the stopband requirement determines the order.

Derivation · ripple factor and order
1
The Chebyshev polynomial
$$ C_N(x)=\begin{cases}\cos(N\arccos x), & |x|\le1\\ \cosh(N\,\mathrm{arccosh}\,x), & x>1\end{cases} $$

In the passband \(|C_N|\le1\), and \(C_N(1)=1\) for every \(N\).

2
Passband edge gives \(\varepsilon\)

At \(\Omega=\Omega_p\) the argument is \(x=1\), so Eq. (5.9) gives \(|H(j\Omega_p)|^2=1/(1+\varepsilon^2)\). Set this equal to \(A_p^2\):

$$ \frac{1}{1+\varepsilon^2}=A_p^2\;\Longrightarrow\;\varepsilon^2=\frac{1}{A_p^2}-1\;\Longrightarrow\;\varepsilon=\sqrt{A_p^{-2}-1}=\sqrt{10^{-G_p/10}-1}. $$

Inside the passband \(|H|^2\) ripples between \(1/(1+\varepsilon^2)=A_p^2\) and 1, so the ripple depth in dB is \(-G_p\). For \(G_p=-1\,\text{dB}\), \(\varepsilon\approx0.509\).

3
Stopband edge

At \(\Omega=\Omega_s\) the argument is \(x=\Omega_s/\Omega_p>1\). Set \(|H(j\Omega_s)|^2=A_s^2\), invert and subtract 1:

$$ 1+\varepsilon^2C_N^2\!\left(\frac{\Omega_s}{\Omega_p}\right)=\frac{1}{A_s^2}\;\Longrightarrow\;C_N\!\left(\frac{\Omega_s}{\Omega_p}\right)=\frac{\sqrt{A_s^{-2}-1}}{\varepsilon}. $$
4
Solve for \(N\)

Use the \(x>1\) branch from Step 1 and apply \(\mathrm{arccosh}\) to both sides:

$$ \cosh\!\big(N\,\mathrm{arccosh}(\Omega_s/\Omega_p)\big)=\frac{\sqrt{A_s^{-2}-1}}{\varepsilon}\;\Longrightarrow\;N_{\text{real}}=\frac{\mathrm{arccosh}\big(\sqrt{A_s^{-2}-1}/\varepsilon\big)}{\mathrm{arccosh}(\Omega_s/\Omega_p)}, $$

rounded up as in the Butterworth case. Since \(\varepsilon=\sqrt{A_p^{-2}-1}\), the numerator's argument is \(\sqrt{(1/A_s^2-1)/(1/A_p^2-1)}\), the square root of the ratio in Eq. (5.5). Eq. (5.5) can be written \(N_{\text{real}}=\ln\!\big(\sqrt{\cdot}\,\big)/\ln(\Omega_s/\Omega_p)\), so the two designs differ only in \(\ln\) versus \(\mathrm{arccosh}\).

Steps 2 and 4 give the two Chebyshev design equations:

$$ \varepsilon=\sqrt{A_p^{-2}-1}, \qquad N=\left\lceil\frac{\mathrm{arccosh}\!\big(\sqrt{A_s^{-2}-1}/\varepsilon\big)}{\mathrm{arccosh}(\Omega_s/\Omega_p)}\right\rceil. $$
(5.10)

The prototype poles (\(\Omega_p=1\)) sit on an ellipse, not a circle — the price of ripple is that the equal-spacing symmetry of Figure 5.4.a is broken deliberately, trading it for a sharper knee.

Derivation · where the Chebyshev poles come from
1
Set up the pole equation

As in the Butterworth case, replace \(\Omega\) by \(s/j\) in Eq. (5.9), with \(\Omega_p=1\). The poles of \(H(s)H(-s)\) satisfy

$$ 1+\varepsilon^2C_N^2(s/j)=0\;\Longrightarrow\;C_N(s/j)=\pm\frac{j}{\varepsilon}. $$
2
Write \(s/j\) as a cosine

Let \(s/j=\cos w\) with complex \(w=u+jv\), so that \(C_N(s/j)=\cos(Nw)\). Expand the cosine of a complex argument:

$$ \cos(Nu+jNv)=\cos(Nu)\cosh(Nv)-j\sin(Nu)\sinh(Nv)=\pm\frac{j}{\varepsilon}. $$
3
Match real and imaginary parts

Real part: \(\cos(Nu)\cosh(Nv)=0\). Since \(\cosh(Nv)\ge1\), \(\cos(Nu)=0\), so \(Nu=(2k-1)\pi/2\), i.e. \(u=\theta_k=(2k-1)\pi/(2N)\). Then \(\sin(Nu)=\pm1\), and the imaginary part gives \(|\sinh(Nv)|=1/\varepsilon\), so \(v=\pm\beta\) with \(\beta=\frac1N\sinh^{-1}(1/\varepsilon)\).

4
Convert back to \(s\)
$$ s=j\cos(u+jv)=j\big[\cos u\cosh v-j\sin u\sinh v\big]=\sin u\sinh v+j\cos u\cosh v. $$

Choosing \(v=-\beta\) makes the real part \(-\sinh\beta\,\sin\theta_k\), negative for \(k=1,\dots,N\) where \(\sin\theta_k>0\); these are the left-half-plane poles of Eq. (5.11). Because \((\mathrm{Re}\,\bar p_k/\sinh\beta)^2+(\mathrm{Im}\,\bar p_k/\cosh\beta)^2=\sin^2\theta_k+\cos^2\theta_k=1\), the poles lie on an ellipse with semi-axes \(\sinh\beta\) (real) and \(\cosh\beta\) (imaginary).

5
Assemble \(H(s)\)

As for Butterworth, \(H(s)\) has no finite zeros, so it is a constant \(K\) over the product of its \(N\) pole factors. \(C_N\) has leading coefficient \(2^{N-1}\), so comparing the \(s^{2N}\) coefficients of \(H(s)H(-s)\) and \(1/\big[1+\varepsilon^2C_N^2(s/j)\big]\) gives \(K^2=1/(\varepsilon^2\,4^{N-1})\):

$$ H(s)=\frac{K}{\prod_{k=1}^{N}(s-\bar p_k)},\qquad K=\frac{1}{\varepsilon\,2^{N-1}}. $$

The DC gain is \(H(0)=1/\sqrt{1+\varepsilon^2C_N^2(0)}\) with \(C_N(0)=\cos(N\pi/2)\): 1 for odd \(N\), \(1/\sqrt{1+\varepsilon^2}\) for even \(N\). For \(N=1\), \(\bar p_1=-1/\varepsilon\) and \(H(s)=(1/\varepsilon)/(s+1/\varepsilon)\).

Steps 3 and 4 give the normalized Chebyshev poles:

$$ \bar p_k=-\sinh(\beta)\sin\theta_k+j\cosh(\beta)\cos\theta_k, \quad \theta_k=\frac{\pi(2k-1)}{2N}, \quad \beta=\frac{1}{N}\sinh^{-1}\!\frac1\varepsilon. $$
(5.11)

5.6.2  Type II: ripple in the stopband instead

Swap which band absorbs the ripple and you get Type II: a monotonic, flat passband (no ripple where you are most likely to care) and equiripple in the stopband instead, with the roles of \(\Omega_p\) and \(\Omega_s\) exchanged inside \(C_N\):

$$ |H(j\Omega)|^2=\frac{1}{1+\varepsilon^{-2}C_N^{-2}(\Omega_s/\Omega)}. $$
(5.12)

Both types need the same order \(N\) for the same specification — the polynomial doing the work is identical, only which band it ripples in differs — so the choice between them is purely about which band you can tolerate ripple in, never about cost.

EXAMPLE 5.5 · The same specification, a Chebyshev Type I filter

Design a Chebyshev Type I LPF for Example 5.1's specification (\(f_p=10\,\text{kHz}\), \(f_s=21\,\text{kHz}\), \(G_p=-1\,\text{dB}\), \(G_s=-40\,\text{dB}\)). Find \(\varepsilon\), \(N\), and \(H(s)\), and compare the order with Butterworth's.

1
Normalize

Convert the gains: \(A_p=10^{-1/20}\approx0.8913\), \(A_s=10^{-40/20}=0.01\). The Chebyshev prototype is normalized at its passband (ripple) edge, so divide every frequency by \(\Omega_p\):

$$ \bar\Omega_p=\frac{\Omega_p}{\Omega_p}=1,\qquad \bar\Omega_s=\frac{\Omega_s}{\Omega_p}=\frac{21\,\text{kHz}}{10\,\text{kHz}}=2.1. $$
2
Design the LPP

Recall Eq. (5.10). The passband edge fixes the ripple factor and the stopband edge fixes the order:

$$ \varepsilon=\sqrt{A_p^{-2}-1}=\sqrt{1.259-1}\approx0.509, $$
$$ N=\left\lceil\frac{\mathrm{arccosh}\big(\sqrt{A_s^{-2}-1}/\varepsilon\big)}{\mathrm{arccosh}(\bar\Omega_s/\bar\Omega_p)}\right\rceil=\left\lceil\frac{\mathrm{arccosh}(99.995/0.509)}{\mathrm{arccosh}(2.1)}\right\rceil=\left\lceil\frac{5.97}{1.37}\right\rceil=\lceil4.35\rceil=\boxed{5}. $$

Recall Eq. (5.11) for the prototype poles:

$$ \bar p_k=-\sinh\beta\,\sin\theta_k+j\cosh\beta\,\cos\theta_k,\qquad \theta_k=\frac{(2k-1)\pi}{10},\qquad \beta=\frac15\sinh^{-1}\frac1\varepsilon\approx0.286,\qquad k=1,\dots,5. $$
$$ H_{LPP}(s)=\frac{K}{\prod_{k=1}^{5}(s-\bar p_k)},\qquad K=\prod_{k=1}^{5}(-\bar p_k). $$

For odd \(N\), \(C_N(0)=0\), so Eq. (5.9) gives unity gain at DC and \(K\) is chosen to make \(H_{LPP}(0)=1\). (For even \(N\), \(C_N(0)=\pm1\) and the DC gain is \(1/\sqrt{1+\varepsilon^2}=A_p\).)

3
Transform

The target is a low-pass filter, so no frequency transformation is applied; only the scaling of Step 4 remains.

4
Denormalize

Scale with \(s\to s/\Omega_p\). Because the prototype is normalized at its passband edge, \(\Omega_p\) itself is the scaling frequency and no separate cutoff calculation like Eq. (5.6) is needed:

$$ H(s)=H_{LPP}(s/\Omega_p)=\frac{\prod_{k=1}^{5}(-p_k)}{\prod_{k=1}^{5}(s-p_k)},\qquad p_k=\Omega_p\,\bar p_k. $$

The poles lie on an ellipse with semi-axes \(\Omega_p\sinh\beta\) and \(\Omega_p\cosh\beta\) (Section 5.6.1).

5
Check

Recall Eq. (5.9) with \(N=5\). At the passband edge \(C_5(1)=1\), so \(|H(j\Omega_p)|=1/\sqrt{1+\varepsilon^2}=0.8913=A_p\ \checkmark\). At the stopband edge \(C_5(2.1)=\cosh\big(5\,\mathrm{arccosh}(2.1)\big)\approx479\), so \(|H(j\Omega_s)|=1/\sqrt{1+0.259\times479^2}\approx0.0041\ (-47.7\,\text{dB})\le A_s\ \checkmark\).

Five poles instead of Butterworth's eight for the identical spec — equiripple flatness buys almost 40% fewer components for the same passband/stopband guarantee. The cost is a passband that wobbles between \(A_p\) and \(1\) instead of decaying smoothly, and a pole placement (Eq. 5.11, an ellipse) that is more sensitive to component tolerances than Butterworth's circle. Move 5, the bilinear transform, is not needed for an analog design.

MATLAB Corner for Example 5.5

This script builds Example 5.5's Chebyshev Type I filter with cheb1ord/cheby1 and overlays it on Example 5.1's Butterworth, on the same axes, so the order saving and the ripple trade-off are visible in one picture.

Goal: confirm Chebyshev Type I needs \(N=5\) against Butterworth's \(N=8\) for the identical spec, and see the equiripple passband directly.

chebyshev_vs_butterworth.m
MATLAB
%% chebyshev_vs_butterworth.m - same spec, two families (Eq. 5.10 vs Eq. 5.5)
fp = 2*pi*10e3; fs = 2*pi*21e3; Gp = 1; Gs = 40; % dB, positive convention
 
[Nb, Wcb] = buttord(fp, fs, Gp, Gs, 's');
[bb, ab] = butter(Nb, Wcb, 's');
 
[Nc, Wpc] = cheb1ord(fp, fs, Gp, Gs, 's');
[bc, ac] = cheby1(Nc, Gp, Wpc, 's');
 
fprintf('Butterworth order: %d\nChebyshev I order: %d\n', Nb, Nc);
 
w = logspace(3, 6, 4000);
figure('Color','w');
semilogx(w, 20*log10(abs(freqs(bb,ab,w))), 'LineWidth',1.5); hold on; grid on;
semilogx(w, 20*log10(abs(freqs(bc,ac,w))), 'LineWidth',1.5);
xline(fp, 'k:'); xline(fs, 'k:'); yline(-Gp,'k:'); yline(-Gs,'k:');
legend(sprintf('Butterworth, N=%d',Nb), sprintf('Chebyshev I, N=%d',Nc));
xlabel('\Omega (rad/s)'); ylabel('|H| (dB)'); ylim([-80 5]);
title('Same spec, fewer poles: equiripple beats maximally-flat on cost');
 
figure('Color','w');
wz = linspace(0, fp*1.05, 2000);
plot(wz, 20*log10(abs(freqs(bc,ac,wz))), 'LineWidth',1.5); grid on;
title('Zoomed passband: the equiripple wobble Butterworth never has');
xlabel('\Omega (rad/s)'); ylabel('|H| (dB)');
Butterworth N=8 vs Chebyshev I N=5 magnitude overlay, same spec Zoomed Chebyshev I passband showing equiripple wobble
Figure 5.6. Butterworth and Chebyshev Type I compared. Both filters satisfy the same passband and stopband limits, but they use the allowed error differently. The Butterworth response is smooth and monotonic, so it needs the higher order. The Chebyshev Type I response deliberately ripples within the permitted passband. In return, it changes more rapidly through the transition region and reaches the stopband requirement with three fewer poles. The zoomed passband makes the price of that lower order visible.

5.7  Elliptic (Cauer) filters: equiripple in both bands

Push the same idea one step further: ripple in both bands at once, and the transition gets as sharp as a given order can possibly make it.

$$ |H_E(j\Omega)|^2=\frac{1}{1+\varepsilon^2R_N^2(\xi,\Omega/\Omega_p)} $$
(5.13)

Elliptic filters allow ripple in both the passband and stopband. For a fixed specification, they usually achieve the lowest order of the classical families studied here. Their finite zeros on the \(j\Omega\)-axis create deep stopband nulls and a very sharp transition. The costs are a more complicated pole–zero pattern, greater sensitivity, and typically the least linear phase.

5.8  Choosing a prototype

Choosing a family means deciding where ripple is acceptable and how much filter order can be afforded. A further family, Bessel, is not derived here but is useful when waveform shape and nearly linear phase matter more than a sharp transition.

Butterworth
Chebyshev I / II
Elliptic
Order for fixed spec
Flat pass, no ripple
Ripple in pass (I) or stop (II)
Ripple in both
Highest → lowest, left to right
Poles on a circle
Poles on an ellipse
Poles+zeros, most complex
Phase linearity: best → worst, left to right

Use Butterworth for a smooth response, Chebyshev when a sharper transition is worth allowing ripple in one band, and elliptic when the narrowest transition and lowest order are the main priorities. MATLAB provides butter, cheby1, cheby2 and ellip, but the specification and trade-off still need to be understood before selecting a family.

Figure 5.8.a applies all four families to the specifications of Examples 5.1–5.4. Each family is designed as a low-pass prototype with passband edge \(\bar\Omega_p=1\) and then transformed exactly as in Section 5.5. The orders come from Eq. (5.5) for Butterworth, Eq. (5.10) for both Chebyshev types, and, for the elliptic family, the degree equation, which needs elliptic integrals and is quoted rather than derived here.

Figure 5.8.a. Four families, four filter types. Choose LPF, HPF, BPF or BSF to load the specification of Example 5.1, 5.2, 5.3 or 5.4, and adjust \(G_p\) and \(G_s\); passbands are shaded green and stopbands red. The family buttons show or hide each curve, and the buttons above the \(s\)-plane choose whose poles and zeros are drawn. The table gives each prototype's order \(N\) (doubled for BPF and BSF), the lowest gain anywhere in the passband and the highest gain anywhere in the stopband. Butterworth is flat in the passband and needs the highest order. Chebyshev I ripples in the passband and Chebyshev II in the stopband, with the same order. The elliptic design ripples in both bands and meets the specification with the lowest order; like Chebyshev II, it places finite zeros on the \(j\Omega\)-axis.
MATLAB Corner for Figure 5.8.a

This script puts all four families head to head on the identical specification, computing each one's minimal order with its own *ord function and overlaying the results — the single clearest picture of Section 5.8's trade-off.

Goal: confirm the order ranking Butterworth > Chebyshev > elliptic for one fixed spec, and see all four pole layouts on one (s)-plane axis.

compare_analog.m
MATLAB
%% compare_analog.m - Butterworth vs Chebyshev I/II vs Elliptic, one spec
fp = 10e3; fs = 21e3; Ap = 1; As = 40;
Wp = 2*pi*fp; Ws = 2*pi*fs;
 
[n_b,Wb] = buttord(Wp,Ws,Ap,As,'s');
[n_c1,Wc1] = cheb1ord(Wp,Ws,Ap,As,'s');
[n_c2,Wc2] = cheb2ord(Wp,Ws,Ap,As,'s');
[n_e,We] = ellipord(Wp,Ws,Ap,As,'s');
 
[z_b,p_b,k_b] = butter(n_b, Wb, 's');
[z_c1,p_c1,k_c1] = cheby1(n_c1, Ap, Wc1, 's');
[z_c2,p_c2,k_c2] = cheby2(n_c2, As, Wc2, 's');
[z_e,p_e,k_e] = ellip(n_e, Ap, As, We, 's');
 
[num_b,den_b] = zp2tf(z_b,p_b,k_b);
[num_c1,den_c1] = zp2tf(z_c1,p_c1,k_c1);
[num_c2,den_c2] = zp2tf(z_c2,p_c2,k_c2);
[num_e,den_e] = zp2tf(z_e,p_e,k_e);
 
w = logspace(log10(Wp)-1, log10(Ws)+1, 8192); f = w/(2*pi);
figure('Color','w');
semilogx(f, 20*log10(abs(freqs(num_b,den_b,w))), 'b-', 'LineWidth',1.2); hold on;
semilogx(f, 20*log10(abs(freqs(num_c1,den_c1,w))), 'r--','LineWidth',1.2);
semilogx(f, 20*log10(abs(freqs(num_c2,den_c2,w))), 'g-.','LineWidth',1.2);
semilogx(f, 20*log10(abs(freqs(num_e,den_e,w))), 'm:', 'LineWidth',1.4);
grid on; ylim([-45 2]); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)');
title('Analog lowpass magnitude comparison, one spec');
legend(sprintf('Butter (n=%d)',n_b), sprintf('Cheby I (n=%d)',n_c1), ...
sprintf('Cheby II (n=%d)',n_c2), sprintf('Elliptic (n=%d)',n_e));
xline(fp,'k--'); xline(fs,'k--');
 
figure('Color','w');
plot(real(p_b),imag(p_b),'bx','MarkerSize',14); hold on;
plot(real(p_c1),imag(p_c1),'ro','MarkerSize',14);
plot(real(p_c2),imag(p_c2),'gs','MarkerSize',14);
plot(real(p_e),imag(p_e),'m^','MarkerSize',14);
grid on; axis equal; xlabel('Real(s)'); ylabel('Imag(s)');
title('Pole locations (s-plane), all four families');
legend(sprintf('Butter (n=%d)',n_b), sprintf('Cheb1 (n=%d)',n_c1), ...
sprintf('Cheb2 (n=%d)',n_c2), sprintf('Ellip (n=%d)',n_e), 'Location','bestoutside');
 
fprintf('Orders: Butter=%d ChebyI=%d ChebyII=%d Elliptic=%d\n', n_b,n_c1,n_c2,n_e);
Butterworth, Chebyshev I, Chebyshev II, Elliptic magnitude comparison for one spec Pole locations for all four families in the s-plane
Figure 5.8.b. Comparing all four analog families. MATLAB applies the same specification to each family. Butterworth needs the highest order because it allows no ripple. Chebyshev Types I and II reduce the order by allowing ripple in one band. The elliptic design allows ripple in both bands and reaches the specification with the lowest order. The pole–zero plots show the different mechanisms: poles closer to the \(j\Omega\)-axis create sharper changes, and the finite transmission zeros of Chebyshev II and elliptic filters deepen the stopband. The gain is efficiency; the usual cost is a less linear phase and a more sensitive design.

?Problems with solutions

Work each one before reading the solution.

PROBLEM 5.1

A Butterworth LPF must satisfy \(f_p=1\,\text{kHz}\), \(f_s=3\,\text{kHz}\), \(G_p=-3\,\text{dB}\), \(G_s=-30\,\text{dB}\). Find \(N\) and \(\Omega_c\).

1
Convert the specification

\(A_p=10^{-3/20}\approx0.7079\), \(A_s=10^{-30/20}\approx0.0316\), \(\Omega_s/\Omega_p=f_s/f_p=3\). Because \(G_p=-3\,\text{dB}\) is exactly the Butterworth \(-3\,\text{dB}\) point, \(1/A_p^2-1=1\) exactly.

2
Find the order
$$N_{\text{real}}=\frac{\ln\!\big[(1/0.0316^2-1)/1\big]}{2\ln3}=\frac{\ln(999)}{2\ln3}\approx3.15 \ \Longrightarrow\ N=4$$
3
Find the cutoff

With \(1/A_p^2-1=1\), Eq. (5.6) collapses to \(\Omega_c=\Omega_p\cdot1^{-1/(2N)}=\Omega_p\).

Result

\(N=4\) and \(\Omega_c=\Omega_p=2\pi(1000)\approx6283\,\text{rad/s}\).

Whenever the passband spec is the \(-3\,\text{dB}\) point, \(\Omega_c=\Omega_p\) with no computation at all.

PROBLEM 5.2

A normalized Butterworth LPF (\(N=3\), \(\Omega_c=1\)) must become a band-pass filter with centre \(\Omega_0=1000\,\text{rad/s}\) and bandwidth \(B=200\,\text{rad/s}\). What is the resulting filter's order, and what mapping produces it?

1
Write the mapping

The BPF mapping of the table in Section 5.5 is

$$s\to\frac{s^2+\Omega_0^2}{Bs}=\frac{s^2+10^6}{200s}$$
2
Substitute into the prototype

Substituting into \(H_{LP}(s)=K/\prod_{k=1}^{3}(s-\bar p_k)\) turns each of the 3 linear factors into a quadratic in \(s\), so the denominator degree doubles.

3
Interpret the poles

Each original pole becomes a complex-conjugate pair straddling \(\Omega_0\). The passband sits between \(\Omega_0-B/2\) and \(\Omega_0+B/2\) by construction, since \(\Omega_0=\sqrt{\Omega_1\Omega_2}\) and \(B=\Omega_2-\Omega_1\) were exactly the parameters fed in.

Result

Order \(2N=6\), produced by \(s\to(s^2+10^6)/(200s)\).

PROBLEM 5.3

Explain, using Eq. (5.2), why a Butterworth filter's phase is never linear even though its magnitude is smooth — and why this matters for a pulse passing through it.

1
Read the phase from Eq. (5.2)

Eq. (5.2) sums an angle contribution from every one of the \(N\) poles, \(\angle H=-\sum_\ell\angle(j\Omega-p_\ell)\). Each term is an arctangent in \(\Omega\), not a straight line.

2
Why the sum is not linear

A sum of \(N\) curved functions is generically curved. Making it exactly linear would need a very special pole arrangement, and Butterworth's circular pole placement (Eq. 5.7) was chosen to flatten the magnitude, not the phase.

3
Effect on a pulse

By Eq. (2.32), non-linear phase means different frequency components are delayed by different amounts (group delay is not constant). A sharp pulse comes out smeared and with overshoot, even though every frequency's magnitude passed through cleanly.

Result

Butterworth phase is a sum of arctangents and is never linear, so pulses are distorted even where the magnitude is flat.

This is why Lecture 7's FIR filters are prized: they can guarantee exactly linear phase, which no classical analog IIR prototype in this lecture can.

PROBLEM 5.4

For the same \((A_p,\Omega_p,A_s,\Omega_s)\), a Chebyshev Type II filter needs the same order as Type I (Section 5.6.2). If a designer only cares about a clean, ripple-free passband, is there any reason to prefer Type I anyway?

1
Compare for a ripple-free passband

If the only requirement is a monotonic, ripple-free passband, Type II is the better default. It matches Type I's order, gives the flat passband Type I cannot, and its ripple is confined to the stopband, where the signal is being rejected anyway.

2
When Type I still wins

Type I is preferable only when the stopband must be monotonic instead, for example when feeding a spectrum analyser, where a rippling rejection floor could be mistaken for real spectral content.

Result

No. For a ripple-free passband, choose Type II.

With the order tied, the only real design variable left is which band you are willing to let ripple.

PROBLEM 5.5*

Section 5.2 truncated the ideal LPF's impulse response with a rectangular window and warned of Gibbs ripple. Using Section 2.9.3's duality, explain why a longer truncation delay \(T_d\) narrows the ripple's frequency spacing but does not reduce its peak height. (* optional)

1
Truncation is windowing

Truncating to duration \(T_d\) multiplies \(h_i(t)\) by a rectangular window of width \(T_d\) (Section 5.2, Step 3).

2
Move to frequency

By Eq. (2.31) this convolves the brick-wall spectrum with the window's CTFT: a sinc with main-lobe width \(\propto1/T_d\). This is the same short-in-time, wide-in-frequency trade as Example 2.11.

3
Effect of a longer \(T_d\)

A longer \(T_d\) narrows the sinc, so the ripple moves closer to the corner. But a rectangular window's side-lobe height relative to its main lobe is fixed near \(13\,\text{dB}\) regardless of width (the point Problem 2.3 made for the DFT).

Result

Longer \(T_d\) changes the ripple's position, not its peak height.

Reducing the peak needs a tapered window (Step 4), trading main-lobe width for side-lobe height, exactly as for the DFT.

Summary and key formulas

The reference sheet: the design framework, the three prototype families, and the frequency transformations that turn any one of them into four filters.

Frequency response · Eq. (5.1)
$$H(j\Omega)=H(s)|_{s=j\Omega}$$
Butterworth · Eq. (5.4)–(5.6)
$$|H|^2=\tfrac{1}{1+(\Omega/\Omega_c)^{2N}}$$
Chebyshev I · Eq. (5.9)–(5.10)
$$|H|^2=\tfrac{1}{1+\varepsilon^2C_N^2(\Omega/\Omega_p)}$$
Elliptic · Eq. (5.13)
$$|H_E|^2=\tfrac{1}{1+\varepsilon^2R_N^2(\xi,\Omega/\Omega_p)}$$
BPF transform · Eq. (5.8)-kin
$$s\to\frac{s^2+\Omega_0^2}{Bs},\ \ \Omega_0=\sqrt{\Omega_1\Omega_2}$$
Design framework · Section 5.3
Normalize → LPP → transform → denormalize
  • The ideal filter cannot be built (non-causal, infinite duration); classical design instead builds a realisable magnitude shape from a low-pass prototype.
  • One five-step framework covers every classical filter: normalize, design an LPP at \(\Omega_c=1\), transform \(s\mapsto F(s)\), denormalize, optionally bilinear-transform to digital.
  • Butterworth is maximally flat (no ripple), poles equally spaced on a circle; simplest to reason about, most poles for a given spec.
  • Chebyshev I/II trade flatness for equiripple behaviour in one band, buying a sharper transition (fewer poles) for the identical spec; poles sit on an ellipse.
  • Elliptic equiripples both bands at once: the fewest poles of all four families, at the cost of the most complex pole/zero layout and the least linear phase.
  • Three frequency transformations (\(s\to\Omega_c/s\), \((s^2+\Omega_0^2)/(Bs)\), \(Bs/(s^2+\Omega_0^2)\)) turn any LPP into an HPF, BPF or BSF by pure algebra on \(s\); BPF/BSF always double the order.
  • No classical analog prototype in this lecture has exactly linear phase — that guarantee is Lecture 7's FIR filters, not these.
  • Next, in Lecture 6: digital filter design — mapping these same analog prototypes to \(z\) with the bilinear transform, and the direct digital design problem of choosing poles and zeros on the unit circle from scratch.