/// <summary> /// 构造函数 /// </summary> /// <param name="IsUseGNSSerSmoothRangeMethod"></param> /// <param name="ObsDataType"></param> /// <param name="WindowSize"></param> /// <param name="isWeighted"></param> /// <param name="FrequenceTypes"></param> /// <param name="isDeltaIonoFit"></param> /// <param name="OrderOfDeltaIonoPolyFit"></param> /// <param name="BufferSize"></param> /// <param name="ionoFitEpochCount"></param> /// <param name="SmoothRangeType"></param> /// <param name="IndicatedIonoDeltaFilePath"></param> public SingleFreqSelfIonoRangeReviser( bool IsUseGNSSerSmoothRangeMethod, SatObsDataType ObsDataType, int WindowSize, bool isWeighted, List <FrequenceType> FrequenceTypes, IonoDifferCorrectionType isDeltaIonoFit, int OrderOfDeltaIonoPolyFit, int BufferSize, int ionoFitEpochCount, SmoothRangeSuperpositionType SmoothRangeType, string IndicatedIonoDeltaFilePath) { this.Name = "单频电离层自我改正"; this.ObsDataType = ObsDataType; this.FrequenceTypes = FrequenceTypes; this.PhaseSmoothedRangeBuilderManager = new CarrierSmoothedRangeBuilderManager( IsUseGNSSerSmoothRangeMethod, WindowSize, isWeighted, isDeltaIonoFit, OrderOfDeltaIonoPolyFit, BufferSize, ionoFitEpochCount, SmoothRangeType) { IndicatedIonoDeltaFilePath = IndicatedIonoDeltaFilePath }; this.IsDualIonoFree = this.ObsDataType == SatObsDataType.IonoFreePhaseRange || this.ObsDataType == SatObsDataType.IonoFreeRange; this.Data = new BaseDictionary <SatelliteNumber, TimeNumeralWindowData>("数据", new Func <SatelliteNumber, TimeNumeralWindowData>(prn => new TimeNumeralWindowData(WindowSize) )); TableObjectStorages = new ObjectTableManager(); TableObjectStorage = TableObjectStorages.AddTable("模糊度概略距离值"); log.Info("启用:" + this.Name + " 对观测值进行改正!是否双频:" + IsDualIonoFree); }
/// <summary> /// 构造函数 /// </summary> /// <param name="isUseingApprovedMethod"></param> /// <param name="isIonoFreeDualFreq"></param> /// <param name="WindowSize"></param> /// <param name="isWeighted"></param> /// <param name="ionoDifferCorrectionType"></param> /// <param name="OrderOfDeltaIonoPolyFit"></param> /// <param name="BufferSize"></param> /// <param name="ionoFitEpochCount"></param> /// <param name="SmoothRangeType"></param> /// <param name="ionoDeltaFilePath"></param> public PhaseSmoothRangeReviser( bool isUseingApprovedMethod, bool isIonoFreeDualFreq, int WindowSize, bool isWeighted, IonoDifferCorrectionType ionoDifferCorrectionType, int OrderOfDeltaIonoPolyFit = 1, int BufferSize = 60, int ionoFitEpochCount = 30, SmoothRangeSuperpositionType SmoothRangeType = SmoothRangeSuperpositionType.窗口AK迭代, string ionoDeltaFilePath = null ) { this.Name = "载波相位平滑伪距改正观测值"; this.IsDualIonoFree = isIonoFreeDualFreq; this.IsNeedBuffer = IonoDifferCorrectionType.WindowPolyfit == ionoDifferCorrectionType || ionoDifferCorrectionType == IonoDifferCorrectionType.WindowWeightedAverage; this.PhaseSmoothedRangeBuilderManager = new CarrierSmoothedRangeBuilderManager( isUseingApprovedMethod, WindowSize, isWeighted, ionoDifferCorrectionType, OrderOfDeltaIonoPolyFit, BufferSize, ionoFitEpochCount, SmoothRangeType) { IndicatedIonoDeltaFilePath = ionoDeltaFilePath }; if (ionoDifferCorrectionType == IonoDifferCorrectionType.IndicatedFile && System.IO.File.Exists(ionoDeltaFilePath)) { ObjectTableReader reader = new ObjectTableReader(ionoDeltaFilePath); this.IonoDeltaTable = reader.Read(); var interval = IonoDeltaTable.GetInterval <Time>(); InputedIonoDelta = IonoDeltaTable.GetInteruptableData(new Func <Time, double>(key => key.SecondsOfWeek), interval * 5); } log.Info("初始化" + this.Name + " 对观测值进行改正!是否双频:" + IsDualIonoFree); }
/// <summary> /// 构造函数 /// </summary> /// <param name="isApprovedSmooth">是否采用GNSSer改进平滑算法</param> /// <param name="windowSize">窗口大小</param> /// <param name="SmoothRangeType"></param> /// <param name="IsWeighted"></param> /// <param name="IonoDifferCorrectionType">仅改进算法有效</param> /// <param name="IonoFitEpochCount"> </param> /// <param name="OrderOfDeltaIonoPolyFit">仅改进算法有效</param> /// <param name="BufferSize">仅改进算法有效</param> public NamedCarrierSmoothedRangeBuilderManager( bool isApprovedSmooth, int windowSize, bool IsWeighted, IonoDifferCorrectionType IonoDifferCorrectionType, int OrderOfDeltaIonoPolyFit = 1, int BufferSize = 60, int IonoFitEpochCount = 30, SmoothRangeSuperpositionType SmoothRangeType = SmoothRangeSuperpositionType.快速更新算法) { this.WindowSize = windowSize; this.IsApprovedSmooth = isApprovedSmooth; this.IsWeighted = IsWeighted; this.IonoDifferCorrectionType = IonoDifferCorrectionType; this.OrderOfDeltaIonoPolyFit = OrderOfDeltaIonoPolyFit; this.SmoothRangeType = SmoothRangeType; this.BufferSize = BufferSize; this.IonoFitEpochCount = IonoFitEpochCount; }
/// <summary> /// 构造函数 /// </summary> /// <param name="isApprovedSmooth">是否采用GNSSer改进平滑算法</param> /// <param name="windowSize">窗口大小</param> /// <param name="IsWeighted"></param> /// <param name="SmoothRangeType"></param> /// <param name="IsDeltaIonoCorrect">仅改进算法有效</param> /// <param name="OrderOfDeltaIonoPolyFit">仅改进算法有效</param> /// <param name="BufferSize">缓存大小</param> /// <param name="ionoFitEpochCount">电离层拟合历元数量,如果非滑动窗口,则与指定窗口相同</param> public CarrierSmoothedRangeBuilderManager( bool isApprovedSmooth, int windowSize, bool IsWeighted, IonoDifferCorrectionType IsDeltaIonoCorrect, int OrderOfDeltaIonoPolyFit = 2, int BufferSize = 60, int ionoFitEpochCount = 20, SmoothRangeSuperpositionType SmoothRangeType = SmoothRangeSuperpositionType.快速更新算法) : base(isApprovedSmooth, windowSize, IsWeighted, IsDeltaIonoCorrect, OrderOfDeltaIonoPolyFit, BufferSize, ionoFitEpochCount, SmoothRangeType ) { this.WindowSize = windowSize; }
/// <summary> /// 构造函数 /// </summary> /// <param name="IsUseGNSSerSmoothRangeMethod"></param> /// <param name="ObsDataType"></param> /// <param name="WindowSize"></param> /// <param name="isWeighted"></param> /// <param name="FrequenceType"></param> /// <param name="isDeltaIonoFit"></param> /// <param name="OrderOfDeltaIonoPolyFit"></param> /// <param name="BufferSize"></param> /// <param name="ionoFitEpochCount"></param> /// <param name="SmoothRangeType"></param> /// <param name="IndicatedIonoDeltaFilePath"></param> public SingleFreqSelfIonoRangeReviser(bool IsUseGNSSerSmoothRangeMethod, SatObsDataType ObsDataType, int WindowSize, bool isWeighted, FrequenceType FrequenceType, IonoDifferCorrectionType isDeltaIonoFit, int OrderOfDeltaIonoPolyFit, int BufferSize, int ionoFitEpochCount, SmoothRangeSuperpositionType SmoothRangeType, string IndicatedIonoDeltaFilePath) : this(IsUseGNSSerSmoothRangeMethod, ObsDataType, WindowSize, isWeighted, new List <FrequenceType>() { FrequenceType }, isDeltaIonoFit, OrderOfDeltaIonoPolyFit, BufferSize, ionoFitEpochCount, SmoothRangeType, IndicatedIonoDeltaFilePath) { }
/// <summary> /// 构造函数 /// </summary> /// <param name="windowSize"></param> /// <param name="IsWeighted"></param> /// <param name="IsDeltaIonoCorrect"></param> /// <param name="OrderOfDeltaIonoPolyFit"></param> /// <param name="SmoothRangeType"></param> public SmoothRangeWindow(int windowSize, bool IsWeighted = true, bool IsDeltaIonoCorrect = true, int OrderOfDeltaIonoPolyFit = 2, int bufferSize = 30, SmoothRangeSuperpositionType SmoothRangeType = SmoothRangeSuperpositionType.窗口AK迭代) : base(windowSize) { CurrentData = new RangePhasePair(0,0, 0); this.IsWeighted = IsWeighted; this.MaxKeyGap = 151; this.RawRangeStdDev = 2; this.SmoothRangeType = SmoothRangeType; this.PrevData = new RangePhasePair(0, 0, 0); }