55 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			55 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | subroutine sync8d(cd0,i0,ctwk,itwk,sync) | ||
|  | 
 | ||
|  | ! Compute sync power for a complex, downsampled FT8 signal. | ||
|  | 
 | ||
|  |   parameter(NP2=2812,NDOWN=60) | ||
|  |   complex cd0(3125) | ||
|  |   complex csync(0:6,32) | ||
|  |   complex csync2(32) | ||
|  |   complex ctwk(32) | ||
|  |   complex z1,z2,z3 | ||
|  |   logical first | ||
|  |   integer icos7(0:6) | ||
|  |   data icos7/2,5,6,0,4,1,3/ | ||
|  |   data first/.true./ | ||
|  |   save first,twopi,fs2,dt2,taus,baud,csync | ||
|  | 
 | ||
|  |   p(z1)=real(z1)**2 + aimag(z1)**2          !Statement function for power | ||
|  | 
 | ||
|  | ! Set some constants and compute the csync array.   | ||
|  |   if( first ) then | ||
|  |     twopi=8.0*atan(1.0) | ||
|  |     fs2=12000.0/NDOWN                       !Sample rate after downsampling | ||
|  |     dt2=1/fs2                               !Corresponding sample interval | ||
|  |     taus=32*dt2                             !Symbol duration | ||
|  |     baud=1.0/taus                           !Keying rate | ||
|  |     do i=0,6 | ||
|  |       phi=0.0 | ||
|  |       dphi=twopi*icos7(i)*baud*dt2   | ||
|  |       do j=1,32 | ||
|  |         csync(i,j)=cmplx(cos(phi),sin(phi)) !Waveform for 7x7 Costas array | ||
|  |         phi=mod(phi+dphi,twopi) | ||
|  |       enddo | ||
|  |     enddo | ||
|  |     first=.false. | ||
|  |   endif | ||
|  | 
 | ||
|  |   sync=0 | ||
|  |   do i=0,6                              !Sum over 7 Costas frequencies and | ||
|  |      i1=i0+i*32                         !three Costas arrays | ||
|  |      i2=i1+36*32 | ||
|  |      i3=i1+72*32 | ||
|  |      csync2=csync(i,1:32) | ||
|  |      if(itwk.eq.1) csync2=ctwk*csync2      !Tweak the frequency | ||
|  |      z1=0. | ||
|  |      z2=0. | ||
|  |      z3=0. | ||
|  |      if(i1.ge.1 .and. i1+31.le.NP2) z1=sum(cd0(i1:i1+31)*conjg(csync2)) | ||
|  |      if(i2.ge.1 .and. i2+31.le.NP2) z2=sum(cd0(i2:i2+31)*conjg(csync2)) | ||
|  |      if(i3.ge.1 .and. i3+31.le.NP2) z3=sum(cd0(i3:i3+31)*conjg(csync2)) | ||
|  |      sync = sync + p(z1) + p(z2) + p(z3) | ||
|  |   enddo | ||
|  | 
 | ||
|  |   return | ||
|  | end subroutine sync8d |