public override Task <ITimeSeriesValue[]> Run(IFrame frame, IFrame[] previousFrames, IFrame[] futureFrames)
        {
            AdaptValue real      = new AdaptValue("Real", Complex.Conjugate(GetComplex(frame)).Real, frame.Timestamp);
            AdaptValue imaginary = new AdaptValue("Imaginary", Complex.Conjugate(GetComplex(frame)).Imaginary, frame.Timestamp);

            return(Task.FromResult <ITimeSeriesValue[]>(new AdaptValue[] { real, imaginary }));
        }
        public override Task <ITimeSeriesValue[]> Run(IFrame frame, IFrame[] previousFrames, IFrame[] futureFrames)
        {
            Complex    S        = GetComplex(frame);
            AdaptValue apparent = new AdaptValue("Apparent Power", S.Magnitude, frame.Timestamp);
            AdaptValue active   = new AdaptValue("Active Power", S.Real, frame.Timestamp);
            AdaptValue reactive = new AdaptValue("Reactive Power", S.Imaginary, frame.Timestamp);

            return(Task.FromResult <ITimeSeriesValue[]>(new AdaptValue[] { apparent, active, reactive }));
        }