mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05: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
 |