54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | 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 |