Changeset 3383 in ntrip for trunk/BNC


Ignore:
Timestamp:
Aug 30, 2011, 4:56:38 PM (13 years ago)
Author:
mervart
Message:
 
Location:
trunk/BNC
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/bncmodel.cpp

    r3382 r3383  
    5656using namespace std;
    5757
    58 const unsigned MINOBS           =    5;
    59 const double   MINELE_GPS       = 10.0 * M_PI / 180.0;
    60 const double   MINELE_GLO       = 10.0 * M_PI / 180.0;
    61 const double   MINELE_GAL       = 10.0 * M_PI / 180.0;
    62 const double   MAXRES_CODE_GPS  = 10.0;
    63 const double   MAXRES_PHASE_GPS = 0.04;
    64 const double   MAXRES_PHASE_GLO = 0.04;
    65 const double   MAXRES_CODE_GAL  = 10.0;
    66 const double   MAXRES_PHASE_GAL = 0.04;
     58const unsigned MINOBS       =    5;
     59const double   MINELE       = 10.0 * M_PI / 180.0;
     60const double   MAXRES_CODE  = 10.0;
     61const double   MAXRES_PHASE = 0.04;
    6762
    6863// Constructor
     
    327322  Tracer tracer("bncModel::cmpBancroft");
    328323
    329   if (epoData->sizeGPS() < MINOBS) {
     324  if (epoData->sizeSys('G') < MINOBS) {
    330325    _log += "bncModel::cmpBancroft: not enough data\n";
    331326    return failure;
    332327  }
    333328
    334   Matrix BB(epoData->sizeGPS(), 4);
    335 
    336   QMapIterator<QString, t_satData*> it(epoData->satDataGPS);
     329  Matrix BB(epoData->sizeSys('G'), 4);
     330
     331  QMapIterator<QString, t_satData*> it(epoData->satData);
    337332  int iObsBanc = 0;
    338333  while (it.hasNext()) {
    339     ++iObsBanc;
    340334    it.next();
    341     QString    prn     = it.key();
    342335    t_satData* satData = it.value();
    343     BB(iObsBanc, 1) = satData->xx(1);
    344     BB(iObsBanc, 2) = satData->xx(2);
    345     BB(iObsBanc, 3) = satData->xx(3);
    346     BB(iObsBanc, 4) = satData->P3 + satData->clk;
     336    if (satData->system() == 'G') {
     337      ++iObsBanc;
     338      QString    prn     = it.key();
     339      BB(iObsBanc, 1) = satData->xx(1);
     340      BB(iObsBanc, 2) = satData->xx(2);
     341      BB(iObsBanc, 3) = satData->xx(3);
     342      BB(iObsBanc, 4) = satData->P3 + satData->clk;
     343    }
    347344  }
    348345
     
    355352  // Compute Satellite Elevations
    356353  // ----------------------------
    357   QMutableMapIterator<QString, t_satData*> iGPS(epoData->satDataGPS);
    358   while (iGPS.hasNext()) {
    359     iGPS.next();
    360     t_satData* satData = iGPS.value();
     354  QMutableMapIterator<QString, t_satData*> im(epoData->satData);
     355  while (im.hasNext()) {
     356    im.next();
     357    t_satData* satData = im.value();
    361358    cmpEle(satData);
    362     if (satData->eleSat < MINELE_GPS) {
     359    if (satData->eleSat < MINELE) {
    363360      delete satData;
    364       iGPS.remove();
    365     }
    366   }
    367 
    368   QMutableMapIterator<QString, t_satData*> iGlo(epoData->satDataGlo);
    369   while (iGlo.hasNext()) {
    370     iGlo.next();
    371     t_satData* satData = iGlo.value();
    372     cmpEle(satData);
    373     if (satData->eleSat < MINELE_GLO) {
    374       delete satData;
    375       iGlo.remove();
    376     }
    377   }
    378 
    379   QMutableMapIterator<QString, t_satData*> iGal(epoData->satDataGal);
    380   while (iGal.hasNext()) {
    381     iGal.next();
    382     t_satData* satData = iGal.value();
    383     cmpEle(satData);
    384     if (satData->eleSat < MINELE_GAL) {
    385       delete satData;
    386       iGal.remove();
     361      im.remove();
    387362    }
    388363  }
     
    605580    // ------------------------------------------------
    606581    int iPar = 0;
    607     QMutableVectorIterator<bncParam*> it(_params);
    608     while (it.hasNext()) {
    609       bncParam* par = it.next();
     582    QMutableVectorIterator<bncParam*> im(_params);
     583    while (im.hasNext()) {
     584      bncParam* par = im.next();
    610585      bool removed = false;
    611586      if (par->type == bncParam::AMB_L3) {
    612         if (epoData->satDataGPS.find(par->prn) == epoData->satDataGPS.end() &&
    613             epoData->satDataGlo.find(par->prn) == epoData->satDataGlo.end() &&
    614             epoData->satDataGal.find(par->prn) == epoData->satDataGal.end() ) {
     587        if (epoData->satData.find(par->prn) == epoData->satData.end()) {
    615588          removed = true;
    616589          delete par;
    617           it.remove();
     590          im.remove();
    618591        }
    619592      }
     
    626599    // Add new ambiguity parameters
    627600    // ----------------------------
    628     QMapIterator<QString, t_satData*> iGPS(epoData->satDataGPS);
    629     while (iGPS.hasNext()) {
    630       iGPS.next();
    631       t_satData* satData = iGPS.value();
    632       addAmb(satData);
    633     }
    634 
    635     QMapIterator<QString, t_satData*> iGlo(epoData->satDataGlo);
    636     while (iGlo.hasNext()) {
    637       iGlo.next();
    638       t_satData* satData = iGlo.value();
    639       addAmb(satData);
    640     }
    641 
    642     QMapIterator<QString, t_satData*> iGal(epoData->satDataGal);
    643     while (iGal.hasNext()) {
    644       iGal.next();
    645       t_satData* satData = iGal.value();
     601    QMapIterator<QString, t_satData*> it(epoData->satData);
     602    while (it.hasNext()) {
     603      it.next();
     604      t_satData* satData = it.value();
    646605      addAmb(satData);
    647606    }
     
    943902////////////////////////////////////////////////////////////////////////////
    944903bool bncModel::outlierDetection(int iPhase, const ColumnVector& vv,
    945                                QMap<QString, t_satData*>& satDataGPS,
    946                                QMap<QString, t_satData*>& satDataGlo,
    947                                QMap<QString, t_satData*>& satDataGal) {
     904                                QMap<QString, t_satData*>& satData) {
    948905
    949906  Tracer tracer("bncModel::outlierDetection");
     
    959916  bool irc = false;
    960917
     918  // Check Code
     919  // ----------
    961920  if (iPhase == 0) {
    962 
    963     // Check GPS Code
    964     // --------------
    965     if (!irc) {
    966       findMaxRes(iPhase, vv,satDataGPS, prnCode, maxResCode, prnPhase, maxResPhase);
    967       if (maxResCode > MAXRES_CODE_GPS) {
    968         prnRemoved = prnCode;
    969         maxRes     = maxResCode;
    970         irc        = true;
    971       }
    972     }
    973    
    974     // Check Galileo Code
    975     // ------------------
    976     if (!irc) {
    977       findMaxRes(iPhase, vv,satDataGal, prnCode, maxResCode, prnPhase, maxResPhase);
    978       if (maxResCode > MAXRES_CODE_GAL) {
    979         prnRemoved = prnCode;
    980         maxRes     = maxResCode;
    981         irc        = true;
    982       }
    983     }
    984   }
    985 
     921    findMaxRes(iPhase, vv, satData, prnCode, maxResCode, prnPhase, maxResPhase);
     922    if (maxResCode > MAXRES_CODE) {
     923      prnRemoved = prnCode;
     924      maxRes     = maxResCode;
     925      irc        = true;
     926    }
     927  }
     928
     929  // Check Phase
     930  // -----------
    986931  else {
    987 
    988     // Check Glonass Phase
    989     // -------------------
    990     if (!irc) {
    991       findMaxRes(iPhase, vv,satDataGlo, prnCode, maxResCode, prnPhase, maxResPhase);
    992       if (maxResPhase > MAXRES_PHASE_GLO) {
    993         prnRemoved = prnPhase;
    994         maxRes     = maxResPhase;
    995         irc        = true;
    996       }
    997     }
    998    
    999     // Check Galileo Phase
    1000     // -------------------
    1001     if (!irc) {
    1002       findMaxRes(iPhase, vv,satDataGal, prnCode, maxResCode, prnPhase, maxResPhase);
    1003       if      (maxResPhase > MAXRES_PHASE_GAL) {
    1004         prnRemoved = prnPhase;
    1005         maxRes     = maxResPhase;
    1006         irc        = true;
    1007       }
    1008     }
    1009    
    1010     // Check GPS Phase
    1011     // ---------------
    1012     if (!irc) {
    1013       findMaxRes(iPhase, vv,satDataGPS, prnCode, maxResCode, prnPhase, maxResPhase);
    1014       if      (maxResPhase > MAXRES_PHASE_GPS) {
    1015         prnRemoved = prnPhase;
    1016         maxRes     = maxResPhase;
    1017         irc        = true;
    1018       }
     932    findMaxRes(iPhase, vv, satData, prnCode, maxResCode, prnPhase, maxResPhase);
     933    if (maxResPhase > MAXRES_PHASE) {
     934      prnRemoved = prnPhase;
     935      maxRes     = maxResPhase;
     936      irc        = true;
    1019937    }
    1020938  }
     
    13251243
    13261244  std::vector<QString> allPrns;
    1327   getAllPrns(epoData, &allPrns);
     1245  QMapIterator<QString, t_satData*> it(epoData->satData);
     1246  while (it.hasNext()) {
     1247    it.next();
     1248    t_satData* satData = it.value();
     1249    allPrns.push_back(satData->prn);
     1250  }
    13281251
    13291252  std::vector<QString> usedPrns;
     
    13551278        QString prn = allPrns[ip];
    13561279        if ( !findInVector(usedPrns, prn) ) {
    1357           epoData->satDataGPS.remove(prn);
    1358           epoData->satDataGlo.remove(prn);
    1359           epoData->satDataGal.remove(prn);
     1280          epoData->satData.remove(prn);
    13601281        }
    13611282      }
     
    13791300        }
    13801301        else {
    1381           if (epoData->sizeGPS() < MINOBS) {
     1302          if (epoData->sizeSys('G') < MINOBS) {
    13821303            restoreState(epoData);
    13831304            _log += "bncModel::update_p: not enough data\n";
     
    14101331        unsigned nObs = 0;
    14111332        if (iPhase == 0) {
    1412           nObs = epoData->sizeGPS() + epoData->sizeGal(); // Glonass code not used
     1333          nObs = epoData->sizeAll() - epoData->sizeSys('R'); // Glonass code not used
    14131334        }
    14141335        else {
    1415           nObs = epoData->sizeGPS() + epoData->sizeGal() + epoData->sizeGlo();
     1336          nObs = epoData->sizeAll();
    14161337        }
    14171338       
     
    14241345        // GPS
    14251346        // ---
    1426         QMapIterator<QString, t_satData*> itGPS(epoData->satDataGPS);
    1427         while (itGPS.hasNext()) {
    1428           itGPS.next();
    1429           t_satData* satData = itGPS.value();
    1430           QString prn = satData->prn;
    1431           if (findInVector(usedPrns, satData->prn)) {
    1432             addObs(iPhase, iObs, satData, AA, ll, PP);
    1433           }
    1434         }
    1435        
    1436         // Glonass
    1437         // -------
    1438         if (iPhase == 1) {
    1439           QMapIterator<QString, t_satData*> itGlo(epoData->satDataGlo);
    1440           while (itGlo.hasNext()) {
    1441             itGlo.next();
    1442             t_satData* satData = itGlo.value();
     1347        QMapIterator<QString, t_satData*> it(epoData->satData);
     1348        while (it.hasNext()) {
     1349          it.next();
     1350          t_satData* satData = it.value();
     1351          if (iPhase == 1 || satData->system() != 'R') {
     1352            QString prn = satData->prn;
    14431353            if (findInVector(usedPrns, satData->prn)) {
    14441354              addObs(iPhase, iObs, satData, AA, ll, PP);
     
    14461356          }
    14471357        }
    1448        
    1449         // Galileo
    1450         // -------
    1451         QMapIterator<QString, t_satData*> itGal(epoData->satDataGal);
    1452         while (itGal.hasNext()) {
    1453           itGal.next();
    1454           t_satData* satData = itGal.value();
    1455           if (findInVector(usedPrns, satData->prn)) {
    1456             addObs(iPhase, iObs, satData, AA, ll, PP);
    1457           }
    1458         }
    1459        
     1358
    14601359        // Compute Filter Update
    14611360        // ---------------------
     
    14701369          str.setf(ios::fixed);
    14711370       
    1472           QMapIterator<QString, t_satData*> itGPS(epoData->satDataGPS);
    1473           while (itGPS.hasNext()) {
    1474             itGPS.next();
    1475             t_satData* satData = itGPS.value();
    1476             printRes(iPhase, vv, str, satData);
    1477           }
    1478           if (iPhase == 1) {
    1479             QMapIterator<QString, t_satData*> itGlo(epoData->satDataGlo);
    1480             while (itGlo.hasNext()) {
    1481               itGlo.next();
    1482               t_satData* satData = itGlo.value();
     1371          QMapIterator<QString, t_satData*> it(epoData->satData);
     1372          while (it.hasNext()) {
     1373            it.next();
     1374            t_satData* satData = it.value();
     1375            if (iPhase == 1 || satData->system() != 'R') {
    14831376              printRes(iPhase, vv, str, satData);
    14841377            }
    14851378          }
    1486           QMapIterator<QString, t_satData*> itGal(epoData->satDataGal);
    1487           while (itGal.hasNext()) {
    1488             itGal.next();
    1489             t_satData* satData = itGal.value();
    1490             printRes(iPhase, vv, str, satData);
    1491           }
    14921379          _log += str.str().c_str();
    14931380        }
     
    14951382        // Check the residuals
    14961383        // -------------------
    1497         outlierDetected = outlierDetection(iPhase, vv,
    1498                                            epoData->satDataGPS,
    1499                                            epoData->satDataGlo,
    1500                                            epoData->satDataGal);
     1384        outlierDetected = outlierDetection(iPhase, vv, epoData->satData);
     1385
    15011386        if (outlierDetected) {
    15021387          restoreState(epoData);
     
    15681453  epoData->deepCopy(_epoData_sav);
    15691454}
    1570 
    1571 //
    1572 ////////////////////////////////////////////////////////////////////////////
    1573 void bncModel::getAllPrns(const t_epoData* epoData,
    1574                           std::vector<QString>* allPrns) {
    1575 
    1576   // GPS
    1577   // ---
    1578   QMapIterator<QString, t_satData*> itGPS(epoData->satDataGPS);
    1579   while (itGPS.hasNext()) {
    1580     itGPS.next();
    1581     t_satData* satData = itGPS.value();
    1582     allPrns->push_back(satData->prn);
    1583   }
    1584  
    1585   // Glonass
    1586   // -------
    1587   QMapIterator<QString, t_satData*> itGlo(epoData->satDataGlo);
    1588   while (itGlo.hasNext()) {
    1589     itGlo.next();
    1590     t_satData* satData = itGlo.value();
    1591     allPrns->push_back(satData->prn);
    1592   }
    1593  
    1594   // Galileo
    1595   // -------
    1596   QMapIterator<QString, t_satData*> itGal(epoData->satDataGal);
    1597   while (itGal.hasNext()) {
    1598     itGal.next();
    1599     t_satData* satData = itGal.value();
    1600     allPrns->push_back(satData->prn);
    1601   }
    1602 }
    1603 
  • trunk/BNC/bncmodel.h

    r3380 r3383  
    111111  t_irc  update_p(t_epoData* epoData);
    112112  bool   outlierDetection(int iPhase, const ColumnVector& vv,
    113                           QMap<QString, t_satData*>& satDataGPS,
    114                           QMap<QString, t_satData*>& satDataGlo,
    115                           QMap<QString, t_satData*>& satDataGal);
     113                          QMap<QString, t_satData*>& satData);
    116114  void writeNMEAstr(const QString& nmStr);
    117115
    118116  double windUp(const QString& prn, const ColumnVector& rSat,
    119117                const ColumnVector& rRec);
    120 
    121   void getAllPrns(const t_epoData* epoData, std::vector<QString>* allPrns);
    122118
    123119  bncTime  _startTime;
  • trunk/BNC/bncpppclient.cpp

    r3319 r3383  
    194194      satData->lambda3 = c1 * t_CST::c / f1 + c2 * t_CST::c / f2;
    195195
    196       _epoData.back()->satDataGPS[satData->prn] = satData;
     196      _epoData.back()->satData[satData->prn] = satData;
    197197    }
    198198    else {
     
    227227      satData->lambda3 = c1 * t_CST::c / f1 + c2 * t_CST::c / f2;
    228228
    229       _epoData.back()->satDataGlo[satData->prn] = satData;
     229      _epoData.back()->satData[satData->prn] = satData;
    230230    }
    231231    else {
     
    250250      satData->L3      = c1 * satData->L1 + c5 * satData->L5;
    251251      satData->lambda3 = c1 * t_CST::c / f1 + c5 * t_CST::c / f5;
    252       _epoData.back()->satDataGal[satData->prn] = satData;
     252      _epoData.back()->satData[satData->prn] = satData;
    253253    }
    254254    else {
     
    459459  // Data Pre-Processing
    460460  // -------------------
    461   QMutableMapIterator<QString, t_satData*> iGPS(_epoData.front()->satDataGPS);
    462   while (iGPS.hasNext()) {
    463     iGPS.next();
    464     QString    prn     = iGPS.key();
    465     t_satData* satData = iGPS.value();
     461  QMutableMapIterator<QString, t_satData*> it(_epoData.front()->satData);
     462  while (it.hasNext()) {
     463    it.next();
     464    QString    prn     = it.key();
     465    t_satData* satData = it.value();
    466466
    467467    if (cmpToT(satData) != success) {
    468468      delete satData;
    469       iGPS.remove();
    470       continue;
    471     }
    472   }
    473 
    474   QMutableMapIterator<QString, t_satData*> iGlo(_epoData.front()->satDataGlo);
    475   while (iGlo.hasNext()) {
    476     iGlo.next();
    477     QString    prn     = iGlo.key();
    478     t_satData* satData = iGlo.value();
    479 
    480     if (cmpToT(satData) != success) {
    481       delete satData;
    482       iGlo.remove();
    483       continue;
    484     }
    485   }
    486 
    487   QMutableMapIterator<QString, t_satData*> iGal(_epoData.front()->satDataGal);
    488   while (iGal.hasNext()) {
    489     iGal.next();
    490     QString    prn     = iGal.key();
    491     t_satData* satData = iGal.value();
    492 
    493     if (cmpToT(satData) != success) {
    494       delete satData;
    495       iGal.remove();
     469      it.remove();
    496470      continue;
    497471    }
  • trunk/BNC/bncpppclient.h

    r3382 r3383  
    7171
    7272  void clear() {
    73     QMapIterator<QString, t_satData*> itGPS(satDataGPS);
    74     while (itGPS.hasNext()) {
    75       itGPS.next();
    76       delete itGPS.value();
     73    QMapIterator<QString, t_satData*> it(satData);
     74    while (it.hasNext()) {
     75      it.next();
     76      delete it.value();
    7777    }
    78     satDataGPS.clear();
    79     QMapIterator<QString, t_satData*> itGlo(satDataGlo);
    80     while (itGlo.hasNext()) {
    81       itGlo.next();
    82       delete itGlo.value();
    83     }
    84     satDataGlo.clear();
    85     QMapIterator<QString, t_satData*> itGal(satDataGal);
    86     while (itGal.hasNext()) {
    87       itGal.next();
    88       delete itGal.value();
    89     }
    90     satDataGal.clear();
     78    satData.clear();
    9179  }
    9280
     
    9482    clear();
    9583    tt = from->tt;
    96     QMapIterator<QString, t_satData*> itGPS(from->satDataGPS);
    97     while (itGPS.hasNext()) {
    98       itGPS.next();
    99       satDataGPS[itGPS.key()] = new t_satData(*itGPS.value());
    100     }
    101     QMapIterator<QString, t_satData*> itGlo(from->satDataGlo);
    102     while (itGlo.hasNext()) {
    103       itGlo.next();
    104       satDataGlo[itGlo.key()] = new t_satData(*itGlo.value());
    105     }
    106     QMapIterator<QString, t_satData*> itGal(from->satDataGal);
    107     while (itGal.hasNext()) {
    108       itGal.next();
    109       satDataGal[itGal.key()] = new t_satData(*itGal.value());
     84    QMapIterator<QString, t_satData*> it(from->satData);
     85    while (it.hasNext()) {
     86      it.next();
     87      satData[it.key()] = new t_satData(*it.value());
    11088    }
    11189  }
    11290
    113   unsigned sizeGPS() const {return satDataGPS.size();}
    114   unsigned sizeGlo() const {return satDataGlo.size();}
    115   unsigned sizeGal() const {return satDataGal.size();}
    116   unsigned sizeAll() const {return satDataGPS.size() + satDataGlo.size() +
    117                                    satDataGal.size();}
     91  unsigned sizeSys(char system) const {
     92    unsigned ans = 0;
     93    QMapIterator<QString, t_satData*> it(satData);
     94    while (it.hasNext()) {
     95      it.next();
     96      if (it.value()->system() == system) {
     97        ++ans;
     98      }
     99    }
     100    return ans;
     101  }
     102  unsigned sizeAll() const {return satData.size();}
     103
    118104  bncTime                   tt;
    119   QMap<QString, t_satData*> satDataGPS;
    120   QMap<QString, t_satData*> satDataGlo;
    121   QMap<QString, t_satData*> satDataGal;
     105  QMap<QString, t_satData*> satData;
    122106};
    123107
Note: See TracChangeset for help on using the changeset viewer.