From de6f5e497509753539696240e944282f797fc85a Mon Sep 17 00:00:00 2001 From: Joe Taylor <joe@princeton.edu> Date: Mon, 30 Nov 2020 13:14:18 -0500 Subject: [PATCH] Q65 code cleanup. Use 3-digit format for the end-of-line flag. --- lib/decoder.f90 | 18 ++++++------------ lib/q65_decode.f90 | 39 +++++++++++++++------------------------ lib/q65_sync.f90 | 11 +++++++---- lib/qra/q65/q65_loops.f90 | 6 +++++- 4 files changed, 33 insertions(+), 41 deletions(-) diff --git a/lib/decoder.f90 b/lib/decoder.f90 index 49dca917b..011b98aa6 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -777,8 +777,7 @@ contains return end subroutine fst4_decoded - subroutine q65_decoded (this,nutc,sync,nsnr,dt,freq,decoded,irc, & - qual,ntrperiod,fmid,w50) + subroutine q65_decoded (this,nutc,sync,nsnr,dt,freq,decoded,idec,ntrperiod) use q65_decode implicit none @@ -790,22 +789,17 @@ contains real, intent(in) :: dt real, intent(in) :: freq character(len=37), intent(in) :: decoded - integer, intent(in) :: irc - real, intent(in) :: qual + integer, intent(in) :: idec integer, intent(in) :: ntrperiod - real, intent(in) :: fmid - real, intent(in) :: w50 - integer navg - navg=irc/100 if(ntrperiod.lt.60) then - write(*,1001) nutc,nsnr,dt,nint(freq),decoded,mod(irc,100),navg -1001 format(i6.6,i4,f5.1,i5,' + ',1x,a37,1x,i2,i4) + write(*,1001) nutc,nsnr,dt,nint(freq),decoded,idec +1001 format(i6.6,i4,f5.1,i5,' + ',1x,a37,1x,i3.3) write(13,1002) nutc,nint(sync),nsnr,dt,freq,0,decoded 1002 format(i6.6,i4,i5,f6.1,f8.0,i4,3x,a37,' Q65') else - write(*,1003) nutc,nsnr,dt,nint(freq),decoded,mod(irc,100),navg -1003 format(i4.4,i4,f5.1,i5,' + ',1x,a37,1x,i2,i4) + write(*,1003) nutc,nsnr,dt,nint(freq),decoded,idec +1003 format(i4.4,i4,f5.1,i5,' + ',1x,a37,1x,i3.3) write(13,1004) nutc,nint(sync),nsnr,dt,freq,0,decoded 1004 format(i4.4,i4,i5,f6.1,f8.0,i4,3x,a37,' Q65') diff --git a/lib/q65_decode.f90 b/lib/q65_decode.f90 index dcbcabc8e..5bfcc5215 100644 --- a/lib/q65_decode.f90 +++ b/lib/q65_decode.f90 @@ -8,7 +8,7 @@ module q65_decode abstract interface subroutine q65_decode_callback (this,nutc,sync,nsnr,dt,freq, & - decoded,nap,qual,ntrperiod,fmid,w50) + decoded,nap,ntrperiod) import q65_decoder implicit none class(q65_decoder), intent(inout) :: this @@ -19,10 +19,7 @@ module q65_decode real, intent(in) :: freq character(len=37), intent(in) :: decoded integer, intent(in) :: nap - real, intent(in) :: qual integer, intent(in) :: ntrperiod - real, intent(in) :: fmid - real, intent(in) :: w50 end subroutine q65_decode_callback end interface @@ -64,6 +61,9 @@ contains complex, allocatable :: c00(:) !Analytic signal, 6000 Sa/s complex, allocatable :: c0(:) !Analytic signal, 6000 Sa/s + id1=0 + id2=0 + id3=0 mode65=2**nsubmode npts=ntrperiod*12000 nfft1=ntrperiod*12000 @@ -93,21 +93,16 @@ contains 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,codewords,ncw,nsps, & - nfqso,ntol,xdt,f0,snr1,dat4,snr2,irc) + call q65_sync(nutc,iwave,ntrperiod*12000,mode65,codewords,ncw,nsps, & + nfqso,ntol,xdt,f0,snr1,dat4,snr2,id1) call timer('sync_q65',1) -! write(55,3055) nutc,xdt,f0,snr1,snr2,irc -!3055 format(i4.4,4f9.2,i5) - if(irc.ge.0) then + if(id1.eq.1) then xdt1=xdt f1=f0 go to 100 endif - irc=-9 if(snr1.lt.2.8) go to 100 jpk0=(xdt+1.0)*6000 !### Is this OK? if(ntrperiod.le.30) jpk0=(xdt+0.5)*6000 !### @@ -116,7 +111,6 @@ contains dd=fac*iwave(1:npts) nmode=65 call ana64(dd,npts,c00) - call ft8apset(mycall,hiscall,ncontest,apsym0,aph10) where(apsym0.eq.-1) apsym0=0 @@ -148,31 +142,28 @@ contains call timer('q65loops',0) call q65_loops(c00,nutc,npts/2,nsps/2,nmode,mode65,nsubmode, & nFadingModel,ndepth,jpk0,xdt,f0,iaptype,apmask,apsymbols, & - codewords,snr1,xdt1,f1,snr2,irc,dat4) + codewords,snr1,xdt1,f1,snr2,dat4,id2,id3) call timer('q65loops',1) snr2=snr2 + db(6912.0/nsps) - if(irc.ge.0) exit + if(id2+id3.gt.0) exit enddo 100 decoded=' ' -! if(irc.lt.0 .and.iaptype.eq.4) print*,'AAA',irc,iaptype - if(irc.ge.0) then -!### - navg=irc/100 -! irc=100*navg + ipass - irc=100*navg + iaptype -!### + idec=100*id1 + 10*id2 + id3 + write(71,3071) nutc,id1,id2,id3,irc +3071 format(5i6) + if(idec.gt.0) then write(c77,1000) dat4(1:12),dat4(13)/2 1000 format(12b6.6,b5.5) call unpack77(c77,0,decoded,unpk77_success) !Unpack to get msgsent nsnr=nint(snr2) call this%callback(nutc,sync,nsnr,xdt1,f1,decoded, & - irc,qual,ntrperiod,fmid,w50) + idec,ntrperiod) else ! Report sync, even if no decode. nsnr=db(snr1) - 35.0 call this%callback(nutc,sync,nsnr,xdt1,f1,decoded, & - irc,qual,ntrperiod,fmid,w50) + idec,ntrperiod) endif return diff --git a/lib/q65_sync.f90 b/lib/q65_sync.f90 index 3062cbb8d..87ac1fac5 100644 --- a/lib/q65_sync.f90 +++ b/lib/q65_sync.f90 @@ -1,5 +1,5 @@ -subroutine q65_sync(iwave,nmax,mode_q65,codewords,ncw,nsps,nfqso,ntol, & - xdt,f0,snr1,dat4,snr2,irc) +subroutine q65_sync(nutc,iwave,nmax,mode_q65,codewords,ncw,nsps,nfqso,ntol, & + xdt,f0,snr1,dat4,snr2,id1) ! Detect and align with the Q65 sync vector, returning time and frequency ! offsets and SNR estimate. @@ -32,6 +32,8 @@ subroutine q65_sync(iwave,nmax,mode_q65,codewords,ncw,nsps,nfqso,ntol, & data sync(1)/99.0/ save sync + id1=0 + dat4=0 LL=64*(2+mode_q65) nfft=nsps df=12000.0/nfft !Freq resolution = baud @@ -157,14 +159,15 @@ subroutine q65_sync(iwave,nmax,mode_q65,codewords,ncw,nsps,nfqso,ntol, & nsubmode=0 nFadingModel=1 baud=12000.0/nsps - dat4=0 - irc=-2 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,ncw,esnodb,dat4,plog,irc) if(irc.ge.0) then snr2=esnodb - db(2500.0/baud) + id1=1 +! write(55,3055) nutc,xdt,f0,snr2,plog,irc +!3055 format(i4.4,4f9.2,i5) go to 900 endif enddo diff --git a/lib/qra/q65/q65_loops.f90 b/lib/qra/q65/q65_loops.f90 index 5c48f85a1..59ba36c0e 100644 --- a/lib/qra/q65/q65_loops.f90 +++ b/lib/qra/q65/q65_loops.f90 @@ -1,6 +1,6 @@ subroutine q65_loops(c00,nutc,npts2,nsps,mode,mode_q65,nsubmode,nFadingModel, & ndepth,jpk0,xdt0,f0,iaptype,APmask,APsymbols,codewords,snr1, & - xdt1,f1,snr2,irc,dat4) + xdt1,f1,snr2,dat4,id2,id3) use packjt77 use timer_module, only: timer @@ -29,6 +29,8 @@ subroutine q65_loops(c00,nutc,npts2,nsps,mode,mode_q65,nsubmode,nFadingModel, & save nsave,s3avg + id2=0 + id3=0 ircbest=9999 allocate(c0(0:npts2-1)) irc=-99 @@ -101,10 +103,12 @@ subroutine q65_loops(c00,nutc,npts2,nsps,mode,mode_q65,nsubmode,nFadingModel, & call q65_dec_fullaplist(s3,s3prob,codewords,4,esnodb, & dat4,plog,irc) call timer('q65_apli',1) + if(irc.ge.0) id2=4 else call timer('q65_dec ',0) call q65_dec(s3,s3prob,APmask,APsymbols,esnodb,dat4,irc) call timer('q65_dec ',1) + if(irc.ge.0) id2=iaptype endif ! write(71,3071) 100*nutc,0.0,ndf,ndt,nbw,ndist,irc,iaptype, & ! kavg,nsave