Changeset 10791 in ntrip for trunk/BNC/src/PPP/pppFilter.cpp
- Timestamp:
- Dec 3, 2025, 5:37:16 PM (4 weeks ago)
- File:
-
- 1 edited
-
trunk/BNC/src/PPP/pppFilter.cpp (modified) (17 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/src/PPP/pppFilter.cpp
r10631 r10791 16 16 17 17 #include <iostream> 18 #include <sstream> 18 19 #include <iomanip> 19 20 #include <cmath> … … 28 29 #include "pppStation.h" 29 30 #include "pppClient.h" 31 #include "ambres.h" 30 32 31 33 using namespace BNC_PPP; … … 107 109 } 108 110 109 // close epoch processing111 // Dillution of Precision 110 112 // ---------------------- 111 113 cmpDOP(allObs); 112 _parlist->printResult(_epoTime, _QFlt, _xFlt); 114 115 // Ambiguity Resolution 116 // -------------------- 117 if (OPT->ambRes()) { 118 AmbRes ambRes; 119 ostringstream msg; 120 ColumnVector xFix = _xFlt; 121 SymmetricMatrix QFix = _QFlt; 122 double fixRatio = 0.0; 123 ambRes.run(_epoTime, _parlist->params(), QFix, xFix, fixRatio, msg); 124 LOG << msg.str(); 125 _parlist->printResult(_epoTime, QFix, xFix, fixRatio); 126 } 127 128 // Float Solution 129 // -------------- 130 else { 131 _parlist->printResult(_epoTime, _QFlt, _xFlt); 132 } 133 113 134 _lastEpoTimeOK = _epoTime; // remember time of last successful epoch processing 135 114 136 return success; 115 137 } … … 117 139 // Process Selected LCs 118 140 //////////////////////////////////////////////////////////////////////////// 119 t_irc t_pppFilter::processSystem(const vector<t_lc ::type> &LCs,141 t_irc t_pppFilter::processSystem(const vector<t_lc>& LCs, 120 142 const vector<t_pppSatObs*> &obsVector, 121 143 bool pseudoObsIonoAvailable) { … … 158 180 int iObs = -1; 159 181 vector<t_pppSatObs*> usedObs; 160 vector<t_lc ::type>usedTypes;182 vector<t_lc> usedTypes; 161 183 162 184 // Real Observations … … 171 193 nSat++; 172 194 for (unsigned jj = 0; jj < usedLCs; jj++) { 173 const t_lc::type tLC = LCs[jj]; 174 if (tLC == t_lc::GIM) { 195 const t_lc LC = LCs[jj]; 196 if (LC._type == t_lc::GIM) { 197 continue; 198 } 199 if (LC._frq1 == t_frequency::G5 && !obs->isValid(LC)) { 175 200 continue; 176 201 } 177 202 ++iObs; 178 203 usedObs.push_back(obs); 179 usedTypes.push_back( tLC);204 usedTypes.push_back(LC); 180 205 for (unsigned iPar = 0; iPar < nPar; iPar++) { 181 206 const t_pppParam *par = params[iPar]; 182 AA[iObs][iPar] = par->partial(_epoTime, obs, tLC);183 } 184 185 ll[iObs] = obs->obsValue( tLC) - obs->cmpValue(tLC) - DotProduct(_x0, AA.Row(iObs + 1));186 PP[iObs] = 1.0 / (obs->sigma( tLC) * obs->sigma(tLC));207 AA[iObs][iPar] = par->partial(_epoTime, obs, LC); 208 } 209 210 ll[iObs] = obs->obsValue(LC) - obs->cmpValue(LC) - DotProduct(_x0, AA.Row(iObs + 1)); 211 PP[iObs] = 1.0 / (obs->sigma(LC) * obs->sigma(LC)); 187 212 } 188 213 } … … 202 227 if (!obs->outlier()) { 203 228 for (unsigned jj = 0; jj < usedLCs; jj++) { 204 const t_lc ::type tLC = LCs[jj];205 if ( tLC== t_lc::GIM) {229 const t_lc LC = LCs[jj]; 230 if (LC._type == t_lc::GIM) { 206 231 ++iObs; 207 232 } else { … … 209 234 } 210 235 usedObs.push_back(obs); 211 usedTypes.push_back( tLC);236 usedTypes.push_back(LC); 212 237 for (unsigned iPar = 0; iPar < nPar; iPar++) { 213 238 const t_pppParam *par = params[iPar]; 214 AA[iObs][iPar] = par->partial(_epoTime, obs, tLC);239 AA[iObs][iPar] = par->partial(_epoTime, obs, LC); 215 240 } 216 ll[iObs] = obs->obsValue( tLC) - obs->cmpValue(tLC) - DotProduct(_x0, AA.Row(iObs + 1));217 PP[iObs] = 1.0 / (obs->sigma( tLC) * obs->sigma(tLC));241 ll[iObs] = obs->obsValue(LC) - obs->cmpValue(LC) - DotProduct(_x0, AA.Row(iObs + 1)); 242 PP[iObs] = 1.0 / (obs->sigma(LC) * obs->sigma(LC)); 218 243 } 219 244 } … … 236 261 double maxOutlier = 0.0; 237 262 int maxOutlierIndex = -1; 238 t_lc ::typemaxOutlierLC= t_lc::dummy;263 t_lc maxOutlierLC; 239 264 for (unsigned ii = 0; ii < usedObs.size(); ii++) { 240 const t_lc ::type tLC = usedTypes[ii];265 const t_lc LC = usedTypes[ii]; 241 266 double res = fabs(vv[ii]); 242 if (res > usedObs[ii]->maxRes( tLC)) {267 if (res > usedObs[ii]->maxRes(LC)) { 243 268 if (res > fabs(maxOutlier)) { 244 269 maxOutlier = vv[ii]; 245 270 maxOutlierIndex = ii; 246 maxOutlierLC = tLC;271 maxOutlierLC = LC; 247 272 } 248 273 } … … 254 279 t_pppSatObs *obs = usedObs[maxOutlierIndex]; 255 280 t_pppParam *par = 0; 256 LOG << epoTimeStr << " Outlier " << t_lc::toString(maxOutlierLC) << ' '281 LOG << epoTimeStr << " Outlier " << maxOutlierLC.toString() << ' ' 257 282 << obs->prn().toString() << ' ' << setw(8) << setprecision(4) 258 283 << maxOutlier << endl; 259 284 for (unsigned iPar = 0; iPar < nPar; iPar++) { 260 t_pppParam *hlp = params[iPar];285 t_pppParam* hlp = params[iPar]; 261 286 if (hlp->type() == t_pppParam::amb && 262 287 hlp->prn() == obs->prn() && 263 hlp-> tLC()== usedTypes[maxOutlierIndex]) {288 hlp->LC() == usedTypes[maxOutlierIndex]) { 264 289 par = hlp; 265 290 } … … 277 302 for (unsigned jj = 0; jj < LCs.size(); jj++) { 278 303 for (unsigned ii = 0; ii < usedObs.size(); ii++) { 279 const t_lc ::type tLC = usedTypes[ii];280 t_pppSatObs *obs = usedObs[ii];281 if ( tLC == LCs[jj]) {282 obs->setRes( tLC, vv[ii]);304 const t_lc LC = usedTypes[ii]; 305 t_pppSatObs* obs = usedObs[ii]; 306 if (LC == LCs[jj]) { 307 obs->setRes(LC, vv[ii]); 283 308 LOG << epoTimeStr << " RES " << left << setw(3) 284 << t_lc::toString(tLC) << right << ' '309 << LC.toString() << right << ' ' 285 310 << obs->prn().toString() << ' ' 286 311 << setw(8) << setprecision(4) << vv[ii] << endl; … … 296 321 // Cycle-Slip Detection 297 322 //////////////////////////////////////////////////////////////////////////// 298 t_irc t_pppFilter::detectCycleSlips(const vector<t_lc ::type> &LCs,323 t_irc t_pppFilter::detectCycleSlips(const vector<t_lc>& LCs, 299 324 const vector<t_pppSatObs*> &obsVector) { 300 325 … … 309 334 SLIP *= fac; 310 335 string epoTimeStr = string(_epoTime); 311 const vector<t_pppParam*> ¶ms = _parlist->params();312 336 313 337 for (unsigned ii = 0; ii < LCs.size(); ii++) { 314 const t_lc ::type &tLC = LCs[ii];315 if ( t_lc::includesPhase(tLC)) {338 const t_lc& LC = LCs[ii]; 339 if (LC.includesPhase()) { 316 340 for (unsigned iObs = 0; iObs < obsVector.size(); iObs++) { 317 341 const t_pppSatObs *obs = obsVector[iObs]; … … 343 367 // -------- 344 368 if (slip) { 345 resetAmb(obs->prn(), obsVector, tLC); 346 } 347 348 // Check Pre-Fit Residuals 349 /* ----------------------- 350 else { 351 ColumnVector AA(params.size()); 352 for (unsigned iPar = 0; iPar < params.size(); iPar++) { 353 const t_pppParam* par = params[iPar]; 354 AA[iPar] = par->partial(_epoTime, obs, tLC); 355 } 356 double ll = obs->obsValue(tLC) - obs->cmpValue(tLC) - DotProduct(_x0, AA); 357 double vv = DotProduct(AA, _xFlt) - ll; 358 359 if (fabs(vv) > SLIP) { 360 LOG << epoTimeStr << " cycle slip detected " << t_lc::toString(tLC) << ' ' 361 << obs->prn().toString() << ' ' << setw(8) << setprecision(4) << vv << endl; 362 resetAmb(obs->prn(), obsVector, tLC); 363 } 364 }*/ 369 resetAmb(obs->prn(), obsVector, t_lc()); 370 } 365 371 } 366 372 } … … 371 377 // Reset Ambiguity Parameter (cycle slip) 372 378 //////////////////////////////////////////////////////////////////////////// 373 t_irc t_pppFilter::resetAmb(const t_prn prn, const vector<t_pppSatObs*> &obsVector, t_lc ::typelc,379 t_irc t_pppFilter::resetAmb(const t_prn prn, const vector<t_pppSatObs*> &obsVector, t_lc lc, 374 380 SymmetricMatrix *QSav, ColumnVector *xSav) { 375 381 … … 386 392 (par->firstObsTime().undef()) ? 387 393 firstObsTime = lastObsTime : firstObsTime = par->firstObsTime(); 388 t_lc ::type tLC = par->tLC();389 if ( tLC != lc) {continue;}394 t_lc LC = par->LC(); 395 if (lc.valid() && LC != lc) {continue;} 390 396 LOG << string(_epoTime) << " RESET " << par->toString() << endl; 391 delete par; par = new t_pppParam(t_pppParam::amb, prn, tLC, &obsVector);397 delete par; par = new t_pppParam(t_pppParam::amb, prn, LC, &obsVector); 392 398 par->setIndex(ind); 393 399 par->setFirstObsTime(firstObsTime); … … 436 442 for (unsigned iPar = 0; iPar < numPar; iPar++) { 437 443 t_pppParam* par = _parlist->params()[iPar]; 438 AA[_numSat - 1][iPar] = par->partial(_epoTime, obs, t_lc::c1);444 AA[_numSat - 1][iPar] = par->partial(_epoTime, obs, obs->rangeLC()); 439 445 if (par->type() == t_pppParam::crdX) { 440 446 parX = par;
Note:
See TracChangeset
for help on using the changeset viewer.
