Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

Why wont filtering work?

Status
Not open for further replies.

ritchie888

Bioengineer
Jun 22, 2011
24
0
0
US
I'm hoping someone will be able to tell me why no filtering is helping in my application.

I have a MEMS microphone monitoring the pressure of a small chamber, which has a membrane stretched over the far end. This device is placed on a human muscle and when I flex said muscle the membrane is disturbed, producing a pressure difference in the chamber, which the microphone picks up. Therefore, by flexing a muscle I can see nice spikes of activity. However, this method is very susceptible to noise, both motion artefacts and other undesirable artefacts.

The muscle activity I'm interested in is above 10Hz and below 100Hz, so I'm trying to bandpass (or at the very least, highpass) the noise. If I tap the device, or if I have the device on my upper forearm and tap my wrist, I'm to understand that this is a very low frequency noise, somewhere in the region of 1Hz/2Hz, but I can't get rid of this noise!

I'm using MATLAB to process. Generally I sample this microphone at 1KHz, but I currently have it hooked up to a DAQ at 5KHz sampling rate. I desperately want to get rid of this low frequency noise but nothing I try seems to make any difference, it's very hard to see what the filter is doing at all. It's definitely attenuating the signal, but not getting rid of the noise I want. I don't expect perfect results, but certainly better than what I'm seeing.

I've used lots of methods to create filters in MATLAB (manually and fdatool), along with different types of filters (Butterworth, Chebyshev, Elliptic) all not helping. I'm worried that my desired frequency of 10Hz is perhaps too close to the noise I'm trying to filter out, and it's not able to attenuate the noise enough.

Any ideas, code samples, or recommendations would be very helpful.
 
Replies continue below

Recommended for you

>> tap my wrist, I'm to understand that this is a very low frequency noise, somewhere in the region of 1Hz/2Hz<<

A 'tap' may have a lot of odd harmonics that will be difficult to filter out.

At this point, it might be helpful to measure the spectrum of the raw signal, so as to better quantify what your filter has to do.



Mike Halloran
Pembroke Pines, FL, USA
 
Do you have an analog filter in front of your A/D? If you don't have an anti-aliasing filter you could be seeing much higher frequency noise and thinking it is low frequency noise. Check out 'Nyquist frequency' on Wikipedia. You may be able to test this theory by varying your sampling rate and see if the noise changes.

It has been a long time since I've used MATLAB, but I believe it has a FFT function that will show you the frequency spectrum of your signal.

What is the level of your 2 Hz noise and what is the level of your 10 Hz signal? You are right, this may be difficult to filter out (i.e. it may require a high order filter).

If you can't attenuate the noise, you may be able to post process it out. For example, take 100 mS worth of data (10 Hz), subtract the average and then process it. Repeat that for five samples and you'll have reduced the 2Hz effect by a few dB.
 
Hi Mike, thanks for posting.

I think you're right about the harmonics. I've tried a lot of filters now, and even created manual sine waves with frequencies I know, and the filters (for the best part) seem to be working.

I'm trying some other methods now, such as smoothing the data to try and 'skip' taps, as they happen quickly and sporadically.

Any suggestions outside of filtering which I may not have thought about?
 
Depending on what you're trying to do on the physiological side, it might be possible to excite the muscle by means of a small shock, or a small solenoid or vibrator, and measure the response using synchronous detection, which becomes easier if you can, as here, just siphon the fundamental frequency off the driver, rather than going out of your mind trying to filter it out of the signal data.



Mike Halloran
Pembroke Pines, FL, USA
 
If you posted your original signal as a csv file then somebody mightbe able to help. Basically the problem is that a tap has frequency content from 0 through to the AA frequency, and if you filter out particular parts of the frequency spectrum the remaining bits will still sound like a tap, although rather an odd one.

Specifically though, getting rid of 1.5 Hz when you are only interested in 10-100 is easily done by FFT-> zero all 0-10 hz magnitudes ->IFFT

That is pretty brutal and as I said you might not like the result.

Cheers

Greg Locock


New here? Try reading these, they might help FAQ731-376
 
Sorry for the delay in response. First of all, the microphone does have a good response down that low, it was specifically chosen for that reason (Knowles SPU1410).

I've uploaded a couple csv files with some data attached. I've done some FFT on the data and on a tap while wearing the sensors and it does look like the tap contains a lot of frequencies, which must be harmonics.

data01.txt should contain just contractions and little to no noise, column two is the sensor at hand, column three is EMG. Data02.txt is no contractions and just noise, in this case a tap on my wrist three times in groups of three (the sensors were on my forearm, just below my elbow).

Any ideas are appreciated, I plan to look into wavelets (more specifically CWT) as someone mentioned it could be useful, any recommendations on that method?
 
 http://files.engineering.com/getfile.aspx?folder=059e164d-5ed4-411c-8bb6-c272ed3ee967&file=data01.txt
Status
Not open for further replies.
Back
Top