From 344b9c11f325c4bf73c038008163d90484c780d9 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 23 Jun 2020 15:08:56 -0400 Subject: [PATCH] Speed up gen_fst280wave() by nearly x10 for longest FST280 transmissions. --- lib/fst280/gen_fst280wave.f90 | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/lib/fst280/gen_fst280wave.f90 b/lib/fst280/gen_fst280wave.f90 index 9245af406..8485b99d8 100644 --- a/lib/fst280/gen_fst280wave.f90 +++ b/lib/fst280/gen_fst280wave.f90 @@ -1,21 +1,31 @@ subroutine gen_fst280wave(itone,nsym,nsps,nwave,fsample,hmod,f0, & icmplx,cwave,wave) + parameter(NTAB=65536) real wave(nwave) - complex cwave(nwave) + complex cwave(nwave),ctab(0:NTAB-1) real, allocatable, save :: pulse(:) real, allocatable :: dphi(:) integer hmod integer itone(nsym) +! integer*8 count0,count1,clkfreq logical first data first/.true./ data nsps0/-99/ - save first,twopi,dt,tsym,nsps0 + save first,twopi,dt,tsym,nsps0,ctab + +! call system_clock(count0,clkfreq) + if(first) then + twopi=8.0*atan(1.0) + do i=0,NTAB-1 + phi=i*twopi/NTAB + ctab(i)=cmplx(cos(phi),sin(phi)) + enddo + endif if(first.or.nsps.ne.nsps0) then if(allocated(pulse)) deallocate(pulse) allocate(pulse(1:3*nsps)) - twopi=8.0*atan(1.0) dt=1.0/fsample tsym=nsps/fsample ! Compute the smoothed frequency-deviation pulse @@ -46,12 +56,15 @@ subroutine gen_fst280wave(itone,nsym,nsps,nwave,fsample,hmod,f0, & k=0 do j=0,(nsym+2)*nsps-1 k=k+1 + i=phi*float(NTAB)/twopi + i=iand(i,NTAB-1) if(icmplx.eq.0) then - wave(k)=sin(phi) + wave(k)=real(ctab(i)) else - cwave(k)=cmplx(cos(phi),sin(phi)) + cwave(k)=ctab(i) endif - phi=mod(phi+dphi(j),twopi) + phi=phi+dphi(j) + if(phi.gt.twopi) phi=phi-twopi enddo ! Compute the ramp-up and ramp-down symbols @@ -73,5 +86,10 @@ subroutine gen_fst280wave(itone,nsym,nsps,nwave,fsample,hmod,f0, & (1.0+cos(twopi*(/(i,i=0,nsps/2-1)/)/real(nsps)))/2.0 endif +! call system_clock(count1,clkfreq) +! tt=float(count1-count0)/float(clkfreq) +! write(*,3001) tt +!3001 format('Tgen:',f8.3) + return end subroutine gen_fst280wave