From 25d644955f013f0af99e5f6cb4b705119ffb3199 Mon Sep 17 00:00:00 2001 From: Jordan Sherer Date: Thu, 7 May 2020 16:15:38 -0400 Subject: [PATCH] SyncStats should be output differently than DecoderDebug --- lib/js8/js8dec.f90 | 4 +- lib/js8/subtractjs8.f90 | 10 ++-- mainwindow.cpp | 110 ++++++++++++++++++++++------------------ 3 files changed, 67 insertions(+), 57 deletions(-) diff --git a/lib/js8/js8dec.f90 b/lib/js8/js8dec.f90 index df3dc2d..7db0d2d 100644 --- a/lib/js8/js8dec.f90 +++ b/lib/js8/js8dec.f90 @@ -225,7 +225,7 @@ subroutine js8dec(dd0,icos,newdat,syncStats,nQSOProgress,nfqso,nftx,ndepth,lapon endif if(syncStats) then - write(*,*) ' candidate ', NSUBMODE, 'f1', f1, 'sync', nsync, 'xdt', xdt + write(*,*) ' candidate ', NSUBMODE, 'f1', f1, 'sync', nsync, 'xdt', xdt flush(6) endif @@ -423,7 +423,7 @@ subroutine js8dec(dd0,icos,newdat,syncStats,nQSOProgress,nfqso,nftx,ndepth,lapon if(nbadcrc.eq.0) then if(syncStats) then - write(*,*) ' decode ', NSUBMODE, 'f1', f1, 'sync', (sync*10), 'xdt', xdt2 + write(*,*) ' decode ', NSUBMODE, 'f1', f1, 'sync', (sync*10), 'xdt', xdt2 flush(6) endif diff --git a/lib/js8/subtractjs8.f90 b/lib/js8/subtractjs8.f90 index 18bcd95..93daaf5 100644 --- a/lib/js8/subtractjs8.f90 +++ b/lib/js8/subtractjs8.f90 @@ -20,7 +20,7 @@ subroutine subtractjs8(dd,itone,f0,dt) nstart=dt*12000+1 - if(NWRITELOG.eq.0) then + if(NWRITELOG.eq.1) then write(*,*) ' generating reference signal', nstart flush(6) endif @@ -33,14 +33,14 @@ subroutine subtractjs8(dd,itone,f0,dt) if(id.ge.1.and.id.le.NMAX) camp(i)=dd(id)*conjg(cref(i)) enddo - if(NWRITELOG.eq.0) then + if(NWRITELOG.eq.1) then write(*,*) ' filtering', NFFT flush(6) endif if(first) then ! Create and normalize the filter - if(NWRITELOG.eq.0) then + if(NWRITELOG.eq.1) then write(*,*) ' creating and normalizing filter' flush(6) endif @@ -94,7 +94,7 @@ subroutine subtractjs8(dd,itone,f0,dt) endif endif - if(NWRITELOG.eq.0) then + if(NWRITELOG.eq.1) then write(*,*) ' generating complex amplitude' flush(6) endif @@ -105,7 +105,7 @@ subroutine subtractjs8(dd,itone,f0,dt) cfilt(1:NFFT)=cfilt(1:NFFT)*cw(1:NFFT) call four2a(cfilt,NFFT,1,1,1) - if(NWRITELOG.eq.0) then + if(NWRITELOG.eq.1) then write(*,*) ' subtracting filtered reference', NFFT flush(6) endif diff --git a/mainwindow.cpp b/mainwindow.cpp index 86d3298..e8d3fcb 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -4874,71 +4874,81 @@ void MainWindow::processDecodedLine(QByteArray t){ static bool hasNewDrift = false; static int newDrift = 0; - if(t.indexOf("") >= 0) { - if(t.indexOf("f1") >= 0){ + if(t.indexOf("") >= 0) { auto segs = QString(t.trimmed()).split(QRegExp("[\\s\\t]+"), QString::SkipEmptyParts); - if(!segs.isEmpty()){ - auto m1 = QString(segs.at(2)); - auto m = int(m1.toInt()); - auto period = computePeriodForSubmode(m); + if(segs.isEmpty()){ + return; + } - auto f1 = QString(segs.at(4)); - auto f = int(f1.toFloat()); + auto m1 = QString(segs.at(2)); + auto m = int(m1.toInt()); + auto period = computePeriodForSubmode(m); - auto s1 = QString(segs.at(6)); - auto s = int(s1.toFloat()); + auto f1 = QString(segs.at(4)); + auto f = int(f1.toFloat()); - auto xdt1 = QString(segs.at(8)); - auto xdt = int(xdt1.toFloat()); + auto s1 = QString(segs.at(6)); + auto s = int(s1.toFloat()); - if(abs(xdt) <= 2){ - if(s < 10){ - m_wideGraph->drawLine(QColor(Qt::darkCyan), f, f + computeBandwidthForSubmode(m)); - } else if (s <= 21){ - m_wideGraph->drawLine(QColor(Qt::white), f, f + computeBandwidthForSubmode(m)); - } - } + auto xdt1 = QString(segs.at(8)); + auto xdt = int(xdt1.toFloat()); - if(t.contains("decode")){ - auto now = QDateTime::currentDateTimeUtc(); - - float n = 0; - float nPos = period - (now.time().second() % period); - float nNeg = (now.time().second() % period) - period; - - if(qAbs(nNeg) < nPos){ - n = nNeg; - } else { - n = nPos; - } - - n -= (float)period; - n += computeFramesNeededForDecode(m)/RX_SAMPLE_RATE; - n -= xdt/2; - - int xdtmin = qMin(n*1000, (float)DriftingDateTime::drift()); - int xdtmax = qMax(n*1000, (float)DriftingDateTime::drift()); - - m_wideGraph->drawLine(QColor(Qt::red), f, f + computeBandwidthForSubmode(m)); - - int oldNewDrift = newDrift; - newDrift = (xdtmin + (xdtmax-xdtmin)/2); - newDrift = qMin(oldNewDrift, newDrift) + (qMax(oldNewDrift, newDrift)-qMin(oldNewDrift, newDrift))/2; - hasNewDrift = true; + // only draw candidates + if(abs(xdt) <= 2){ + if(s < 10){ + m_wideGraph->drawLine(QColor(Qt::darkCyan), f, f + computeBandwidthForSubmode(m)); + } else if (s <= 21){ + m_wideGraph->drawLine(QColor(Qt::white), f, f + computeBandwidthForSubmode(m)); } } - } - if(JS8_DEBUG_DECODE) qDebug() << "--> busy?" << m_decoderBusy << "lock exists?" << ( QFile{m_config.temp_dir ().absoluteFilePath (".lock")}.exists()); - return; + if(!t.contains("decode")){ + return; + } + + // but use decodes for drift + auto now = QDateTime::currentDateTimeUtc(); + + float n = 0; + float nPos = period - (now.time().second() % period); + float nNeg = (now.time().second() % period) - period; + + if(qAbs(nNeg) < nPos){ + n = nNeg; + } else { + n = nPos; + } + + n -= (float)period; + n += computeFramesNeededForDecode(m)/RX_SAMPLE_RATE; + n -= xdt; + + int xdtmin = qMin(n*1000, (float)DriftingDateTime::drift()); + int xdtmax = qMax(n*1000, (float)DriftingDateTime::drift()); + + m_wideGraph->drawLine(QColor(Qt::red), f, f + computeBandwidthForSubmode(m)); + + int oldNewDrift = newDrift; + newDrift = (xdtmin + (xdtmax-xdtmin)/2); + newDrift = qMin(oldNewDrift, newDrift) + (qMax(oldNewDrift, newDrift)-qMin(oldNewDrift, newDrift))/2; + hasNewDrift = true; + + if(JS8_DEBUG_DECODE) qDebug() << "--> busy?" << m_decoderBusy << "lock exists?" << ( QFile{m_config.temp_dir ().absoluteFilePath (".lock")}.exists()); + + return; } if(t.indexOf("") >= 0) { - if(JS8_DEBUG_DECODE) qDebug() << "--> busy?" << m_decoderBusy << "lock exists?" << ( QFile{m_config.temp_dir ().absoluteFilePath (".lock")}.exists()); - return; + if(JS8_DEBUG_DECODE) qDebug() << "--> busy?" << m_decoderBusy << "lock exists?" << ( QFile{m_config.temp_dir ().absoluteFilePath (".lock")}.exists()); + return; + } + + if(t.indexOf("") >= 0) { + return; } if(t.indexOf("") >= 0) { + // TODO: decide if we should adjust here... if(hasNewDrift){ static int driftN = 1; newDrift = ((driftN-1)*DriftingDateTime::drift() + newDrift)/driftN;