97 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
| subroutine sync9(ss,nzhsym,lag1,lag2,ia,ib,ccfred,red2,ipkbest)
 | |
| 
 | |
|   include 'constants.f90'
 | |
|   real ss(184,NSMAX)
 | |
|   real ss1(184)
 | |
|   real ccfred(NSMAX)
 | |
|   real savg(NSMAX)
 | |
|   real savg2(NSMAX)
 | |
|   real smo(-5:25)
 | |
|   real sq(NSMAX)
 | |
|   real red2(NSMAX)
 | |
|   character*27 cr
 | |
|   data cr/'(C) 2016, Joe Taylor - K1JT'/
 | |
|   include 'jt9sync.f90'
 | |
| 
 | |
|   ipk=0
 | |
|   ipkbest=0
 | |
|   sbest=0.
 | |
|   ccfred=0.
 | |
| 
 | |
|   do i=ia,ib                         !Loop over freq range
 | |
|      ss1=ss(1:184,i)
 | |
|      call pctile(ss1,nzhsym,40,xmed)
 | |
| 
 | |
|      ss1=ss1/xmed - 1.0
 | |
|      do j=1,nzhsym
 | |
|         if(ss1(j).gt.3.0) ss1(j)=3.0
 | |
|      enddo
 | |
| 
 | |
|      call pctile(ss1,nzhsym,45,sbase)
 | |
|      ss1=ss1-sbase
 | |
|      sq0=dot_product(ss1(1:nzhsym),ss1(1:nzhsym))
 | |
|      rms=sqrt(sq0/(nzhsym-1))
 | |
| 
 | |
|      smax=0.
 | |
|      do lag=lag1,lag2                !DT = 2.5 to 5.0 s
 | |
|         sum1=0.
 | |
|         sq2=sq0
 | |
|         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)
 | |
|               sq2=sq2 - ss1(k)*ss1(k)
 | |
|               nsum=nsum-1
 | |
|            endif
 | |
|         enddo
 | |
|         if(sum1.gt.smax) then
 | |
|            smax=sum1
 | |
|            ipk=i 
 | |
|         endif
 | |
|         rms=sqrt(sq2/(nsum-1))
 | |
|      enddo
 | |
|      ccfred(i)=smax                        !Best at this freq, over all lags
 | |
|      if(smax.gt.sbest) then
 | |
|         sbest=smax
 | |
|         ipkbest=ipk
 | |
|      endif
 | |
|   enddo
 | |
| 
 | |
|   call pctile(ccfred(ia),ib-ia+1,50,xmed)
 | |
|   if(xmed.le.0.0) xmed=1.0
 | |
|   ccfred=2.0*ccfred/xmed 
 | |
| 
 | |
|   savg=0.
 | |
|   do j=1,nzhsym
 | |
|      savg(ia:ib)=savg(ia:ib) + ss(j,ia:ib)
 | |
|   enddo
 | |
|   savg(ia:ib)=savg(ia:ib)/nzhsym
 | |
|   smo(0:20)=1.0/21.0
 | |
|   smo(-5:-1)=-(1.0/21.0)*(21.0/10.0)
 | |
|   smo(21:25)=smo(-5)
 | |
| 
 | |
|   do i=ia,ib
 | |
|      sm=0.
 | |
|      do j=-5,25
 | |
|         if(i+j.ge.1 .and. i+j.lt.NSMAX) sm=sm + smo(j)*savg(i+j)
 | |
|      enddo
 | |
|      savg2(i)=sm
 | |
|      sq(i)=sm*sm
 | |
|   enddo
 | |
| 
 | |
|   call pctile(sq(ia:ib),ib-ia+1,20,sq0)
 | |
|   rms=sqrt(sq0)
 | |
|   savg2(ia:ib)=savg2(ia:ib)/(5.0*rms)
 | |
| 
 | |
|   red2=0.
 | |
|   do i=ia+11,ib-10
 | |
|      ref=max(savg2(i-10),savg2(i+10))
 | |
|      red2(i)=savg2(i)-ref
 | |
|      if(red2(i).lt.-99.0) red2(i)=-99.0
 | |
|      if(red2(i).gt.99.0) red2(i)=99.0
 | |
|   enddo
 | |
| 
 | |
|   return
 | |
| end subroutine sync9
 | 
