54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
| subroutine msk40_freq_search(cdat,fc,if1,if2,delf,nframes,navmask,cb,    &
 | |
|      cdat2,xmax,bestf,cs,xccs)
 | |
| 
 | |
|   parameter (NSPM=240,NZ=7*NSPM)
 | |
|   complex cdat(NZ)
 | |
|   complex cdat2(NZ)
 | |
|   complex c(NSPM)                    !Coherently averaged complex data
 | |
|   complex ct2(2*NSPM)
 | |
|   complex cs(NSPM)
 | |
|   complex cb(42)                     !Complex waveform for sync word 
 | |
|   complex cc(0:NSPM-1)
 | |
|   real xcc(0:NSPM-1)
 | |
|   real xccs(0:NSPM-1)
 | |
|   integer navmask(nframes)           !Tells which frames to average
 | |
| 
 | |
|   navg=sum(navmask) 
 | |
|   n=nframes*NSPM
 | |
| !  fac=1.0/(48.0*sqrt(float(navg)))
 | |
|   fac=1.0/(24.0*sqrt(float(navg)))
 | |
| 
 | |
|   do ifr=if1,if2                     !Find freq that maximizes sync
 | |
|      ferr=ifr*delf
 | |
|      call tweak1(cdat,n,-(fc+ferr),cdat2)
 | |
|      c=0
 | |
|      do i=1,nframes
 | |
|         ib=(i-1)*NSPM+1
 | |
|         ie=ib+NSPM-1
 | |
|         if( navmask(i) .eq. 1 ) c=c+cdat2(ib:ie)
 | |
|      enddo
 | |
| 
 | |
|      cc=0
 | |
|      ct2(1:NSPM)=c
 | |
|      ct2(NSPM+1:2*NSPM)=c
 | |
| 
 | |
|      do ish=0,NSPM-1
 | |
|         cc(ish)=dot_product(ct2(1+ish:42+ish),cb(1:42))
 | |
|      enddo
 | |
| 
 | |
|      xcc=abs(cc)
 | |
|      xb=maxval(xcc)*fac
 | |
|      if(xb.gt.xmax) then
 | |
|         xmax=xb
 | |
|         bestf=ferr
 | |
|         cs=c
 | |
|         xccs=xcc
 | |
|      endif
 | |
|   enddo
 | |
| 
 | |
| !  write(71,3001) fc,delf,if1,if2,nframes,bestf,xmax
 | |
| !3001 format(2f8.3,3i5,2f8.3)
 | |
| 
 | |
|   return
 | |
| end subroutine msk40_freq_search
 | 
