public static SpeakerViewModel GetWorstSpeaker(List <SpeakerViewModel> speakers) { var worstSpeaker = new SpeakerViewModel(); // речь худшего диктора, массив из 7 элементов var bestW = double.NegativeInfinity; // лучшая разборчивость foreach (var speaker in speakers) // идем по всем дикторам { var w = Intelligibility.GetW(speaker.Speech, FormantNoiseLevels, k, deltaA, 0.0); if (w > bestW) { bestW = w; worstSpeaker = speaker; // если разборчивость диктора выше остальных, он становится худшим } } return(worstSpeaker); }
/// <summary> /// Gets the QF or w. /// </summary> /// <returns>The QF or w.</returns> /// <param name="from">диапазон для q</param> /// <param name="to">диапазон для q</param> /// <param name="neededW">разборчивость, которую мы хотим обеспечить</param> public static int GetQForW(int from, int to, double neededW) { // В качестве Lречь берём усреднённый спектр речи var Lspeech = AverageSpeechLevels; //А в качестве Lшума формантоподобную помеху var Lnoise = FormantNoiseLevels; //Рассчитываем как и в баке W в зависимости от разных q С УСРЕДНЕННЫМ СПЕКТРОМ for (int q = from; q < to; q++) { var w = Intelligibility.GetW(Lspeech, Lnoise, k, deltaA, q); if (w >= neededW) { // прога сказала, что к этому значениию W отлично подходит вот это q. // то есть выбрало из 60 всего одно. return(q); } } throw new ArgumentException("There is no q for given W"); }