77 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | subroutine wspr_downsample(id2,k) | ||
|  | 
 | ||
|  | ! Input: | ||
|  | !  id2       raw 16-bit integer data, 12000 Hz sample rate | ||
|  | !  k         pointer to the most recent new data | ||
|  | 
 | ||
|  | ! Output (in common/c0com) | ||
|  | !  c0        complex data downsampled to 1500 Hz | ||
|  | 
 | ||
|  |   parameter (NMAX=120*12000)         !Total sample intervals per 30 minutes | ||
|  |   parameter (NDMAX=120*1500)         !Sample intervals at 1500 Hz rate | ||
|  |   parameter (NSMAX=1366)             !Max length of saved spectra | ||
|  |   parameter (NFFT1=1024) | ||
|  |   parameter (MAXFFT3=32768) | ||
|  |   real*4 w3(MAXFFT3) | ||
|  |   real*4 x0(NFFT1) | ||
|  |   real*4 x2(NFFT1+105) | ||
|  |   real*4 ssum(NSMAX) | ||
|  |   integer*2 id2(NMAX) | ||
|  |   complex c0 | ||
|  |   common/c0com/c0(NDMAX) | ||
|  |   data rms/999.0/,k0/99999999/,nfft3z/0/,nsps/8192/,nbfo/1500/ | ||
|  |   save | ||
|  | 
 | ||
|  |   nfft3=nsps/4 | ||
|  |   jstep=nsps/16 | ||
|  |   if(k.gt.NMAX) go to 999 | ||
|  |   if(k.lt.nfft3) go to 999                   !Wait for enough samples to start | ||
|  |   if(nfft3.ne.nfft3z) then | ||
|  |      pi=4.0*atan(1.0) | ||
|  |      do i=1,nfft3 | ||
|  |         w3(i)=2.0*(sin(i*pi/nfft3))**2             !Window for nfft3 | ||
|  |      enddo | ||
|  |      nfft3z=nfft3 | ||
|  |   endif | ||
|  | 
 | ||
|  |   if(k.lt.k0) then | ||
|  |      ja=0 | ||
|  |      ssum=0. | ||
|  |      k1=0 | ||
|  |      k8=0 | ||
|  |      x2=0. | ||
|  | !     if(ndiskdat.eq.0) then | ||
|  | !        id2(k+1:)=0 | ||
|  | !        c0=0.          !This is necessary to prevent "ghosts".  Not sure why. | ||
|  | !     endif | ||
|  |   endif | ||
|  |   k0=k | ||
|  |   | ||
|  |   nzap=0 | ||
|  |   nbslider=0 | ||
|  |   sigmas=1.0*(10.0**(0.01*nbslider)) + 0.7 | ||
|  |   peaklimit=sigmas*max(10.0,rms) | ||
|  |   px=0. | ||
|  | 
 | ||
|  |   nwindow=2 | ||
|  |   kstep1=NFFT1 | ||
|  |   if(nwindow.ne.0) kstep1=NFFT1/2 | ||
|  |   fac=2.0/NFFT1 | ||
|  |   nblks=(k-k1)/kstep1 | ||
|  |   gain=1.0 | ||
|  |   nb=0 | ||
|  |   do nblk=1,nblks | ||
|  |      do i=1,NFFT1 | ||
|  |         x0(i)=gain*id2(k1+i) | ||
|  |      enddo | ||
|  | !     call timf2(x0,k,NFFT1,nwindow,nb,peaklimit,x1,   & | ||
|  | !          slimit,lstrong,px,nzap) | ||
|  | ! Mix at nbfo Hz, lowpass at +/-750 Hz, and downsample to 1500 Hz complex. | ||
|  |      call mixlpf(x0,nbfo,c0(k8+1)) | ||
|  |      k1=k1+kstep1 | ||
|  |      k8=k8+kstep1/8 | ||
|  |   enddo | ||
|  | 
 | ||
|  | 999 return | ||
|  | end subroutine wspr_downsample |