From 5e0265a5ab7c2c0e7859eeabba3d551d8b993643 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 7 Jul 2017 15:27:15 +0000 Subject: [PATCH] Minor tweaks to FT8 decoder, including norder=3 if ndepth=3. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7805 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- lib/fsk4hf/ft8b.f90 | 7 +++++-- lib/fsk4hf/sync8.f90 | 8 ++++---- lib/ft8_decode.f90 | 6 +++--- mainwindow.cpp | 1 + 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/fsk4hf/ft8b.f90 b/lib/fsk4hf/ft8b.f90 index 11a9b3731..0091d2046 100644 --- a/lib/fsk4hf/ft8b.f90 +++ b/lib/fsk4hf/ft8b.f90 @@ -1,4 +1,5 @@ -subroutine ft8b(dd0,newdat,nfqso,f1,xdt,nharderrors,dmin,nbadcrc,message,xsnr) +subroutine ft8b(dd0,newdat,nfqso,ndepth,icand,sync0,f1,xdt,nharderrors, & + dmin,nbadcrc,message,xsnr) use timer_module, only: timer include 'ft8_params.f90' @@ -19,13 +20,13 @@ subroutine ft8b(dd0,newdat,nfqso,f1,xdt,nharderrors,dmin,nbadcrc,message,xsnr) max_iterations=40 norder=2 + if(ndepth.eq.3 .and. abs(nfqso-f1).lt.10.0) norder=3 fs2=12000.0/NDOWN dt2=1.0/fs2 twopi=8.0*atan(1.0) delfbest=0. ibest=0 -! if(abs(nfqso-f1).lt.10.0) norder=3 call timer('ft8_down',0) call ft8_downsample(dd0,newdat,f1,cd0) !Mix f1 to baseband and downsample call timer('ft8_down',1) @@ -141,6 +142,8 @@ subroutine ft8b(dd0,newdat,nfqso,f1,xdt,nharderrors,dmin,nbadcrc,message,xsnr) if( xnoi.gt.0 .and. xnoi.lt.xsig ) xsnr=xsig/xnoi-1.0 xsnr=10.0*log10(xsnr)-27.0 if( xsnr .lt. -24.0 ) xsnr=-24.0 +! write(50,3050) icand,sync0,f1,xdt,nharderrors,dmin,message +!3050 format(i3,3f10.3,i5,f10.3,2x,a22) endif 900 continue diff --git a/lib/fsk4hf/sync8.f90 b/lib/fsk4hf/sync8.f90 index 1fcd368e3..35c402f58 100644 --- a/lib/fsk4hf/sync8.f90 +++ b/lib/fsk4hf/sync8.f90 @@ -8,8 +8,8 @@ subroutine sync8(dd,nfa,nfb,nfqso,s,candidate,ncand) real x(NFFT1) real sync2d(NH1,-JZ:JZ) real red(NH1) - real candidate0(3,100) - real candidate(3,100) + real candidate0(3,200) + real candidate(3,200) real dd(NMAX) integer jpeak(NH1) integer indx(NH1) @@ -88,12 +88,12 @@ subroutine sync8(dd,nfa,nfb,nfqso,s,candidate,ncand) do i=1,100 n=ia + indx(iz+1-i) - 1 if(red(n).lt.syncmin) exit - k=k+1 + if(k.lt.200) k=k+1 candidate0(1,k)=n*df candidate0(2,k)=(jpeak(n)-1)*tstep candidate0(3,k)=red(n) enddo - ncand=min(100,k) + ncand=k ! Put nfqso at top of list, and save only the best of near-dupe freqs. do i=1,ncand diff --git a/lib/ft8_decode.f90 b/lib/ft8_decode.f90 index 72380dc39..460302f47 100644 --- a/lib/ft8_decode.f90 +++ b/lib/ft8_decode.f90 @@ -32,7 +32,7 @@ contains class(ft8_decoder), intent(inout) :: this procedure(ft8_decode_callback) :: callback real s(NH1,NHSYM) - real candidate(3,100) + real candidate(3,200) real dd(15*12000) logical, intent(in) :: newdat, nagain character*12 mycall, hiscall @@ -52,7 +52,6 @@ contains call timer('sync8 ',1) syncmin=2.0 -! rewind 51 do icand=1,ncand sync=candidate(3,icand) if(sync.lt.syncmin) cycle @@ -60,7 +59,8 @@ contains xdt=candidate(2,icand) nsnr0=min(99,nint(10.0*log10(sync) - 25.5)) !### empirical ### call timer('ft8b ',0) - call ft8b(dd,newdat,nfqso,f1,xdt,nharderrors,dmin,nbadcrc,message,xsnr) + call ft8b(dd,newdat,nfqso,ndepth,icand,sync,f1,xdt,nharderrors, & + dmin,nbadcrc,message,xsnr) nsnr=xsnr xdt=xdt-0.6 call timer('ft8b ',1) diff --git a/mainwindow.cpp b/mainwindow.cpp index d062f8a99..674ea54ed 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1788,6 +1788,7 @@ void MainWindow::keyPressEvent (QKeyEvent * e) case Qt::Key_Minus: if(e->modifiers() & Qt::ControlModifier) { int f=ui->TxFreqSpinBox->value()/50; + if((ui->TxFreqSpinBox->value() % 50) == 0) f=f-1; ui->TxFreqSpinBox->setValue(50*f); return; }