Esempio n. 1
0
        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);
            }
            ;
        }
Esempio n. 2
0
        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;
            }));
        }
Esempio n. 3
0
        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;
            }));
        }
Esempio n. 4
0
        public IEnumerable <KeyValuePair <DateTime, Tuple <Normal, Normal> > > BatchRun(List <Tuple <DateTime, Point> > meas, Point initialPoint)
        {
            ParticleFilterSharp2D FilterSharp = new ParticleFilterSharp2D();

            IContinuousDistribution xDistribution = null;
            IContinuousDistribution yDistribution = null;
            IContinuousDistribution oDistribution = null;
            IContinuousDistribution vDistribution = null;


            if (initialPoint == null)
            {
                xDistribution = new ContinuousUniform(-10, 10);
                yDistribution = new ContinuousUniform(-10, 10);
                oDistribution = new ContinuousUniform(0, 2 * Math.PI);
                vDistribution = new ContinuousUniform(0.000001, 0.000001);
            }
            FilterSharp.Particles = ParticleFactory.BuildSwarm(N, xDistribution, yDistribution, vDistribution, oDistribution).ToList();



            DateTime dt = meas[0].Item1.AddTicks(-(long)meas.Select(_ => (double)_.Item1.Ticks).ToArray().SelectDifferences().Average());



            for (int i = 0; i < meas.Count(); i++)
            {
                long ticks = (meas[i].Item1 - dt).Ticks;

                // move based on last measurement

                FilterSharp.Predict(EffectiveCountMinRatio);
                var est = ParticleHelper.Estimate(FilterSharp.Particles);
                yield return(new KeyValuePair <DateTime, Tuple <Normal, Normal> >(dt, est));

                // predictions.Add(new KeyValuePair<DateTime, List<Point>>(dt, particles.Select(_=>(Point)(_)).ToList()));


                // incorporate measurements
                FilterSharp.Update(meas[i].Item2);


                dt = meas[i].Item1;
            }
        }