Extracting multiple signals to baseband How can I extract a signal to baseband?

Rather that just listen to one signal at a time, I want to take advantage of my RTL-SDR's 2mhz bandwidth and listen to multiple FM signals at the same time. I think that what need to do for each signal is filter out everything but the signal, then shift the signal to baseband and reduce the bandwidth. Once it's a baseband, I can take it from there.


Which filter or pair of filters would be a decent way of to filter out all but the signal I want?
Should I be using IIR vs FIR?
What would be a decent way to shift to baseband and reduce bandwidth?
Can shifting to baseband and reducing bandwidth be done at the same time? Should these be done at the same time?


Everything I'm working with is a complex signal. I'm planning on implementing these myself for the greater education value. (IE, I'm not using GNUradio, or existing libraries. Mostly I need to know what to Google.)
I would do it like this:


Start with a 2 MHz signal containing up to 10 FM stations. In practice it will contain maybe three or so.
Identify the carrier frequencies of each station; call them f0 to f9. These are the frequencies in your downconverted 2 MHz signal, not the original carriers.
Design 10 200kHz-wide bandpass filters centered around each f0:f9. Filter the 2-MHz signal with each of these filters to separate each individual FM carrier.
Downconvert each FM carrier back to baseband. To do this, multiply each carrier by the signal exp(-j*2*pi*fi*t), where fi is the carrier frequency and t is time. This will bring each FM signal to baseband.
Demodulate each signal using a regular FM demodulator.
Send each resulting audio signal to its destination.


An alternative procedure would swap steps 3 and 4:


Frequency-shift the entire 2 MHz signal so that the desired carrier ends up at 0 Hz.
Apply a low-pass filter to remove all undesired frequencies.


The advantage of this method is that you need to design only one low-pass filter instead of 10 band-pass filters. However, you need to be careful that you don't introduce aliases that can affect the frequencies you want to recover. The reason is that a 2-MHz signal sampled at 4-MHz doesn't have any "headroom" at the ends; any time shifting will introduce aliases. Just make sure these don't end up in the passband of your low-pass filter.

So, you need to: design bandpass filters (or one low-pass filter), generate complex exponentials, and demodulate the FM signals. You can do this Matlab, Liquid DSP, GnuRadio, or any number of other numerical/radio programs and languages. I think your largest constraint will be computer power, unless you only have a couple of FM stations.