How to use frequency to reduce signal noise?

100 periods were collected from a three-dimensional periodic signal. The wavelength changes a little. The wavelength noise follows a Gaussian distribution with a zero mean. A good estimate of the wavelength is known; this is not a problem. The amplitude noise may not be Gaussian and may be polluted by emissions.

How can I calculate one period that approximates the โ€œbestโ€ of all 100 periods collected?

Time series, ARMA, ARIMA, Kalman filter, autoregression, and autocorrelation appear to be the key words here.

UPDATE 1: I have no idea how time series models work. Are they ready for different wavelengths? Can they handle nonsmooth true signals? If a time series model is established, can I calculate the โ€œbest estimateโ€ for one period? How?

UPDATE 2: A related question. Speed โ€‹โ€‹is not a problem in my case. Processing is performed offline after all periods have been collected.

Origin of the problem: I measure the acceleration during human steps at 200 Hz. After that, I try to double the data integration to get the vertical offset of the center of gravity. Of course, noise is introduced by a HUGE error when integrating twice. I would like to use frequency to reduce this noise. Here is a rough graph of actual data (y: acceleration in g, x: time in the second) of 6 steps corresponding to 3 periods (1 left and 1 right step - period):

human steps

My interest is now purely theoretical, as http://jap.physiology.org/content/39/1/174.abstract gives a pretty good recipe for what to do.

+4
source share
3 answers

We used wavelets to suppress noise with a similar signal measured from cows while walking. I donโ€™t think that noise is a problem here, and the biggest peaks are the actual changes in acceleration during walking.

I believe that the leg angle and thus the accelerometer changes during your experiment, and you need to take this into account in order to calculate the distance, i.e. you need to know what the orientation of the accelerometer at each time step is. See, for example, this technical note for angle.

If you need accurate position measurements, the best solution would be to get an accelerometer with a magnetometer that also measures orientation. Something like this should work: http://www.sparkfun.com/products/10321 .

EDIT : over the past few days, I looked through this a little more, because a similar project is also on my to-do list ... We have not used gyroscopes in the past, but we do this in the next project.

Positioning inaccuracy does not come from white noise, but from the inaccuracy and drift of the gyroscope. And then the error quickly accumulates due to double integration. Intersense has a product called Navshoe that solves this problem by resetting the error after each step (see this document ). And this is a good introduction to inertial navigation.

+5
source

A periodic signal without noise has the following property:

f(a) = f(a+k), where k is the wavelength. 

The next bit of information that is needed is that your signal consists of separate samples. Each bit of information that you have collected is based on patterns that are values โ€‹โ€‹of the f () function. From 100 samples you can get the average value:

 1/n * sum(s_i), where i is in range [0..n-1] and n = 100. 

This must be done for each dimension of your data. If you use 3D data, it will be applied 3 times. The result will be (x, y, z) points. You can find the s_i value from the periodic signal equation by simply doing

 s_i(a).x = f(a+k*i).x s_i(a).y = f(a+k*i).y s_i(a).z = f(a+k*i).z 

If the wavelength is inaccurate, this will give you an additional source of error or you will need to adjust it according to the actual wavelength of each period. As

k*i = k+k+...+k

if the wavelength changes, you will need to use k_1+k_2+k_3+...+k_i instead of k * i. Unfortunately, there will be big problems with errors in the wavelength associated with keeping this circuit k_1..k_i in sync with the actual data. You really need to know how to determine the starting position of each period from your actual data. You may need to mark them manually.

Now all your calculated average values โ€‹โ€‹will be like this:

m(a) :: R->(x,y,z)

Now this is a curve in 3d space. More complex error models will be left as excersize for the reader.

+2
source

If you have a copy of the Curve Fitting Toolbox, local regression may be a good choice.

  • The Curve Fitting Toolbox supports both local regression models and loess for curve and curve.

  • There is an option for reliable localized regression

The next blog post shows how to use cross-validation to estimate the optimization parameter for the localized regression model, as well as methods for estimating confidence intervals using bootstrap.

http://blogs.mathworks.com/loren/2011/01/13/data-driven-fitting/

+1
source

All Articles