Changeset 9419 in ntrip for trunk/BNC/src/PPP/pppFilter.cpp
- Timestamp:
- May 3, 2021, 2:18:39 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/src/PPP/pppFilter.cpp
r9398 r9419 81 81 // Set Parameters 82 82 // -------------- 83 _parlist->set(_epoTime, allObs, _obsPool->getRefSatMap()); 83 if (_parlist->set(_epoTime, allObs, _obsPool->getRefSatMap()) != success) { 84 return failure; 85 } 84 86 const vector<t_pppParam*>& params = _parlist->params(); 85 87 #ifdef BNC_DEBUG_PPP … … 88 90 } 89 91 #endif 92 90 93 // Status Vector, Variance-Covariance Matrix 91 94 // ----------------------------------------- … … 127 130 OPT->_obsModelType == OPT->DCMphaseBias) { 128 131 preProcessing = true; 132 unsigned usableSys = 0; 129 133 for (unsigned iSys = 0; iSys < OPT->systems().size(); iSys++) { 130 134 char sys = OPT->systems()[iSys]; … … 138 142 } 139 143 } 140 if (!obsVector.size()) {continue;} 144 if (!obsVector.size()) { 145 continue; 146 } 147 else { 148 ++usableSys; 149 if (usableSys == 1) { 150 _datumTrafo->setFirstSystem(sys); 151 } 152 } 141 153 if (processSystem(OPT->LCs(sys), obsVector, _refPrn, 142 154 epoch->pseudoObsIono(), preProcessing) != success) { … … 154 166 } 155 167 else if (!_obsPool->refSatChangeRequired()) { 156 initDatumTransformation(allObs );168 initDatumTransformation(allObs, epoch->pseudoObsIono()); 157 169 } 158 170 } … … 162 174 preProcessing = false; 163 175 for (unsigned iSys = 0; iSys < OPT->systems().size(); iSys++) { 164 (iSys) ? _datumTrafo->setFirstSystem(false) : _datumTrafo->setFirstSystem(true); 165 char system = OPT->systems()[iSys]; 176 char sys = OPT->systems()[iSys]; 166 177 if (OPT->_refSatRequired) { 167 _refPrn = (_obsPool->getRefSatMapElement(sys tem))->prn();178 _refPrn = (_obsPool->getRefSatMapElement(sys))->prn(); 168 179 } 169 180 unsigned int num = 0; 170 181 vector<t_pppSatObs*> obsVector; 171 182 for (unsigned jj = 0; jj < allObs.size(); jj++) { 172 if (allObs[jj]->prn().system() == sys tem) {183 if (allObs[jj]->prn().system() == sys) { 173 184 obsVector.push_back(allObs[jj]); 174 num++; 175 } 176 } 177 if (!num) {continue;} 178 LOG << epoTimeStr << " SATNUM " << system << ' ' << right << setw(2) << num << endl; 179 if (processSystem(OPT->LCs(system), obsVector, _refPrn, 185 ++num; 186 } 187 } 188 if (!num) { 189 continue; 190 } 191 LOG << epoTimeStr << " SATNUM " << sys << ' ' << right << setw(2) << num << endl; 192 if (processSystem(OPT->LCs(sys), obsVector, _refPrn, 180 193 epoch->pseudoObsIono(), preProcessing) != success) { 181 194 return failure; … … 190 203 if (OPT->_refSatRequired) { 191 204 _obsPool->saveLastEpoRefSats(); 205 _datumTrafo->setLastEpoParlist(_parlist); 192 206 } 193 207 return success; … … 219 233 220 234 unsigned usedLCs = LCs.size(); 221 unsigned realUsedLCs = usedLCs;222 235 if (OPT->_pseudoObsIono && !pseudoObsIonoAvailable) { 223 236 usedLCs -= 1; // GIM not used … … 226 239 if (OPT->_pseudoObsTropo) { 227 240 hlpLCs = -1; 228 realUsedLCs -= 1;229 241 } 230 242 // max Obs 231 243 unsigned maxObs = obsVector.size() * (usedLCs + hlpLCs); 232 if (OPT->_pseudoObsTropo ) {244 if (OPT->_pseudoObsTropo && _datumTrafo->firstSystem(sys)) { 233 245 maxObs += 1; 234 246 } … … 260 272 for (unsigned ii = 0; ii < obsVector.size(); ii++) { 261 273 t_pppSatObs* obs = obsVector[ii]; 274 if (iOutlier == 0 && !preProcessing) { 275 obs->resetOutlier(); 276 } 262 277 if (!obs->outlier()) { 263 278 for (unsigned jj = 0; jj < usedLCs; jj++) { … … 280 295 // pseudo Obs Tropo 281 296 // ================ 282 if (OPT->_pseudoObsTropo ) {297 if (OPT->_pseudoObsTropo && _datumTrafo->firstSystem(sys)) { 283 298 for (unsigned ii = 0; ii < obsVector.size(); ii++) { 284 299 t_pppSatObs* obs = obsVector[ii]; … … 302 317 if ((!iOutlier) && 303 318 (OPT->_obsModelType == OPT->DCMcodeBias || 304 OPT->_obsModelType == OPT->DCMphaseBias ) && (!preProcessing)) { 305 _datumTrafo->updateIndices(iObs+1); 319 OPT->_obsModelType == OPT->DCMphaseBias) && 320 (!preProcessing)) { 321 _datumTrafo->updateIndices(sys, iObs+1); 306 322 _datumTrafo->prepareAA(AA.SubMatrix(1, iObs+1 , 1, _parlist->nPar()), 1); 307 323 } … … 499 515 // ----------------------- 500 516 else { 517 if (refPrn != t_prn()) {return success;} 501 518 ColumnVector AA(params.size()); 502 519 for (unsigned iPar = 0; iPar < params.size(); iPar++) { … … 666 683 //////////////////////////////////////////////////////////////////////////// 667 684 t_irc t_pppFilter::datumTransformation() { 685 // get last epoch 668 686 t_pppObsPool::t_epoch* epoch = _obsPool->lastEpoch(); 669 if (!epoch) {LOG << "!epoch" << endl; 687 if (!epoch) { 688 LOG << "!lastEpoch" << endl; 670 689 return failure; 671 690 } … … 674 693 LOG << string(epoch->epoTime()) << " DATUM TRANSFORMATION " << endl; 675 694 } 695 676 696 vector<t_pppSatObs*>& allObs = epoch->obsVector(); 677 697 678 // reset old and set new refSats in last epoch (ambiguities )679 // ======================================================== 698 // reset old and set new refSats in last epoch (ambiguities/GIM) 699 // ============================================================= 680 700 if (resetRefSatellitesLastEpoch(allObs) != true) { 701 LOG << "resetRefSatellitesLastEpoch = failure" << endl; 681 702 return failure; 703 } 704 705 if (OPT->_obsModelType == OPT->UncombPPP) { 706 return success; 682 707 } 683 708 684 709 // set AA2 685 710 // ======= 686 _parlist->set(epoch->epoTime(), allObs, _obsPool->getRefSatMap()); 687 const vector<t_pppParam*>& params = _parlist->params(); 711 t_pppParlist* parlist = _datumTrafo->lastEpoParlist(); 712 if (parlist->set(epoch->epoTime(), allObs, _obsPool->getRefSatMap()) != success) { 713 return failure; 714 } 715 vector<t_pppParam*>& params = parlist->params(); 688 716 #ifdef BNC_DEBUG_PPP 717 LOG << " parameters of last epoch" << endl; 689 718 for (unsigned iPar = 0; iPar < params.size(); iPar++) { 690 719 LOG << params[iPar]->toString() << "\t\t" << endl; 691 720 } 692 721 #endif 722 unsigned nPar = parlist->nPar(); 723 unsigned usableSys = 0; 693 724 for (unsigned iSys = 0; iSys < OPT->systems().size(); iSys++) { 694 (iSys) ? _datumTrafo->setFirstSystem(false) : _datumTrafo->setFirstSystem(true);695 725 char sys = OPT->systems()[iSys]; 696 726 t_prn refPrn = (_obsPool->getRefSatMapElement(sys))->prn(); 697 #ifdef BNC_DEBUG_PPP698 LOG << "refPrn: " << refPrn.toString() << endl;699 #endif700 727 vector<t_pppSatObs*> obsVector; 701 728 for (unsigned jj = 0; jj < allObs.size(); jj++) { … … 704 731 } 705 732 } 706 733 if (!obsVector.size()) { 734 continue; 735 } 736 else { 737 ++usableSys; 738 if (usableSys == 1) { 739 _datumTrafo->setFirstSystem(sys); 740 } 741 } 707 742 vector<t_lc::type> LCs = OPT->LCs(sys); 708 743 unsigned usedLCs = LCs.size(); 709 unsigned realUsedLCs = usedLCs;710 744 if (OPT->_pseudoObsIono && !epoch->pseudoObsIono()) { 711 745 usedLCs -= 1; // GIM not used … … 714 748 if (OPT->_pseudoObsTropo) { 715 749 hlpLCs = -1; 716 realUsedLCs -= 1;717 750 } 718 751 // max Obs 719 752 unsigned maxObs = obsVector.size() * (usedLCs + hlpLCs); 720 if (OPT->_pseudoObsTropo) { 753 754 if (OPT->_pseudoObsTropo && _datumTrafo->firstSystem(sys)) { 721 755 maxObs += 1; 722 756 } … … 724 758 maxObs -= 1; // pseudo obs iono with respect to refSat 725 759 } 726 727 Matrix AA(maxObs, _parlist->nPar()); 760 Matrix AA(maxObs, nPar); 728 761 729 762 // Real Observations … … 732 765 for (unsigned ii = 0; ii < obsVector.size(); ii++) { 733 766 t_pppSatObs* obs = obsVector[ii]; 734 if (!obs->outlier()) { 735 for (unsigned jj = 0; jj < usedLCs; jj++) { 736 const t_lc::type tLC = LCs[jj]; 737 if (tLC == t_lc::GIM) {continue;} 738 if (tLC == t_lc::Tz0) {continue;} 739 ++iObs; 740 for (unsigned iPar = 0; iPar < params.size(); iPar++) { 741 const t_pppParam* par = params[iPar]; 742 AA[iObs][iPar] = par->partial(_epoTime, obs, tLC, refPrn); 743 } 767 for (unsigned jj = 0; jj < usedLCs; jj++) { 768 const t_lc::type tLC = LCs[jj]; 769 if (tLC == t_lc::GIM) {continue;} 770 if (tLC == t_lc::Tz0) {continue;} 771 ++iObs; 772 for (unsigned iPar = 0; iPar < params.size(); iPar++) { 773 const t_pppParam* par = params[iPar]; 774 AA[iObs][iPar] = par->partial(_epoTime, obs, tLC, refPrn); 744 775 } 745 776 } … … 747 778 // pseudo Obs Tropo 748 779 // ================ 749 if (OPT->_pseudoObsTropo ) {780 if (OPT->_pseudoObsTropo && _datumTrafo->firstSystem(sys)) { 750 781 for (unsigned ii = 0; ii < obsVector.size(); ii++) { 751 782 t_pppSatObs* obs = obsVector[ii]; … … 762 793 } 763 794 } 764 _datumTrafo->updateIndices(iObs+1); 765 _datumTrafo->prepareAA(AA.SubMatrix(1, iObs+1 , 1, _parlist->nPar()), 2); 766 } 795 if (!iObs) { 796 continue; 797 } 798 _datumTrafo->updateIndices(sys, iObs+1); 799 _datumTrafo->prepareAA(AA.SubMatrix(1, iObs+1 , 1, nPar), 2); 800 } 801 _datumTrafo->updateNumObs(); 767 802 768 803 // Datum Transformation 769 804 // ==================== 770 805 #ifdef BNC_DEBUG_PPP 771 LOG << "AA1\n"; _datumTrafo->printMatrix(_datumTrafo->AA1(), _datumTrafo->obsNum(), _datumTrafo->parNum());772 LOG << "AA2\n"; _datumTrafo->printMatrix(_datumTrafo->AA2(), _datumTrafo->obsNum(), _datumTrafo->parNum());806 //LOG << "AA1\n"; _datumTrafo->printMatrix(_datumTrafo->AA1(), _datumTrafo->numObs(), _datumTrafo->numPar()); 807 //LOG << "AA2\n"; _datumTrafo->printMatrix(_datumTrafo->AA2(), _datumTrafo->numObs(), _datumTrafo->numPar()); 773 808 #endif 774 Matrix D21 = _datumTrafo->computeTrafoMatrix(); 809 if(_datumTrafo->computeTrafoMatrix() != success) { 810 return failure; 811 } 775 812 #ifdef BNC_DEBUG_PPP 776 LOG << "D21" << endl; _datumTrafo->printMatrix(D21, _datumTrafo->parNum(), _datumTrafo->parNum());813 //LOG << "D21" << endl; _datumTrafo->printMatrix(_datumTrafo->D21(), _datumTrafo->numObs(), _datumTrafo->numPar()); 777 814 #endif 778 815 ColumnVector xFltOld = _xFlt; 779 816 SymmetricMatrix QFltOld = _QFlt; 780 817 781 _QFlt << D21 * QFltOld * D21.t();782 _xFlt = D21* xFltOld;818 _QFlt << _datumTrafo->D21() * QFltOld * _datumTrafo->D21().t(); 819 _xFlt = _datumTrafo->D21() * xFltOld; 783 820 784 821 #ifdef BNC_DEBUG_PPP … … 791 828 for (unsigned iSys = 0; iSys < OPT->systems().size(); iSys++) { 792 829 char sys = OPT->systems()[iSys]; 793 t_irc irc = resetAmb(_obsPool->getRefSatMapElementLastEpoch(sys), allObs); 794 if (OPT->_obsModelType == OPT->DCMcodeBias) { 795 if (irc == success) { 796 addNoiseToIono(sys);} 830 t_prn refPrnOld = _obsPool->getRefSatMapElementLastEpoch(sys); 831 t_prn refPrnNew = (_obsPool->getRefSatMapElement(sys))->prn(); 832 if (refPrnNew != refPrnOld) { 833 t_irc irc = resetAmb(_obsPool->getRefSatMapElementLastEpoch(sys), allObs); 834 if (OPT->_obsModelType == OPT->DCMcodeBias) { 835 if (irc == success) { 836 addNoiseToIono(sys); 837 } 838 } 797 839 } 798 840 } … … 802 844 _datumTrafo->switchAA(); 803 845 846 // save parameter list 847 // ==================== 848 _datumTrafo->setLastEpoParlist(_parlist); 804 849 return success; 805 850 } … … 807 852 // Init datum transformation 808 853 //////////////////////////////////////////////////////////////////////////// 809 void t_pppFilter::initDatumTransformation(const std::vector<t_pppSatObs*>& allObs) { 854 void t_pppFilter::initDatumTransformation(const std::vector<t_pppSatObs*>& allObs, 855 bool pseudoObsIono) { 810 856 unsigned trafoObs = 0; 811 857 for (unsigned iSys = 0; iSys < OPT->systems().size(); iSys++) { 812 char sys tem= OPT->systems()[iSys];858 char sys = OPT->systems()[iSys]; 813 859 int satNum = 0; 814 860 for (unsigned jj = 0; jj < allObs.size(); jj++) { 815 if (allObs[jj]->prn().system() == sys tem) {861 if (allObs[jj]->prn().system() == sys) { 816 862 satNum++; 817 863 } 818 864 } 865 if (!satNum) { 866 continue; 867 } 819 868 // all LCs 820 unsigned realUsedLCs = OPT->LCs(sys tem).size();869 unsigned realUsedLCs = OPT->LCs(sys).size(); 821 870 // exclude pseudo obs GIM 822 if (OPT->_pseudoObsIono ) {871 if (OPT->_pseudoObsIono && !pseudoObsIono) { 823 872 realUsedLCs -= 1; 824 873 } … … 828 877 trafoObs += satNum * realUsedLCs; 829 878 830 if (OPT->_pseudoObsTropo ) {879 if (OPT->_pseudoObsTropo && _datumTrafo->firstSystem(sys)) { 831 880 trafoObs += 1; 832 881 } 833 834 } 835 _datumTrafo->setObsNum(trafoObs); 836 _datumTrafo->setParNum(_parlist->nPar()); 882 if (OPT->_pseudoObsIono && pseudoObsIono) { 883 trafoObs -= 1; // pseudo obs iono with respect to refSat 884 } 885 } 886 _datumTrafo->setNumObs(trafoObs); 887 _datumTrafo->setNumPar(_parlist->nPar()); 837 888 _datumTrafo->initAA(); 838 889 }
Note:
See TracChangeset
for help on using the changeset viewer.