Average time delta computation

This commit is contained in:
Jordan Sherer 2018-10-29 02:02:58 -04:00
parent 6201de8c12
commit 38fc98702b
3 changed files with 51 additions and 9 deletions

View File

@ -1479,6 +1479,7 @@ void MainWindow::initializeDummyData(){
cd.ackTimestamp = i == 1 ? dt.addSecs(-900) : QDateTime{};
cd.utcTimestamp = dt;
cd.grid = i == 5 ? "J042" : i == 6 ? " FN42FN42FN" : "";
cd.tdrift = 0.1*i;
logCallActivity(cd, false);
ActivityDetail ad = {};
@ -3667,6 +3668,7 @@ void MainWindow::readFromStdout() //readFromStdout
cmd.grid = cd.grid;
cmd.freq = cd.freq;
cmd.utcTimestamp = cd.utcTimestamp;
cmd.tdrift = cd.tdrift;
m_rxCommandQueue.append(cmd);
}
@ -3709,6 +3711,7 @@ void MainWindow::readFromStdout() //readFromStdout
cmdcd.freq = cmd.freq;
cmdcd.utcTimestamp = cmd.utcTimestamp;
cmdcd.ackTimestamp = cmd.to == m_config.my_callsign() ? cmd.utcTimestamp : QDateTime{};
cmdcd.tdrift = cmd.tdrift;
logCallActivity(cmdcd, false);
}
@ -3740,7 +3743,8 @@ void MainWindow::readFromStdout() //readFromStdout
td.snr = snr;
td.freq = cmd.freq;
td.utcTimestamp = cmd.utcTimestamp;
m_callActivity[relayCall] = td;
td.tdrift = cmd.tdrift;
logCallActivity(td, true);
}
}
#endif
@ -4973,6 +4977,8 @@ void MainWindow::clearActivity(){
m_rxCommandQueue.clear();
m_lastTxMessage.clear();
resetTimeDeltaAverage();
clearTableWidget(ui->tableWidgetCalls);
createAllcallTableRows(ui->tableWidgetCalls, "");
@ -7074,11 +7080,13 @@ void MainWindow::on_driftSyncEndButton_clicked(){
void MainWindow::on_driftSyncResetButton_clicked(){
setDrift(0);
resetTimeDeltaAverage();
}
void MainWindow::setDrift(int n){
DriftingDateTime::setDrift(n);
qDebug() << qSetRealNumberPrecision(12) << "Average delta:" << m_timeDeltaMsMMA;
qDebug() << qSetRealNumberPrecision(12) << "Drift milliseconds:" << n;
qDebug() << qSetRealNumberPrecision(12) << "Clock time:" << QDateTime::currentDateTimeUtc();
qDebug() << qSetRealNumberPrecision(12) << "Drifted time:" << DriftingDateTime::currentDateTimeUtc();
@ -8230,6 +8238,25 @@ void MainWindow::processActivity(bool force) {
m_rxDirty = false;
}
void MainWindow::observeTimeDeltaForAverage(float delta){
// compute average drift
if(m_timeDeltaMsMMA_N == 0){
m_timeDeltaMsMMA_N++;
m_timeDeltaMsMMA = (int)(delta*1000);
} else {
m_timeDeltaMsMMA_N++;
m_timeDeltaMsMMA = (((m_timeDeltaMsMMA_N-1)*m_timeDeltaMsMMA) + (int)(delta*1000))/ min(m_timeDeltaMsMMA_N, 100);
}
// display average
ui->driftAvgLabel->setText(QString("Avg RX Drift: %1 ms").arg(m_timeDeltaMsMMA));
}
void MainWindow::resetTimeDeltaAverage(){
m_timeDeltaMsMMA = 0;
m_timeDeltaMsMMA_N = 0;
}
void MainWindow::processRxActivity() {
if(m_rxActivityQueue.isEmpty()){
return;
@ -8240,6 +8267,8 @@ void MainWindow::processRxActivity() {
while (!m_rxActivityQueue.isEmpty()) {
ActivityDetail d = m_rxActivityQueue.dequeue();
observeTimeDeltaForAverage(d.tdrift);
// use the actual frequency and check its delta from our current frequency
// meaning, if our current offset is 1502 and the d.freq is 1492, the delta is <= 10;
bool shouldDisplay = abs(d.freq - freqOffset) <= NEAR_THRESHOLD_RX;
@ -8555,6 +8584,7 @@ void MainWindow::processCommandActivity() {
cd.bits = d.bits;
cd.ackTimestamp = d.text.contains("HEARTBEAT ACK") || toMe ? d.utcTimestamp : QDateTime{};
cd.utcTimestamp = d.utcTimestamp;
cd.tdrift = d.tdrift;
logCallActivity(cd, true);
// we're only responding to allcall, groupcalls, and our callsign at this point, so we'll end after logging the callsigns we've heard
@ -8788,6 +8818,7 @@ void MainWindow::processCommandActivity() {
cd.freq = d.freq;
cd.through = d.from;
cd.utcTimestamp = DriftingDateTime::currentDateTimeUtc();
cd.tdrift = d.tdrift;
logCallActivity(cd, false);
}
@ -8881,6 +8912,7 @@ void MainWindow::processCommandActivity() {
cd.grid = grid;
cd.snr = d.snr;
cd.utcTimestamp = d.utcTimestamp;
cd.tdrift = d.tdrift;
m_aprsCallCache.remove(cd.call);
m_aprsCallCache.remove(APRSISClient::replaceCallsignSuffixWithSSID(cd.call, Radio::base_callsign(cd.call)));
@ -9270,7 +9302,7 @@ void MainWindow::displayBandActivity() {
snrItem->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter);
ui->tableWidgetRXAll->setItem(row, col++, snrItem);
auto tdriftItem = new QTableWidgetItem(QString::number(tdrift, 'f', 2));
auto tdriftItem = new QTableWidgetItem(QString("%1 ms").arg((int)(1000*tdrift)));
tdriftItem->setData(Qt::UserRole, QVariant(tdrift));
ui->tableWidgetRXAll->setItem(row, col++, tdriftItem);
@ -9480,7 +9512,7 @@ void MainWindow::displayCallActivity() {
ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem(QString("(%1)").arg(since(d.utcTimestamp))));
ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem(QString("%1").arg(Varicode::formatSNR(d.snr))));
ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem(QString("%1").arg(d.freq)));
ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem(QString::number(d.tdrift, 'f', 2)));
ui->tableWidgetCalls->setItem(row, col++, new QTableWidgetItem(QString("%1 ms").arg((int)(1000*d.tdrift))));
auto gridItem = new QTableWidgetItem(QString("%1").arg(d.grid.trimmed().left(4)));
gridItem->setToolTip(d.grid.trimmed());

View File

@ -741,7 +741,8 @@ private:
QString m_txTextDirtyLastSelectedCall;
QString m_lastTxMessage;
QDateTime m_lastTxTime;
int m_timeDeltaMsMMA;
int m_timeDeltaMsMMA_N;
enum Priority {
PriorityLow = 10,
@ -897,6 +898,8 @@ private:
void markOffsetDirected(int offset, bool isAllCall);
void clearOffsetDirected(int offset);
void processActivity(bool force=false);
void observeTimeDeltaForAverage(float delta);
void resetTimeDeltaAverage();
void processRxActivity();
void processCompoundActivity();
void processBufferedActivity();

View File

@ -1420,11 +1420,6 @@ QTextEdit[transmitting=&quot;true&quot;] {
<string>Callsign</string>
</property>
</column>
<column>
<property name="text">
<string>Offset</string>
</property>
</column>
<column>
<property name="text">
<string>Age</string>
@ -1435,6 +1430,11 @@ QTextEdit[transmitting=&quot;true&quot;] {
<string>SNR</string>
</property>
</column>
<column>
<property name="text">
<string>Offset</string>
</property>
</column>
<column>
<property name="text">
<string>Time Drift</string>
@ -2048,6 +2048,13 @@ background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #2ecc71, stop:1 #00FF
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="driftAvgLabel">
<property name="text">
<string>Avg RX Drift: 0 ms</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="driftSpinBox">
<property name="sizePolicy">