From 8285fd28a8ed64d4be10bd3cea0eb88c65c714f4 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Mon, 30 Nov 2020 11:41:50 -0500 Subject: [PATCH] List decoding now supports 57 list messages. --- CMakeLists.txt | 1 + lib/q65_decode.f90 | 9 +++++---- lib/q65_sync.f90 | 34 +++++++++++++++++----------------- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b910350da..2dfdbc897 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -501,6 +501,7 @@ set (wsjt_FSRCS lib/qra_loops.f90 lib/qra/q65/q65_ap.f90 lib/qra/q65/q65_loops.f90 + lib/qra/q65/q65_set_list.f90 lib/refspectrum.f90 lib/savec2.f90 lib/sec0.f90 diff --git a/lib/q65_decode.f90 b/lib/q65_decode.f90 index 819aba0d1..dcbcabc8e 100644 --- a/lib/q65_decode.f90 +++ b/lib/q65_decode.f90 @@ -90,16 +90,17 @@ contains this%callback => callback if(nutc.eq.-999) print*,lapdx,nfa,nfb,nfqso !Silence warning nFadingModel=1 + call q65_set_list(mycall,hiscall,hisgrid,codewords,ncw) dgen=0 call q65_enc(dgen,codewords) !Initialize Q65 ! nQSOprogress=3 !### dat4=0 call timer('sync_q65',0) - call q65_sync(iwave,ntrperiod*12000,mode65,nQSOprogress,nsps,nfqso, & - ntol,xdt,f0,snr1,dat4,snr2,irc) + call q65_sync(iwave,ntrperiod*12000,mode65,codewords,ncw,nsps, & + nfqso,ntol,xdt,f0,snr1,dat4,snr2,irc) call timer('sync_q65',1) - write(55,3055) nutc,xdt,f0,snr1,snr2,irc -3055 format(i4.4,4f9.2,i5) +! write(55,3055) nutc,xdt,f0,snr1,snr2,irc +!3055 format(i4.4,4f9.2,i5) if(irc.ge.0) then xdt1=xdt f1=f0 diff --git a/lib/q65_sync.f90 b/lib/q65_sync.f90 index d47997d9a..3062cbb8d 100644 --- a/lib/q65_sync.f90 +++ b/lib/q65_sync.f90 @@ -1,4 +1,4 @@ -subroutine q65_sync(iwave,nmax,mode_q65,nQSOprogress,nsps,nfqso,ntol, & +subroutine q65_sync(iwave,nmax,mode_q65,codewords,ncw,nsps,nfqso,ntol, & xdt,f0,snr1,dat4,snr2,irc) ! Detect and align with the Q65 sync vector, returning time and frequency @@ -15,7 +15,6 @@ subroutine q65_sync(iwave,nmax,mode_q65,nQSOprogress,nsps,nfqso,ntol, & parameter (NSTEP=8) !Step size nsps/NSTEP parameter (LN=2176*63) !LN=LL*NN; LL=64*(mode_q65+2), NN=63 - character*37 msg,msgsent integer*2 iwave(0:nmax-1) !Raw data integer isync(22) !Indices of sync symbols integer itone(85) @@ -98,27 +97,28 @@ subroutine q65_sync(iwave,nmax,mode_q65,nQSOprogress,nsps,nfqso,ntol, & lag2=4.0/dtstep + 0.9999 !Include EME delays endif + if(ncw.lt.1) go to 100 + !###################################################################### ! Try list decoding via "Deep Likelihood". ipk=0 jpk=0 ccf_best=0. - do imsg=1,4 - ccf=0. - msg='K1ABC W9XYZ RRR' - if(imsg.eq.2) msg='K1ABC W9XYZ RR73' - if(imsg.eq.3) msg='K1ABC W9XYZ 73' - if(imsg.eq.4) msg='CQ K9AN EN50' - call genq65(msg,0,msgsent,itone,i3,n3) - j=0 - do k=1,85 - if(sync(k)>0.) cycle - j=j+1 - codewords(j,imsg)=itone(k) - 1 + do imsg=1,ncw + i=1 + k=0 + do j=1,85 + if(j.eq.isync(i)) then + i=i+1 + itone(j)=-1 + else + k=k+1 + itone(j)=codewords(k,imsg) + endif enddo - ! Compute 2D ccf using all 85 symbols in the list message + ccf=0. do lag=lag1,lag2 do k=1,85 j=j0 + NSTEP*(k-1) + 1 + lag @@ -162,7 +162,7 @@ subroutine q65_sync(iwave,nmax,mode_q65,nQSOprogress,nsps,nfqso,ntol, & do ibw=0,10 b90=1.72**ibw call q65_intrinsics_ff(s3,nsubmode,b90/baud,nFadingModel,s3prob) - call q65_dec_fullaplist(s3,s3prob,codewords,4,esnodb,dat4,plog,irc) + call q65_dec_fullaplist(s3,s3prob,codewords,ncw,esnodb,dat4,plog,irc) if(irc.ge.0) then snr2=esnodb - db(2500.0/baud) go to 900 @@ -171,7 +171,7 @@ subroutine q65_sync(iwave,nmax,mode_q65,nQSOprogress,nsps,nfqso,ntol, & !###################################################################### ! Establish xdt, f0, and snr1 using sync symbols (and perhaps some AP symbols) - ccf=0. +100 ccf=0. irc=-2 dat4=0 ia=ntol/df