Ejemplo n.º 1
0
        protected override void Update()
        {
            //                  samples
            //                 A       B
            //  Parent        -2      -1
            //  Intergal      -1    [Add]

            double value = 0;
            double timeA = -1;
            double timeB = -1;

            int countI = this.GetSampleCount();

            if (countI > 0)
            {
                var sA = this.GetSample(-1);
                value = sA.value;
                timeA = sA.time;
            }

            int countP = _original.GetSampleCount();

            Debug.Assert(countP > 0);

            if (countP == 1)
            {
                var sB = _original.GetSample(-1);
                timeB = sB.time;
            }
            else
            {
                var sA = _original.GetSample(-2);
                var sB = _original.GetSample(-1);
                Debug.Assert(countI == 0 || timeA == sA.time);
                timeB = sB.time;

                double S = (timeB - timeA) * (sA.value + sB.value) / 2 * _scale;
                //value += S;
#if true
                value = value + S;
#else
                double dt = timeB - timeA;    // (0..
                //double c = Math.Pow(0.001, dt * 1);
                double c = Math.Exp(-dt * 3); // c==1 if dt==0

                value = (value * c) + S * (1.0 - c);

                Debug.WriteLine("Integrate: dt {0:0.0000} S {1:0.0000} c {2:0.0000} value {3}", dt, S, c, value);
#endif
            }

            base.Add(timeB, value);
        }
Ejemplo n.º 2
0
        protected override void Update()
        {
            double value = 0;
            var    s1    = _original.GetSample(-1);
            var    s2    = _original.GetSample(-2);

            Debug.Assert(s1.IsValid());
            if (s2.IsValid())
            {
                value = (s1.value - s2.value) / (s1.time - s2.time) * _scale;
            }
            Add(s1.time, value);
        }
Ejemplo n.º 3
0
        protected override void Update()
        {
            var s1 = _original.GetSample(-1);
            var s2 = _original.GetSample(-2);

            Debug.Assert(s1.IsValid());
            if (s2.IsValid())
            {
                int sign = Math.Sign(s1.value - s2.value);
                if (_lastSign != sign)
                {
                    if (_lastSign != 0)   // s2 was an extrema - collect its time and sign
                    {
                        Add(s2.time, _lastSign);
                    }
                    _lastSign = sign;
                }
            }
        }
Ejemplo n.º 4
0
        protected override void Update()
        {
            var sO = _original.GetSample(-2);
            var sE = _extremas.GetSample(-1);

            if (sO.IsValid() && sE.IsValid())
            {
                if (sE.time == sO.time && sE.value == _sign)
                {
                    base.Add(sO.time, sO.value);
                }
            }
        }
Ejemplo n.º 5
0
        public void DrawSignal(Image image, double currentTime, double timeSpan, SignalSamples signal, Color color, double scaleY = 1.0)
        {
            int segmentLimit = 200; //!!! configure
            var poses        = new List <Point>();

            for (int i = 1; i <= segmentLimit; ++i)
            {
                var s = signal.GetSample(-i);
                if (!s.IsValid())
                {
                    break;               // no more samples
                }
                double t   = s.time - currentTime;
                Point  pos = new Point((float)t, (float)(s.value * scaleY));
                poses.Insert(0, pos);
                if (t < -timeSpan)
                {
                    break;                // gone out of view
                }
            }
            DrawSignal(image, poses.ToArray(), color);
        }