diff --git a/lib/sync64.f90 b/lib/sync64.f90 index a3d0e53fa..d73943087 100644 --- a/lib/sync64.f90 +++ b/lib/sync64.f90 @@ -1,43 +1,45 @@ subroutine sync64(dd,nf1,nf2,maxf1,dtx,f0,kpk,snrdb,s3a) + parameter (NMAX=60*12000) !Max size of raw data at 12000 Hz parameter (NSPS=2304) !Samples per symbol at 4000 Hz parameter (NSPC=7*NSPS) !Samples per Costas array real dd(NMAX) !Raw data real x(672000) !Up to 56 s at 12000 Hz - real t(5) - real s3a(0:63,1:63) - real s0(0:NSPC-1) - real s1(0:NSPC-1) - real s2(0:NSPC-1) - real s3(0:NSPC-1) - real s0a(0:NSPC-1) - - integer*8 count0,count1,clkfreq - integer icos7(0:6) + real s3a(0:63,1:63) !Synchronized symbol spectra + real s1(0:NSPC-1) !Power spectrum of Costas 1 + real s2(0:NSPC-1) !Power spectrum of Costas 2 + real s3(0:NSPC-1) !Power spectrum of Costas 3 + real s0(0:NSPC-1) !Sum of s1+s2+s3 + real s0a(0:NSPC-1) !Best synchromized spectrum + integer icos7(0:6) !Costas 7x7 tones integer ipk0(1) - - complex cc(0:NSPC-1) - complex c0(0:336000) - complex c1(0:NSPC-1) - complex c2(0:NSPC-1) - complex c3(0:NSPC-1) + complex cc(0:NSPC-1) !Costas waveform + complex c0(0:336000) !Complex spectrum of dd() + complex c1(0:NSPC-1) !Complex spectrum of Costas 1 + complex c2(0:NSPC-1) !Complex spectrum of Costas 2 + complex c3(0:NSPC-1) !Complex spectrum of Costas 3 + logical first equivalence (x,c0) - data icos7/2,5,6,0,4,1,3/ !Costas 7x7 pattern + data icos7/2,5,6,0,4,1,3/ !Costas 7x7 tone pattern + data first/.true./ save - twopi=8.0*atan(1.0) - dfgen=12000.0/6912.0 - k=-1 - phi=0. - do j=0,6 - dphi=twopi*icos7(j)*dfgen/4000.0 - do i=1,2304 - phi=phi + dphi - if(phi.gt.twopi) phi=phi-twopi - k=k+1 - cc(k)=cmplx(cos(phi),sin(phi)) + if(first) then + twopi=8.0*atan(1.0) + dfgen=12000.0/6912.0 + k=-1 + phi=0. + do j=0,6 !Compute complex Costas waveform + dphi=twopi*icos7(j)*dfgen/4000.0 + do i=1,2304 + phi=phi + dphi + if(phi.gt.twopi) phi=phi-twopi + k=k+1 + cc(k)=cmplx(cos(phi),sin(phi)) + enddo enddo - enddo + first=.false. + endif npts0=54*12000 nfft1=672000 @@ -45,11 +47,8 @@ subroutine sync64(dd,nf1,nf2,maxf1,dtx,f0,kpk,snrdb,s3a) df1=12000.0/nfft1 fac=2.0/nfft1 x=fac*dd(1:nfft1) - call system_clock(count0,clkfreq) call four2a(c0,nfft1,1,-1,0) !Forward r2c FFT call four2a(c0,nfft2,1,1,1) !Inverse c2c FFT; c0 is analytic sig - call system_clock(count1,clkfreq) - t(1)=float(count1-count0)/float(clkfreq) npts2=npts0/3 !Downsampled complex data length nfft3=NSPC nh3=nfft3/2 @@ -66,7 +65,6 @@ subroutine sync64(dd,nf1,nf2,maxf1,dtx,f0,kpk,snrdb,s3a) kb=maxf1 ipk=0 kpk=0 - call system_clock(count0,clkfreq) do iter=1,2 do j1=ja,jb,jstep j2=j1 + 39*2304 @@ -101,8 +99,6 @@ subroutine sync64(dd,nf1,nf2,maxf1,dtx,f0,kpk,snrdb,s3a) ipk=ipk0(1) f0=(ipk+ia-1)*df3 kpk=k -! write(16,3101) jpk,ipk,kpk,dtx,f0,snr -!3101 format(3i5,f8.3,f8.2,f10.1) endif enddo enddo @@ -112,9 +108,11 @@ subroutine sync64(dd,nf1,nf2,maxf1,dtx,f0,kpk,snrdb,s3a) ! ka=kpk ! kb=kpk enddo - call system_clock(count1,clkfreq) - t(2)=float(count1-count0)/float(clkfreq) snrdb=10.0*log10(snr)-39.0 +!### +! Now use tweak on the c0() array, then do nfft4=NSPS FFTs to get s3a(), +! the properly synchronized symbol spectra. + return end subroutine sync64