mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-26 02:20:20 -04:00 
			
		
		
		
	git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6122 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
		
			
				
	
	
		
			77 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
| 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
 |