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)); })); }); }
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); }