public override void Init() { this.DataSource = new RinexFileObsDataSource(FilePath); this.Result = new ObjectTableStorage(); //最后结果 this.Result.Name = DataSource.SiteInfo.SiteName + namePostfix; // if (String.IsNullOrWhiteSpace(Result.Name)) { Result.Name = Path.GetFileNameWithoutExtension(FilePath); } this.BuffferStream = new BufferedStreamService <EpochInformation>(DataSource); //如果平滑伪距,则需要周跳探测 Revisers = new EpochInfoReviseManager(); if (IsSmoothRange) { var interval = DataSource.ObsInfo.Interval; int smoothEpochCount = (int)(600 / interval);//10 min windowData.MaxKeyGap = source.ObsInfo.Interval * 5;//已经包含着周跳探测中了 var CycleSlipDetector = CycleSlipDetectReviser.DefaultDoubleFrequencyDetector(); var rangeReviser = new PhaseSmoothRangeReviser(true, false, smoothEpochCount, true, IonoDifferCorrectionType.DualFreqCarrier); Revisers.AddProcessor(CycleSlipDetector); Revisers.AddProcessor(rangeReviser); } }
public CycleSlipDetectReviser CreateCsReviser() { var obsType = enumRadioControl1.GetCurrent <SatObsDataType>(); var types = enumCheckBoxControl1.GetSelected <CycleSlipDetectorType>(); return(CycleSlipDetectReviser.CreateCycleSlipReviser(obsType, types, Option)); }
public override void Init() { this.DataSource = new RinexFileObsDataSource(FilePath); var interval = DataSource.ObsInfo.Interval == 0? 30: DataSource.ObsInfo.Interval; this.WindowDataManager = new WindowDataManager <SatelliteNumber, Time, WeightedNumeral>(int.MaxValue / 2, interval * 3); //过程计算工具 this.BuffferStream = new BufferedStreamService <EpochInformation>(DataSource); //如果平滑伪距,则需要周跳探测 Revisers = new EpochInfoReviseManager(); if (IsSmoothRange) { int smoothEpochCount = (int)(600 / interval);//10 min windowData.MaxKeyGap = source.ObsInfo.Interval * 5;//已经包含着周跳探测中了 var CycleSlipDetector = CycleSlipDetectReviser.DefaultDoubleFrequencyDetector(); var rangeReviser = new PhaseSmoothRangeReviser(true, false, smoothEpochCount, true, IonoDifferCorrectionType.DualFreqCarrier); Revisers.AddProcessor(CycleSlipDetector); Revisers.AddProcessor(rangeReviser); } this.Result = new MultiSatPeriodRmsNumeralStorage(Path.GetFileName(FilePath) + "_MW最后结果"); //最后结果 this.Result.Name = DataSource.SiteInfo.SiteName; // if (String.IsNullOrWhiteSpace(Result.Name)) { Result.Name = Path.GetFileNameWithoutExtension(FilePath); } }
/// <summary> /// 单频平滑伪距 /// </summary> /// <param name="prn"></param> /// <param name="PhaseSmoothRangeBulider"></param> /// <param name="records"></param> private void DualFreqPhaseSmoothRange(SatelliteNumber prn, NamedCarrierSmoothedRangeBuilderManager PhaseSmoothRangeBulider) { ObjectTableStorage table = new ObjectTableStorage(); MemoRinexFileObsDataSource observations = new MemoRinexFileObsDataSource(this.ObsFile); CycleSlipDetectReviser cycleSlipDetectReviser = new CycleSlipDetectReviser(); while (observations.MoveNext()) { var current = observations.Current; cycleSlipDetectReviser.Revise(ref current); if (current.Contains(prn)) { table.NewRow(); table.AddItem("Epoch", current.ReceiverTime); var epochSat = current[prn]; var smootherP1 = PhaseSmoothRangeBulider.GetOrCreate("P"); var PS = smootherP1 .SetReset(epochSat.IsUnstable) .SetRawValue(current.ReceiverTime, epochSat.Combinations.IonoFreeRange.Value, epochSat.Combinations.IonoFreePhaseRange.Value, 0 ) .Build().Value; table.AddItem("P1", epochSat.FrequenceA.PseudoRange.Value); table.AddItem("P2", epochSat.FrequenceB.PseudoRange.Value); table.AddItem("PS", PS); } } BindDataSource(table); }