예제 #1
0
 public void Reconstruct()
 {
     if (SelectedReconstructSignal != null && SelectedReconstructSignal.HasData())
     {
         var sampledSignal = (SampledSignal)SelectedReconstructSignal;
         ContinuousSignal        signal = new ContinuousSignal();
         List <(double, double)> reconstructed;
         if (SelectedReconstruction.Substring(1, 2) == "R1")
         {
             reconstructed = Reconstruction
                             .ZeroOrderHold(sampledSignal.PointsX.Zip(sampledSignal.PointsY, (d, d1) => (d, d1)).ToList(), sampledSignal.Frequency, NSamples)
                             .ToList();
         }
         else
         {
             reconstructed = Reconstruction
                             .SincReconstruction(sampledSignal.PointsX.Zip(sampledSignal.PointsY, (d, d1) => (d, d1)).ToList(), sampledSignal.Frequency, NSamples)
                             .ToList();
         }
         signal.PointsX = reconstructed.Select(c => c.Item1).ToList();
         signal.PointsY = reconstructed.Select(c => c.Item2).ToList();
         signal.Name    = ReconstructedSignalName + " - R";
         SignalCreator.AddSignal(signal);
     }
 }
예제 #2
0
            public void Test1()
            {
                var form = new ChartTestForm();


                var wavestore = new WaveformStorage();

                SignalCreator.CreateSample3(wavestore.Waveforms);


                wavestore.SaveToCsv("D:\\proba.csv");


                var chart = form.chart1;

                chart.Series.Clear();
                chart.Titles.Clear();

                chart.Titles.Add("Signals");

                for (int wave = 0; wave < wavestore.Waveforms.Count; wave++)
                {
                    var series = chart.Series.Add(wavestore.Waveforms[wave].Name);

                    series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;

                    for (int yIndex = 0; yIndex < wavestore.Waveforms[wave].YArray.Length; yIndex++)
                    {
                        series.Points.Add(wavestore.Waveforms[wave].YArray[yIndex]);
                    }
                }


                form.ShowDialog();
            }
예제 #3
0
        private void TransformMethod()
        {
            if (SelectedSignal != null)
            {
                SampledSignal signal = new SampledSignal();
                signal.PointsY = SelectedSignal.PointsY;
                signal.Name    = $"{SelectedSignal.Name} {SelectedTransform}";
                Stopwatch timer = new Stopwatch();
                timer.Start();
                switch (SelectedTransform.Substring(1, 4))
                {
                case "F1.1":
                    signal.ComplexPoints = FourierTransform.Transform(signal.PointsY);
                    break;

                case "F1.2":
                    FastFourierTransform fourierTransform = new FastFourierTransform();
                    signal.ComplexPoints = fourierTransform.Transform(signal.PointsY);
                    break;

                case "F1.3":
                    signal.ComplexPoints = WaveletTransform.Transform(signal.PointsY);
                    break;
                }
                timer.Stop();
                Time = timer.ElapsedMilliseconds;
                SignalCreator.AddSignal(signal);
            }
        }
예제 #4
0
        public Zad3ViewModel(SignalCreator signalCreator)
        {
            SignalCreator = signalCreator;

            Filters = new List <string>()
            {
                "(F0) Filtr dolnoprzepustowy",
                "(F1) Filtr środkowoprzepustowy",
                "(F2) Filtr górnoprzepustowy",
            };
            SelectedFilter = Filters[0];
            Windows        = new List <string>()
            {
                "(O0) Okno Prostokątne",
                "(O1) Okno Hamminga",
                "(O2) Okno Hanninga",
                "(O3) Okno Blackmana",
            };
            SelectedWindow      = Windows[0];
            ConvoluteCommand    = new RelayCommand(Convolute);
            CorrelateCommand    = new RelayCommand(Correlate);
            CreateFilterCommand = new RelayCommand(CreateFilter);
            CalculateKCommand   = new RelayCommand(CalculateK);
            FilterCommand       = new RelayCommand(FilterMethod);
        }
