Question

i need to smooth better this kind of plot, I've already used a moving average (10 points) to get this plot but it's not yet perfect. I want to remove all these little peaks dued by noise, I need to consider only the bigger ones because I'm counting the num of beats from a sensor. (ie.: in the first 30 seconds I should have just one peak instead of several successive little peaks)

I thought to use a cubic spline but isn't simple to implement in C and it's going to take almost 1-2 weeks of work.

Is there a simpler method / algorithm to use for this achievement? I'm working on this project for iOS (iPhone) environment.

a busy cat http://img15.imageshack.us/img15/1929/schermata022455973alle1o.png

Was it helpful?

Solution

The answer to your question depends a lot on the underlying data. Is the jaggedness of the data really 'noise' or is it really jagged data.

Strategies you could try:

  • windowing the data and take the median/mean in each window -- so each window is 50 (from your x axis)
  • sample the data
  • Nonlinear least squares curve fit (you'd probably have to use a C++ library for that, here is an open source version you could port http://www.ics.forth.gr/~lourakis/levmar/)
  • some sort of naive bezier smoothing should be pretty easy.

All of these methods have ramifications and none are without problems. Good luck.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top