From 766c97870937c3ca854f8d2bd33c340751c805a6 Mon Sep 17 00:00:00 2001 From: Steven Franke Date: Sun, 25 Sep 2016 20:37:30 +0000 Subject: [PATCH] Make frequency search more efficient in msk144 realtime decoder. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7111 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- lib/makepings.f90 | 4 ++-- lib/msk144decodeframe.f90 | 3 +-- lib/msk144spd.f90 | 4 ++-- lib/msk144sync.f90 | 11 +++++++---- lib/mskrtd.f90 | 4 ++-- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/makepings.f90 b/lib/makepings.f90 index 68220a41c..1e2b12d2a 100644 --- a/lib/makepings.f90 +++ b/lib/makepings.f90 @@ -6,8 +6,8 @@ subroutine makepings(pings,npts,width,sig) iping0=-999 dt=1.0/12000.0 - do i=1,14,2 - t0(i)=i !Make pings at t=1, 3, ... 13 s. + do i=1,14 + t0(i)=i !Make pings at t=1, 2, ... 14 s. enddo w=width amp=sig diff --git a/lib/msk144decodeframe.f90 b/lib/msk144decodeframe.f90 index a8f89a8b6..3e74cccbd 100644 --- a/lib/msk144decodeframe.f90 +++ b/lib/msk144decodeframe.f90 @@ -87,13 +87,12 @@ subroutine msk144decodeframe(c,msgreceived,nsuccess) ssig=sqrt(s2av-sav*sav) softbits=softbits/ssig - sigma=0.72 + sigma=0.75 llr(1:48)=softbits(9:9+47) llr(49:128)=softbits(65:65+80-1) llr=2.0*llr/(sigma*sigma) max_iterations=10 - max_dither=1 ! call timer('bpdec144 ',0) call bpdecode144(llr,max_iterations,decoded,niterations) ! call timer('bpdec144 ',1) diff --git a/lib/msk144spd.f90 b/lib/msk144spd.f90 index a3f8ff355..f8c6c5ec3 100644 --- a/lib/msk144spd.f90 +++ b/lib/msk144spd.f90 @@ -154,7 +154,7 @@ subroutine msk144spd(cbig,n,ntol,nsuccess,msgreceived,fc,fret,tret) msgreceived=' ' npeaks=2 ntol0=8 - ndf=2 + deltaf=2.0 do icand=1,ndet ! Try to sync/demod/decode each candidate. ib=max(1,nstart(icand)-NSPM) ie=ib-1+3*NSPM @@ -166,7 +166,7 @@ subroutine msk144spd(cbig,n,ntol,nsuccess,msgreceived,fc,fret,tret) fo=fc+ferrs(icand) do iav=1,NPATTERNS navmask=navpatterns(1:3,iav) - call msk144sync(cdat,3,ntol0,ndf,navmask,npeaks,fo,fest,npkloc,nsyncsuccess,c) + call msk144sync(cdat,3,ntol0,deltaf,navmask,npeaks,fo,fest,npkloc,nsyncsuccess,c) if( nsyncsuccess .eq. 0 ) cycle diff --git a/lib/msk144sync.f90 b/lib/msk144sync.f90 index 754f450f5..12fa3ef4e 100644 --- a/lib/msk144sync.f90 +++ b/lib/msk144sync.f90 @@ -1,4 +1,4 @@ -subroutine msk144sync(cdat,nframes,ntol,ndf,navmask,npeaks,fc,fest,npklocs,nsuccess,c) +subroutine msk144sync(cdat,nframes,ntol,delf,navmask,npeaks,fc,fest,npklocs,nsuccess,c) parameter (NSPM=864) complex cdat(NSPM*nframes) @@ -55,8 +55,11 @@ subroutine msk144sync(cdat,nframes,ntol,ndf,navmask,npeaks,fc,fest,npklocs,nsucc xmax=0.0 bestf=0.0 n=nframes*NSPM - do ifr=-ntol,ntol,ndf !Find freq that maximizes sync - ferr=ifr + nf=nint(ntol/delf) + fac=1.0/(48.0*sqrt(float(navg))) + + do ifr=-nf,nf !Find freq that maximizes sync + ferr=ifr*delf call tweak1(cdat,n,-(fc+ferr),cdat2) c=0 do i=1,nframes @@ -75,7 +78,7 @@ subroutine msk144sync(cdat,nframes,ntol,ndf,navmask,npeaks,fc,fest,npklocs,nsucc enddo xcc=abs(cc) - xb=maxval(xcc)/(48.0*sqrt(float(navg))) + xb=maxval(xcc)*fac if(xb.gt.xmax) then xmax=xb bestf=ferr diff --git a/lib/mskrtd.f90 b/lib/mskrtd.f90 index 123fe834a..8a725ca77 100644 --- a/lib/mskrtd.f90 +++ b/lib/mskrtd.f90 @@ -99,9 +99,9 @@ subroutine mskrtd(id2,nutc0,tsec,ntol,nrxfreq,line) do iavg=1,NPATTERNS iavmask=iavpatterns(1:8,iavg) navg=sum(iavmask) - ndf=nint(7.0/navg) + deltaf=7.0/real(navg) ! search increment for frequency sync npeaks=2 - call msk144sync(cdat(1:8*NSPM),8,ntol,ndf,iavmask,npeaks,fc,fest,npkloc,nsyncsuccess,c) + call msk144sync(cdat(1:8*NSPM),8,ntol,deltaf,iavmask,npeaks,fc,fest,npkloc,nsyncsuccess,c) if( nsyncsuccess .eq. 0 ) cycle do ipk=1,npeaks