private void PlotAxis() { plotModel.Axes.Clear(); AxisLimit Limits = AxisLimits[selectedAxisLimits]; if (selectedAxisLimits == "rbtnXRangeChirp") { if (chbxLogarithmicAxis != null) { if (chbxLogarithmicAxis.IsChecked == true) { plotModel.Axes.Add(new LogarithmicAxis { Position = AxisPosition.Bottom, Title = "ms", Minimum = Limits.XMin, Maximum = Limits.XMax, MajorGridlineStyle = LineStyle.Dot }); } else { plotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Title = "ms", Minimum = Limits.XMin, Maximum = Limits.XMax, MajorGridlineStyle = LineStyle.Dot }); } } plotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Title = "", Minimum = Limits.YMin, Maximum = Limits.YMax, MajorStep = Limits.MajorStep, MinorStep = Limits.MinorStep, MajorGridlineStyle = LineStyle.Solid }); } else { if (chbxLogarithmicAxis != null) { if (chbxLogarithmicAxis.IsChecked == true) { plotModel.Axes.Add(new LogarithmicAxis { Position = AxisPosition.Bottom, Title = "Hz", Minimum = Limits.XMin, Maximum = Limits.XMax, MajorGridlineStyle = LineStyle.Dot }); } else { plotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Title = "Hz", Minimum = Limits.XMin, Maximum = Limits.XMax, MajorGridlineStyle = LineStyle.Dot }); } } plotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Title = "dB", Minimum = Limits.YMin + Limits.YShift, Maximum = Limits.YMax + Limits.YShift, MajorStep = Limits.MajorStep, MinorStep = Limits.MinorStep, MajorGridlineStyle = LineStyle.Solid }); } }
private void PlotLine(DetectedChannel selectedChannel, bool secondaryChannel = false) { if (selectedChannel == null) { Collection <DataPoint> points = null; //time domain data if (selectedAxisLimits == "rbtnXRangeChirp") { } //frequency domain data else { if (secondaryChannel) { points = audysseyMultEQReferenceCurveFilter.High_Frequency_Roll_Off_2(); } else { points = audysseyMultEQReferenceCurveFilter.High_Frequency_Roll_Off_1(); } if (points != null) { OxyColor color = OxyColor.FromRgb(255, 0, 0); LineSeries lineserie = new LineSeries { ItemsSource = points, DataFieldX = "X", DataFieldY = "Y", StrokeThickness = 2, MarkerSize = 0, LineStyle = LineStyle.Solid, Color = color, MarkerType = MarkerType.None, }; plotModel.Series.Add(lineserie); } } } else { for (int i = 0; i < keys.Count; i++) { Collection <DataPoint> points = new Collection <DataPoint>(); string s = keys[i].ToString(); if (!selectedChannel.ResponseData.ContainsKey(s)) { continue; } string[] values = selectedChannel.ResponseData[s]; int count = values.Length; Complex[] cValues = new Complex[count]; double[] Xs = new double[count]; float sample_rate = 48000; float total_time = count / sample_rate; AxisLimit Limits = AxisLimits[selectedAxisLimits]; if (selectedAxisLimits == "rbtnXRangeChirp") { Limits.XMax = 1000 * total_time; // horizotal scale: s to ms for (int j = 0; j < count; j++) { double d = Double.Parse(values[j], NumberStyles.AllowExponent | NumberStyles.Float, CultureInfo.InvariantCulture); points.Add(new DataPoint(1000 * j * total_time / count, d)); } } else { for (int j = 0; j < count; j++) { decimal d = Decimal.Parse(values[j], NumberStyles.AllowExponent | NumberStyles.Float, CultureInfo.InvariantCulture); Complex cValue = (Complex)d; cValues[j] = 100 * cValue; Xs[j] = (double)j / count * sample_rate; } MathNet.Numerics.IntegralTransforms.Fourier.Forward(cValues); int x = 0; if (radioButtonSmoothingFactorNone.IsChecked.Value) { foreach (Complex cValue in cValues) { points.Add(new DataPoint(Xs[x++], Limits.YShift + 20 * Math.Log10(cValue.Magnitude))); if (x == count / 2) { break; } } } else { double[] smoothed = new double[count]; for (int j = 0; j < count; j++) { smoothed[j] = cValues[j].Magnitude; } LinSpacedFracOctaveSmooth(smoothingFactor, ref smoothed, 1, 1d / 48); foreach (double smoothetResult in smoothed) { points.Add(new DataPoint(Xs[x++], Limits.YShift + 20 * Math.Log10(smoothetResult))); if (x == count / 2) { break; } } } } OxyColor color = OxyColor.Parse(colors[keys[i]].ToString()); LineSeries lineserie = new LineSeries { ItemsSource = points, DataFieldX = "X", DataFieldY = "Y", StrokeThickness = 1, MarkerSize = 0, LineStyle = secondaryChannel ? LineStyle.Dot : LineStyle.Solid, Color = color, MarkerType = MarkerType.None, }; plotModel.Series.Add(lineserie); } } }