From 77a0e01b05c5414cd6b3b114a81cce34e471d7e3 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Wed, 30 Dec 2020 12:10:03 -0500 Subject: [PATCH] Allow for all AP types when averaging Q65, and for navg > 9. --- lib/decoder.f90 | 19 ++++++++---- lib/q65_decode.f90 | 4 +-- lib/qra/q65/q65_avg.f90 | 64 ++++++++++++++++++++++++++++++----------- 3 files changed, 63 insertions(+), 24 deletions(-) diff --git a/lib/decoder.f90 b/lib/decoder.f90 index 26e5dcfa8..15ce66989 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -774,12 +774,21 @@ contains character(len=37), intent(in) :: decoded integer, intent(in) :: idec integer, intent(in) :: ntrperiod + integer iaptype,navg character*3 cflags - - write(cflags,1000) idec -1000 format('q',i2) - if(cflags(2:2).eq.' ') cflags(2:3)=cflags(3:3)//' ' - if(cflags(2:2).eq.'-') cflags=' ' + + cflags=' ' + if(idec.gt.0) then + iaptype=idec + navg=0 + if(idec.ge.100) then + iaptype=idec/100 + navg=mod(idec,100) + endif + cflags='q ' + write(cflags(2:2),'(i1)') iaptype + if(navg.ge.2) write(cflags(3:3),'(i1)') navg + endif if(ntrperiod.lt.60) then write(*,1001) nutc,nsnr,dt,nint(freq),decoded,cflags diff --git a/lib/q65_decode.f90 b/lib/q65_decode.f90 index 4ec007bcb..584f5aaa6 100644 --- a/lib/q65_decode.f90 +++ b/lib/q65_decode.f90 @@ -160,8 +160,8 @@ contains ! No single-transmission decode. if(iand(ndepth,16).eq.16) then - call q65_avg2(ntrperiod,ntol,baud,nsubmode,ibwa,ibwb,codewords,ncw, & - xdt,f0,snr1,snr2,dat4,idec) + call q65_avg2(ntrperiod,ntol,baud,nsubmode,nQSOprogress,lapcqonly, & + ibwa,ibwb,codewords,ncw,xdt,f0,snr1,snr2,dat4,idec) endif 100 decoded=' ' diff --git a/lib/qra/q65/q65_avg.f90 b/lib/qra/q65/q65_avg.f90 index fcf2b85bd..6c94c868e 100644 --- a/lib/qra/q65/q65_avg.f90 +++ b/lib/qra/q65/q65_avg.f90 @@ -5,6 +5,7 @@ subroutine q65_avg(nutc,ntrperiod,LL,ntol,lclearave,xdt,f0,snr1,s3) use q65 use packjt77 + character*78 c78 character*37 avemsg character*1 cused(MAXAVE) character*6 cutc @@ -12,7 +13,8 @@ subroutine q65_avg(nutc,ntrperiod,LL,ntol,lclearave,xdt,f0,snr1,s3) integer iused(MAXAVE) integer dat4(13) integer codewords(63,206) - logical first,lclearave + integer apmask1(78),apsymbols1(78) + logical first,lclearave,lapcqonly data first/.true./ save @@ -65,8 +67,8 @@ subroutine q65_avg(nutc,ntrperiod,LL,ntol,lclearave,xdt,f0,snr1,s3) 10 return - entry q65_avg2(ntrperiod,ntol,baud,nsubmode,ibwa,ibwb,codewords,ncw, & - xdt,f0,snr1,snr2,dat4,idec) + entry q65_avg2(ntrperiod,ntol,baud,nsubmode,nQSOprogress,lapcqonly, & + ibwa,ibwb,codewords,ncw,xdt,f0,snr1,snr2,dat4,idec) mode_q65=2**nsubmode ibwa=1.8*log(baud*mode_q65) + 2 @@ -123,30 +125,58 @@ subroutine q65_avg(nutc,ntrperiod,LL,ntol,lclearave,xdt,f0,snr1,s3) call q65_dec1(s3avg,nsubmode,b90ts,codewords,ncw,esnodb,irc,dat4,avemsg) ! irc=-99 !### TEMPORARY ### if(irc.ge.0 .and. plog.ge.PLOG_MIN) then - snr2=esnodb - db(2500.0/baud) + 3.0 !Empirical adjustment + snr2=esnodb - 0.5*db(2500.0/baud) + 3.0 !Empirical adjustment snr2=snr2 - db(float(navg)) !Is this right? - idec=10+navg + idec=100+navg ! print*,'C dec1 ',ibw,irc,idec,avemsg go to 900 endif enddo -! Should loop here over full range of available AP +! Loop over full range of available AP ! APmask=0 ! APsymbols=0 + npasses=2 + if(nQSOprogress.eq.5) npasses=3 + if(lapcqonly) npasses=1 + iaptype=0 + do ipass=0,npasses + apmask=0 !Try first with no AP information + apsymbols=0 - do ibw=ibwa,ibwb - b90=1.72**ibw - b90ts=b90/baud - call q65_dec2(s3avg,nsubmode,b90ts,esnodb,irc,dat4,avemsg) - if(irc.ge.0) then - snr2=esnodb - db(2500.0/baud) + 3.0 !Empirical adjustment - snr2=snr2 - db(float(navg)) !Is this right? - idec=10*(iaptype+2) + navg -! print*,'D dec2 ',ibw,dec,snr2,avemsg - go to 900 + if(ipass.ge.1) then + ! Subsequent passes use AP information appropiate for nQSOprogress + call q65_ap(nQSOprogress,ipass,ncontest,lapcqonly,iaptype, & + apsym0,apmask1,apsymbols1) + write(c78,1050) apmask1 +1050 format(78i1) + read(c78,1060) apmask +1060 format(13b6.6) + write(c78,1050) apsymbols1 + read(c78,1060) apsymbols + if(iaptype.eq.4) then + do j=1,3 + ng15=32401+j + write(c78(60:74),'(b15.15)') ng15 + read(c78,1060) dgen + call q65_enc(dgen,codewords(1,j)) + enddo + endif endif - enddo ! ibw (b90 loop) + + do ibw=ibwa,ibwb + b90=1.72**ibw + b90ts=b90/baud + call q65_dec2(s3avg,nsubmode,b90ts,esnodb,irc,dat4,avemsg) + if(irc.ge.0) then + snr2=esnodb - db(2500.0/baud) + 3.0 !Empirical adjustment + snr2=snr2 - 0.5*db(float(navg)) !Is this right? + idec=100*(iaptype+2) + navg +! print*,'D dec2 ',ibw,dec,snr2,avemsg + go to 900 + endif + enddo ! ibw + enddo ! ipass 900 return end subroutine q65_avg