mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	
		
			
	
	
		
			85 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			FortranFixed
		
	
	
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			FortranFixed
		
	
	
	
	
	
|  |       subroutine xcor(s2,ipk,nsteps,nsym,lag1,lag2,
 | ||
|  |      +  ccf,ccf0,lagpk,flip,fdot)
 | ||
|  | 
 | ||
|  | C  Computes ccf of a row of s2 and the pseudo-random array pr.  Returns
 | ||
|  | C  peak of the CCF and the lag at which peak occurs.  For JT65, the 
 | ||
|  | C  CCF peak may be either positive or negative, with negative implying
 | ||
|  | C  the "OOO" message.
 | ||
|  | 
 | ||
|  |       parameter (NHMAX=1024)           !Max length of power spectra
 | ||
|  |       parameter (NSMAX=320)            !Max number of half-symbol steps
 | ||
|  |       real s2(NHMAX,NSMAX)             !2d spectrum, stepped by half-symbols
 | ||
|  |       real a(NSMAX),a2(NSMAX)
 | ||
|  |       real ccf(-5:28)
 | ||
|  |       include 'prcom.h'
 | ||
|  |       common/clipcom/ nclip
 | ||
|  |       data lagmin/0/                              !Silence g77 warning
 | ||
|  |       save
 | ||
|  | 
 | ||
|  |       df=11025.0/4096.
 | ||
|  |       dtstep=0.5/df
 | ||
|  |       fac=dtstep/(60.0*df)
 | ||
|  | 
 | ||
|  |       do j=1,nsteps
 | ||
|  |          ii=nint((j-nsteps/2)*fdot*fac)+ipk
 | ||
|  |          a(j)=s2(ii,j)
 | ||
|  |       enddo
 | ||
|  | 
 | ||
|  | C  If requested, clip the spectrum that will be cross correlated.
 | ||
|  |       nclip=0                               !Turn it off
 | ||
|  |       if(nclip.gt.0) then
 | ||
|  |          call pctile(a,a2,nsteps,50,base)
 | ||
|  |          alow=a2(nint(nsteps*0.16))
 | ||
|  |          ahigh=a2(nint(nsteps*0.84))
 | ||
|  |          rms=min(base-alow,ahigh-base)
 | ||
|  |          clip=4.0-nclip
 | ||
|  |          atop=base+clip*rms
 | ||
|  |          abot=base-clip*rms
 | ||
|  |          do i=1,nsteps
 | ||
|  |             if(nclip.lt.4) then
 | ||
|  |                a(i)=min(a(i),atop)
 | ||
|  |                a(i)=max(a(i),abot)
 | ||
|  |             else
 | ||
|  |                if(a(i).ge.base) then
 | ||
|  |                   a(i)=1.0
 | ||
|  |                else
 | ||
|  |                   a(i)=-1.0
 | ||
|  |                endif
 | ||
|  |             endif
 | ||
|  |          enddo 
 | ||
|  |       endif
 | ||
|  | 
 | ||
|  |       ccfmax=0.
 | ||
|  |       ccfmin=0.
 | ||
|  |       do lag=lag1,lag2
 | ||
|  |          x=0.
 | ||
|  |          do i=1,nsym
 | ||
|  |             j=2*i-1+lag
 | ||
|  |             if(j.ge.1 .and. j.le.nsteps) x=x+a(j)*pr(i)
 | ||
|  |          enddo
 | ||
|  |          ccf(lag)=2*x                        !The 2 is for plotting scale
 | ||
|  |          if(ccf(lag).gt.ccfmax) then
 | ||
|  |             ccfmax=ccf(lag)
 | ||
|  |             lagpk=lag
 | ||
|  |          endif
 | ||
|  | 
 | ||
|  |          if(ccf(lag).lt.ccfmin) then
 | ||
|  |             ccfmin=ccf(lag)
 | ||
|  |             lagmin=lag
 | ||
|  |          endif
 | ||
|  |       enddo
 | ||
|  | 
 | ||
|  |       ccf0=ccfmax
 | ||
|  |       flip=1.0
 | ||
|  |       if(-ccfmin.gt.ccfmax) then
 | ||
|  |          do lag=lag1,lag2
 | ||
|  |             ccf(lag)=-ccf(lag)
 | ||
|  |          enddo
 | ||
|  |          lagpk=lagmin
 | ||
|  |          ccf0=-ccfmin
 | ||
|  |          flip=-1.0
 | ||
|  |       endif
 | ||
|  | 
 | ||
|  |       return
 | ||
|  |       end
 |