Decimation by a factor $D$ is the combination of anti-alias filtering and down-sampling (selecting every $D$th sample). The frequency bands where aliasing occurs will be centered of $nf_s/D$ for $n=0, 1, 2 \ldots D-1$ and sampling frequency $f_s$. Conveniently, moving average filters have their nulls at these frequency locations where aliasing is most severe. This has helped made CIC Filters a popular decimating structure as their frequency response is identical to a moving average filter and they can be implemented with minimum resources.

Below shows an example first order CIC filter implementation for a CDMA application: The waveform of interest is a complex waveform that occupies +/-630 KHz at baseband, and the alias regions are indicated by the additional bands shown centered at "Chip2x", "Chip4x" and "Chip6x". The frequency response shown is that for a moving average filter, demonstrating how the null for the filter is centered in each alias band. Prior filtering in the receiver has already ensured no strong interference at these frequencies, yet we will still be interested in anti-aliasing to minimize noise floor growth from the aliased noise floor in the aliasing regions shown. (Such rejection requirements for purpose of maintaining digital precision can be on the order of 15 dB depending on overall noise figure requirements, in which case such a simple first order implementation may be sufficient; and was in my own experience implementing this for a commercial base-station).

CIC rejection

A decimating channelizer uses the DFT to efficiently combine frequency decimation with down-conversion, in which case we would be processing multiple signals at different frequency locations. With that, my question is if the DFT as used in the following structure as a decimating channelizer would provide any rejection of aliasing? Please demonstrate (and quantify) the anti-alias rejection that can be achieved in using the DFT as shown as a channelizing decimator (Here with a complex waveform sampled at $f_s$ and providing 10 decimated complex outputs each centered at $nf_s/N$ where $n=0,1,\ldots 9$ and $N=10$, and then show how the limitations in anti-aliasing can be overcome with additional filtering structures for a high performance decimating channelizer implementation while also making use of the DFT.

DFT Channelizer


2 Answers 2


As explained in detail at this post, an N-point DFT is functionally a bank of $N$ unity gain coefficient filters ("moving average" filters), each centered on $f_s/N$ where $f_s$ is the sampling rate, and each filter having the response of the Dirichlet Kernel (which approaches a Sinc function as $N$ approaches infinity).

With that, the DFT alone does provide some anti-alias rejection as a channelizing decimator. I will first show the simplest form as given by the OP to demonstrate the anti-aliasing that is provided, and then I will show how the performance can be extended through the use of polyphase filter structures combined with the DFT for high performance channelizer applications.

For this I will use the following test waveform in the decimate by 10 application where we are interested waveforms having a 1 kHz of two-sided bandwidth. This waveform is sampled at 20 kHz, such that once decimated, the output rate will be 2 kHz. The frequency bin centers for the 10 point DFT used will also be at 2 kHz spacing. The test waveform contains complex tones at 20 Hz (20 Hz offset from bin 0), 4080 Hz (80 Hz offset from bin 2), 6530 Hz (530 Hz offset from bin 3) and 8200 Hz (200 Hz offset from bin 4). For this I will show the combined anti-aliasing and down-conversion that can be achieved simply with the DFT such that we convert each tone separately to 20 Hz, 80 Hz, 530 Hz and 200 Hz. Later I will show how we can improve that with the addition of polyphase filtering.

Note that I purposely placed one of the tones just outside our 1 KHz bandwidth of interest.

The plot on the left shows the test waveform as well as a red bracket in the center indicating the primary frequency band of interest as 1 KHz centered on DC, as well as red brackets in all the frequency bands that would alias to the primary frequency band in the decimation process (for decimate by 10). Importantly, what we also see in the right plot is what would result if we down-sampled the test waveform by 10 (simply selecting every 10th waveform and discarding the rest), without any prior filtering, showing what "maximum aliasing" looks like: all tones with no rejection have been frequency translated in the down-sampling process consistent with the alias zones mentioned previously. This will be compared to later plots to demonstrate the amount of aliasing rejection that has been achieved.

test waveform

As introduced, the anti-aliasing that the DFT provides is given by the Dirichlet Kernel:

$$D(\omega) = \frac{\sin(N\omega/2)}{N\sin(\omega/2)}$$

and $\omega$ is the normalized radian frequency in units of radians/sample : $\omega \in [0, 2\pi)$ for $N \in [0, N)$

For this example, with $N=10$ we get the following frequency response which quantifies specifically the anti-aliasing that can be achieved in this case:

Moving Average Filter

With that, I simulated the OP's DFT implementation with this test waveform showing the resulting channel selection for the four bins where the tone were placed in proximity. I also overlaid the expected anti-alias rejection from the "moving average filter" provided by the DFT which is consistent with the rejection achieved in the result. We also note that the strongest interference has occurred for a tone that was outside our "bandwidth of interest"; this tone which mapped to 530 Hz will not have landed on our actual waveform (given it is out of band), AND we have further opportunity downstream to provide further filtering more efficiently at the lower sampling rate after decimation. Our bigger concern is with aliasing that has landed within our 1 KHz bandwidth of interest, as it can't be filtered out without removing our signal as well (assuming our signal occupies the full 1KHz bandwidth), and we see for this case we have achieved > 20 dB rejection. We also see from the response curve provided earlier that our worst case aliasing will be 12 dB for an adjacent channel with signal at its closer band edge.

DFT result

Also observe the noise floor which I included included in the test signal to demonstrate: for the decimated outputs the noise floor is nearly the same level as the input test waveform. Compare this to the noise floor for the first plot above showing downsampling with no anti-alias filter, which is elevated. This demonstrates what would occur even if we didn't have strong signals in the alias frequency bands and why anti-aliasing is important regardless.

Such aliasing rejection would be more than sufficient when the required SNR for a given application is satisfied, such as many of the power efficient communications waveforms: BPSK, QPSK, GMSK, APSK, etc suggesting that a DFT could be directly used as a decimating channelizer for a multiband transmission from a single source (this is also the case for OFDM where it is extended to bandwidth efficient waveforms such as higher order QAM for reasons of orthogonality that is not directly related to what is described here). There are also of course plenty of cases where this poor aliasing rejection would be far from adequate, and the important take-away from this is being able to predict what the degradation would be and how this could be used.

As for improving the performance, we can combine polyphase filtering with the DFT to both expand the frequency coverage for each band (as a percent of Nyquist), and the rejection of all aliasing within that band. I've implemented a 10 x 30 Polyphase Channelizer, consisting of 10 FIR Filters each with 30 taps, all running at the decimated rate, as a front-end to the 10 point DFT introduced earlier. This implementation appears as follows:

polyphase implementation

The prototype filter is designed as a 300 tap FIR with the frequency response given in the left plot below. The coefficients are loaded into the filter banks row to column such that each filter is the decimated coefficients of the prototype design. As a channelizer it provides the selectivity indicated on the right, providing 85% bandwidth of Nyquist with over 60 dB alias rejection at band-edge (and much more throughout the band).

Polyphase response

The resulting performance with the test waveform is given below.

polyphase channelizer result

The polyphase channelizer is often implemented with the Inverse DFT. The processing can be changed from DFT to IDFT by conjugating the outputs or changing the order in which polyphase outputs are loaded into the DFT or IDFT processing.

  • $\begingroup$ Huh, so in the case where the first order CIC has a boxcar of length 10 and decimates by 10, and the DFT has no prototype filter, the CIC output and the DFT DC bin output would be identical? $\endgroup$
    – Jason C
    May 2 at 1:42
  • 1
    $\begingroup$ @JasonCreighton Yes you got it-- specifically if you take a DFT of 10 samples one block at a time (such that the DC bin is output at 1/10th of the rate). Not sure if you are aware of the equivalence of the CIC and "moving average", if not this post may help: dsp.stackexchange.com/questions/38377/… . And then look at the formula for the DFT restricted to the DC bin only--it's simply the sum of the N samples. A first order CIC would be much simpler if you were only interested in the DC bin, and we can easily up the order with the CIC. $\endgroup$ May 2 at 2:09
  • $\begingroup$ I see. So in other words, if you use a D length moving average filter as the prototype filter for a decimate-by-D DFT filterbank, the polyphase decomposition of the moving average filter is a no-op but it still provides some rejection. $\endgroup$
    – Jason C
    May 2 at 11:58
  • $\begingroup$ @JasonCreighton right- that’s a great way to tie that together, you can look at the first variant as a polyphase 1 tap filter bank. Further you can apply a window in the first variant but that will increase the aliasing from adjacent channels (at the benefit of increasing rejection of further channels). Even a simple 2 or 3 tap poly would be preferred over doing that. $\endgroup$ May 2 at 12:16

This is only a partial answer focused on the title, illustrating the failure of a DFT channelizer in decimation, per one reasonable interpretation of "decimation".

The magnitude of frequency response of such a channelizer was shown and explained here. A measure of aliasing was designed and applied to an example channel here. Pasting a demo, where hf is a channelizer's channel and hf_scipy is what scipy.signal.decimate(ftype='fir') uses:

So, awful.

What we also care about is that a decimator doesn't distort input's phase, i.e. we seek zero phase. If there is phase distortion and we have multiple channels, we care the distortion is at least consistent. A DFT channelizer, however, fails miserably at each; below is the full frequency response, for non-negative frequencies only:

None of this is surprising, as the proposed scheme is simply STFT with rectangular window and maximum hop size, as explained here. Even with no downsampling at all, and with something that's much better than a moving average, here's results for standard vs "improved" STFT (channelizer does standard):

So, if it's all so terrible, how does a DFT channelizer have uses?

It is terrible if the intention is several independent and unaliased "views" into the original signal. Since STFT is perfectly invertible, however, the signal is completely preserved (which doesn't even make it "decimation" in standard sense), so there's infinite uses with further manipulations of the resulting transformation.

If another interpretation of "decimation" is intended, it is far from the standard, and OP has not defined it. This answer doesn't argue that channelizers valid per partial standard definitions of decimation don't exist, as Dan has clearly shown otherwise with plots titled "Polyphase". However, it still assumes an important definition of aliasing doesn't apply - the Nyquist rate. The channelizers avoid lossy aliasing, but not altering of the channel's frequency. Which, again, needs specifying if a method is advertised as "alias rejecting".


Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.