コード例 #1
0
        private void EvaluateExercice(string wavPath, CorrelationModel correlation)
        {
            var score  = 0;
            var random = new Random();
            var count  = 0;

            if (this.CurrentActivity.F0_exactEvaluated)
            {
                count++;
                this.CurrentActivity.F0_exact = correlation.PCC;
                score += (int)(correlation.PCC * 100d);
            }

            if (this.CurrentActivity.F0_stableEvaluated)
            {
                count++;
                this.CurrentActivity.F0_exact = correlation.CCC;
                score += (int)(correlation.CCC * 100d);
            }

            if (this.CurrentActivity.Intensite_stableEvaluated)
            {
                count++;
                this.CurrentActivity.F0_exact = correlation.CCCin;
                score += (int)(correlation.CCCin * 100d);
            }

            if (this.CurrentActivity.Courbe_f0_exacteEvaluated)
            {
                count++;
                this.CurrentActivity.F0_exact = correlation.PCC;
                score += (int)(correlation.PCC * 100d);
            }


            if (this.CurrentActivity.Duree_exacteEvaluated)
            {
                count++;
                var value = CalculateTimeLength(wavPath);
                this.CurrentActivity.Duree_exacte = value;
                score += ScoreProvider.EvaluateTimeLength(this.CurrentActivity.Duree_expected, value);
            }

            if (this.CurrentActivity.JitterEvaluated)
            {
                count++;
                var value = CalculateJitter(wavPath);
                this.CurrentActivity.Jitter = value;
                score += ScoreProvider.EvaluateJitter(value);
            }

            if (count == 0)
            {
                return;
            }

            score = score / count;

            string imagePath = ScoreProvider.ImageResult(score);

            Task.Factory.StartNew(() =>
            {
                //Update Text on the UI thread
                Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Input,
                                                           new Action(() => {
                    var splash = new SplashScreen(imagePath);
                    splash.Show(false);
                    splash.Close(new TimeSpan(0, 0, 5));
                }));
            });
        }
コード例 #2
0
ファイル: SoundAnalyser.cs プロジェクト: M1ch3lG4gn0n/MyOrtho
        public CorrelationModel CalculateCorrelation(ICollection <DataLineItem> expected, ICollection <DataLineItem> exercise)
        {
            foreach (var lineItem in expected)
            {
                x.Add(lineItem.Pitch);
                xin.Add(lineItem.Intensity);
            }
            foreach (var lineItem in exercise)
            {
                y.Add(lineItem.Pitch);
                yin.Add(lineItem.Intensity);
            }

            double[] Xsample   = new double[x.Count];
            double[] Ysample   = new double[y.Count];
            double[] Xinsample = new double[xin.Count];
            double[] Yinsample = new double[yin.Count];

            int lenght = 0;

            if (x.Count > y.Count)
            {
                lenght = y.Count;
            }
            else
            {
                lenght = x.Count;
            }



            for (int i = 0; i < lenght; i++)
            {
                Xsample[i]   = Convert.ToDouble(x[i]);
                Ysample[i]   = Convert.ToDouble(y[i]);
                Xinsample[i] = Convert.ToDouble(xin[i]);
                Yinsample[i] = Convert.ToDouble(yin[i]);
            }

            // calcul de la moyenne
            X_moy   = CalculerMoyenne(x);
            Xin_moy = CalculerMoyenne(xin);
            y_moy   = CalculerMoyenne(y);
            yin_moy = CalculerMoyenne(yin);

            var    corr = ComputeCoeff(Xsample.ToArray(), Ysample.ToArray());
            double cov  = ComputeCovariance(Xsample, Ysample);

            Console.Out.WriteLine("correlation est: " + corr + "\n");
            Console.Out.WriteLine("covariance est: " + cov + "\n");

            for (int i = 0; i < x.Count; i++)
            {
                moyX_Xbar     += Math.Pow((Convert.ToDouble(x[i]) - X_moy), 2);
                moyXin_Xinbar += Math.Pow((Convert.ToDouble(xin[i]) - Xin_moy), 2);
            }

            // ********calcul de X_var

            x_var   = 1.0 / ((x.Count - 1)) * moyX_Xbar;
            xin_var = 1.0 / ((xin.Count - 1)) * moyXin_Xinbar;
            Console.Out.WriteLine(" xin-var: " + xin_var + "\n");

            // calcul de la somme de (y-ymoy)*2
            for (int i = 0; i < y.Count; i++)
            {
                moyY_Ybar     += Math.Pow((Convert.ToDouble(y[i]) - y_moy), 2);
                moyYin_Yinbar += Math.Pow((Convert.ToDouble(yin[i]) - yin_moy), 2);
            }

            // calcul de y_var

            y_var   = 1.0 / ((y.Count - 1)) * moyY_Ybar;
            yin_var = 1.0 / ((yin.Count - 1)) * moyYin_Yinbar;

            for (int i = 0; i < lenght; i++)
            {
                vect.Add((Convert.ToDouble(x[i]) - X_moy) * (Convert.ToDouble(y[i]) - y_moy));
                vectin.Add(((Convert.ToDouble(xin[i]) - Xin_moy) * ((Convert.ToDouble(yin[i]) - yin_moy))));
            }

            for (int i = 0; i < lenght; i++)
            {
                covariance   += ((Convert.ToDouble(x[i]) - X_moy) * (Convert.ToDouble(y[i]) - y_moy));
                covariancein += ((Convert.ToDouble(xin[i]) - Xin_moy) * (Convert.ToDouble(yin[i]) - yin_moy));
            }
            covariance   = covariance / (y.Count - 1);
            covariancein = covariancein / (yin.Count - 1);

            //double moy=calculerMoyenne(vect);
            //covariance = ;
            Console.Out.WriteLine("covariance: " + covariance + "\n");
            Console.Out.WriteLine("covariancein: " + covariancein + "\n");

            CCC   = (2 * covariance) / (x_var + y_var + (Math.Pow((X_moy - y_moy), 2)));
            PCC   = covariance / ((Math.Sqrt(x_var)) * (Math.Sqrt(y_var)));
            CCCin = (2 * covariancein) / (xin_var + yin_var + (Math.Pow((Xin_moy - yin_moy), 2)));
            PCCin = covariancein / ((Math.Sqrt(xin_var)) * (Math.Sqrt(yin_var)));

            var results = new CorrelationModel
            {
                CCC   = this.CCC,
                PCC   = this.PCC,
                CCCin = this.CCCin,
                PCCin = this.PCCin
            };


            Console.Out.WriteLine("CCC = " + CCC + "   PCC = " + PCC + " CCCin = " + CCCin + "   PCCin = " + PCCin);
            return(results);
        }