I have collected a set of physiological signals through emg sensors. I will link at the end of the post an example (10 sec.) of a signal collected on zygomatic muscle.

When I analyzed these data, I have seen that they cointain a great ammount of noise (as you can see by the plot of the FFT.

Plot of the emg signal Plot of the emg signal

FFT of the emg signal FFT of the emg signal

As you can see, there are several peaks into the FFT. My idea is to delete them using a notch filter on the frequencies of these peaks. Anyway, I am no able to figure out how select automatically these peaks. Do you have suggestions?

Furthermore, are there any better methods to clean the signal?

NB: Each signals have the noises in different frequencies. The data was collected usign a battery and avoiding the current interference.

Thanks :)

  • $\begingroup$ what exactly do you expect your signal to look like? Neither from the signal time plot nor from your FFT magnitude (presumably) plot I can even remotely tell what you expect to find once the noise is removed. Or, to be more clear: One man's signal is another man's noise. Do you have any model of the noise or of the signal? If you don't, there's only one certain way of getting rid of all the noise: instead of a measurement, use a constant 0 vector. $\endgroup$ Commented Dec 19, 2017 at 15:06
  • $\begingroup$ @youngz have you tried to read some papers regarding processing of EMG data, there are certain standards: like which filters to use etc ... I would take one of these papers, reproduce the experiment and try to understand the method part by replicating the results. Here you can start playing with the method to see how this influences your results. Besides that it would help you to better understand what is the real signal you are looking for and what is noise ... $\endgroup$ Commented Dec 19, 2017 at 15:20
  • $\begingroup$ The brain drives the muscles via pulses. Therefore the spectrum of EMG is expected to be "more elevated" across the spectrum from other electrophysiological signals (e.g. ECG, EEG and I mean good acquisitions without artifacts, the pure signal you expect from the phenomenon). You really need to unpick the word "noise" as others suggested. It has nothing to do with "a filter", you need to understand what is it that your EMG signal is recording and what is it that you want to isolate out of it. $\endgroup$
    – A_A
    Commented Dec 19, 2017 at 15:42

1 Answer 1


This is a tougher problem than it appears at the first glance. This may be confusing at first, but read carefully, and I hope that it will give a good idea what to do. Here is what is my experience and how I resolved a similar problem:

  1. apply a very good band-pass filter to get the frequency range of interest.
  2. apply a very tight DFT to get a good resolution in frequency domain. You may wish to pad the original signal with zeros if it is not long enough.
  3. determine the bandwidth of the notch filter that you want to use. Be very careful with notch filters, since they have some inconvenient characteristics.
  4. make the running window sum of the DFT results using the width of your notch filter.
  5. set the threshold to decide what is a peak in the results.
  6. the running windows sum should give you values where the peaks are.
  7. apply the notch filter designed for the frequency in mind. If the frequencies are changing, and the filtering has to be done in a real time, adaptive filter has to be applied, but that is yet another question.

Not the answer you're looking for? Browse other questions tagged or ask your own question.