To provide some perspective on the results, let's compare the window method to the optimal Chebyshev FIR filter (§4.10) for the same length and design specifications above.
The following Matlab code illustrates two different bandpass filter designs. The first (different transition bands) illustrates a problem we'll look at. The second (equal transition bands, commented out), avoids the problem.
M = 101; normF = [0 0.3 0.4 0.6 0.8 1.0]; % transition bands different %normF = [0 0.3 0.4 0.6 0.7 1.0]; % transition bands the same amp = [0 0 1 1 0 0]; % desired amplitude in each band [b2,err2] = firpm(M-1,normF,amp); % optimal filter of length M
Figure 4.7 shows the frequency response of the Chebyshev FIR filter designed by firpm, to be compared with the window-method FIR filter in Fig.4.6. Note that the upper transition band ``blows up''. This is a well known failure mode in FIR filter design using the Remez exchange algorithm [176,224]. It can be eliminated by narrowing the transition band, as shown in Fig.4.8. There is no error penalty in the transition region, so it is necessary that each one be ``sufficiently narrow'' to avoid this phenomenon.
Remember the rule of thumb that the narrowest transition-band possible
for a length
FIR filter is on the order of
, because
that's the width of the main-lobe of a length
rectangular window
(measured between zero-crossings) (§3.1.2). Therefore, this
value is quite exact for the transition-widths of FIR bandpass filters
designed by the window method using the rectangular window (when the
main-lobe fits entirely within the adjacent pass-band and stop-band).
For a Hamming window, the window-method transition width would instead
be
. Thus, we might expect an optimal Chebyshev design to
provide transition widths in the vicinity of
, but probably
not too close to
or below
In the example above, where the sampling rate was
kHz, and the
filter length was
, we expect to be able to achieve transition
bands circa
Hz, but not so low
as
Hz. As we found above,
Hz was under-constrained, while
Hz was ok, being near
the ``Hamming transition width.''
![]() |
![]() |