/// <summary> /// Создать новый объект EMD /// </summary> /// <param name="interpolation"></param> /// <param name="stopCondition"></param> /// <param name="stopConditionSeparate"></param> /// <returns></returns> public EmDecomposition EmdFactoryMethod(EnumInterpolation interpolation = EnumInterpolation.КубическийСплайн, EnumStopCondition stopCondition = EnumStopCondition.КоличествоИтерацийИлиЭкстремумов, EnumStopConditionSeparate stopConditionSeparate = EnumStopConditionSeparate.КоличествоИтерацийИлиДостигнутаТочность) { EmDecomposition emd; Func<IList<double>, IList<double>, IList<double>, IList<double>> _Interpolation; IStopCondition _StopConditionSeparate; IStopCondition _StopCondition; //Создаем метод интерполяции switch (interpolation) { case EnumInterpolation.КубическийСплайн: _Interpolation = MathHelper.Interpolation_3; break; default: //throw new NotImplementedException(); _Interpolation = MathHelper.Interpolation_3; break; } // Создаем критерий останова _StopCondition = HhtCreator.StopCondition(stopCondition); // Создаем критерий останова для процесса отсеивания _StopConditionSeparate = HhtCreator.StopConditionSeparate(stopConditionSeparate); //emd = new EmdImplementationClass1(Interpolation, StopCriterion, StopSiftCriterion); emd = new EmDecomposition_2() { InterpolationMethod = _Interpolation, StopConditionSeparate = _StopConditionSeparate, StopCondition = _StopCondition }; return emd; }
/// <summary> /// Создаем критерий останова для процесса отсеивания /// </summary> /// <param name="stopConditionSeparate">Критерий останова для процесса отсеивания</param> /// <returns>Критерий останова для процесса отсеивания</returns> public static IStopCondition StopConditionSeparate(EnumStopConditionSeparate stopConditionSeparate = EnumStopConditionSeparate.КоличествоИтерацийИлиДостигнутаТочность) { IStopCondition _StopConditionSeparate; //Создаем критерий останова для процесса отсеивания switch (stopConditionSeparate) { case EnumStopConditionSeparate.ДостигнутаТочностьОтсеивания: _StopConditionSeparate = new StopConditionSeparate_1() { StopConditionType = (int)EnumStopConditionSeparate.ДостигнутаТочностьОтсеивания, //Задаем максимальное количество внутренних итераций отсеивания (определение высокочастотной составляющей) //J = 8; J = 0, //Задаем максимальное количество внутренних итераций отсеивания (определение высокочастотной составляющей) //Нормализованная квадратичная разность между двумя последовательными операциями приближения S = 0.001, dS = 0.001 }; break; case EnumStopConditionSeparate.КоличествоИтерацийИлиДостигнутаТочность: _StopConditionSeparate = new StopConditionSeparate_2() { StopConditionType = (int)EnumStopConditionSeparate.КоличествоИтерацийИлиДостигнутаТочность, //Задаем максимальное количество внутренних итераций отсеивания (определение высокочастотной составляющей) //J = 8; J = 8, //Задаем максимальное количество внутренних итераций отсеивания (определение высокочастотной составляющей) //Нормализованная квадратичная разность между двумя последовательными операциями приближения S = 0.001, dS = 0.001 }; break; default: //EnumStopCondition.КоличествоИтераций: _StopConditionSeparate = new StopCondition() { StopConditionType = (int)EnumStopCondition.КоличествоИтераций, //Задаем максимальное количество внутренних итераций отсеивания (определение высокочастотной составляющей) //J = 8; J = 8, //Задаем максимальное количество внутренних итераций отсеивания (определение высокочастотной составляющей) //Нормализованная квадратичная разность между двумя последовательными операциями приближения S = 0 }; break; } return _StopConditionSeparate; }