I'm processing audio signal sampled at 44.1 kHz. After some other processing, I need to filter the signal between ~5-50 Hz. Achieving this for a signal with such a high sampling frequency appears to be difficult. I would like the magnitude response to be nicely flat within the bass-band. No phase distortion is allowed. I'm using MATLAB toolbox fdatool for the filter design, FIR filter created with least squares approximation. After some testing, I found out I could get better magnitude responses if I first decimate the signal with some small factor, and then to do the final filtering. Is this a common thing to be done (how about in scientific research, I'm trying to do this the right way..)? All help appreciated.
Your goal should be achievable. The key driver for the filter's complexity is the size of the transition band, which you haven't specified. If you can live with a slow rolloff, then you can use a relatively low order filter.
If, as is more likely, you want to isolate the band from 5 to 50 Hz with relatively sharp cutoffs, then as you have started to discover, you will want to use a multi-stage approach. Instead of decimating by a factor of several hundred all at once, you decimate by a series small factors (something like 2, 4, or 8). By gradually decreasing the sample rate, you end up with filter designs that are much less complex.
This previous question has a very similar aim to yours, only with slightly different filter specs and sample rate. You should be able to adapt the information there to your application.
Yes, decimating first is the most common approach. I would do something like the following:
Decimate x10: new fs = 4410, passband = 50 Hz, cutoff = 2205 (new Nyquist frequency) Decimate x10: new fs = 441, passband = 50 Hz, cutoff = 220
You could do more decimation or just leave it at that point. It should be relatively easy to get the filter characteristics you want at that point, and the computational load will be greatly reduced.