List decoding now supports 57 list messages.

This commit is contained in:
Joe Taylor 2020-11-30 11:41:50 -05:00
parent afc4f2fb54
commit 8285fd28a8
3 changed files with 23 additions and 21 deletions

View File

@ -501,6 +501,7 @@ set (wsjt_FSRCS
lib/qra_loops.f90 lib/qra_loops.f90
lib/qra/q65/q65_ap.f90 lib/qra/q65/q65_ap.f90
lib/qra/q65/q65_loops.f90 lib/qra/q65/q65_loops.f90
lib/qra/q65/q65_set_list.f90
lib/refspectrum.f90 lib/refspectrum.f90
lib/savec2.f90 lib/savec2.f90
lib/sec0.f90 lib/sec0.f90

View File

@ -90,16 +90,17 @@ contains
this%callback => callback this%callback => callback
if(nutc.eq.-999) print*,lapdx,nfa,nfb,nfqso !Silence warning if(nutc.eq.-999) print*,lapdx,nfa,nfb,nfqso !Silence warning
nFadingModel=1 nFadingModel=1
call q65_set_list(mycall,hiscall,hisgrid,codewords,ncw)
dgen=0 dgen=0
call q65_enc(dgen,codewords) !Initialize Q65 call q65_enc(dgen,codewords) !Initialize Q65
! nQSOprogress=3 !### ! nQSOprogress=3 !###
dat4=0 dat4=0
call timer('sync_q65',0) call timer('sync_q65',0)
call q65_sync(iwave,ntrperiod*12000,mode65,nQSOprogress,nsps,nfqso, & call q65_sync(iwave,ntrperiod*12000,mode65,codewords,ncw,nsps, &
ntol,xdt,f0,snr1,dat4,snr2,irc) nfqso,ntol,xdt,f0,snr1,dat4,snr2,irc)
call timer('sync_q65',1) call timer('sync_q65',1)
write(55,3055) nutc,xdt,f0,snr1,snr2,irc ! write(55,3055) nutc,xdt,f0,snr1,snr2,irc
3055 format(i4.4,4f9.2,i5) !3055 format(i4.4,4f9.2,i5)
if(irc.ge.0) then if(irc.ge.0) then
xdt1=xdt xdt1=xdt
f1=f0 f1=f0

View File

@ -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) xdt,f0,snr1,dat4,snr2,irc)
! Detect and align with the Q65 sync vector, returning time and frequency ! 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 (NSTEP=8) !Step size nsps/NSTEP
parameter (LN=2176*63) !LN=LL*NN; LL=64*(mode_q65+2), NN=63 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*2 iwave(0:nmax-1) !Raw data
integer isync(22) !Indices of sync symbols integer isync(22) !Indices of sync symbols
integer itone(85) 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 lag2=4.0/dtstep + 0.9999 !Include EME delays
endif endif
if(ncw.lt.1) go to 100
!###################################################################### !######################################################################
! Try list decoding via "Deep Likelihood". ! Try list decoding via "Deep Likelihood".
ipk=0 ipk=0
jpk=0 jpk=0
ccf_best=0. ccf_best=0.
do imsg=1,4 do imsg=1,ncw
ccf=0. i=1
msg='K1ABC W9XYZ RRR' k=0
if(imsg.eq.2) msg='K1ABC W9XYZ RR73' do j=1,85
if(imsg.eq.3) msg='K1ABC W9XYZ 73' if(j.eq.isync(i)) then
if(imsg.eq.4) msg='CQ K9AN EN50' i=i+1
call genq65(msg,0,msgsent,itone,i3,n3) itone(j)=-1
j=0 else
do k=1,85 k=k+1
if(sync(k)>0.) cycle itone(j)=codewords(k,imsg)
j=j+1 endif
codewords(j,imsg)=itone(k) - 1
enddo enddo
! Compute 2D ccf using all 85 symbols in the list message ! Compute 2D ccf using all 85 symbols in the list message
ccf=0.
do lag=lag1,lag2 do lag=lag1,lag2
do k=1,85 do k=1,85
j=j0 + NSTEP*(k-1) + 1 + lag 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 do ibw=0,10
b90=1.72**ibw b90=1.72**ibw
call q65_intrinsics_ff(s3,nsubmode,b90/baud,nFadingModel,s3prob) 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 if(irc.ge.0) then
snr2=esnodb - db(2500.0/baud) snr2=esnodb - db(2500.0/baud)
go to 900 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) ! Establish xdt, f0, and snr1 using sync symbols (and perhaps some AP symbols)
ccf=0. 100 ccf=0.
irc=-2 irc=-2
dat4=0 dat4=0
ia=ntol/df ia=ntol/df