public IObservable <KeyValuePair <DateTime, Tuple <double, double>[]> > Run(IObservable <KeyValuePair <DateTime, double?> > meas) { ParticleFilterSharp1D FilterSharp = new ParticleFilterSharp1D(); FilterSharp.Particles = ParticleFactory.BuildSwarm(N, new int[] { min, max }).ToList(); return(meas.IncrementalTimeOffsets().Select(_ => { // move based on last measurement FilterSharp.Predict(EffectiveCountMinRatio, _.Key.Item2); var prd = new KeyValuePair <DateTime, Tuple <double, double>[]>( _.Key.Item1, FilterSharp.Particles.Select(__ => Tuple.Create(__.Y, __.Weight)).ToArray()); // incorporate measurement if (_.Value != null) { FilterSharp.Update(new Point(0, (double)_.Value)); } return prd; })); }
public IEnumerable <KeyValuePair <DateTime, Tuple <double, double>[]> > BatchRun1D(IEnumerable <KeyValuePair <DateTime, Point> > meas) { ParticleFilterSharp1D FilterSharp = new ParticleFilterSharp1D(); FilterSharp.Particles = ParticleFactory.BuildSwarm(N, new int[] { min, max }).ToList(); DateTime dt = meas.First().Key; foreach (var m in meas) { TimeSpan ticks = (m.Key - dt); // move based on last measurement FilterSharp.Predict(EffectiveCountMinRatio, ticks); var prd = new KeyValuePair <DateTime, Tuple <double, double>[]>( m.Key, FilterSharp.Particles.Select(__ => Tuple.Create(__.Y, __.Weight)).ToArray()); // incorporate measurement if (m.Value != default(Point)) { FilterSharp.Update(m.Value); } dt = m.Key; yield return(prd); } ; }
public IEnumerable <KeyValuePair <DateTime, Tuple <double, double>[]> > BatchRun(IEnumerable <KeyValuePair <DateTime, double> > meas) { ParticleFilterSharp1D FilterSharp = new ParticleFilterSharp1D(); FilterSharp.Particles = ParticleFactory.BuildSwarm(N, new int[] { min, max }).ToList(); DateTime dt = meas.First().Key; return(meas.Select(_ => { TimeSpan ticks = (_.Key - dt); // move based on last measurement FilterSharp.Predict(EffectiveCountMinRatio, ticks); var prd = new KeyValuePair <DateTime, Tuple <double, double>[]>( dt, FilterSharp.Particles.Select(__ => Tuple.Create(__.Y, __.Weight)).ToArray()); // incorporate measurement FilterSharp.Update(new Point(0, _.Value)); dt = _.Key; return prd; })); }