예제 #5
0
 public void Correlate()
 {
     if (SelectedSignalCorrelate1 != null && SelectedSignalCorrelate1.HasData() && SelectedSignalCorrelate2 != null && SelectedSignalCorrelate2.HasData())
     {
         SampledSignal signal = new SampledSignal();
         signal.PointsY = Correlation.ComputeSignal(SelectedSignalCorrelate1.PointsY, SelectedSignalCorrelate2.PointsY);
         signal.Name    = $"({SelectedSignalCorrelate1.Name})C({SelectedSignalCorrelate2.Name})";
         SignalCreator.AddSignal(signal);
     }
 }
예제 #6
0
 public void FilterMethod()
 {
     if (SelectedSignalFilter1 != null && SelectedSignalFilter1.HasData() && SelectedSignalFilter2 != null && SelectedSignalFilter2.HasData())
     {
         SampledSignal signal = new SampledSignal();
         signal.PointsY = Convolution.ComputeSignal(SelectedSignalFilter1.PointsY, SelectedSignalFilter2.PointsY).Skip((SelectedSignalFilter2.PointsY.Count - 1) / 2).Take(SelectedSignalFilter1.PointsY.Count).ToList();
         signal.Name    = $"({SelectedSignalFilter1.Name})*({SelectedSignalFilter2.Name})";
         SignalCreator.AddSignal(signal);
     }
 }
예제 #7
0
 public void Quant()
 {
     if (SelectedSampledSignal != null && SelectedSampledSignal.HasData())
     {
         var           sampledSignal = (SampledSignal)SelectedSampledSignal;
         SampledSignal signal        = new SampledSignal();
         signal.PointsX   = sampledSignal.PointsX;
         signal.StartTime = sampledSignal.StartTime;
         signal.Frequency = sampledSignal.Frequency;
         signal.PointsY   = Quantization.Quantize(sampledSignal.PointsY, QuantCount);
         signal.Name      = QuantSignalName + " - Q";
         SignalCreator.AddSignal(signal);
     }
 }
예제 #8
0
        public Zad2ViewModel(SignalCreator signalCreator)
        {
            SignalCreator = signalCreator;

            Reconstructions = new List <string>()
            {
                "(R1) Ekstrapolacja zerowego rzędu",
                "(R3) Rekonstrukcja w oparciu o funkcję sinc",
            };
            SelectedReconstruction = Reconstructions[0];
            QuantCommand           = new RelayCommand(Quant);
            ReconstructCommand     = new RelayCommand(Reconstruct);
            ComputeCommand         = new RelayCommand(ComputeSignalsDifference);
        }
예제 #9
0
        public Zad4ViewModel(SignalCreator signalCreator)
        {
            SignalCreator = signalCreator;

            Transforms = new List <string>()
            {
                "(F1.1) Transformacja Fouriera",
                "(F1.2) Szybka Transformacja Fouriera",
                "(F1.3) Transformacja Falkowa",
            };
            SelectedTransform        = Transforms[0];
            SelectedReverseTransform = Transforms[0];
            TransformCommand         = new RelayCommand(TransformMethod);
            ReverseTransformCommand  = new RelayCommand(ReverseTransformMethod);
        }
예제 #10
0
        public Zad1ViewModel(SignalCreator signalCreator)
        {
            SignalCreator = signalCreator;

            Operations = new List <string>()
            {
                "(D1) Dodawanie",
                "(D2) Odejmowanie",
                "(D3) Mnożenie",
                "(D4) Dzielenie",
            };
            SelectedOperation     = Operations[0];
            ComputeCommand        = new RelayCommand(ComputeSignalInfo);
            ComputeSignalsCommand = new RelayCommand(ComputeSignals);
            ResultSignalName      = "Result Signal";
        }
예제 #11
0
        public void CreateFilter()
        {
            Func <int, double, List <double> >        filterFunction = null;
            Func <List <double>, int, List <double> > windowFunction = null;

            switch (SelectedFilter.Substring(1, 2))
            {
            case "F0":
                filterFunction = Filter.LowPassFilter;
                break;

            case "F1":
                filterFunction = Filter.MidPassFilter;
                break;

            case "F2":
                filterFunction = Filter.HighPassFilter;
                break;
            }
            switch (SelectedWindow.Substring(1, 2))
            {
            case "O0":
                windowFunction = Filter.RectangularWindow;
                break;

            case "O1":
                windowFunction = Filter.HammingWindow;
                break;

            case "O2":
                windowFunction = Filter.HanningWindow;
                break;

            case "O3":
                windowFunction = Filter.BlackmanWindow;
                break;
            }
            SampledSignal signal = new SampledSignal();

            signal.PointsY = Filter.CreateFilterSignal(M, K, filterFunction, windowFunction);
            signal.Name    = FilterName + " - F";
            SignalCreator.AddSignal(signal);
        }
