82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
		
		
			
		
	
	
			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
 |