84 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			84 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | subroutine addit(itone,nfsample,nsym,nsps,ifreq,sig,dat) | ||
|  | 
 | ||
|  |   integer itone(nsym) | ||
|  |   real dat(60*12000) | ||
|  |   real*8 f,dt,twopi,phi,dphi,baud,fsample,freq,tsym,t | ||
|  | 
 | ||
|  |   tsym=nsps*1.d0/nfsample            !Symbol duration | ||
|  |   baud=1.d0/tsym | ||
|  |   fsample=12000.d0                   !Sample rate (Hz) | ||
|  |   dt=1.d0/fsample                    !Sample interval (s) | ||
|  |   twopi=8.d0*atan(1.d0) | ||
|  |   dphi=0. | ||
|  | 
 | ||
|  |   iters=1 | ||
|  |   if(nsym.eq.79) iters=2 | ||
|  |   do iter=1,iters | ||
|  |      f=ifreq | ||
|  |      phi=0. | ||
|  |      ntot=nsym*tsym/dt | ||
|  |      k=12000                             !Start audio at t = 1.0 s | ||
|  |      t=0. | ||
|  |      if(nsym.eq.79) k=12000 + (iter-1)*12000*30  !Special case for FT8 | ||
|  |      isym0=-1 | ||
|  |      do i=1,ntot | ||
|  |         t=t+dt | ||
|  |         isym=nint(t/tsym) + 1 | ||
|  |         if(isym.ne.isym0) then | ||
|  |            freq=f + itone(isym)*baud | ||
|  |            dphi=twopi*freq*dt | ||
|  |            isym0=isym | ||
|  |         endif | ||
|  |         phi=phi + dphi | ||
|  |         if(phi.gt.twopi) phi=phi-twopi | ||
|  |         xphi=phi | ||
|  |         k=k+1 | ||
|  |         dat(k)=dat(k) + sig*sin(xphi) | ||
|  |      enddo | ||
|  |   enddo | ||
|  | 
 | ||
|  |   return | ||
|  | end subroutine addit | ||
|  | 
 | ||
|  | subroutine addcw(icw,ncw,ifreq,sig,dat) | ||
|  | 
 | ||
|  |   integer icw(ncw) | ||
|  |   real dat(60*12000) | ||
|  |   real s(60*12000) | ||
|  |   real x(60*12000) | ||
|  |   real y(60*12000) | ||
|  |   real*8 dt,twopi,phi,dphi,fsample,tdit,t | ||
|  | 
 | ||
|  |   wpm=25.0 | ||
|  |   nspd=nint(1.2*12000.0/wpm) | ||
|  |   fsample=12000.d0                   !Sample rate (Hz) | ||
|  |   dt=1.d0/fsample                    !Sample interval (s) | ||
|  |   tdit=nspd*dt | ||
|  |   twopi=8.d0*atan(1.d0) | ||
|  |   dphi=twopi*ifreq*dt | ||
|  |   phi=0. | ||
|  |   k=12000                             !Start audio at t = 1.0 s | ||
|  |   t=0. | ||
|  |   npts=60*12000 | ||
|  |   x=0. | ||
|  |   do i=1,npts | ||
|  |      t=t+dt | ||
|  |      j=nint(t/tdit) + 1 | ||
|  |      j=mod(j-1,ncw) + 1 | ||
|  |      phi=phi + dphi | ||
|  |      if(phi.gt.twopi) phi=phi-twopi | ||
|  |      xphi=phi | ||
|  |      k=k+1 | ||
|  |      x(k)=icw(j) | ||
|  |      s(k)=sin(xphi) | ||
|  |      if(t.ge.59.5) exit | ||
|  |   enddo | ||
|  | 
 | ||
|  |   nadd=0.004/dt | ||
|  |   call smo(x,npts,y,nadd) | ||
|  |   y=y/nadd | ||
|  |   dat=dat + sig*y*s | ||
|  | 
 | ||
|  |   return | ||
|  | end subroutine addcw |