Пример #1
0
        private void getResult(ObservablePoint[] ret, GearedValues <ObservablePoint> shortWave)
        {
            if (ret.Length == 4)
            {
                t1Ret = (ret[1].X - ret[0].X).ToString("N2") + " ms";
                t2Ret = (ret[2].X - ret[1].X).ToString("N2") + " ms";
                t3Ret = (ret[3].X - ret[2].X).ToString("N2") + " ms";
                t4Ret = (ret[3].X - ret[0].X).ToString("N2") + " ms";

                var arr1 = shortWave.Skip((int)(ret[0].X / 300 * 6000)).Take((int)((ret[1].X - ret[0].X) / 300 * 6000)).Select(x => Math.Round(x.Y, 2));
                var arr2 = shortWave.Skip((int)(ret[2].X / 300 * 6000)).Take((int)((ret[3].X - ret[2].X) / 300 * 6000)).Select(x => Math.Round(x.Y, 2));
                var arr3 = shortWave.Skip((int)(ret[1].X / 300 * 6000)).Take((int)((ret[2].X - ret[1].X) / 300 * 6000)).Select(x => Math.Round(x.Y, 2));

                //double r1 = LogNormal.Estimate(arr1).Mean;
                //double r2 = LogNormal.Estimate(arr2).Mean;
                //double r3 = LogNormal.Estimate(arr3).Mean;

                double r1 = GetElevationMode(arr1.ToList());
                double r2 = GetElevationMode(arr2.ToList());
                //double r3 = GetElevationMode(arr3.ToList());
                double r3 = LogNormal.Estimate(arr3).Mean;

                //var sss = new MathNet.Numerics.Differentiation.NumericalDerivative(20, 2);
                R1Ret = r1.ToString("N2") + " Ω";
                R2Ret = r2.ToString("N2") + " Ω";

                R1AndR2Ret = r3.ToString("N2") + " Ω";;
            }
        }
Пример #2
0
        private GearedValues <ObservablePoint> CutWave(GearedValues <ObservablePoint> wave, int cutHeaderLever = 400)
        {
            GearedValues <ObservablePoint> data = new GearedValues <ObservablePoint>();

            data.AddRange(wave.Skip(cutSkip).Take(cutTake));
            return(data);
        }
Пример #3
0
        private void DrawFourLine(GearedValues <ObservablePoint> schart, GearedValues <ObservablePoint> sundata)
        {
            double needSelectData = Math.Round((sundata.Select(x => x.Y).Max() + sundata.Select(x => x.Y).Min()) / 2, 3);

            ObservablePoint[] twopoint = new ObservablePoint[4];
            double[]          tempD    = sundata.Select(x => Math.Round(x.Y, 3)).ToArray();
            for (int i = 1; i < 6000; i++)
            {
                if ((tempD[i - 1] >= needSelectData && tempD[i] <= needSelectData) || (tempD[i] >= needSelectData && tempD[i - 1] <= needSelectData))
                {
                    twopoint[0] = sundata[i];
                    break;
                }
            }
            for (int i = 5999; i > 1; i--)
            {
                if ((tempD[i - 1] >= needSelectData && tempD[i] <= needSelectData) || (tempD[i] >= needSelectData && tempD[i - 1] <= needSelectData))
                {
                    twopoint[3] = sundata[i];
                    break;
                }
            }


            double cuttime  = cutTake * 0.05;
            double skiptime = cutSkip * 0.05;

            //绘制t1
            Hover1.X1 = (twopoint[0].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            Hover1.X2 = (twopoint[0].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            t1.Text   = "t₁";
            Canvas.SetLeft(t1, Hover1.X1 - 5);
            Canvas.SetBottom(t1, 5);

            Hover4.X1 = (twopoint[3].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            Hover4.X2 = (twopoint[3].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            t4.Text   = "t₄";
            Canvas.SetLeft(t4, Hover4.X1 - 5);
            Canvas.SetBottom(t4, 5);


            int oneStart  = (int)((twopoint[0].X) / 300 * sumChart.Count());
            int fourStart = (int)((twopoint[3].X) / 300 * sumChart.Count());

            var centerPoints = schart.Skip(oneStart + (fourStart - oneStart) / 4).Take((fourStart - oneStart) / 2);

            int startI = oneStart + (fourStart - oneStart) / 4;

            var centerValue = (centerPoints.Select(x => x.Y).Max() + centerPoints.Select(x => x.Y).Min()) / 2;

            double[] centDoble = centerPoints.Select(x => Math.Round(x.Y, 3)).ToArray();
            for (int i = 1; i < centDoble.Length; i++)
            {
                if ((centDoble[i - 1] >= centerValue && centDoble[i] <= centerValue) || (centDoble[i] >= centerValue && centDoble[i - 1] <= centerValue))
                {
                    twopoint[1] = sundata[i + startI];
                    break;
                }
            }
            for (int i = centDoble.Length - 1; i > 1; i--)
            {
                if ((centDoble[i - 1] >= centerValue && centDoble[i] <= centerValue) || (centDoble[i] >= centerValue && centDoble[i - 1] <= centerValue))
                {
                    twopoint[2] = sundata[i + startI];
                    break;
                }
            }



            Hover2.X1 = (twopoint[1].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            Hover2.X2 = (twopoint[1].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            t2.Text   = "t₂";
            Canvas.SetLeft(t2, Hover2.X1 - 5);
            Canvas.SetBottom(t2, 5);

            Hover3.X1 = (twopoint[2].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            Hover3.X2 = (twopoint[2].X - skiptime) / cuttime * chartCore.Width + chartCore.Left + 5;
            t3.Text   = "t₃";
            Canvas.SetLeft(t3, Hover3.X1 - 5);
            Canvas.SetBottom(t3, 5);

            initLine();

            getResult(twopoint, sundata);
        }