93 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			93 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								subroutine sync65(ss,nfa,nfb,naggressive,ntol,nhsym,ca,ncand,nrobust,   &
							 | 
						||
| 
								 | 
							
								     bVHF)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  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 bVHF
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  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.bVHF) 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.bVHF) 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(bVHF) 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
							 |