Minor tweaks to Q^% decoding scheme.

This commit is contained in:
Joe Taylor 2021-01-01 15:28:41 -05:00
parent 6b351165f2
commit e5a8e80c49
3 changed files with 21 additions and 21 deletions

View File

@ -23,7 +23,6 @@ subroutine q65_avg(nutc,ntrperiod,LL,nfqso,ntol,lclearave,xdt,f0,snr1,s3)
iutc=-1 iutc=-1
iseq=-1 iseq=-1
f0save=0.0 f0save=0.0
dtdiff=0.2
nsave=0 nsave=0
LL0=LL LL0=LL
first=.false. first=.false.
@ -73,6 +72,7 @@ subroutine q65_avg(nutc,ntrperiod,LL,nfqso,ntol,lclearave,xdt,f0,snr1,s3)
if(nsave.lt.2) go to 900 if(nsave.lt.2) go to 900
mode_q65=2**nsubmode mode_q65=2**nsubmode
f0diff=baud*mode_q65
ibwa=1.8*log(baud*mode_q65) + 2 ibwa=1.8*log(baud*mode_q65) + 2
ibwb=min(10,ibwa+4) ibwb=min(10,ibwa+4)
snr1sum=0. snr1sum=0.
@ -87,7 +87,7 @@ subroutine q65_avg(nutc,ntrperiod,LL,nfqso,ntol,lclearave,xdt,f0,snr1,s3)
if(iutc(i).lt.0) cycle if(iutc(i).lt.0) cycle
if(iseq(i).ne.iseq(nsave)) cycle !Sequence must match if(iseq(i).ne.iseq(nsave)) cycle !Sequence must match
if(abs(xdt-xdtsave(i)).gt.dtdiff) cycle !DT must be close if(abs(xdt-xdtsave(i)).gt.dtdiff) cycle !DT must be close
if(abs(f0-f0save(i)).gt.float(ntol)) cycle !Freq must match if(abs(f0-f0save(i)).gt.f0diff) cycle !Freq must match
cused(i)='$' !Flag for "use this one" cused(i)='$' !Flag for "use this one"
s3avg=s3avg + s3save(:,:,i) !Add this spectrum s3avg=s3avg + s3save(:,:,i) !Add this spectrum
snr1sum=snr1sum + snr1save(i) snr1sum=snr1sum + snr1save(i)
@ -97,7 +97,6 @@ subroutine q65_avg(nutc,ntrperiod,LL,nfqso,ntol,lclearave,xdt,f0,snr1,s3)
iused(navg)=i iused(navg)=i
enddo enddo
if(navg.lt.MAXAVE) iused(navg+1)=0 if(navg.lt.MAXAVE) iused(navg+1)=0
if(navg.lt.2) go to 900
! Find averages of snr1, xdt, and f0 used in this decoding attempt. ! Find averages of snr1, xdt, and f0 used in this decoding attempt.
snr1ave=0. snr1ave=0.
@ -118,6 +117,7 @@ subroutine q65_avg(nutc,ntrperiod,LL,nfqso,ntol,lclearave,xdt,f0,snr1,s3)
xdtsave(i),f0save(i) xdtsave(i),f0save(i)
1001 format(a1,i5.4,f6.1,f6.2,f7.1) 1001 format(a1,i5.4,f6.1,f6.2,f7.1)
enddo enddo
if(navg.lt.2) go to 900
s3avg=s3avg/navg s3avg=s3avg/navg
nFadingModel=1 nFadingModel=1

View File

