subroutine sync65(ss,nfa,nfb,naggressive,ntol,nhsym,ca,ncand,nrobust, & single_decode) parameter (NSZ=3413,NFFT=8192,MAXCAND=300) real ss(322,NSZ) real ccfblue(-11:540) !CCF with pseudorandom sequence real ccfred(NSZ) !Peak of ccfblue, as function of freq logical single_decode type candidate real freq real dt real sync real flip end type candidate type(candidate) ca(MAXCAND) common/steve/thresh0 if(ntol.eq.-99) stop !Silence compiler warning call setup65 df=12000.0/NFFT !df = 12000.0/8192 = 1.465 Hz ia=max(2,nint(nfa/df)) ib=min(NSZ-1,nint(nfb/df)) lag1=-11 lag2=59 nsym=126 ncand=0 fdot=0. ccfred=0. ccfblue=0. ccfmax=0. ipk=0 do i=ia,ib call xcor(ss,i,nhsym,nsym,lag1,lag2,ccfblue,ccf0,lagpk0,flip,fdot,nrobust) ! Remove best-fit slope from ccfblue and normalize so baseline rms=1.0 if(.not.single_decode) call slope(ccfblue(lag1),lag2-lag1+1, & lagpk0-lag1+1.0) ccfred(i)=ccfblue(lagpk0) if(ccfred(i).gt.ccfmax) then ccfmax=ccfred(i) ipk=i endif enddo call pctile(ccfred(ia:ib),ib-ia+1,35,xmed) ccfred(ia:ib)=ccfred(ia:ib)-xmed ccfred(ia-1)=ccfred(ia) ccfred(ib+1)=ccfred(ib) do i=ia,ib freq=i*df itry=0 ! if(naggressive.gt.0 .and. ntol.lt.1000 .and. ccfmax.ge.thresh0) then if(naggressive.gt.0 .and. ccfmax.ge.thresh0) then if(i.ne.ipk) cycle itry=1 ncand=ncand+1 else if(ccfred(i).ge.thresh0 .and. ccfred(i).gt.ccfred(i-1) .and. & ccfred(i).gt.ccfred(i+1)) then itry=1 ncand=ncand+1 endif endif if(itry.ne.0) then call xcor(ss,i,nhsym,nsym,lag1,lag2,ccfblue,ccf0,lagpk,flip,fdot, & nrobust) if(.not.single_decode) call slope(ccfblue(lag1),lag2-lag1+1, & lagpk-lag1+1.0) xlag=lagpk if(lagpk.gt.lag1 .and. lagpk.lt.lag2) then call peakup(ccfblue(lagpk-1),ccfmax,ccfblue(lagpk+1),dx2) xlag=lagpk+dx2 endif dtx=xlag*2048.0/11025.0 ccfblue(lag1)=0. ccfblue(lag2)=0. ca(ncand)%freq=freq ca(ncand)%dt=dtx ca(ncand)%flip=flip if(single_decode) then ca(ncand)%sync=db(ccfred(i)) - 16.0 else ca(ncand)%sync=ccfred(i) endif endif if(ncand.eq.MAXCAND) exit enddo return end subroutine sync65