mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-29 20:10:28 -04:00 
			
		
		
		
	
		
			
	
	
		
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
|  | subroutine fspread_lorentz(cdat,fspread)
 | ||
|  | 
 | ||
|  |   parameter (NZ=3*12000)
 | ||
|  |   complex cdat(0:NZ-1)
 | ||
|  |   complex cspread(0:NZ-1)
 | ||
|  |   complex z
 | ||
|  | 
 | ||
|  |   twopi=8.0*atan(1.0)
 | ||
|  |   nfft=NZ
 | ||
|  |   nh=nfft/2
 | ||
|  |   df=12000.0/nfft
 | ||
|  |   cspread(0)=1.0
 | ||
|  |   cspread(nh)=0.
 | ||
|  |   b=6.0                       !Use truncated Lorenzian shape for fspread
 | ||
|  |   do i=1,nh
 | ||
|  |      f=i*df
 | ||
|  |      x=b*f/fspread
 | ||
|  |      z=0.
 | ||
|  |      a=0.
 | ||
|  |      if(x.lt.3.0) then                          !Cutoff beyond x=3
 | ||
|  |         a=sqrt(1.111/(1.0+x*x)-0.1)             !Lorentzian amplitude
 | ||
|  |         phi1=twopi*rran()                       !Random phase
 | ||
|  |         z=a*cmplx(cos(phi1),sin(phi1))
 | ||
|  |      endif
 | ||
|  |      cspread(i)=z
 | ||
|  |      z=0.
 | ||
|  |      if(x.lt.3.0) then                !Same thing for negative freqs
 | ||
|  |         phi2=twopi*rran()
 | ||
|  |         z=a*cmplx(cos(phi2),sin(phi2))
 | ||
|  |      endif
 | ||
|  |      cspread(nfft-i)=z
 | ||
|  |   enddo
 | ||
|  | 
 | ||
|  |   call four2a(cspread,nfft,1,1,1)             !Transform to time domain
 | ||
|  |   
 | ||
|  |   sum=0.
 | ||
|  |   do i=0,nfft-1
 | ||
|  |      p=real(cspread(i))**2 + aimag(cspread(i))**2
 | ||
|  |      sum=sum+p
 | ||
|  |   enddo
 | ||
|  |   avep=sum/nfft
 | ||
|  |   fac=sqrt(1.0/avep)
 | ||
|  |   cspread=fac*cspread                   !Normalize to constant avg power
 | ||
|  |   cdat=cspread*cdat                     !Apply Rayleigh fading
 | ||
|  | 
 | ||
|  |   return
 | ||
|  | end subroutine fspread_lorentz
 |