WSJT-X/lib/ft8/get_spectrum_baseline.f90

55 lines
1.2 KiB
Fortran

subroutine get_spectrum_baseline(dd,nfa,nfb,sbase)
include 'ft8_params.f90'
parameter(NST=NFFT1/2,NF=93) !NF=NMAX/NST-1
real s(NH1,NF)
real savg(NH1)
real sbase(NH1)
real x(NFFT1)
real window(NFFT1)
complex cx(0:NH1)
real dd(NMAX)
equivalence (x,cx)
logical first
data first/.true./
save first,window
if(first) then
first=.false.
pi=4.0*atan(1.)
window=0.
call nuttal_window(window,NFFT1)
window=window/sum(window)*NSPS*2/300.0
endif
! Compute symbol spectra, stepping by NSTEP steps.
savg=0.
df=12000.0/NFFT1
do j=1,NF
ia=(j-1)*NST + 1
ib=ia+NFFT1-1
if(ib.gt.NMAX) exit
x=dd(ia:ib)*window
call four2a(x,NFFT1,1,-1,0) !r2c FFT
s(1:NH1,j)=abs(cx(1:NH1))**2
savg=savg + s(1:NH1,j) !Average spectrum
enddo
nwin=nfb-nfa
if(nfa.lt.100) then
nfa=100
if(nwin.lt.100) then ! nagain
nfb=nfa+nwin
endif
endif
if(nfb.gt.4910) then
nfb=4910
if(nwin.lt.100) then
nfa=nfb-nwin
endif
endif
call baseline(savg,nfa,nfb,sbase)
return
end subroutine get_spectrum_baseline