I found a very interesting piece of code for MDFT polyphase filter bank here. Unfortunately, there doesn't seem to be a paper describing the theory. Does anyone know some reference for the code? I'm especially interested in these 3 topics:

  1. What are the data in the channels exactly? Are they supposed to be real, imaginary or complex?

  2. The code computes only half of the number of bands. Is that due to real-valued signals used?

  3. The result of the synthesis stage is build as a channel-wise difference of the outcome of the two synthesis filter banks. Why is it done like that? I can't find any paper describing this idea.


3 Answers 3

  1. It's input agnostic, anything will work just as it would with any other real valued prototype filter. I've implemented polyphase filter banks this on radar systems in practice, where we're operating on complex data, both pulse compressed and uncompressed. Filter banks like these have loads of applications due to the i inherent design and theoretical speed.

  2. Polyphase filter banks typically create a phase shifted "copy" of the original version to achieve better reconstruction. From just scanning the code, it looks like this is what he's doing with his X1 and X2 vectors. You'll notice if you step through the code and check out the spectrum, the sub-bands will have no passband overlap. It's even more obvious if you look at the shifted versions of the filter frequency response. Since the "copy" of the original signal was phase shifted, it will also have non-overlapping segments within itself, but tougher the original and copy combine to fully cover from -pi to pic on a normalized frequency scale.

Typically the processing chain is this: get input, create a copy, phase shift the copy (everything for here on out is done twice, one for the original and one for the phase shifted copy; let's call these upper (original) and lower (copy)), apply prototype polyphase filter to the upper and lower signals, apply a DFT to do the polyphase magic, and now you're all channelized. Synthesis is pretty much just this in reverse.

The part people struggle with is typically the polyphase filters and the use of the upper and lower signals, which seems to be the case for this question . The filter bank itself is not complicated but the math behind the polyphase can be if you don't have a multi-rate signal processing background . The prototype filter is typically designed to make say 32 sub-bands, but since we have are upper and lower signals which each have 32 sub-bands, we really have 64. I'll leave the math behind why polyphase filters work to a textbook since that wasn't in your question.

  1. See above, has to do with the phase shift. Also go a few lines up and you'll see a negation. Check out those indices. The subtraction you're seeing may not be doing exactly what you think it's doing. Try stepping through the code and checking it out.
  1. The input time series that he creates is a complex LFM chirp. In general, the input data may be real or complex. If the PFB (polyphase filter bank) is being used directly after an ADC, the data could be real.
  2. Which line in the code are you referring to? I do not see him only compute half the number of bands.
  3. Not sure.

MDFT filterbanks are critically sampled, whereas the filterbank you refer to is two times oversampled. You can find more info on MDFT filterbanks here:

Modified DFT filter banks with perfect reconstruction


Your Answer

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

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