I'm working on trying to find an efficient way to implement a FIR comb/decimating filter. For a given "prototype" low-pass filter $ H(z)$, a comb that "repeats" $L$ times in the frequency domain can be constructed by upsampling (stuffing $L-1$ zeros in between each sample), yielding $H(z^L)$ (Proakis and Manolakis 342). We will denote the impulse response of the comb filter by $c[k]$.

I also wish to decimate the comb filter output by a factor of $D$. I do not wish to cascade an integrator to make a CIC filter, and I am aware that aliasing will be introduced. I am okay with this. To implement the decimating FIR filter, I have chosen to use a polyphase implementation. This means that I will have $D$ branches, each of which will contain a downsampled and delayed version of the base FIR filter (Proakis and Manolakis 767), i.e.

\begin{equation} p_i[n] = c[nD + i] \end{equation}

However, since $c[k]$ is $L$-sparse, i.e. only one out of every $L$ samples is nonzero, each polyphase branch, even though they are all downsampled, will still have a lot of zeros in them. In general, $L > D$ for my application, so effectively each branch filter $p_i[k]$ is a resampled version of $h[k]$ by a factor of $L/D$ (with no interpolation/decimation filter in between the upsampling and downsampling steps).

Is there a computationally efficient way to take advantage of the fact that most of the taps are zero? Does multiplying by zero in floating point arithmetic take less computational effort or the same amount as multiplying two nonzero numbers? If so, then perhaps a naive implementation would be sufficient.

Works Cited:

Proakis, John and Dimitris Manolakis. Digital Signal Processing: Principles, Algorithms, and Applications. 4th ed. Upper Saddle River, NJ: Pearson 2006. Print.


1 Answer 1


"Is there a computationally efficient way to take advantage of the fact that most of the taps are zero?"

is there a pattern to those taps (or to the taps that are potentially non-zero)? can you skip over those taps that are known in advance to have zero coefficient?

  • $\begingroup$ I think I realized that this was what I wanted to do the whole time but didn't connect the dots. Thank you! $\endgroup$
    – user16223
    Jun 24, 2015 at 20:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.