×
INTELLIGENT WORK FORUMS
FOR ENGINEERING PROFESSIONALS

Log In

Come Join Us!

Are you an
Engineering professional?
Join Eng-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!
  • Students Click Here

*Eng-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

Jobs

Why wont filtering work?

Why wont filtering work?

Why wont filtering work?

(OP)
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.

RE: Why wont filtering work?

>> 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

RE: Why wont filtering work?

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.

RE: Why wont filtering work?

(OP)
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?

RE: Why wont filtering work?

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

RE: Why wont filtering work?

Check the frequency response of your microphone. Does it go down to 10 hz? Most do not.

RE: Why wont filtering work?

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: Eng-Tips.com Forum Policies http://eng-tips.com/market.cfm?

RE: Why wont filtering work?

(OP)
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?

Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

Red Flag Submitted

Thank you for helping keep Eng-Tips Forums free from inappropriate posts.
The Eng-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Eng-Tips forums is a member-only feature.

Click Here to join Eng-Tips and talk with other members!


Resources