mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-30 16:18:54 -05:00
77 lines
1.9 KiB
Fortran
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
|