public double GetAdaptiveStandardDeviation(IList <double> sequence, double timeWindow) { var timeBasedMovingAverageFilter = new TimeBasedMovingAverage(timeWindow); var timeBasedMovingAverage = timeBasedMovingAverageFilter.ProcessSamples(sequence); if (timeBasedMovingAverage.Count != sequence.Count) { throw new InvalidDataException("Different sample count data vs. filtered data"); } var sumResidualSquares = sequence.Select((val, i) => Math.Pow(val - timeBasedMovingAverage[i], 2)).Sum(); return(Math.Sqrt(sumResidualSquares / (sequence.Count - 1))); }
public IList <double> GetMovingAverage(IList <double> sequence) { var timeBasedMovingAverageFilter = new TimeBasedMovingAverage(_options.IntervalAverageWindowTime); return(timeBasedMovingAverageFilter.ProcessSamples(sequence)); }