private void Start()
 {
     if (SelectedSignal != null && SelectedSignal.HasData())
     {
         IsStarted = true;
         FirstDraw();
         _timer          = new Timer(T * 1000);
         _timer.Elapsed += Timer_Elapsed;
         _timer.Start();
     }
 }
 public void ComputeSignalInfo()
 {
     if (SelectedSignal != null && SelectedSignal.HasData())
     {
         var samples = SelectedSignal.PointsY;
         AvgSignal      = SignalOperations.AvgSignal(samples);
         AbsAvgSignal   = SignalOperations.AbsAvgSignal(samples);
         AvgSignalPower = SignalOperations.AvgSignalPower(samples);
         SignalVariance = SignalOperations.SignalVariance(samples);
         RMSSignal      = SignalOperations.RMSSignal(samples);
     }
 }
示例#3
0
        public void Reconstruct()
        {
            SignalData signalData = SelectedTab.SignalData;

            Generator generator = new Generator()
            {
                T1 = signalData.StartTime
            };

            double        step  = 2 * A_Amplitude / (Math.Pow(2, QuantizationThresholds) - 1);
            List <double> steps = new List <double>
            {
                -A_Amplitude
            };

            for (int i = 1; i < Math.Pow(2, QuantizationThresholds); i++)
            {
                steps.Add(steps[i - 1] + step);
            }

            if (Frequency % SamplingFrequency == 0)
            {
                // dla sygnałów generowanych losowo -> dzięki temu próbki są identyczne
                for (int i = 0; i < signalData.SamplesX.Count; i += Frequency / SamplingFrequency)
                {
                    double diff     = Math.Abs(signalData.SamplesY[i] - steps[0]);
                    int    iterator = 0;

                    for (int j = 0; j < Math.Pow(2, QuantizationThresholds); j++)
                    {
                        if (Math.Abs(signalData.SamplesY[i] - steps[j]) <= diff)
                        {
                            diff     = Math.Abs(signalData.SamplesY[i] - steps[j]);
                            iterator = j;
                        }
                    }

                    signalData.QuantizationSamplesY.Add(steps[iterator]);
                }
            }
            else
            {
                for (int i = 0; i < signalData.ConversionSamplesX.Count; i++)
                {
                    double diff     = signalData.SamplesX.LastOrDefault();
                    int    iterator = 0;

                    for (int j = 0; j < Math.Pow(2, QuantizationThresholds); j++)
                    {
                        if (Math.Abs(signalData.ConversionSamplesY[i] - steps[j]) <= diff)
                        {
                            diff     = Math.Abs(signalData.ConversionSamplesY[i] - steps[j]);
                            iterator = j;
                        }
                    }

                    signalData.QuantizationSamplesY.Add(steps[iterator]);
                }
            }

            for (decimal i = (decimal)T1_StartTime; i < (decimal)(T1_StartTime + D_DurationOfTheSignal); i += 1 / (decimal)ReconstructionFrequency)
            {
                signalData.ReconstructionSamplesX.Add((double)i);
                signalData.ReconstructionSamplesY.Add(generator.SincReconstruction(signalData.ConversionSamplesX, signalData.QuantizationSamplesY,
                                                                                   (double)i, SamplingFrequency, ReconstructionSamples));
            }

            SelectedTab.SignalData  = signalData;
            SelectedTab.IsScattered = SelectedSignal.IsGenerationScattered();
            SelectedTab.CalculateSignalInfo(T1_StartTime, T1_StartTime + D_DurationOfTheSignal);
            SelectedTab.CalculateReconstructionInfo();
            SelectedTab.ReconstructCharts();
        }
示例#4
0
        public void Generate()
        {
            Generator generator = new Generator()
            {
                A  = A_Amplitude,
                T1 = T1_StartTime,
                T  = T_BasicPeriod,
                Kw = Kw_DutyCycle,
                Ts = Ts_TimeStep,
                P  = P_Probability
            };

            Func <double, double> selectedGeneration = generator.SelectGenerator(SelectedSignal);

            if (selectedGeneration == generator.CustomSinusoidalSignal)
            {
                List <double> x  = new List <double>();
                List <double> y1 = new List <double>();
                List <double> y2 = new List <double>();

                generator = new Generator()
                {
                    A = 2,
                    T = 2
                };
                selectedGeneration = generator.SelectGenerator(SelectedSignal);

                for (decimal i = (decimal)T1_StartTime; i < (decimal)(T1_StartTime + D_DurationOfTheSignal); i += 1 / (decimal)SamplingFrequency)
                {
                    x.Add((double)i);
                    y1.Add(generator.CustomSinusoidalSignal((double)i));
                }

                generator = new Generator()
                {
                    A = 5,
                    T = 0.5
                };
                selectedGeneration = generator.SelectGenerator(SelectedSignal);

                for (decimal i = (decimal)T1_StartTime; i < (decimal)(T1_StartTime + D_DurationOfTheSignal); i += 1 / (decimal)SamplingFrequency)
                {
                    y2.Add(selectedGeneration((double)i));
                }

                SelectedTab.SignalData = new SignalData(T1_StartTime, Frequency, SamplingFrequency)
                {
                    ConversionSamplesX = x,
                    ConversionSamplesY = Operations.AddSignals(y1, y2)
                };

                SelectedTab.IsScattered = true;
                SelectedTab.CalculateSignalInfo(T1_StartTime, T1_StartTime + D_DurationOfTheSignal);
                SelectedTab.DrawCharts();
            }

            else if (selectedGeneration != null)
            {
                SignalData signalData = new SignalData(T1_StartTime, Frequency, SamplingFrequency);

                for (decimal i = (decimal)T1_StartTime; i < (decimal)(T1_StartTime + D_DurationOfTheSignal); i += 1 / (decimal)Frequency)
                {
                    signalData.SamplesX.Add((double)i);
                    signalData.SamplesY.Add(selectedGeneration((double)i));
                }

                if (Frequency % SamplingFrequency == 0)
                {
                    // dla sygnałów generowanych losowo -> dzięki temu próbki są identyczne
                    for (int i = 0; i < signalData.SamplesX.Count; i += Frequency / SamplingFrequency)
                    {
                        signalData.ConversionSamplesX.Add(signalData.SamplesX[i]);
                        signalData.ConversionSamplesY.Add(signalData.SamplesY[i]);
                    }
                }
                else
                {
                    for (decimal i = (decimal)T1_StartTime; i < (decimal)(T1_StartTime + D_DurationOfTheSignal); i += 1 / (decimal)SamplingFrequency)
                    {
                        signalData.ConversionSamplesX.Add((double)i);
                        signalData.ConversionSamplesY.Add(selectedGeneration((double)i));
                    }
                }

                SelectedTab.SignalData  = signalData;
                SelectedTab.IsScattered = SelectedSignal.IsGenerationScattered();
                SelectedTab.CalculateSignalInfo(T1_StartTime, T1_StartTime + D_DurationOfTheSignal);
                SelectedTab.DrawCharts();
            }
        }