Bad signal filtering / normalization algorithm

Work with GPS tracking application. Everything is fine, but sometimes due to closed areas or bad weather, I get inaccurate points. When you draw them, it just doesn't look right with a lot of jumps / jumps.

Which algorithm should I execute to filter out bad signals? This seems like applying a blur algorithm to me, but what do you think?

+6
algorithm filter signal-processing normalization
source share
3 answers

There are several options:

  • Throw emissions
  • Filter
  • Use the best GPS
  • Using an external data source (road binding)
  • Combination of the above

I like to use filters. The Kalman filter is a typical (and often best) solution - it uses the amount of predictive averaging that is better than the cheap IIR (Infinite Impulse Response) filter:

FilteredValue = FilteredValue * 0.75 + NewValue * 0.25

You can get GPS modules that give you 4-5 corrections per second, which allows you to use the aforementioned “cheap” filter with a reasonable response time.

You can also just get the best GPS (SiRF III or better), which is not so noisy and has better internal reception (where possible).

Consumer GPS devices are “road-bound” where possible, so road errors are not visible to the consumer, as well as some other methods.

Kalman is not easy to implement, but without an external data set or sensor (for example, speed) is the best option. Check out http://www.google.com/search?q=open%20source%20kalman%20filter for code and tutorials on it.

-Adam

+8
source share

re: filtering in the presence of "pop noise" -

One of the easiest ways I have found for this:

delta = newValue - filteredValue; delta = delta > LARGEST_SANE_DELTA ? LARGEST_SANE_DELTA : (delta < -LARGEST_SANE_DELTA ? -LARGEST_SANE_DELTA : delta); filteredValue += alpha*delta; 

where alpha = 1 / tau and tau is the low-pass filter time constant, expressed in multiple times between iterations of the above code. The value LARGEST_SANE_DELTA represents a large possible change in newValue and provides an excessively large change in input. There are perhaps better ways to reject this type of noise, but they are more complex, and the one I mentioned is pretty simple.

+3
source share
+2
source share

All Articles