private void GetEpochCoeffOfDesign(double[][] A, EpochInformation epoch, int IndexOfwetTropName) { foreach (var prn in epoch.EnabledSats)// 一颗卫星2行 { var receiverClockName = this.GnssParamNameBuilder.GetReceiverClockParamName(epoch); int IndexOfreceiverClockName = ParamNames.IndexOf(receiverClockName); var satelliteName = this.GnssParamNameBuilder.GetSatClockParamName(prn.Prn); int IndexOfsatelliteName = ParamNames.IndexOf(satelliteName); var SiteSatAmbiguityName = this.GnssParamNameBuilder.GetSiteSatAmbiguityParamName(prn); int IndexOfSiteSatAmbiguityName = ParamNames.IndexOf(SiteSatAmbiguityName); int row = IndexOfSiteSatAmbiguityName - BaseCount;//行的索引号 int next = row + ObsCount; double wetMap = epoch[prn.Prn].WetMap; double[] A1 = A[row]; double[] A2 = A[next]; if (IndexOfreceiverClockName != 0) { A1[IndexOfreceiverClockName] = 1.0; //接收机钟差对应的距离 = clkError * 光速 A2[IndexOfreceiverClockName] = 1.0; //接收机钟差对应的距离 = clkError * 光速 } A1[IndexOfwetTropName] = wetMap; A1[IndexOfsatelliteName] = -1.0;//卫星钟差对应的距离 = clkError * 光速 A2[IndexOfwetTropName] = wetMap; A2[IndexOfsatelliteName] = -1.0; //卫星钟差对应的距离 = clkError * 光速 A2[IndexOfSiteSatAmbiguityName] = 1; //模糊度,保持以m为单位 } }
private void GetEpochObservationVector(Vector L, EpochInformation epoch) { Vector rangeVector = epoch.GetAdjustVector(SatObsDataType.IonoFreeRange); Vector phaseVector = null; if (this.Option.IsAliningPhaseWithRange) { phaseVector = epoch.GetAdjustVector(SatObsDataType.AlignedIonoFreePhaseRange, true); } else { phaseVector = epoch.GetAdjustVector(SatObsDataType.IonoFreePhaseRange, true); } int index = 0; foreach (var item in epoch.EnabledSats) { var SiteSatAmbiguityName = this.GnssParamNameBuilder.GetSiteSatAmbiguityParamName(item); int IndexOfSiteSatAmbiguityName = ParamNames.IndexOf(SiteSatAmbiguityName); int row = IndexOfSiteSatAmbiguityName - BaseCount;//行的索引号 int next = row + ObsCount; L[row] = rangeVector[index]; L[next] = phaseVector[index]; index++; } }
private void InverseWeightOfEpoch(double[] inverseWeightVector, double invFactorOfRange, double invFactorOfPhase, EpochInformation epoch) { foreach (var prn in epoch.EnabledPrns) { EpochSatellite e = epoch[prn]; var SiteSatAmbiguityName = this.GnssParamNameBuilder.GetSiteSatAmbiguityParamName(e); int IndexOfSiteSatAmbiguityName = ParamNames.IndexOf(SiteSatAmbiguityName); int row = IndexOfSiteSatAmbiguityName - BaseCount;//行的索引号 int next = row + ObsCount; double inverseWeightOfSat = SatWeightProvider.GetInverseWeightOfRange(e); inverseWeightVector[row] = inverseWeightOfSat * invFactorOfRange; inverseWeightVector[next] = inverseWeightOfSat * invFactorOfPhase; } }