예제 #12
0
            public void Test1()
            {
                var form = new Form3();

                var wavestore = new WaveformStorage();

                SignalCreator.TestSignal(wavestore.Waveforms);
                Waveform waveform      = wavestore.Waveforms[0];
                var      complexSignal = waveform.FftBruteFroce();
                var      sepectrum     = waveform.GetPowerSpectrum();
                var      chart         = form.chart1;


                /*---------*/
                chart = form.chart1;
                chart.Series.Clear();
                chart.Titles.Clear();
                chart.Titles.Add("Power spectrum");
                var series = chart.Series.Add("");

                series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
                for (int i = 0; i < complexSignal.Length; i++)
                {
                    series.Points.Add(sepectrum[i]);
                }

                var bins = waveform.GetFftBins();

                var width = chart.Width;

                Debug.Write("Width:" + width);

                for (int i = 0; i < bins.Length; i++)
                {
                    var cl = new System.Windows.Forms.DataVisualization.Charting.CustomLabel();
                    cl.FromPosition = i + 1.5;
                    cl.ToPosition   = i + 2.5;
                    cl.Text         = bins[i].ToString("0.00");

                    chart.ChartAreas[0].AxisX.CustomLabels.Add(cl);
                }
                form.ShowDialog();
            }
예제 #13
0
            public void Test1()
            {
                var form  = new Form1();
                var form2 = new Form2();

                var wavestore = new WaveformStorage();

                SignalCreator.TestSignal(wavestore.Waveforms);
                Waveform waveform      = wavestore.Waveforms[0];
                var      complexSignal = waveform.FftBruteFroce();
                var      sepectrum     = waveform.GetPowerSpectrum();

                /*---------*/
                var chart = form.chart1;

                chart.Series.Clear();
                chart.Titles.Clear();
                chart.Titles.Add("Signals");
                var series = chart.Series.Add("");

                series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
                for (int i = 0; i < waveform.YArray.Length; i++)
                {
                    series.Points.Add(waveform.YArray[i]);
                }

                /*---------*/
                chart = form.chart2;
                chart.Series.Clear();
                chart.Titles.Clear();
                chart.Titles.Add("FFT-Imaginary");
                series           = chart.Series.Add("");
                series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
                for (int i = 0; i < complexSignal.Length; i++)
                {
                    series.Points.Add(complexSignal[i].Imaginary);
                }

                /*---------*/
                chart = form.chart3;
                chart.Series.Clear();
                chart.Titles.Clear();
                chart.Titles.Add("FFT-Real");
                series           = chart.Series.Add("");
                series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
                for (int i = 0; i < complexSignal.Length; i++)
                {
                    series.Points.Add(complexSignal[i].Real);
                }

                /*---------*/
                chart = form.chart4;
                chart.Series.Clear();
                chart.Titles.Clear();
                chart.Titles.Add("Power spectrum");
                series           = chart.Series.Add("");
                series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
                for (int i = 0; i < complexSignal.Length; i++)
                {
                    series.Points.Add(sepectrum[i]);
                }

                var bins = waveform.GetFftBins();

                for (int i = 0; i < bins.Length; i++)
                {
                    var cl = new System.Windows.Forms.DataVisualization.Charting.CustomLabel();
                    cl.FromPosition = i + 1.5;
                    cl.ToPosition   = i + 0.5;
                    cl.Text         = bins[i].ToString("0.00");

                    chart.ChartAreas[0].AxisX.CustomLabels.Add(cl);
                }
                form2.Show();
                form.ShowDialog();
            }
 public Zad3ExperimentViewModel(SignalCreator signalCreator)
 {
     SignalCreator = signalCreator;
     StartCommand  = new RelayCommand(Start);
     StopCommand   = new RelayCommand(Stop);
 }