@ -35,15 +35,14 @@ subroutine q65_loops(c00,npts2,nsps,mode_q65,nsubmode,ndepth,jpk0, &
if(iand(ndepth,3).ge.2) then if(iand(ndepth,3).ge.2) then
idfmax=5 idfmax=5
idtmax=5 idtmax=5
maxdist=15 maxdist=10
endif endif
if(iand(ndepth,3).eq.3) then if(iand(ndepth,3).eq.3) then
maxdist=25 maxdist=15
ibwa=max(1,ibwa-1) ibwa=max(1,ibwa-1)
ibwb=min(10,ibwb+1) ibwb=min(10,ibwb+1)
endif endif
LL=64*(mode_q65+2) LL=64*(mode_q65+2)
napmin=99 napmin=99
xdt1=xdt0 xdt1=xdt0
@ -57,7 +56,6 @@ subroutine q65_loops(c00,npts2,nsps,mode_q65,nsubmode,ndepth,jpk0, &
call twkfreq(c00,c0,npts2,6000.0,a) call twkfreq(c00,c0,npts2,6000.0,a)
do idt=1,idtmax do idt=1,idtmax
ndt=idt/2 ndt=idt/2
if(iaptype.eq.0) then
if(mod(idt,2).eq.0) ndt=-ndt if(mod(idt,2).eq.0) ndt=-ndt
jpk=jpk0 + nsps*ndt/16 !tsym/16 jpk=jpk0 + nsps*ndt/16 !tsym/16
if(jpk.lt.0) jpk=0 if(jpk.lt.0) jpk=0
@ -67,7 +65,6 @@ subroutine q65_loops(c00,npts2,nsps,mode_q65,nsubmode,ndepth,jpk0, &
call pctile(s3,LL*NN,40,base) call pctile(s3,LL*NN,40,base)
s3=s3/base s3=s3/base
where(s3(1:LL*NN)>s3lim) s3(1:LL*NN)=s3lim where(s3(1:LL*NN)>s3lim) s3(1:LL*NN)=s3lim
endif
do ibw=ibwa,ibwb do ibw=ibwa,ibwb
ndist=ndf**2 + ndt**2 + (ibw-ibw0)**2 ndist=ndf**2 + ndt**2 + (ibw-ibw0)**2
if(ndist.gt.maxdist) cycle if(ndist.gt.maxdist) cycle
@ -87,6 +84,9 @@ subroutine q65_loops(c00,npts2,nsps,mode_q65,nsubmode,ndepth,jpk0, &
enddo ! idf (f0 loop) enddo ! idf (f0 loop)
100 if(irc.ge.0) then 100 if(irc.ge.0) then
! write(55,3055) ndepth,iaptype,idf,idt,ibw,ndist,irc,sum(s3(1:LL*NN)), &
! trim(decoded)
!3055 format(7i4,f10.1,1x,a)
idec=iaptype+2 idec=iaptype+2
snr2=esnodb - db(2500.0/baud) snr2=esnodb - db(2500.0/baud)
xdt1=xdt0 + nsps*ndt/(16.0*6000.0) xdt1=xdt0 + nsps*ndt/(16.0*6000.0)

View File

@ -4,7 +4,7 @@ program test_q65
character*22 msg character*22 msg
character*8 arg character*8 arg
character*1 csubmode character*1 csubmode
integer naptype(1:6) integer naptype(0:5)
logical decok logical decok
nargs=iargc() nargs=iargc()
@ -93,8 +93,8 @@ program test_q65
!1000 format(/'Depth:',i2,' AP:',i2,' df:',i3,' dt:',i3,' bw1:',i3,' bw2:',i3, & !1000 format(/'Depth:',i2,' AP:',i2,' df:',i3,' dt:',i3,' bw1:',i3,' bw2:',i3, &
! ' dist:',i3) ! ' dist:',i3)
write(*,1010) (j,j=1,6) write(*,1010) (j,j=0,5)
write(12,1010) (j,j=1,6) write(12,1010) (j,j=0,5)
1010 format(' SNR Mode d Dop Sync Avg Dec Bad',6i4,' tdec avg rms'/ & 1010 format(' SNR Mode d Dop Sync Avg Dec Bad',6i4,' tdec avg rms'/ &
75('-')) 75('-'))