void DrawQuantizedPlot(List <DataPoint> previousPoints, out List <double> measuredValues)
        {
            DrawChart(previousPoints, false);
            var quantizedPoints = SignalConverter.QuantizeSignal(previousPoints, QuantizationLevel, out var measures);

            //var interpolatedPoints = SignalConverter.Interpolate(previousPoints.Count,
            //    previousPoints.Select(p => new ScatterPoint(p.X, p.Y)).ToList(), SamplingFrequency, SamplingFrequencyAc, InitialTime, out var measures);
            measuredValues = measures;
            var stepSizeSeries = new StairStepSeries
            {
                MarkerStrokeThickness = .1,
                MarkerSize            = 1,
                MarkerStroke          = OxyColors.Blue,
                MarkerFill            = OxyColors.Transparent,
                MarkerType            = MarkerType.Diamond,
                Color               = OxyColors.Blue,
                BrokenLineColor     = OxyColors.Blue,
                BrokenLineThickness = .1,
                StrokeThickness     = .1,
            };

            foreach (var point in quantizedPoints)
            {
                stepSizeSeries.Points.Add(point);
            }
            upperPlot.Model.Series.Add(stepSizeSeries);
        }
        void DrawSincReconstructionPlot(List <DataPoint> previousPoints, out List <double> measuredValues)
        {
            DrawSamplingPlot(previousPoints, out _, false);

            var sampledSignal = SignalConverter.SampleSignal(previousPoints, Frequency, SamplingFrequencyAc, out measuredValues);
            var sincPoints    = SignalConverter.SincReconstruction(sampledSignal.ToList(), SamplingFrequencyAc, out measuredValues,
                                                                   ConsideredSamplesNumber).ToList();

            foreach (var point in sincPoints)
            {
                sincSeries.Points.Add(point);
            }
            upperPlot.Model.Series.Add(sincSeries);
        }
        void DrawInterpolatedPlot(List <DataPoint> previousPoints, out List <double> measuredValues)
        {
            DrawSamplingPlot(previousPoints, out _, false);

            var sampledSignal      = SignalConverter.SampleSignal(previousPoints, Frequency, SamplingFrequencyAc, out measuredValues);
            var extrapolatedPoints = SignalConverter.ZeroAndHoldExtrapolation(sampledSignal.ToList(),
                                                                              SamplingFrequencyAc, out measuredValues, ConsideredSamplesNumber).ToList();

            interpolatedSeries.Points.Clear();
            foreach (var point in extrapolatedPoints)
            {
                interpolatedSeries.Points.Add(point);
            }
            upperPlot.Model.Series.Add(interpolatedSeries);
        }
        void DrawSamplingPlot(List <DataPoint> previousPoints, out List <double> measuredValues, bool drawOriginalSignal = true)
        {
            // draw original signal
            DrawChart(previousPoints, false, drawOriginalSignal);

            var sampledPoints = SignalConverter.SampleSignal(previousPoints, Frequency, SamplingFrequencyAc, out measuredValues);
            var scatterSeries = new ScatterSeries
            {
                MarkerStrokeThickness = .1,
                MarkerSize            = 2,
                MarkerStroke          = OxyColors.Red,
                MarkerFill            = OxyColors.Transparent,
                MarkerType            = MarkerType.Diamond
            };

            foreach (var point in sampledPoints)
            {
                scatterSeries.Points.Add(point);
            }
            upperPlot.Model.Series.Add(scatterSeries);
        }