I have a signal sampled at 100 Hz with the frequency spectrum seen below.
What I would like to do is to filter out the region around 0.7 Hz (say 0.7 ± 0.3 Hz) (leftmost red circle) and get rid of both the other peak around 1.5 to 3 Hz (rightmost red circle) and ideally also frequencies <0.4 Hz.
I've played around with Butterworth filters as they seem to be peoples first choice, elliptical filters as they are supposed to have the steepest roll-off and FIR filters since the first two seem to become unstable when I set very narrow passbands.
None of them seem to have a steep enough roll-off though to allow filtering at the level I'm attempting. See below for 10 to 20 Hz bandpass versions of the filters I have tested.
I've tried increasing orders and taps but without success.
I'm not sure if I'm trying to do something impossible here but vague memories from my signal processing course tells me that it should be possible by upsampling/downsampling combined with some clever filtering. I.e. that I can use the fact that the signal is sampled at 100 Hz and that there is no content in most of the frequencies below the Nyquist frequency.
I don't care about the phase of the signal and I can't make any assumptions about it being periodic although I don't know if it matters.
I also looked at this and must admit that the "create a lowpass filter, convert it to bandpass" currently goes over my head. The final target of my code is a Cortex M4F CPU meaning that my computational resources are not endless all-though the exact limits are not clear yet.
Is it possible to create a bandpass filter at 0.7 ± 0.3 Hz and if so could someone show me how or point me in the right direction?
Thank you in advance!



