Splitting a Complex FIR Filter into Real Filters I'm working on a software defined radio project on a PIC32 MCU. I'm using a CMX 973 quadrature frontend to provide I and Q. I'm independently low passing I and Q with carefully matched analog filters to reduce the overall bandwidth to 192 kHz, then digitizing it with an audio codec.

I'm going to be receiving a couple of closely-spaced channels so I'll need to filter them separately (bandpass), mix, and downsample. I'll also need to do some filtering for pulse shaping and PLL. These operations are all on complex-valued signals (I-Q).

The trouble is the PIC32 DSP library only provides an FIR filter implementation for real-valued filters. I can write my own complex filter implementation relatively easily, but it won't come with the benefit of optimization done by Microchip - I'll have to do it myself. I can do it, but I'd like to avoid it if I can.

Mathematically, is there any way to split a complex signal into I and Q and perform filtering using several real-valued filters which would have the same response as a complex-valued filter (particularly for bandpass filtering)? If so, how, and what are the limits to this approach?
I'd say there are two ways to look at this problem.


If you're receiving a conventional $M$-QAM signal with AWGN noise, then the I and Q streams are actually two independent, real, $\sqrt{M}$-PAM signals. You can filter and process them independently. The same is true over the wireless channel, as long as the fading is flat and you do the appropriate detection in the receiver.
If $s(t)=s_I(t)+js_Q(t)$ is a complex signal and $h(t)=h_I(t)+jh_Q(t)$ is a filter's complex impulse response, then


$$s(t)\star h(t)=s_I(t)\star h_I(t)-s_Q(t)\star h_Q(t)+j(s_I(t)\star  h_Q(t)+s_Q(t)\star h_I(t)),$$

where all the filters involved are real. This follows from the convolution's properties.