Ejemplo n.º 1
0
        public void SimplyMeasurement_Ok()
        {
            //Arrange
            Measurement     m  = new Measurement();
            DataMeasurement dM = new DataMeasurement();
            Mic             c1 = new Mic();
            Mic             c2 = new Mic();

            FRF m1 = new FRF();
            FRF m2 = new FRF();

            FFT m3 = new FFT();
            FFT m4 = new FFT();


            //Act
            c1.Time     = 0;
            c1.Pressure = -1.47F;

            c2.Time     = 0;
            c2.Pressure = 0.59F;

            m1.Frequency     = 0;
            m1.Amplification = 0;

            m2.Frequency     = 0;
            m2.Amplification = 0;

            m3.Frequency = 0;
            m3.Amplitude = 0;

            m4.Frequency = 0;
            m4.Amplitude = 0;

            dM.Id = 1;
            dM.C1 = c1;
            dM.C2 = c2;

            dM.M1 = m1;
            dM.M2 = m2;
            dM.M3 = m3;
            dM.M4 = m4;


            m.Id   = new System.Guid();
            m.Date = new System.DateTime(2019, 04, 08, 14, 45, 34);

            m.Temperature         = 15;
            m.AtmosphericPressure = 0;

            m.Measurements.Add(dM);

            //Assert
            Assert.AreEqual(1, m.Measurements.Count);
            Assert.AreEqual(0, m.Measurements.First().M3.Frequency);
            Assert.AreEqual(-1.47F, m.Measurements.First().C1.Pressure);
        }
Ejemplo n.º 2
0
            private List <FRF[]> GettingRegionReference(FRF[] vClose_ref)
            {
                List <FRF[]> _target = new List <FRF[]>();

                for (int i = 0; i < FrequencyRange.Count; i++)
                {
                    List <FRF> aux = new List <FRF>();

                    for (int data = 0; data < vClose_ref.Length; data++)
                    {
                        if (vClose_ref[data].Freq >= FrequencyRange[i].MinValue && vClose_ref[data].Freq <= FrequencyRange[i].MaxValue)
                        {
                            FRF target = new FRF();
                            target = vClose_ref[data];
                            aux.Add(target);
                        }
                    }
                    _target.Add((FRF[])aux.ToArray().Clone());
                }

                return(_target);
            }
        private double CostFucntion(double[] parameters)
        {
            FRF[] Struct_sim = new FRF[FormMain.Struct_ref.Length];

            List <Mode> Modes = new List <Mode>();

            Modes.Add(new Mode {
                Freq = VLoopModes[0].Freq,
                Zeta = VLoopModes[0].Zeta,
                Mass = VLoopModes[0].Mass
            });

            for (int i = 0; i < 3; i++)
            {
                Mode mode = new Mode();
                mode.Freq = parameters[0 + i * 3];
                mode.Zeta = parameters[1 + i * 3];
                mode.Mass = parameters[2 + i * 3];
                Modes.Add(mode);
            }

            double errorMag = 0;
            double errorPhs = 0;

            for (int i = 0; i < FormMain.Struct_ref.Length; i++)
            {
                Complex Res = Tool.GetStructureResponse(FormMain.Struct_ref[i].Freq, Modes, "Velocity");
                Struct_sim[i] = new FRF(FormMain.Struct_ref[i].Freq, Res);

                if (Struct_sim[i].Freq > RangeEvaluation.MinValue && Struct_sim[i].Freq < RangeEvaluation.MaxValue)
                {
                    errorMag = Math.Pow(Struct_sim[i].Mag - FormMain.Struct_ref[i].Mag, 2) + errorMag;
                    errorPhs = Math.Pow(Struct_sim[i].Phs - FormMain.Struct_ref[i].Phs, 2) + errorPhs;
                }
            }
            return(errorMag);
        }
        //>>>>Here RUN Gradient Descent
        private void GradientDescentOptimization()
        {
            IsThereDataAvailable = false;
            double[] InitialParameters = new double[(VLoopModes.Count - 1) * 3];
            InitialParameters = GettingInitialValues();

            double[] LearningRate = new double[InitialParameters.Length];

            for (int i = 0; i < InitialParameters.Length / 3; i++)
            {
                LearningRate[0 + i * 3] = TryToDouble(textBoxLRateFreq.Text);
                LearningRate[1 + i * 3] = TryToDouble(textBoxLRateZeta.Text);
                LearningRate[2 + i * 3] = TryToDouble(textBoxLRateMass.Text);
            }

            GD = new GradientDescent(
                InitialParameters,
                LearningRate,
                (int)TryToDouble(textBoxIterations.Text)
                );

            GD.GD_Settings.Delta = TryToDouble(textBoxDelta.Text);
            GD.GD_Settings.Error = new Range {
                MaxValue = 0.0001, MinValue = 0
            };
            GD.Solve(CostFucntion);

            #region Writting Results
            textBoxOPFreq.Clear();
            textBoxOPZeta.Clear();
            textBoxOPMass.Clear();
            for (int i = 0; i < GD.OPTResult.Parameters.Length / 3; i++)
            {
                textBoxOPFreq.Text = textBoxOPFreq.Text + "   " + GD.OPTResult.Parameters[0 + i * 3].ToString("00.000");
                textBoxOPZeta.Text = textBoxOPZeta.Text + "   " + GD.OPTResult.Parameters[1 + i * 3].ToString("0.000");
                textBoxOPMass.Text = textBoxOPMass.Text + "   " + GD.OPTResult.Parameters[2 + i * 3].ToString("0.000");
            }
            textBoxOPError.Text = GD.OPTResult.target[0].ToString();
            #endregion

            IsThereDataAvailable = true;
            PlottingGAData();

            newVLoopModes = new List <Mode>();
            newVLoopModes.Add(new Mode
            {
                Freq = VLoopModes[0].Freq,
                Zeta = VLoopModes[0].Zeta,
                Mass = VLoopModes[0].Mass
            });

            for (int i = 0; i < InitialParameters.Length / 3; i++)
            {
                Mode mode = new Mode();
                mode.Freq = GD.OPTResult.Parameters[0 + i * 3];
                mode.Zeta = GD.OPTResult.Parameters[1 + i * 3];
                mode.Mass = GD.OPTResult.Parameters[2 + i * 3];
                newVLoopModes.Add(mode);
            }


            FRF[] Struct_sim = new FRF[FormMain.Struct_ref.Length];
            for (int i = 0; i < FormMain.Struct_ref.Length; i++)
            {
                Complex Res = Tool.GetStructureResponse(FormMain.Struct_ref[i].Freq, newVLoopModes, "Velocity");
                Struct_sim[i] = new FRF(FormMain.Struct_ref[i].Freq, Res);
            }

            FormMain.DrawResult(Struct_sim);
        }