예제 #1
0
        /// <summary>
        /// 单频 默认周跳探测器
        /// </summary>
        /// <param name="Option">GNSS数据处理选项</param>
        /// <param name="isRevered">是否逆序探测,如果是,探测时将不会使用已有周跳信息</param>
        /// <returns></returns>
        public static CycleSlipDetectReviser DefaultSingeFrequencyDetector(GnssProcessOption Option, bool isRevered = false)
        {
            var isUseRecoredCsInfo         = !isRevered && Option.IsUsingRecordedCycleSlipInfo;
            CycleSlipDetectReviser reviser = new CycleSlipDetectReviser();

            if (Option.BufferSize < 200)
            {
                reviser.Add(new HighDifferSlipDetector(Option)
                {
                    IsUsingRecordedCsInfo = isUseRecoredCsInfo
                });
                reviser.Add(new AverageDetector(Option)
                {
                    IsUsingRecordedCsInfo = isUseRecoredCsInfo
                });

                // reviser.Add(new LsPolyFitDetector(Option) { IsUsingRecordedCsInfo = isUseRecoredCsInfo });

                reviser.Add(new GreyPolyFitDetector(Option)
                {
                    IsUsingRecordedCsInfo = isUseRecoredCsInfo
                });
            }
            return(reviser);
        }
예제 #2
0
        public static CycleSlipDetectReviser DefaultDoubleFrequencyDetector()
        {
            CycleSlipDetectReviser reviser = new CycleSlipDetectReviser();

            //reviser.Add(new HigherDifferCycleSlipRemoveor(source, PositionOption.SatelliteTypes));
            reviser.Add(new LiCycleSlipDetector(5, false));
            reviser.Add(new MwCycleSlipDetector(5, 8.6, false));
            return(reviser);
        }
예제 #3
0
        /// <summary>
        /// GNSSer 默认周跳探测器。
        /// </summary>
        /// <param name="isRevered">是否逆序探测,如果是,探测时将不会使用已有周跳信息</param>
        /// <returns></returns>
        public static CycleSlipDetectReviser DefaultTripleFrequencyDetector(bool isRevered = false)
        {
            // var isUseRecoredCsInfo = !isRevered && Option.IsUsingRecordedCycleSlipInfo;
            CycleSlipDetectReviser reviser = new CycleSlipDetectReviser();

            //reviser.Add(new TriFreqMwCycleSlipDetector());
            reviser.Add(new TriFreqGF1BaseOnPhaseCycleSlipDetector());
            reviser.Add(new TriFreqGF2BaseOnPhaseCycleSlipDetector());
            return(reviser);
        }
예제 #4
0
        /// <summary>
        /// GNSSer 默认周跳探测器。
        /// </summary>
        /// <param name="Option">GNSS数据处理选项</param>
        /// <param name="isRevered">是否逆序探测,如果是,探测时将不会使用已有周跳信息</param>
        /// <returns></returns>
        public static CycleSlipDetectReviser DefaultDoubleFrequencyDetector(GnssProcessOption Option, bool isRevered = false)
        {
            var isUseRecoredCsInfo = !isRevered && Option.IsUsingRecordedCycleSlipInfo;
            //if (Option == null) { Option = new GnssProcessOption(); }
            CycleSlipDetectReviser reviser = new CycleSlipDetectReviser();

            //reviser.Add(new HigherDifferCycleSlipRemoveor(source, PositionOption.SatelliteTypes));
            reviser.Add(new LiCycleSlipDetector(Option.MaxBreakingEpochCount, isUseRecoredCsInfo));
            reviser.Add(new MwCycleSlipDetector(Option.MaxBreakingEpochCount, Option.MaxDifferValueOfMwCs, isUseRecoredCsInfo));
            return(reviser);
        }
