I'm hoping someone could point me in the direction of some signal processing methods to clean up my data. I'm collecting physiological data from human muscle (lower leg; gastrocnemius) during walking/gait.

I know the sensor is picking up contractions, but the problem is it's so plagued by motion and skin artefacts I can barely do anything with it. Performing an isometric contraction (contracting the muscle without changing its length) shows a good signal (as there are no motion or skin artefacts to contaminate it. However, when collecting real-world data of a subject walking I'm getting huge spikes on the heel strike, amongst other unpleasantries.

The sensor type revolves around a MEMS microphone, so basically it picks up everything. It is un-amplified and only filtered by post processing. The sampling rate is 1kHz and seems to be more than enough. It's a single channel/vector of a continuous signal (i.e. 10 minutes of collection at 1kHz is a 1x600000 vector).

Please help me by suggesting some methods on what I can do. I've been looking at wavelet transforms which look promising, but any help on the matter will be much appreciated. Also look at PCA but having a vector makes it difficult (unless I break my data into windows?). I'm trying to keep it as uncontrolled as possible, so any analysis that I can do on my current collected data would be great!

Can provide some data if it helps in your analysis.


  • $\begingroup$ Providing some data would definitely help, if possible. $\endgroup$
    – datageist
    Apr 10, 2014 at 7:41
  • $\begingroup$ Thanks for your reply. I've uploaded some data here in csv or MATLAB .mat format: dropbox.com/sh/jeoa8ll1leq8kbn/8jlEzbbW0R. This data is someone walking in a straight line for 50 steps (basically just walking down a long corridor). Thanks again. $\endgroup$
    – ritchie888
    Apr 10, 2014 at 9:04
  • $\begingroup$ That helps, thanks. At least one example of a clean signal (i.e. what you're trying to detect) would be helpful as well. $\endgroup$
    – datageist
    Apr 11, 2014 at 8:41
  • $\begingroup$ @datageist sorry but an example of a clean signal is really hard to produce. In order to get a clean signal I'd have to try and walk without a heel strike, which is pretty difficult to achieve. I'm looking into unsupervised classification methods as supervised is infeasible. If you are able to apply a method without any prior knowledge to divide the data into two groups I can certainly determine which group is noise and which is contraction data. $\endgroup$
    – ritchie888
    Apr 14, 2014 at 11:23
  • $\begingroup$ I mean a single isometric contraction. I'm assuming that's close to the target signals you're looking for buried in all the noise, correct? $\endgroup$
    – datageist
    Apr 14, 2014 at 11:40

1 Answer 1


I've tried a copule of methods on your data (low-pass filtering via DFT, SSA filtering), but I don't know what result will satisfy you.

You mentioned that the signal is sampled with a higher-then-enough frequency. Can you rise the sampling frequency even higher? I'm talking about oversampling. This can help to get rid of some part (some kind) of the noise present.

You also mentioned PCA and that it's not appropriate for univariate time series. Right, PCA is almost useles with univariate time series, but there is an appropriate and closely related technique, SSA. You can find detailed description here: Singular Spectrum Analysis for Time Series (free sample is enough: Chapter 2: Basic SSA). And my own GNU Octave (hope Matlab compatible) implementation here: ssa-octave.m (there is also Scilab implementation, but you probably don't need it). Take a look at chapter 2.4 "Choice of Parameters in Basic SSA" for interpretation and tuning tips.

It's also not clear to me: the "5 seconds of stationary" pattern in isometric data sample should be filtred out or it is a useful signal too?

  • $\begingroup$ Thanks very much for taking the time to look at the data. I'll definitely look into this SSA (not heard of it before). Unfortunately I'm not able to up the sampling rate any more due to the technology I'm using. The 5 seconds of stationary should be nothing, really. After filtering you should see no contraction or anything other than background noise during those periods. $\endgroup$
    – ritchie888
    Apr 23, 2014 at 13:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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