Basic message averaging implemented for QRA65.

This commit is contained in:
Joe Taylor 2020-10-19 17:27:11 -04:00
parent df69562a9f
commit 35d8574426

View File

@ -9,9 +9,12 @@ subroutine qra_loops(c00,npts2,mode,mode64,nsubmode,nFadingModel, &
complex c0(0:720000) !Ditto, with freq shift complex c0(0:720000) !Ditto, with freq shift
real a(3) !twkfreq params f,f1,f2 real a(3) !twkfreq params f,f1,f2
real s3(LN) !Symbol spectra real s3(LN) !Symbol spectra
real s3a(LN) !Saved symbol spectra
real s3avg(LN) !Averaged symbol spectra
integer dat4(12),dat4x(12) !Decoded message (as 12 integers) integer dat4(12),dat4x(12) !Decoded message (as 12 integers)
integer nap(0:11) !AP return codes integer nap(0:11) !AP return codes
data nap/0,2,3,2,3,4,2,3,6,4,6,6/ data nap/0,2,3,2,3,4,2,3,6,4,6,6/,nsave/0/
save nsave,s3avg
irc=-99 irc=-99
s3lim=20. s3lim=20.
@ -30,6 +33,11 @@ subroutine qra_loops(c00,npts2,mode,mode64,nsubmode,nFadingModel, &
if(ndepth.eq.2) maxdist=10 if(ndepth.eq.2) maxdist=10
if(ndepth.eq.3) maxdist=30 if(ndepth.eq.3) maxdist=30
do iavg=0,1
if(iavg.eq.1) then
idfmax=1
idtmax=1
endif
do idf=1,idfmax do idf=1,idfmax
ndf=idf/2 ndf=idf/2
if(mod(idf,2).eq.0) ndf=-ndf if(mod(idf,2).eq.0) ndf=-ndf
@ -38,6 +46,7 @@ subroutine qra_loops(c00,npts2,mode,mode64,nsubmode,nFadingModel, &
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(iavg.eq.0) then
if(mod(idt,2).eq.0) ndt=-ndt if(mod(idt,2).eq.0) ndt=-ndt
jpk=jpk0 + 240*ndt !240/6000 = 0.04 s = tsym/32 jpk=jpk0 + 240*ndt !240/6000 = 0.04 s = tsym/32
if(jpk.lt.0) jpk=0 if(jpk.lt.0) jpk=0
@ -47,6 +56,10 @@ subroutine qra_loops(c00,npts2,mode,mode64,nsubmode,nFadingModel, &
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
if(iavg.eq.0 .and. idf.eq.1 .and. idt.eq.1) s3a(1:LL*NN)=s3(1:LL*NN)
else
s3(1:LL*NN)=s3avg(1:LL*NN)
endif
do ibw=ibwmax,ibwmin,-2 do ibw=ibwmax,ibwmin,-2
ndist=ndf**2 + ndt**2 + ((ibwmax-ibw)/2)**2 ndist=ndf**2 + ndt**2 + ((ibwmax-ibw)/2)**2
if(ndist.gt.maxdist) cycle if(ndist.gt.maxdist) cycle
@ -79,6 +92,12 @@ subroutine qra_loops(c00,npts2,mode,mode64,nsubmode,nFadingModel, &
!### if(iand(ndepth,3).lt.3 .and. irc.ge.0) go to 100 !### if(iand(ndepth,3).lt.3 .and. irc.ge.0) go to 100
enddo ! idt (DT loop) enddo ! idt (DT loop)
enddo ! idf (f0 loop) enddo ! idf (f0 loop)
if(iavg.eq.0 .and. abs(jpk0-4320).le.1300) then
s3avg(1:LL*NN)=s3avg(1:LL*NN)+s3a(1:LL*NN)
nsave=nsave+1
endif
if(iavg.eq.0 .and. nsave.lt.2) exit
enddo ! iavg
100 if(napmin.ne.99) then 100 if(napmin.ne.99) then
dat4=dat4x dat4=dat4x
@ -95,14 +114,18 @@ subroutine qra_loops(c00,npts2,mode,mode64,nsubmode,nFadingModel, &
200 if(mode.eq.65) xdt=xdt+0.4 !### Empirical -- WHY ??? ### 200 if(mode.eq.65) xdt=xdt+0.4 !### Empirical -- WHY ??? ###
!### For tests only:
if(irc.ge.0) then if(irc.ge.0) then
navg=nsave
if(iavg.eq.0) navg=0
!### For tests only:
open(53,file='fort.53',status='unknown',position='append') open(53,file='fort.53',status='unknown',position='append')
call unpackmsg(dat4,decoded) !Unpack the user message call unpackmsg(dat4,decoded) !Unpack the user message
write(53,3053) idf,idt,ibw,b90,xdt,f0,snr2,ndist,irc,decoded(1:22) write(53,3053) idf,idt,ibw,b90,xdt,f0,snr2,ndist,irc,navg,decoded(1:22)
3053 format(3i5,f7.1,f7.2,2f7.1,2i5,2x,a22) 3053 format(3i5,f7.1,f7.2,2f7.1,3i4,2x,a22)
close(53) close(53)
endif
!### !###
nsave=0
s3avg=0.
endif
return return
end subroutine qra_loops end subroutine qra_loops