예제 #1
0
        private void PopulateSeriesData()
        {
            FourierTransform discreteTransform = new Dft();
            FourierTransform fastTransform = new Fft();
            FastWalshTransform walshTransform = new FastWalshTransform();

            Discretizer discretizer = new Discretizer();
            LineSeriesBuilder seriesBuilder = new LineSeriesBuilder();

            IDictionary<double, double> discreteData = discretizer.Discretize(f, 0, Period, Period/N)
                .Take(N) // Take only the given number of elements. Otherwise problem appears in FFT.
                .ToDictionary(x => x.Key, x => x.Value);

            double[] fwtData = walshTransform.DoTransform(discreteData.Values.ToArray());

            ICollection<Complex> discreteTransformData = discreteTransform.DoTransform(discreteData.Values);
            ICollection<Complex> fastTransformData = fastTransform.DoTransform(discreteData.Values);

            seriesManager.Add(SeriesNames.DftMagnitudes, seriesBuilder.CreateSeries("DFT Magnitude", discreteData.Keys, discreteTransform.Magnitudes));
            seriesManager.Add(SeriesNames.FftMagnitudes, seriesBuilder.CreateSeries("FFT Magnitude", discreteData.Keys, fastTransform.Magnitudes));
            seriesManager.Add(SeriesNames.DftPhases, seriesBuilder.CreateSeries("DFT Phase", discreteData.Keys, discreteTransform.Phases));
            seriesManager.Add(SeriesNames.FftPhases, seriesBuilder.CreateSeries("FFT Phase", discreteData.Keys, fastTransform.Phases));
            seriesManager.Add(SeriesNames.ForwardFwt, seriesBuilder.CreateSeries("FWT", discreteData.Keys, fwtData));

            double[] fwtDataInverse = walshTransform.DoTransformInverse(fwtData);
            seriesManager.Add(SeriesNames.InverseFwt, seriesBuilder.CreateSeries("IFWT", discreteData.Keys, fwtDataInverse));

            PopulateStats();
            discreteTransform.DoTransformInverse(discreteTransformData);
            fastTransform.DoTransformInverse(fastTransformData);

            seriesManager.Add(SeriesNames.OriginalF, seriesBuilder.CreateSeries("Original F(x)", discretizer.Discretize(f, 0, Period, 0.01)));
            seriesManager.Add(SeriesNames.InverseFft, seriesBuilder.CreateSeries("Inverse FFT", discreteData.Keys, fastTransform.Magnitudes));
            seriesManager.Add(SeriesNames.InverseDft, seriesBuilder.CreateSeries("Inverse DFT", discreteData.Keys, discreteTransform.Magnitudes));
        }
예제 #2
0
        private void PopulateSeries(CorrelationConvolution.CorrelationConvolutionDemo demo)
        {
            LineSeriesBuilder seriesBuilder = new LineSeriesBuilder();

            seriesManager.Add("D Convln", seriesBuilder.CreateSeries("D Convln",
                demo.DiscreteConvolution.Keys, demo.DiscreteConvolution.Values));

            seriesManager.Add("Fast Convln", seriesBuilder.CreateSeries("Fast Convln",
                demo.FastConvolution.Keys, demo.FastConvolution.Values));

            seriesManager.Add("D Corr", seriesBuilder.CreateSeries("D Corr",
                demo.DiscreteCorrelation.Keys, demo.DiscreteCorrelation.Values));

            seriesManager.Add("Fast Corr", seriesBuilder.CreateSeries("Fast Corr",
                demo.FastCorrelation.Keys, demo.FastCorrelation.Values));

            //Manually activate these series

            seriesManager.ActiveSeries.Add("D Convln");
            seriesManager.ActiveSeries.Add("Fast Convln");

            seriesManager.ActiveSeries.Add("D Corr");
            seriesManager.ActiveSeries.Add("Fast Corr");
        }