WSJT-X/lib/wspr_downsample.f90
Bill Somerville f9d0a1863a Reintegrate the wsjtx_exp branch into the trunk
This  merge brings  the WSPR  feature development  into the  main line
ready for release in a future v1.6 release.



git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@5424 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
2015-05-27 13:08:28 +00:00

77 lines
1.9 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),x1(NFFT1)
real*4 x2(NFFT1+105)
real*4 ssum(NSMAX)
logical*1 lstrong(0:1023) !Should be (0:512)
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
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(x1,nbfo,c0(k8+1))
k1=k1+kstep1
k8=k8+kstep1/8
enddo
999 return
end subroutine wspr_downsample