Now synthesize your FIR filters using high-school algebra

March 07, 2012 // By Kendall Castor-Perry
In this second part of a two-parter, the Filter Wizard aka Kendall Castor-Perry turns the process of factorizing the polynomial representation of an FIR filter into a product of quadratic and linear factors on its head and builds up complete FIR filters from small, easy-to-understand pieces.

The story so far

In Part 1 we took a regular FIR filter design and wrote down the filter coefficients in
polynomial form to get equation [1]:

Then we found all the roots of this polynomial, and used them to write down the
factorized form of the polynomial:

As a parting shot, I pointed out that there are three quadratic terms there with unity coefficients of z^0 – and there are three deep nulls in the gain response of the filter, as was shown in the figures from Part 1. Let’s take a deep breath and examine the responses of all these individual linear and quadratic factors, to see if there are some clues there.

Figure 1 shows the individual responses, treated as two- or three-tap FIR filters, of each of the factors in parentheses in equation [2]; the five quadratic factors marked as q1 to q5 and the four linear factors and L1 to L4. It’s quite a jumble of a graph, but you don’t have to be very awake to see the major salient detail: three of those quadratic factors have deep notches in the frequency response. These are indeed the three factors whose constant (z^0) coefficient is unity!

So, here’s the first takeaway. In an FIR filter whose stopband contains a number of sharp nulls, each one of them comes into being because the response of one of the polynomial’s quadratic factors falls to zero at one frequency. Just so that we don’t jump to conclusions about the particular form the factor needs to have, let’s do some more algebra to make sure. Are we having fun yet?

Figure 1:
The frequency response of all the quadratic and linear factors of equation [2]

The frequency response of a quadratic factor used as a filter

Here’s where we make an important substitution. Until now, our z has been a mystery variable with no obvious relationship to the behaviour

Design category: