WSJT-X/lib/sync9w.f90

82 lines
2.1 KiB
Fortran

subroutine sync9w(ss,nzhsym,lag1,lag2,ia,ib,ccfred,ccfblue,ipkbest,lagpk,nadd)
include 'constants.f90'
real ss(184,NSMAX)
real ss1(184),ss1save(184)
real ccfred(NSMAX)
real ccfblue(-9:18)
real sa(NSMAX),sb(NSMAX)
include 'jt9sync.f90'
! Smooth the symbol spectra (by an amount consistent with measured width??)
do j=1,nzhsym
sa=ss(j,1:NSMAX)
call smo(sa,NSMAX,sb,nadd)
call smo(sb,NSMAX,sa,nadd)
ss(j,1:NSMAX)=sa
enddo
ipk=0
ipkbest=0
sbest=0.
ccfred=0.
df=12000.0/16384.0
do i=ia,ib !Loop over specified freq range
ss1=ss(1:184,i) !Symbol amplitudes at this freq
call pctile(ss1,nzhsym,50,xmed) !Median level at this freq
ss1=ss1/xmed - 1.0
smax=0. !Find DT in specified range
do lag=lag1,lag2
sum1=0.
nsum=nzhsym
do j=1,16 !Sum over 16 sync symbols
k=ii2(j) + lag
if(k.ge.1 .and. k.le.nzhsym) then
sum1=sum1 + ss1(k)
nsum=nsum-1
endif
enddo
if(sum1.gt.smax) then
smax=sum1
ipk=i
endif
enddo
ccfred(i)=smax !Best at this freq, over all lags
if(smax.gt.sbest) then
sbest=smax
ipkbest=ipk
ss1save=ss1
endif
enddo
call pctile(ccfred(ia),ib-ia+1,50,xmed)
if(xmed.le.0.0) xmed=1.0
ccfred=ccfred/xmed
ss1=ss1save
smax=0. !Find DT in specified range
do lag=lag1,lag2
sum1=0.
nsum=nzhsym
do j=1,16 !Sum over 16 sync symbols
k=ii2(j) + lag
if(k.ge.1 .and. k.le.nzhsym) then
sum1=sum1 + ss1(k)
nsum=nsum-1
endif
enddo
ccfblue(lag)=sum1
if(sum1.gt.smax) then
smax=sum1
lagpk=lag
endif
enddo
if(lagpk.eq.-9) lagpk=-8 !Protect the ends of ccfblue()
if(lagpk.eq.18) lagpk=17
return
end subroutine sync9w