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); } }
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)); }
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); } } }