From ed03e0003dbe2aacb2ad0866eb6b520ddaa78b91 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 30 Aug 2012 18:21:41 +0000 Subject: [PATCH] Better logic for message averaging. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/map65@2543 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- libm65/decode1a.f | 17 ++++++++-------- libm65/map65a.f90 | 1 + libm65/s3avg.f90 | 51 ++++++++++++++++++++++++++++++----------------- mainwindow.cpp | 10 ++-------- 4 files changed, 45 insertions(+), 34 deletions(-) diff --git a/libm65/decode1a.f b/libm65/decode1a.f index aaaafbcac..96831ad5c 100644 --- a/libm65/decode1a.f +++ b/libm65/decode1a.f @@ -18,7 +18,7 @@ character decoded*22 character mycall*12,hiscall*12,hisgrid*6 data first/.true./,jjjmin/1000/,jjjmax/-1000/ - data nutc0/-999/,nkhz0/-999/ + data nutc0/-999/,nhz0/-9999999/ save ! Mix sync tone to baseband, low-pass filter, downsample to 1378.125 Hz @@ -133,17 +133,18 @@ call timer('dec65b ',1) if(nqd.eq.1 .and. nkv.eq.0) then - if(nutc.ne.nutc0 .or. nkhz.ne.nkhz0) syncbest=0. + nhz=1000*nkhz + ndf + if(nutc.ne.nutc0 .or. abs(nhz-nhz0).ge.1000) syncbest=0. !### 1000 ?? if(sync2.gt.syncbest) then - if(nutc.eq.nutc0 .and. nkhz.eq.nkhz0) nsave=nsave-1 - if(nkhz.ne.nkhz0) nsave=0 - nkhz0=nkhz - nsave=min(32,nsave+1) - nsave=max(1,nsave) + nsave=nsave+1 + nsave=mod(nsave-1,64)+1 npol=nint(57.296*pol) - call s3avg(nsave,mode65,nutc,ndf,dt+0.8,npol,s3,nsum, + xdt=dt+0.8 + + call s3avg(nsave,mode65,nutc,nhz,xdt,npol,s3,nsum, + nkv,decoded) syncbest=sync2 + nhz0=nhz endif nutc0=nutc endif diff --git a/libm65/map65a.f90 b/libm65/map65a.f90 index a5d2d270c..38ebd7745 100644 --- a/libm65/map65a.f90 +++ b/libm65/map65a.f90 @@ -37,6 +37,7 @@ subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, & mousefqso0=mousefqso xpol=(nxpol.ne.0) if(.not.xpol) ndphi=0 + nsum=0 !### Should use AppDir! ### ! open(23,file='release/CALL3.TXT',status='unknown') diff --git a/libm65/s3avg.f90 b/libm65/s3avg.f90 index a3cceb8fd..437286bef 100644 --- a/libm65/s3avg.f90 +++ b/libm65/s3avg.f90 @@ -1,39 +1,54 @@ -subroutine s3avg(nsave,mode65,nutc,ndf,xdt,npol,s3,nsum,nkv,decoded) +subroutine s3avg(nsave,mode65,nutc,nhz,xdt,npol,s3,nsum,nkv,decoded) ! Save the current synchronized spectra, s3(64,63), for possible ! decoding of average. real s3(64,63) !Synchronized spectra for 63 symbols - real s3a(64,63,32) !Saved spectra - real s3b(64,63) !Average - integer iutc(32),idf(32),ipol(32) - real dt(32) + real s3a(64,63,64) !Saved spectra + real s3b(64,63) !Average spectra + integer iutc(64),ihz(64),ipol(64) + real dt(64) character*22 decoded - logical ltext + logical ltext,first + data first/.true./ save + + if(first) then + iutc=-1 + ihz=0 + ipol=0 + first=.false. + ihzdiff=100 + dtdiff=0.2 + endif + + do i=1,64 + if(nutc.eq.iutc(i) .and. abs(nhz-ihz(i)).lt.ihzdiff) then + nsave=mod(nsave-1+64,64)+1 + go to 900 + endif + enddo iutc(nsave)=nutc !Save UTC - idf(nsave)=ndf !Save DF + ihz(nsave)=nhz !Save freq in Hz ipol(nsave)=npol !Save pol dt(nsave)=xdt !Save DT s3a(1:64,1:63,nsave)=s3 !Save the spectra - write(71,3001) nsave,nutc,ndf,npol,xdt -3001 format(4i5,f8.1) - flush(71) - s3b=0. - nsum=0 - idfdiff=100 - dtdiff=0.2 - do i=1,nsave !Accumulate avg spectra - if(mod(iutc(i),2).ne.mod(nutc,2)) cycle !Use only 1st or 2nd sequence - if(abs(ndf-idf(i)).gt.idfdiff) cycle !DF must match + do i=1,64 !Accumulate avg spectra + if(iutc(i).lt.0) cycle + if(mod(iutc(i),2).ne.mod(nutc,2)) cycle !Use only same sequence + if(abs(nhz-ihz(i)).gt.ihzdiff) cycle !Freq must match if(abs(xdt-dt(i)).gt.dtdiff) cycle !DT must match s3b=s3b + s3a(1:64,1:63,i) nsum=nsum+1 enddo +! write(71,3001) nutc,nsave,nhz,npol,xdt +!3001 format(4i8,1f8.1) +! flush(71) + decoded=' ' if(nsum.ge.2) then !Try decoding the sverage nadd=mode65*nsum @@ -45,5 +60,5 @@ subroutine s3avg(nsave,mode65,nutc,ndf,xdt,npol,s3,nsum,nkv,decoded) endif endif - return +900 return end subroutine s3avg diff --git a/mainwindow.cpp b/mainwindow.cpp index e8c9ac4d2..7f0050f2f 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -822,7 +822,7 @@ void MainWindow::createStatusBar() //createStatusBar lab5->setFrameStyle(QFrame::Panel | QFrame::Sunken); statusBar()->addWidget(lab5); - lab6 = new QLabel("Avg: 0/0"); + lab6 = new QLabel("Avg: 0"); lab6->setAlignment(Qt::AlignHCenter); lab6->setMinimumSize(QSize(50,10)); lab6->setFrameStyle(QFrame::Panel | QFrame::Sunken); @@ -1264,7 +1264,7 @@ void MainWindow::readFromStdout() //readFromStdout m_nsum=t.mid(17,4).toInt(); m_nsave=t.mid(21,4).toInt(); QString t2; - t2.sprintf("Avg: %d/%d",m_nsum,m_nsave); + t2.sprintf("Avg: %d",m_nsum); lab6->setText(t2); } if(t.indexOf("") >= 0) { @@ -1337,7 +1337,6 @@ void MainWindow::guiUpdate() static int nc1=1; static char msgsent[23]; static int nsendingsh=0; - static int fQSOz=-1; int khsym=0; double tx1=0.0; @@ -1504,11 +1503,6 @@ void MainWindow::guiUpdate() QDateTime t = QDateTime::currentDateTimeUtc(); int fQSO=g_pWideGraph->QSOfreq(); - if(fQSO != fQSOz) { - qDebug() << fQSOz << fQSO << m_nutc0; - m_nsave=0; - fQSOz=fQSO; - } g_pAstro->astroUpdate(t, m_myGrid, m_hisGrid, fQSO, m_setftx, m_txFreq, m_azelDir); m_setftx=0;