I'm using a complex-valued baseband signal as my input for subband adaptive filtering. Therefore i have a complex input spectrum.

  • My problem is now, how to split my complex spectrum into $N$ equally spaced subbands?

I know i could use a DFT filter bank with impulse responses of

$$\displaystyle h_i(n) = p(n)e^{(j2\pi i/N)n} ,\quad i = 0,1,\ldots,N-1$$

where $p(n)$ is the impulse response of my lowpass prototype filter. But what bothers me is that $H_0(z)$ will be real valued and so $|H_0(e^{j\omega})| = |H_0(-e^{j\omega})| $ holds, and hence the complex spectrum isn't split right into $N$ subbands.

  • Am I missing something there, or is it not possible to use DFT filter banks for complex-valued input signals?

  • Are EMFBs (exponentially modulated filter bank) a workaround to solve this problem?


1 Answer 1


Typically what you’ll see in an application like this is a polyphase filter bank, which is designed with a single low pass filter prototype. This keeps your prototype filter real, and they can be quite efficient in comparison to directly designing an entire bank of individual bandpass filters.

The short of it is this is a multi-rate technique which aims to simplify the computational complexity while being mathematically equivalent to a direct implementation. By having only one prototype filter, the coefficients can be kept real and the filter is essentially frequency shifted N times in the backward DFT application after the polyphase filtering. This deals with your issue of complex conjugate symmetry in the frequency domain that you noted before.

This previous post had some questions regarding polyphase filter banks, and has a link to a really nice MATLAB implementation.

I’ve used filter banks like this in practice (my field is radar signal processing), where we almost exclusively work with complex IQ signals, so I can vouch for their viability in this application.


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.