mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-23 20:58:55 -05:00
b5c77b40fc
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@5635 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
78 lines
1.9 KiB
Fortran
78 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
|
|
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
|