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
This commit is contained in:
Steven Franke 2016-09-25 20:37:30 +00:00
parent 3ea464c785
commit 766c978709
5 changed files with 14 additions and 12 deletions

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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