Пример #1
0
        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为单位
            }
        }
Пример #2
0
        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++;
            }
        }
Пример #3
0
        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;
            }
        }