Ejemplo n.º 1
0
        /// <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;
        }
Ejemplo n.º 2
0
 /// <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;
 }