예제 #5
0
        /// <summary>
        /// 创建周跳探测的矫正器
        /// </summary>
        /// <param name="obsType"></param>
        /// <param name="types"></param>
        /// <param name="Option">GNSS数据处理选项</param>
        /// <param name="isRevered">是否逆序探测,如果是,探测时将不会使用已有周跳信息</param>
        /// <returns></returns>
        public static CycleSlipDetectReviser CreateCycleSlipReviser(SatObsDataType obsType, List <CycleSlipDetectorType> types, GnssProcessOption Option, bool isRevered = false)
        {
            bool isUseRecorded             = !isRevered && Option.IsUsingRecordedCycleSlipInfo;
            CycleSlipDetectReviser reviser = new CycleSlipDetectReviser();

            foreach (var type in types)
            {
                reviser.Add(Create(obsType, type, Option, isRevered));
            }
            return(reviser);
        }
예제 #6
0
        /// <summary>
        /// 获取默认的周跳探测标记器。
        /// </summary>
        /// <param name="Context"></param>
        /// <param name="Option"></param>
        /// <returns></returns>
        public static EpochInfoReviseManager GetDefaultCycleSlipDetectReviser(DataSourceContext Context, GnssProcessOption Option)
        {
            EpochInfoReviseManager processer = new EpochInfoReviseManager(Context, Option);

            #region 周跳管理器,这个应该放在最后,以免有的数据漏标或错标

            //需要一个维护卫星状态的类,避免新卫星受老数据的影响
            if (Option.IsCycleSlipDetectionRequired)
            {
                //优先考虑周跳探测器开关
                //若无,或全关,则选择默认。
                if (Option.CycleSlipDetectSwitcher.Count != 0 || Option.CycleSlipDetectSwitcher.Values.Count(m => !m) != 0)
                {
                    CycleSlipDetectReviser resise = new CycleSlipDetectReviser();
                    foreach (var item in Option.CycleSlipDetectSwitcher)
                    {
                        if (item.Value)
                        {
                            var obj = CycleSlipDetectReviser.Create(item.Key, Option);
                            resise.Add(obj);
                        }
                    }
                    processer.AddProcessor(resise);
                    log.Info("采用了指定的周跳探测方法。");
                }

                if (processer.Precessors.Count == 0)
                {
                    //首先根据观测类型设置周跳探测器
                    if (Option.ObsDataType == SatObsDataType.PhaseA ||
                        Option.ObsDataType == SatObsDataType.PhaseRangeA ||
                        Option.ObsDataType == SatObsDataType.PhaseB ||
                        Option.ObsDataType == SatObsDataType.PhaseRangeB ||
                        Option.ObsDataType == SatObsDataType.PhaseC ||
                        Option.ObsDataType == SatObsDataType.PhaseRangeC)
                    {
                        if (Option.GnssSolverType == GnssSolverType.非差非组合PPP)
                        {
                            processer.AddProcessor(CycleSlipDetectReviser.DefaultDoubleFrequencyDetector(Option));

                            log.Info("采用了双频默认周跳探测方法。");
                        }
                        else
                        {
                            processer.AddProcessor(CycleSlipDetectReviser.DefaultSingeFrequencyDetector(Option));
                            log.Info("采用了单频默认周跳探测方法。");
                        }
                    }
                    else if (Option.MinFrequenceCount >= 2)
                    {
                        //throw new NotSupportedException("周跳探测不应该出现在这里。");
                        processer.AddProcessor(CycleSlipDetectReviser.DefaultDoubleFrequencyDetector(Option));

                        log.Info("采用了双频默认周跳探测方法。");
                    }
                    if (Option.ApproxDataType == SatApproxDataType.ApproxPhaseRangeOfTriFreq || Option.ApproxDataType == SatApproxDataType.ApproxPseudoRangeOfTriFreq)
                    {
                        processer.Clear();
                        processer.AddProcessor(CycleSlipDetectReviser.DefaultTripleFrequencyDetector());
                        log.Info("采用了三频默认周跳探测方法。");
                    }
                }
            }

            #endregion

            return(processer);
        }