/// <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); }
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); }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// 构造函数,采用GNSS计算配置构造。 /// </summary> /// <param name="Option"></param> public ReverseCycleSlipeReviser(GnssProcessOption Option) { this.Name = "逆序周跳探测器"; if (Option.MinFrequenceCount == 1) { Detector = (CycleSlipDetectReviser.DefaultSingeFrequencyDetector(Option, true)); } else if (Option.MinFrequenceCount == 2) { Detector = CycleSlipDetectReviser.DefaultDoubleFrequencyDetector(Option, true); } else { Detector = CycleSlipDetectReviser.DefaultTripleFrequencyDetector(true); } this.MinNum = 10; }
/// <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); }
/// <summary> /// 构造函数,采用GNSS计算配置构造。 /// </summary> /// <param name="Option"></param> public ReverseCycleSlipeReviser(SatObsDataType obsType, List <CycleSlipDetectorType> types, GnssProcessOption Option) { Detector = CycleSlipDetectReviser.CreateCycleSlipReviser(obsType, types, Option, true); this.MinNum = 10; }