1
$\begingroup$

I have a vector of sample data that describes a divergent oscillation like in this image.

Divergent Oscillation

I want to transform this data (just the data, not the system or anything), so that the data does converge to zero. I also want to keep the peaks of data at the same sample point, and the graph smooth. Simply multiplying the data by decreasing values moves the peaks of the data which is not desirable.

What sort of method should I use?

  • 1
    Maybe you could scale/bound the derivative, I believe you can force it to converge to zero. The peaks will stay the same, because scaling does not move _zeros_.2012-03-17
  • 0
    Thanks, this could work, i'll give it a go in the morning. Any hints on how to do this in code/MATLAB?2012-03-17
  • 0
    I tried this by taking the numerical derivative in MATLAB, scaling the derived vector by decreasing values over time, then integrating back with cumtrapz. The peaks do remain in the same place, however, an effect of this is that a constant offset has been introduced such that the data converges on a non-zero value, and I don't know why. Any ideas?2012-03-18
  • 2
    This is why I wrote "I believe you can **force** it to converge to zero". If your function goes up and down, and you scale the derivatives, then every time it goes up a little bit slower, it goes down slower even more--you add a constant term. If it was the same speed for both up and down, then it would stay at zero, but now they differ. Not too much, but still. It's like doing three steps forward, but only two back. How to fix it: you can't add something that changes(that would move your peaks), but you can add a constant. There surely are some adaptive solutions, but I have no time for this.2012-03-18

3 Answers 3