Beispiel #1
0
        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
                });
            }
        }
Beispiel #2
0
        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);
                }
            }
        }