Example #1
0
        public override SignalImplementation FilterSignal(ISignal signal)
        {
            double samplingFrequency = 1d / (signal.Points[1].Item1 - signal.Points[0].Item1);
            double kCoefficient      = samplingFrequency / _cutoffFrequency;
            SignalImplementation filterCoefficients = getFilterCoefficients(signal, kCoefficient);
            SignalImplementation result             = SignalOperations.ConvoluteSignals(signal, filterCoefficients);

            return(result);
        }
 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);
     }
 }
Example #3
0
        public override SignalImplementation FilterSignal(ISignal signal)
        {
            double samplingFrequency = 1d / (signal.Points[1].Item1 - signal.Points[0].Item1);
            double kCoefficient      = samplingFrequency / (samplingFrequency / 2 - _cutoffFrequency);
            SignalImplementation filterCoefficients = getFilterCoefficients(signal, kCoefficient);

            for (int i = 0; i < filterCoefficients.Points.Count; i++)
            {
                filterCoefficients.Points[i].Item2.Real = filterCoefficients.Points[i].Item2.Real * Math.Pow(-1.0, i);
            }
            SignalImplementation result = SignalOperations.ConvoluteSignals(signal, filterCoefficients);

            return(result);
        }
        public void Compute()
        {
            SelectedSignal1Tab.TabContent.Data.FromSamples = true;
            SelectedSignal2Tab.TabContent.Data.FromSamples = true;
            if (SelectedSignal1Tab.TabContent.Data.HasData() && SelectedSignal2Tab.TabContent.Data.HasData())
            {
                if (!SelectedSignal2Tab.TabContent.Data.IsValid(SelectedSignal1Tab.TabContent.Data))
                {
                    MessageBox.Show("Given signals are not valid", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }
                DataHandler data = new DataHandler();
                List<double> pointsY = new List<double>();

                switch (SelectedOperation.Substring(1, 2))
                {
                    case "D1":
                        pointsY = SignalOperations.AddSignals(SelectedSignal1Tab.TabContent.Data.Samples,
                            SelectedSignal2Tab.TabContent.Data.Samples);
                        break;
                    case "D2":
                        pointsY = SignalOperations.SubtractSignals(SelectedSignal1Tab.TabContent.Data.Samples,
                            SelectedSignal2Tab.TabContent.Data.Samples);
                        break;
                    case "D3":
                        pointsY = SignalOperations.MultiplySignals(SelectedSignal1Tab.TabContent.Data.Samples,
                            SelectedSignal2Tab.TabContent.Data.Samples);
                        break;
                    case "D4":
                        pointsY = SignalOperations.DivideSignals(SelectedSignal1Tab.TabContent.Data.Samples,
                            SelectedSignal2Tab.TabContent.Data.Samples);
                        break;
                }

                data.StartTime = SelectedSignal1Tab.TabContent.Data.StartTime;
                data.Frequency = SelectedSignal1Tab.TabContent.Data.Frequency;
                data.Samples = pointsY;
                data.FromSamples = true;
                SelectedResultTab.TabContent.IsScattered = true;
                SelectedResultTab.TabContent.LoadData(data);
                SelectedResultTab.TabContent.AddOriginal = false;
                SelectedResultTab.TabContent.AddSamples = false;
                SelectedResultTab.TabContent.DrawCharts();
                SelectedResultTab.TabContent.CalculateSignalInfo(isDiscrete: true, fromSamples: true);
            }

        }
        public static List <double> ReverseTransform(List <Complex> points)
        {
            List <double> xh = new List <double>();
            List <double> xg = new List <double>();

            for (int i = 0; i < points.Count; i++)
            {
                xh.Add(points[i].Real);
                xh.Add(0);
                xg.Add(0);

                xg.Add(points[i].Imaginary);
            }
            List <double> xhC = Convolution.ComputeSignal(xh, HO).Take(xh.Count).ToList();
            List <double> xgC = Convolution.ComputeSignal(xg, GO).Take(xg.Count).ToList();

            return(SignalOperations.AddSignals(xhC, xgC));
        }
Example #6
0
        private void Transform(object param)
        {
            SignalTransform transform     = null;
            bool            absoluteValue = false;
            TransformWindow dialog        = new TransformWindow();

            if (dialog.ShowDialog() == true)
            {
                transform     = dialog.SelectedTransform;
                absoluteValue = dialog.AbsoluteValue;
            }

            if (transform == null)
            {
                return;
            }

            ISignal signal;

            switch (param.ToString())
            {
            case "1":
                signal = FirstChart.SignalRepresentation.Signal;
                break;

            case "2":
                signal = SecondChart.SignalRepresentation.Signal;
                break;

            case "3":
                signal = combinedSignal.Signal;
                break;

            default:
                throw new ArgumentException();
            }
            DateTime             start             = DateTime.Now;
            SignalImplementation transformedSignal = transform.TransformSignal(signal);

            if (absoluteValue)
            {
                transformedSignal = SignalOperations.GetAbsoluteSignal(transformedSignal);
            }
            TimeSpan elapsedTime = DateTime.Now - start;

            MessageBox.Show("Czas wykonania algorytmu: " + elapsedTime.Minutes + "m " + elapsedTime.Seconds + "s " + elapsedTime.Milliseconds + "ms");

            transformedSignal.StartingMoment = transformedSignal.Points[0].Item1;
            transformedSignal.EndingMoment   = transformedSignal.Points[transformedSignal.Points.Count - 1].Item1;
            transformedSignal.CalculateTraits();
            combinedSignal.Signal = transformedSignal;

            combinedTextProperties.AverageValueText          = combinedSignal.Signal.AverageValue.ToString("N3");
            combinedTextProperties.AbsouluteAverageValueText = combinedSignal.Signal.AbsouluteAverageValue.ToString("N3");
            combinedTextProperties.AveragePowerText          = combinedSignal.Signal.AveragePower.ToString("N3");
            combinedTextProperties.VarianceText       = combinedSignal.Signal.Variance.ToString("N3");
            combinedTextProperties.EffectiveValueText = combinedSignal.Signal.EffectiveValue.ToString("N3");
            OnPropertyChanged("CombinedTextProperties");

            realCombinedSeries      = new ScatterSeries();
            imaginaryCombinedSeries = new ScatterSeries();

            foreach (Tuple <double, Complex> tuple in transformedSignal.Points)
            {
                realCombinedSeries.Points.Add(new ScatterPoint(tuple.Item1, tuple.Item2.Real));
                imaginaryCombinedSeries.Points.Add(new ScatterPoint(tuple.Item1, tuple.Item2.Imaginary));
            }

            ClearPlot();

            realCombinedSeries.MarkerType      = MarkerType.Circle;
            imaginaryCombinedSeries.MarkerType = MarkerType.Circle;
            realCombinedSeries.MarkerSize      = 2;
            imaginaryCombinedSeries.MarkerSize = 2;
            realCombinedSeries.MarkerFill      = OxyColors.Green;
            imaginaryCombinedSeries.MarkerFill = OxyColors.Green;

            realPlotModel.Series.Add(realCombinedSeries);
            imaginaryPlotModel.Series.Add(imaginaryCombinedSeries);

            realPlotModel.InvalidatePlot(true);
            imaginaryPlotModel.InvalidatePlot(true);
        }
        public void ComputeSignals()
        {
            if (SelectedSignal1 != null && SelectedSignal2 != null)
            {
                if (IsComplex)
                {
                    SampledSignal  signal = new SampledSignal();
                    List <Complex> points = new List <Complex>();

                    switch (SelectedOperation.Substring(1, 2))
                    {
                    case "D1":
                        points = SignalOperations.AddComplexSignals(SelectedSignal1.ComplexPoints,
                                                                    SelectedSignal2.ComplexPoints);
                        break;

                    case "D2":
                        points = SignalOperations.SubtractComplexSignals(SelectedSignal1.ComplexPoints,
                                                                         SelectedSignal2.ComplexPoints);
                        break;

                    case "D3":
                        points = SignalOperations.MultiplyComplexSignals(SelectedSignal1.ComplexPoints,
                                                                         SelectedSignal2.ComplexPoints);
                        break;

                    case "D4":
                        points = SignalOperations.DivideComplexSignals(SelectedSignal1.ComplexPoints,
                                                                       SelectedSignal2.ComplexPoints);
                        break;
                    }
                    signal.ComplexPoints = points;
                    signal.Name          = ResultSignalName + " - S [Complex]";
                    SignalCreator.Signals.Add(signal);
                    SignalCreator.SampledSignals.Add(signal);
                }
                else
                {
                    if (!SelectedSignal2.IsValid(SelectedSignal2))
                    {
                        MessageBox.Show("Given signals are not valid", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        return;
                    }
                    SampledSignal signal  = new SampledSignal();
                    List <double> pointsY = new List <double>();

                    switch (SelectedOperation.Substring(1, 2))
                    {
                    case "D1":
                        pointsY = SignalOperations.AddSignals(SelectedSignal1.PointsY,
                                                              SelectedSignal2.PointsY);
                        break;

                    case "D2":
                        pointsY = SignalOperations.SubtractSignals(SelectedSignal1.PointsY,
                                                                   SelectedSignal2.PointsY);
                        break;

                    case "D3":
                        pointsY = SignalOperations.MultiplySignals(SelectedSignal1.PointsY,
                                                                   SelectedSignal2.PointsY);
                        break;

                    case "D4":
                        pointsY = SignalOperations.DivideSignals(SelectedSignal1.PointsY,
                                                                 SelectedSignal2.PointsY);
                        break;
                    }
                    signal.PointsY   = pointsY;
                    signal.StartTime = SelectedSignal1.StartTime;
                    signal.Frequency = SelectedSignal1.Frequency;
                    signal.CalculateSamplesX();
                    signal.Name = ResultSignalName + " - S";
                    SignalCreator.Signals.Add(signal);
                    SignalCreator.SampledSignals.Add(signal);
                }
            }
        }