Changeset 10239 in ntrip for trunk


Ignore:
Timestamp:
Nov 6, 2023, 12:44:22 PM (7 months ago)
Author:
stuerze
Message:

An option 'Wait for full clock epoch' is added to combination procedure

Location:
trunk/BNC/src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/bnchelp.html

    r10150 r10239  
    221221&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.2 <a href=#combimethod>Method</a><br>
    222222&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.3 <a href=#combimax>Maximal Residuum</a><br>
    223 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.4 <a href=#combismpl>Sampling</a><br>
     223&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.4 <a href=#combiwait>Wait for full clock epoch</a><br>
     224&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.5 <a href=#combismpl>Sampling</a><br>
    224225&nbsp; &nbsp; &nbsp; 2.15 <a href=#upclk><b>Upload Corrections</b></a><br>
    225226&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.15.1 <a href=#upadd>Add, Delete Row</a><br>
     
    45504551Default is a 'Maximal Residuum' of 999.0 meters.</p>
    45514552
    4552 <p><h4 id="combismpl">2.14.1.4 Sampling - mandatory if 'Combine Corrections' table is populated</h4></p>
     4553<p><h4 id="combiwait">2.14.1.4 Wait for full clock epoch - mandatory if 'Combine Corrections' table is populated</h4></p>
     4554<p>
     4555During the combination process BNC is waiting for clock corrections input epoch by epoch.
     4556BNC drops whatever is received later than 'Wait for full clock epoch' seconds.
     4557A value of about 10 seconds is recommended, depending on the latency of the incoming streams
     4558and the delay acceptable to your real-time GNSS combination product.
     4559</p>
     4560
     4561<p><h4 id="combismpl">2.14.1.5 Sampling - mandatory if 'Combine Corrections' table is populated</h4></p>
    45534562<p>
    45544563Specify a combination sampling interval. Orbit and clock corrections will be produced following that interval.
    4555 value of 10 sec may be an appropriate choice.
     4564A value of 10 sec may be an appropriate choice.
    45564565</p>
    45574566
  • trunk/BNC/src/bncmain.cpp

    r10221 r10239  
    287287      "   cmbBsxFile      {SINEX Bias file, full path [char string]}\n"
    288288      "   cmbMaxres       {Clock outlier residuum threshold in meters [floating-point number]\n"
     289      "   cmbWait         {Wait for full clock epoch [integer number of seconds: 5-30]}\n"
    289290      "   cmbSampl        {Clock sampling rate [integer number of seconds: 0|10|20|30|40|50|60]}\n"
    290291      "   cmbGps          {GPS correction usage [integer number: 0=no,2=yes]}\n"
  • trunk/BNC/src/bncsettings.cpp

    r10157 r10239  
    172172    setValue_p("cmbMaxres",           "");
    173173    setValue_p("cmbSampl",          "10");
     174    setValue_p("cmbWait",           "10");
    174175    setValue_p("cmbGps",             "2");
    175176    setValue_p("cmbGlo",             "2");
  • trunk/BNC/src/bncwindow.cpp

    r10157 r10239  
    491491
    492492  _cmbMaxresLineEdit = new QLineEdit(settings.value("cmbMaxres").toString());
     493
     494  _cmbWaitSpinBox = new QSpinBox();
     495  _cmbWaitSpinBox->setMinimum(5);
     496  _cmbWaitSpinBox->setMaximum(30);
     497  _cmbWaitSpinBox->setSingleStep(1);
     498  _cmbWaitSpinBox->setSuffix(" sec");
     499  _cmbWaitSpinBox->setValue(settings.value("cmbWait").toInt());
    493500
    494501  _cmbSamplSpinBox = new QSpinBox;
     
    12921299  cmbLayout->addWidget(new QLabel("Max Residual"),                               5,  6, Qt::AlignLeft);
    12931300  cmbLayout->addWidget(_cmbMaxresLineEdit,                                       5,  7, Qt::AlignRight);
    1294   cmbLayout->addWidget(new QLabel("Sampling"),                                   6,  6, Qt::AlignLeft);
    1295   cmbLayout->addWidget(_cmbSamplSpinBox,                                         6,  7, Qt::AlignRight);
    1296   cmbLayout->addWidget(new QLabel("GNSS"),                                       7,  6, Qt::AlignLeft);
    1297   cmbLayout->addWidget(new QLabel("GPS (C1W/C2W)"),                                7,  7);
    1298   cmbLayout->addWidget(_cmbGpsCheckBox,                                          7,  8);
    1299   cmbLayout->addWidget(new QLabel("GLONASS (C1P/C2P)"),                          7,  9);
    1300   cmbLayout->addWidget(_cmbGloCheckBox,                                          7, 10);
    1301   cmbLayout->addWidget(new QLabel("Galileo (C1C/C5Q)"),                          7, 11);
    1302   cmbLayout->addWidget(_cmbGalCheckBox,                                          7, 12);
    1303   cmbLayout->addWidget(new QLabel("Beidou (C2I/C6I)"),                           7, 13);
    1304   cmbLayout->addWidget(_cmbBdsCheckBox,                                          7, 14);
    1305   cmbLayout->addWidget(new QLabel("QZSS (C1C/C2L)"),                             8,  7);
    1306   cmbLayout->addWidget(_cmbQzssCheckBox,                                         8,  8);
    1307   cmbLayout->addWidget(new QLabel("SBAS (C1C/C5Q)"),                             8,  9);
    1308   cmbLayout->addWidget(_cmbSbasCheckBox,                                         8, 10);
    1309   cmbLayout->addWidget(new QLabel("IRNSS"),                                      8, 11);
    1310   cmbLayout->addWidget(_cmbIrnssCheckBox,                                        8, 12);
    1311   cmbLayout->setRowStretch(8, 999);
     1301  cmbLayout->addWidget(new QLabel("Wait for full clock epoch"),                  6,  6, Qt::AlignLeft);
     1302  cmbLayout->addWidget(_cmbWaitSpinBox ,                                         6,  7, Qt::AlignRight);
     1303  cmbLayout->addWidget(new QLabel("Sampling"),                                   7,  6, Qt::AlignLeft);
     1304  cmbLayout->addWidget(_cmbSamplSpinBox,                                         7,  7, Qt::AlignRight);
     1305  cmbLayout->addWidget(new QLabel("GNSS"),                                       8,  6, Qt::AlignLeft);
     1306  cmbLayout->addWidget(new QLabel("GPS (C1W/C2W)"),                              8,  7);
     1307  cmbLayout->addWidget(_cmbGpsCheckBox,                                          8,  8);
     1308  cmbLayout->addWidget(new QLabel("GLONASS (C1P/C2P)"),                          8,  9);
     1309  cmbLayout->addWidget(_cmbGloCheckBox,                                          8, 10);
     1310  cmbLayout->addWidget(new QLabel("Galileo (C1C/C5Q)"),                          8, 11);
     1311  cmbLayout->addWidget(_cmbGalCheckBox,                                          8, 12);
     1312  cmbLayout->addWidget(new QLabel("Beidou (C2I/C6I)"),                           8, 13);
     1313  cmbLayout->addWidget(_cmbBdsCheckBox,                                          8, 14);
     1314  cmbLayout->addWidget(new QLabel("QZSS (C1C/C2L)"),                             9,  7);
     1315  cmbLayout->addWidget(_cmbQzssCheckBox,                                         9,  8);
     1316  cmbLayout->addWidget(new QLabel("SBAS (C1C/C5Q)"),                             9,  9);
     1317  cmbLayout->addWidget(_cmbSbasCheckBox,                                         9, 10);
     1318  cmbLayout->addWidget(new QLabel("IRNSS"),                                      9, 11);
     1319  cmbLayout->addWidget(_cmbIrnssCheckBox,                                        9, 12);
     1320  cmbLayout->setRowStretch(9, 999);
    13121321
    13131322  connect(addCmbRowButton, SIGNAL(clicked()), this, SLOT(slotAddCmbRow()));
     
    15291538  _cmbMethodComboBox->setWhatsThis(tr("<p>Select a clock combination approach. Options are 'Single-Epoch' and Kalman 'Filter'.</p><p>It is suggested to use the Kalman filter approach for the purpose of Precise Point Positioning. <i>[key: cmbMethod]</i></p>"));
    15301539  _cmbMaxresLineEdit->setWhatsThis(tr("<p>BNC combines all incoming clocks according to specified weights. Individual clock estimates that differ by more than 'Maximal residuum' meters from the average of all clocks will be ignored.<p></p>It is suggested to specify a value of about 0.2 m for the Kalman filter combination approach and a value of about 3.0 meters for the Single-Epoch combination approach.</p><p>Default is a value of '999.0'. <i>[key: cmbMaxres]</i></p>"));
     1540  _cmbWaitSpinBox->setWhatsThis(tr("<p>During the combination process BNC is waiting for clock corrections input epoch by epoch. BNC drops whatever is received later than 'Wait for full clock epoch' seconds.</p><p>A value of about 10 seconds is recommended, depending on the latency of the incoming streams and the delay acceptable to your real-time GNSS combination product. <i>[key: cmbWait]</i></p>"));
    15311541  _cmbSamplSpinBox->setWhatsThis(tr("<p>Select a combination Sampling interval for the clocks. Clock corrections will be produced following that interval.</p><p>A value of 10 sec may be an appropriate choice. A value of zero '0' tells BNC to use all available samples. <i>[key:  ]</i></p>"));
    15321542  _cmbGpsCheckBox->setWhatsThis(tr("<p>GPS clock corrections shall be combined. GPS Broadcast ephemeris and corrections are required. <i>[key: cmbGps]</i></p>"));
     
    16681678  _cmbTable->deleteLater();
    16691679  delete _cmbMaxresLineEdit;
     1680  delete _cmbWaitSpinBox;
    16701681  delete _cmbSamplSpinBox;
    16711682  delete _cmbMethodComboBox;
     
    21602171  settings.setValue("cmbMethod",     _cmbMethodComboBox->currentText());
    21612172  settings.setValue("cmbMaxres",     _cmbMaxresLineEdit->text());
     2173  settings.setValue("cmbWait",       _cmbWaitSpinBox->value());
    21622174  settings.setValue("cmbSampl",      _cmbSamplSpinBox->value());
    21632175  settings.setValue("cmbGps",        _cmbGpsCheckBox->checkState());
     
    24432455          _mountPointsTable->item(iRow, 5)->text() == thread->longitude() ) {
    24442456        ((bncTableItem*) _mountPointsTable->item(iRow, 8))->setGetThread(thread);
    2445         disconnect(thread, SIGNAL(newBytes(QByteArray, double)),
    2446                   _bncFigure, SLOT(slotNewData(QByteArray, double)));
    2447         connect(thread, SIGNAL(newBytes(QByteArray, double)),
    2448                 _bncFigure, SLOT(slotNewData(QByteArray, double)));
    2449         disconnect(thread, SIGNAL(newLatency(QByteArray, double)),
    2450                    _bncFigureLate, SLOT(slotNewLatency(QByteArray, double)));
    2451         connect(thread, SIGNAL(newLatency(QByteArray, double)),
    2452                 _bncFigureLate, SLOT(slotNewLatency(QByteArray, double)));
     2457        disconnect(thread, SIGNAL(newBytes(QByteArray, double)), _bncFigure, SLOT(slotNewData(QByteArray, double)));
     2458        connect(thread, SIGNAL(newBytes(QByteArray, double)), _bncFigure, SLOT(slotNewData(QByteArray, double)));
     2459        disconnect(thread, SIGNAL(newLatency(QByteArray, double)), _bncFigureLate, SLOT(slotNewLatency(QByteArray, double)));
     2460        connect(thread, SIGNAL(newLatency(QByteArray, double)), _bncFigureLate, SLOT(slotNewLatency(QByteArray, double)));
    24532461        break;
    24542462      }
     
    26852693      enableWidget(true, _cmbMethodComboBox);
    26862694      enableWidget(true, _cmbMaxresLineEdit);
     2695      enableWidget(true, _cmbWaitSpinBox);
    26872696      enableWidget(true, _cmbSamplSpinBox);
    26882697      enableWidget(true, _cmbGpsCheckBox);
     
    26982707      enableWidget(false, _cmbMethodComboBox);
    26992708      enableWidget(false, _cmbMaxresLineEdit);
     2709      enableWidget(false, _cmbWaitSpinBox);
    27002710      enableWidget(false, _cmbSamplSpinBox);
    27012711      enableWidget(false, _cmbGpsCheckBox);
  • trunk/BNC/src/bncwindow.h

    r10102 r10239  
    221221    QComboBox*     _cmbMethodComboBox;
    222222    QSpinBox*      _cmbSamplSpinBox;
     223    QSpinBox*      _cmbWaitSpinBox;
    223224    QCheckBox*     _cmbGpsCheckBox;
    224225    QCheckBox*     _cmbGloCheckBox;
  • trunk/BNC/src/combination/bnccomb.cpp

    r10235 r10239  
    132132    _cmbSampl = 5;
    133133  }
     134
     135  _cmbWait  = settings.value("cmbWait").toInt();
     136  if (_cmbWait <= 0) {
     137    _cmbSampl = 10;
     138  }
     139
    134140  _useGps = (Qt::CheckState(settings.value("cmbGps").toInt()) == Qt::Checked) ? true : false;
    135141  if (_useGps) {
     
    451457void bncComb::slotNewClkCorrections(QList<t_clkCorr> clkCorrections) {
    452458  QMutexLocker locker(&_mutex);
    453   const double outWait = 1.0 * _cmbSampl;
    454459  int    currentWeek = 0;
    455460  double currentSec  = 0.0;
     
    576581    // Process the front epoch
    577582    // -----------------------
    578     if (epoTime < (_lastClkCorrTime - outWait)) {
     583    if (epoTime < (_lastClkCorrTime - _cmbWait)) {
    579584      _resTime = epoTime;
    580585      processEpoch(_resTime, clkCorrVec);
  • trunk/BNC/src/combination/bnccomb.h

    r10235 r10239  
    256256  e_method                                   _method;
    257257  int                                        _cmbSampl;
     258  int                                        _cmbWait;
    258259  int                                        _ms;
    259260  QMap<char, cmbEpoch>                       _buffer;
Note: See TracChangeset for help on using the changeset viewer.