| 
									
										
										
										
											2018-11-05 11:59:48 -05:00
										 |  |  | subroutine sync8d(cd0,i0,ctwk,itwk,sync)
 | 
					
						
							| 
									
										
										
										
											2017-07-06 12:07:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Compute sync power for a complex, downsampled FT8 signal.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-06 14:19:39 +00:00
										 |  |  |   parameter(NP2=2812,NDOWN=60)
 | 
					
						
							| 
									
										
										
										
											2018-06-30 14:56:19 -05:00
										 |  |  |   complex cd0(0:3199)
 | 
					
						
							| 
									
										
										
										
											2018-11-05 11:59:48 -05:00
										 |  |  |   complex csync(0:6,32)
 | 
					
						
							| 
									
										
										
										
											2017-07-06 12:07:17 +00:00
										 |  |  |   complex csync2(32)
 | 
					
						
							|  |  |  |   complex ctwk(32)
 | 
					
						
							|  |  |  |   complex z1,z2,z3
 | 
					
						
							|  |  |  |   logical first
 | 
					
						
							| 
									
										
										
										
											2018-11-05 11:59:48 -05:00
										 |  |  |   integer icos7(0:6)
 | 
					
						
							|  |  |  |   data icos7/3,1,4,0,6,5,2/
 | 
					
						
							| 
									
										
										
										
											2017-07-06 12:07:17 +00:00
										 |  |  |   data first/.true./
 | 
					
						
							| 
									
										
										
										
											2020-02-29 13:46:59 -06:00
										 |  |  |   save first,twopi,csync
 | 
					
						
							| 
									
										
										
										
											2017-07-06 12:07:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   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)
 | 
					
						
							|  |  |  |     do i=0,6
 | 
					
						
							| 
									
										
										
										
											2018-11-05 11:59:48 -05:00
										 |  |  |       phi=0.0
 | 
					
						
							| 
									
										
										
										
											2020-02-29 13:46:59 -06:00
										 |  |  |       dphi=twopi*icos7(i)/32.0 
 | 
					
						
							| 
									
										
										
										
											2017-07-06 12:07:17 +00:00
										 |  |  |       do j=1,32
 | 
					
						
							| 
									
										
										
										
											2018-11-05 11:59:48 -05:00
										 |  |  |         csync(i,j)=cmplx(cos(phi),sin(phi)) !Waveform for 7x7 Costas array
 | 
					
						
							|  |  |  |         phi=mod(phi+dphi,twopi)
 | 
					
						
							| 
									
										
										
										
											2017-07-06 12:07:17 +00:00
										 |  |  |       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
 | 
					
						
							| 
									
										
										
										
											2018-11-05 11:59:48 -05:00
										 |  |  |      csync2=csync(i,1:32)
 | 
					
						
							| 
									
										
										
										
											2017-07-06 12:07:17 +00:00
										 |  |  |      if(itwk.eq.1) csync2=ctwk*csync2      !Tweak the frequency
 | 
					
						
							|  |  |  |      z1=0.
 | 
					
						
							|  |  |  |      z2=0.
 | 
					
						
							|  |  |  |      z3=0.
 | 
					
						
							| 
									
										
										
										
											2018-06-30 14:56:19 -05:00
										 |  |  |      if(i1.ge.0 .and. i1+31.le.NP2-1) z1=sum(cd0(i1:i1+31)*conjg(csync2))
 | 
					
						
							|  |  |  |      if(i2.ge.0 .and. i2+31.le.NP2-1) z2=sum(cd0(i2:i2+31)*conjg(csync2))
 | 
					
						
							|  |  |  |      if(i3.ge.0 .and. i3+31.le.NP2-1) z3=sum(cd0(i3:i3+31)*conjg(csync2))
 | 
					
						
							| 
									
										
										
										
											2017-07-06 12:07:17 +00:00
										 |  |  |      sync = sync + p(z1) + p(z2) + p(z3)
 | 
					
						
							|  |  |  |   enddo
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return
 | 
					
						
							|  |  |  | end subroutine sync8d
 |