Signal analysis: amplitude estimation in MATLAB

2019-08-13 18:10发布

问题:

I am trying to estimate the amplitude of a signal in MATLAB:

As can be seen, I can't simply take the max() and min() to get the amplitude. The signal continually wanders, and in any case isn't constant. However, all that I'm looking for is an average - one single figure that estimates the average amplitude of the dominant component in the figure above (which repeats eight times). Visually, it's fairly obvious what I'm trying to find out. Programatically however...

I have heard tell of 'Hilbert transform' - hilbert() - and 'fast fourier transform' - fft() - but have very little knowledge of signal analysis - and wonder if anyone might be able to steer me in the right direction, or explain how to utilise either of these functions. My data is simply a float stored in a one-dimensional array at 1000Hz.

Any help gratefully received!

回答1:

You have several options, the easiest of which would be:

  1. Use a peak detector to find local extrema. You can find several on the MathWorks File Exchange.
  2. Apply a high pass filter to remove the baseline drift, then find the absolute minimum and maximum


回答2:

In order to extract the peak-to-peak amplitude, you may first apply detrend to your dataset.