- Timestamp:
- Aug 28, 2026, 9:23:41 PM (11 days ago)
- Location:
- trunk/BNC/src
- Files:
-
- 5 edited
-
RTCM3/RTCM3coDecoder.cpp (modified) (2 diffs)
-
RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp (modified) (7 diffs)
-
ephemeris.cpp (modified) (3 diffs)
-
satObs.cpp (modified) (9 diffs)
-
satObs.h (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp
r10994 r10998 314 314 orbCorr._dotXr[1] = _clkOrb.Sat[ii].Orbit.DotDeltaAlongTrack; 315 315 orbCorr._dotXr[2] = _clkOrb.Sat[ii].Orbit.DotDeltaCrossTrack; 316 orbCorr._rtcmSsr = (_type == RTCMssr || _type == RTCMnewssr); 316 orbCorr._ssrFormat = (_type == RTCMssr) ? ssrRtcmOld : 317 (_type == RTCMnewssr) ? ssrRtcmNew : ssrUnknown; 317 318 318 319 _orbCorrections[_lastTime].append(orbCorr); … … 502 503 satPhaseBias._time = _lastTime; 503 504 satPhaseBias._updateInt = _phaseBias.UpdateInterval; 505 satPhaseBias._ssrFormat = (_type == RTCMssr) ? ssrRtcmOld : 506 (_type == RTCMnewssr) ? ssrRtcmNew : ssrUnknown; 504 507 satPhaseBias._dispBiasConstistInd = _phaseBias.DispersiveBiasConsistencyIndicator; 505 508 satPhaseBias._MWConsistInd = _phaseBias.MWConsistencyIndicator; -
trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp
r10997 r10998 353 353 354 354 for (s = 0; s < CLOCKORBIT_SATNUM; ++s) { 355 /* Extended Satellite Phase Bias Message 356 The Widelane Signal Group Indicator shall be releated for every satellite and signal 357 included in the corresponding Satellite Phase Bias Message in the same order. The 358 Extended Satellite Phase Bias Message shall be sent BEFORE the corresponding 359 Satellite Phase Bias Message */ 360 if (b->NumberOfSat[s] && (type == PBEXTTYPE_AUTO || type == corType[s][COBOFS_PBEXT])) { 361 INITBLOCK 362 E_RTCM_MESSAGE_NUMBER(corType[s][COBOFS_PBEXT]) 363 switch (s) { 364 case CLOCKORBIT_SATGPS: 365 case CLOCKORBIT_SATGALILEO: 366 case CLOCKORBIT_SATQZSS: 367 case CLOCKORBIT_SATSBAS: 368 case CLOCKORBIT_SATBDS: 369 E_GPS_EPOCH_TIME(b->EpochTime[s]) 370 break; 371 case CLOCKORBIT_SATGLONASS: 372 E_GLONASS_EPOCH_TIME(b->EpochTime[s]) 373 break; 374 } 375 E_SSR_IOD(b->SSRIOD) 376 E_SSR_PROVIDER_ID(b->SSRProviderID) 377 E_SSR_SOLUTION_ID(b->SSRSolutionID) 378 E_EXTENDED_PHASE_BIAS_ID(b->ExtendedPhaseBiasPropertyID) 379 for (i = satoffset[s]; i < satoffset[s] + b->NumberOfSat[s]; ++i) { 380 for (j = 0; j < b->Sat[i].NumberOfPhaseBiases; ++j) { 381 E_WIDE_LANE_INDICATOR(b->Sat[i].Biases[j].WidelaneGroupIndicator) 382 } 383 } 384 ENDBLOCK 385 } 386 /* Satellite Phase Bias Message */ 355 /* Satellite Phase Bias Message */ 387 356 if (b->NumberOfSat[s] && (type == PBTYPE_AUTO || type == corType[s][COBOFS_PBIAS])) { 388 357 INITBLOCK … … 422 391 ENDBLOCK 423 392 } 393 /* Extended Satellite Phase Bias Message 394 The Widelane Signal Group Indicator shall be releated for every satellite and signal 395 included in the corresponding Satellite Phase Bias Message in the same order. The 396 Extended Satellite Phase Bias Message shall be sent BEFORE the corresponding 397 Satellite Phase Bias Message VICE VERSA??*/ 398 if (b->NumberOfSat[s] && (type == PBEXTTYPE_AUTO || type == corType[s][COBOFS_PBEXT])) { 399 INITBLOCK 400 E_RTCM_MESSAGE_NUMBER(corType[s][COBOFS_PBEXT]) 401 switch (s) { 402 case CLOCKORBIT_SATGPS: 403 case CLOCKORBIT_SATGALILEO: 404 case CLOCKORBIT_SATQZSS: 405 case CLOCKORBIT_SATSBAS: 406 case CLOCKORBIT_SATBDS: 407 E_GPS_EPOCH_TIME(b->EpochTime[s]) 408 break; 409 case CLOCKORBIT_SATGLONASS: 410 E_GLONASS_EPOCH_TIME(b->EpochTime[s]) 411 break; 412 } 413 E_SSR_IOD(b->SSRIOD) 414 E_SSR_PROVIDER_ID(b->SSRProviderID) 415 E_SSR_SOLUTION_ID(b->SSRSolutionID) 416 E_EXTENDED_PHASE_BIAS_ID(b->ExtendedPhaseBiasPropertyID) 417 for (i = satoffset[s]; i < satoffset[s] + b->NumberOfSat[s]; ++i) { 418 for (j = 0; j < b->Sat[i].NumberOfPhaseBiases; ++j) { 419 E_WIDE_LANE_INDICATOR(b->Sat[i].Biases[j].WidelaneGroupIndicator) 420 } 421 } 422 ENDBLOCK 423 } 424 424 } 425 425 return ressize; … … 561 561 /* COBOFS_* are per-instance (set in setCorType()), not compile-time 562 562 constants, so this has to be an if/else-if chain rather than a switch. */ 563 if (kind == COBOFS_PBIAS) { 563 if (kind == COBOFS_PBIAS) { 564 564 if (!pb) 565 565 return GCOBR_NOPHASEBIASPARAMETER; 566 566 pb->messageType = type; 567 /* Header Part*/ 567 568 switch (s) { 568 569 case CLOCKORBIT_SATGPS: … … 586 587 D_NO_OF_SATELLITES(nums) 587 588 #ifdef BNC_DEBUG_SSR 588 fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d dispInd %d mwInd %d\n", 589 pb->EpochTime[s], pb->UpdateInterval,mmi,pb->NumberOfSat[s],nums, 590 pb->SSRIOD, pb->SSRProviderID, pb->SSRSolutionID, 591 pb->DispersiveBiasConsistencyIndicator, pb->MWConsistencyIndicator); 592 #endif 589 fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d yawInd %d extpbInd %d\n", 590 pb->EpochTime[s], pb->UpdateInterval,mmi,pb->NumberOfSat[s],nums, 591 pb->SSRIOD, pb->SSRProviderID, pb->SSRSolutionID, 592 pb->SatelliteYawInformationIndicator, pb->ExtendedPhaseBiasPropertyID); 593 #endif 594 /* Satellite Specific Part*/ 593 595 for (i = 0; i < nums; ++i) { 594 596 D_GPS_SATELLITE_ID(id) … … 608 610 fprintf(stderr, "id %2d #%d y %10.6f yr %10.6f ", 609 611 pb->Sat[pos].ID, pb->Sat[pos].NumberOfPhaseBiases, 610 pb->Sat[pos].YawAngle/MPI, pb->Sat[pos].YawRate/MPI); 611 #endif 612 pb->Sat[pos].YawAngle/MPI, pb->Sat[pos].YawRate/MPI); 613 #endif 614 /* Signal Specific Part */ 612 615 for (j = 0; j < pb->Sat[pos].NumberOfPhaseBiases; ++j) { 613 616 D_GNSS_SIGNAL_IDENTIFIER(pb->Sat[pos].Biases[j].Type) 614 617 D_INTEGER_INDICATOR(pb->Sat[pos].Biases[j].IntegerIndicator) 615 // D_WIDE_LANE_INDICATOR(pb->Sat[pos].Biases[j].WidelaneGroupIndicator)616 618 D_DISCONTINUITY_COUNTER(pb->Sat[pos].Biases[j].DiscontinuityCounter) 617 619 D_PHASE_BIAS_CORRECTION(pb->Sat[pos].Biases[j].Bias) 620 #ifdef BNC_DEBUG_SSR 621 fprintf(stderr, "t%02d int %d disc %d b %8.4f ", 622 pb->Sat[pos].Biases[j].Type, 623 pb->Sat[pos].Biases[j].IntegerIndicator, 624 pb->Sat[pos].Biases[j].DiscontinuityCounter, 625 pb->Sat[pos].Biases[j].Bias); 626 #endif 627 } 628 #ifdef BNC_DEBUG_SSR 629 fprintf(stderr, "\n"); 630 #endif 631 } 632 } 633 else if (kind == COBOFS_PBEXT) { 634 unsigned int EpochTime, SSRIOD, SSRProviderID, SSRSolutionID, ExtendedPhaseBiasPropertyID; 635 if (!pb) 636 return GCOBR_NOPHASEBIASPARAMETER; 637 pb->messageExtType = type; 638 switch (s) { 639 case CLOCKORBIT_SATGPS: 640 case CLOCKORBIT_SATGALILEO: 641 case CLOCKORBIT_SATQZSS: 642 case CLOCKORBIT_SATSBAS: 643 case CLOCKORBIT_SATBDS: 644 D_GPS_EPOCH_TIME(EpochTime) 645 break; 646 case CLOCKORBIT_SATGLONASS: 647 D_GLONASS_EPOCH_TIME(EpochTime) 648 break; 649 } 650 D_SSR_IOD(SSRIOD) 651 D_SSR_PROVIDER_ID(SSRProviderID) 652 D_SSR_SOLUTION_ID(SSRSolutionID) 653 D_EXTENDED_PHASE_BIAS_ID(ExtendedPhaseBiasPropertyID) 654 #ifdef BNC_DEBUG_SSR 655 fprintf(stderr, "epochTime %d/%d ssrIod %d/%d providerId %d/%d solId %d/%d extpbInd %d/%d \n", 656 EpochTime, pb->EpochTime[s], 657 SSRIOD, pb->SSRIOD, 658 SSRProviderID, pb->SSRProviderID, 659 SSRSolutionID, pb->SSRSolutionID, 660 ExtendedPhaseBiasPropertyID, pb->ExtendedPhaseBiasPropertyID); 661 #endif 662 if (EpochTime == pb->EpochTime[s] && 663 ExtendedPhaseBiasPropertyID == pb->ExtendedPhaseBiasPropertyID) { 664 for (i = 0; i < pb->NumberOfSat[s]; ++i) { 665 for (pos = satoffset[s]; 666 pos < satoffset[s] + pb->NumberOfSat[s]; 667 ++pos) 668 ; 669 if (pos >= satoffset[s + 1]) 670 return GCOBR_DATAMISMATCH; 671 else if (pos == pb->NumberOfSat[s] + satoffset[s]) 672 ++pb->NumberOfSat[s]; 673 #ifdef BNC_DEBUG_SSR 674 fprintf(stderr, "id %2d ", pb->Sat[pos].ID); 675 #endif 676 for (j = 0; j < pb->Sat[pos].NumberOfPhaseBiases; ++j) { 677 D_WIDE_LANE_INDICATOR(pb->Sat[pos].Biases[j].WidelaneGroupIndicator) 618 678 #ifdef BNC_DEBUG_SSR 619 679 fprintf(stderr, "t%02d int %d /*wl %d*/ disc %d b %8.4f ", 620 680 pb->Sat[pos].Biases[j].Type, 621 681 pb->Sat[pos].Biases[j].IntegerIndicator, 622 //pb->Sat[pos].Biases[j].WidelaneGroupIndicator,682 pb->Sat[pos].Biases[j].WidelaneGroupIndicator, 623 683 pb->Sat[pos].Biases[j].DiscontinuityCounter, 624 684 pb->Sat[pos].Biases[j].Bias); … … 629 689 #endif 630 690 } 691 } 631 692 } 632 693 else if (kind == COBOFS_ORBIT) { … … 954 1015 #ifdef BNC_DEBUG_SSR 955 1016 fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d\n", 956 b->EpochTime[s], b->UpdateInterval,mmi,b->NumberOfSat[s],nums, 957 b->SSRIOD, b->SSRProviderID, b->SSRSolutionID); 1017 b->EpochTime[s], b->UpdateInterval,mmi,b->NumberOfSat[s],nums, 1018 b->SSRIOD, b->SSRProviderID, b->SSRSolutionID); 958 1019 #endif 959 1020 for (i = 0; i < nums; ++i) { -
trunk/BNC/src/ephemeris.cpp
r10993 r10998 736 736 // the one recommended together with RTCM-SSR corrections; the classic 737 737 // eccentricity-based form is used otherwise (broadcast-only or IGS-SSR). 738 if (_orbCorr && _orbCorr->_ rtcmSsr) {738 if (_orbCorr && _orbCorr->_ssrFormat == ssrRtcmNew) { 739 739 xc[3] -= 2.0 * (xc[0]*vv[0] + xc[1]*vv[1] + xc[2]*vv[2]) / t_CST::c / t_CST::c; 740 740 } … … 2066 2066 // See t_ephGPS::position() for the rationale behind selecting between the 2067 2067 // eccentricity-based and velocity-based forms. 2068 if (_orbCorr && _orbCorr->_ rtcmSsr) {2068 if (_orbCorr && _orbCorr->_ssrFormat == ssrRtcmNew) { 2069 2069 xc[3] -= 2.0 * (xc[0]*vv[0] + xc[1]*vv[1] + xc[2]*vv[2]) / t_CST::c / t_CST::c; 2070 2070 } … … 2977 2977 // See t_ephGPS::position() for the rationale behind selecting between the 2978 2978 // eccentricity-based and velocity-based forms. 2979 if (_orbCorr && _orbCorr->_ rtcmSsr) {2979 if (_orbCorr && _orbCorr->_ssrFormat == ssrRtcmNew) { 2980 2980 xc[3] -= 2.0 * (xc[0]*vv[0] + xc[1]*vv[1] + xc[2]*vv[2]) / t_CST::c / t_CST::c; 2981 2981 } -
trunk/BNC/src/satObs.cpp
r10993 r10998 86 86 _xr.ReSize(3); _xr = 0.0; 87 87 _dotXr.ReSize(3); _dotXr = 0.0; 88 _ rtcmSsr = false;88 _ssrFormat = ssrUnknown; 89 89 } 90 90 … … 105 105 << corr._updateInt << " " 106 106 << corrList.size() << ' ' << corr._staID << endl; 107 *out << " " << static_cast<int>(corr._ssrFormat) << endl; 107 108 } 108 109 *out << corr._prn.toString() << ' ' << setw(11) << corr._iod << ' ' … … 112 113 << setw(10) << setprecision(4) << corr._dotXr[0] * 1.e3 << ' ' // m/s => mm/s 113 114 << setw(10) << setprecision(4) << corr._dotXr[1] * 1.e3 << ' ' // m/s => mm/s 114 << setw(10) << setprecision(4) << corr._dotXr[2] * 1.e3 << ' ' // m/s => mm/s 115 << (corr._rtcmSsr ? 1 : 0) << endl; 115 << setw(10) << setprecision(4) << corr._dotXr[2] * 1.e3 << endl; // m/s => mm/s 116 116 } 117 117 out->flush(); … … 128 128 return; 129 129 } 130 131 e_ssrFormat ssrFormat = ssrUnknown; 132 { 133 string line; 134 getline(inStream, line); 135 istringstream in(line.c_str()); 136 int ssrFormatInt = 0; 137 if (in >> ssrFormatInt) { 138 ssrFormat = static_cast<e_ssrFormat>(ssrFormatInt); 139 } 140 } 141 130 142 for (int ii = 0; ii < numCorr; ii++) { 131 143 t_orbCorr corr; … … 133 145 corr._updateInt = updateInt; 134 146 corr._staID = staID; 147 corr._ssrFormat = ssrFormat; 135 148 136 149 string line; … … 150 163 corr._dotXr[1] /= 1.e3; // mm/s => m/s 151 164 corr._dotXr[2] /= 1.e3; // mm/s => m/s 152 153 // Optional trailing column - absent in files written before this field154 // existed, in which case the source format is unknown and defaults to155 // the classic eccentricity-based relativistic correction.156 int rtcmSsrFlag = 0;157 if (in >> rtcmSsrFlag) {158 corr._rtcmSsr = (rtcmSsrFlag != 0);159 }160 else {161 corr._rtcmSsr = false;162 }163 165 164 166 corrList.push_back(corr); … … 312 314 << satPhaseBias._updateInt << " " 313 315 << biasList.size() << ' ' << satPhaseBias._staID << endl; 314 *out << " " << satPhaseBias._dispBiasConstistInd << " " 316 *out << " " << static_cast<int>(satPhaseBias._ssrFormat) << " " 317 << satPhaseBias._dispBiasConstistInd << " " 315 318 << satPhaseBias._MWConsistInd << endl; 316 319 } … … 341 344 unsigned int dispInd; 342 345 unsigned int mwInd; 346 e_ssrFormat ssrFormat = ssrUnknown; 343 347 if (t_corrSSR::readEpoLine(epoLine, epoTime, updateInt, numSat, staID) != t_corrSSR::phaseBias) { 344 348 return; … … 355 359 356 360 if (ii == 0) { 357 in >> dispInd >> mwInd; 361 int ssrFormatInt = 0; 362 in >> ssrFormatInt >> dispInd >> mwInd; 363 ssrFormat = static_cast<e_ssrFormat>(ssrFormatInt); 358 364 continue; 359 365 } 366 satPhaseBias._ssrFormat = ssrFormat; 360 367 satPhaseBias._dispBiasConstistInd = dispInd; 361 368 satPhaseBias._MWConsistInd = mwInd; -
trunk/BNC/src/satObs.h
r10993 r10998 104 104 }; 105 105 106 // SSR source format, shared by orbit corrections and phase biases: governs the 107 // relativistic-correction formula for orbits (velocity-based per IS-GPS-200D 108 // 20.3.3.3.3.1 for RTCM-SSR/RTCM-SSR-new, classic eccentricity-based otherwise) 109 // and the applicable parameter set for phase biases (old vs new RTCM-SSR). 110 enum e_ssrFormat {ssrUnknown = 0, ssrRtcmOld = 1, ssrRtcmNew = 2}; 111 106 112 class t_orbCorr { 107 113 public: … … 117 123 ColumnVector _xr; 118 124 ColumnVector _dotXr; 119 bool _rtcmSsr; // true: RTCM-SSR/RTCM-SSR-new source (velocity-based relativistic 120 // correction per IS-GPS-200D 20.3.3.3.3.1); false: IGS-SSR or 121 // unknown source (classic eccentricity-based correction) 125 e_ssrFormat _ssrFormat; 122 126 }; 123 127 … … 192 196 t_satPhaseBias() { 193 197 _updateInt = 0; 198 _ssrFormat = ssrUnknown; 194 199 _dispBiasConstistInd = 0; 195 200 _MWConsistInd = 0; … … 203 208 bncTime _time; 204 209 unsigned int _updateInt; // not satellite specific 210 e_ssrFormat _ssrFormat; // not satellite specific 205 211 unsigned int _dispBiasConstistInd; // not satellite specific 206 212 unsigned int _MWConsistInd; // not satellite specific
Note:
See TracChangeset
for help on using the changeset viewer.
