View Single Post
  #3 (permalink)  
Old 06-29-2009, 06:47 PM
Tim Wescott
Guest
 
Posts: n/a
Default Re: time-varying single low-frequency sinusoid filtering

On Mon, 29 Jun 2009 00:37:38 -0500, Michael Plante wrote:

> Hi all,
>
> I'm trying to postprocess a signal that contains a low-frequency
> sinusoid, but my DSP skills are mediocre (I've had formal classes in
> continuous time systems). I have a very long data series sampled at 100
> Hz, and I know that the signal of interest is roughly sinusoidal and in
> the range of 0.25 to 0.5 Hz (it is a physical oscillation of a plant).
> The frequency may shift slightly within that band over time, and the
> amplitude definitely changes. I know there is a small random walk and
> some white noise, and possibly some well-separated-in-frequency
> sinusoidal noise components.
>
> MAIN POINT: I need a good (ideally, best) estimate of the actual value
> of the sinuosoid at each sample point, along with an estimate of the
> derivative.
>
> I have coded a Savitzky-Golay filter, which essentially fits
> polynomials, but it is not clear that that is the best model (or maybe
> I'm choosing the parameters too haphazardly). The other wrinkle is that
> perhaps 0.1-1% of the data points are missing, on average. I believe
> those sample points are taken, but dropped in communications, so the
> data is, in fact, evenly sampled at 10ms intervals.
>
> Thanks in advance,
> Michael


I was thinking that a plain old bandpass filter from 0.25 to .5Hz might
well be good enough. If throughput is a problem you could prefilter and
decimate, but I couldn't see needing to do that unless you're performing
the computation on some really wimpy embedded processor.

_If_ you can accurately identify the dropped samples you probably want to
fill them in with interpolated data -- with that big of a ratio between
your actual and desired signals a simple average of the surrounding two
points should be plenty good for all but the lowest SNR cases.

Like Rune said, you need to cough up more information. Bandpass
filtering (possibly using an FFT), picking out a signal logically, then
using some math will be a lot easier than trying to implement a Kalman
filter -- so you really want to know if you _must_ do something fancy
_before_ you go investing loads of time into it.

--
www.wescottdesign.com
Reply With Quote