| 
									
										
										
										
											2015-05-27 13:08:28 +00:00
										 |  |  | 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)
 | 
					
						
							| 
									
										
										
										
											2015-11-18 01:28:12 +00:00
										 |  |  |   real*4 x0(NFFT1)
 | 
					
						
							| 
									
										
										
										
											2015-05-27 13:08:28 +00:00
										 |  |  |   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
 | 
					
						
							| 
									
										
										
										
											2015-06-28 01:35:33 +00:00
										 |  |  |   nb=0
 | 
					
						
							| 
									
										
										
										
											2015-05-27 13:08:28 +00:00
										 |  |  |   do nblk=1,nblks
 | 
					
						
							|  |  |  |      do i=1,NFFT1
 | 
					
						
							|  |  |  |         x0(i)=gain*id2(k1+i)
 | 
					
						
							|  |  |  |      enddo
 | 
					
						
							| 
									
										
										
										
											2015-06-28 01:35:33 +00:00
										 |  |  | !     call timf2(x0,k,NFFT1,nwindow,nb,peaklimit,x1,   &
 | 
					
						
							|  |  |  | !          slimit,lstrong,px,nzap)
 | 
					
						
							| 
									
										
										
										
											2015-05-27 13:08:28 +00:00
										 |  |  | ! Mix at nbfo Hz, lowpass at +/-750 Hz, and downsample to 1500 Hz complex.
 | 
					
						
							| 
									
										
										
										
											2015-06-28 01:35:33 +00:00
										 |  |  |      call mixlpf(x0,nbfo,c0(k8+1))
 | 
					
						
							| 
									
										
										
										
											2015-05-27 13:08:28 +00:00
										 |  |  |      k1=k1+kstep1
 | 
					
						
							|  |  |  |      k8=k8+kstep1/8
 | 
					
						
							|  |  |  |   enddo
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 999 return
 | 
					
						
							|  |  |  | end subroutine wspr_downsample
 |