mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-04-13 14:58:40 -04:00
Improve FT8 SNR estimates in two ways:
(i) SNR no longer saturates at +20 dB (ii) a large signal in the passband no longer causes the SNR of weaker signals to be biased low.
This commit is contained in:
parent
cb70ef3864
commit
a0d471cb0b
@ -487,6 +487,7 @@ set (wsjt_FSRCS
|
||||
lib/geodist.f90
|
||||
lib/getlags.f90
|
||||
lib/getmet4.f90
|
||||
lib/ft8/get_spectrum_baseline.f90
|
||||
lib/ft2/gfsk_pulse.f90
|
||||
lib/graycode.f90
|
||||
lib/graycode65.f90
|
||||
|
@ -37,6 +37,7 @@ subroutine baseline(s,nfa,nfb,sbase)
|
||||
kz=k
|
||||
a=0.
|
||||
call polyfit(x,y,y,kz,nterms,0,a,chisqr) !Fit a low-order polynomial
|
||||
sbase=0.0
|
||||
do i=ia,ib
|
||||
t=i-i0
|
||||
sbase(i)=a(1)+t*(a(2)+t*(a(3)+t*(a(4)+t*(a(5))))) + 0.65
|
||||
|
43
lib/ft8/get_spectrum_baseline.f90
Normal file
43
lib/ft8/get_spectrum_baseline.f90
Normal file
@ -0,0 +1,43 @@
|
||||
subroutine get_spectrum_baseline(dd,nfa,nfb,sbase)
|
||||
|
||||
include 'ft8_params.f90'
|
||||
parameter(NST=NFFT1/2,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
|
||||
|
||||
if(nfa.lt.nint(200.0)) nfa=nint(200.0)
|
||||
if(nfb.gt.nint(4910.0)) nfb=nint(4910.0)
|
||||
call baseline(savg,nfa,nfb,sbase)
|
||||
|
||||
return
|
||||
end subroutine get_spectrum_baseline
|
@ -37,7 +37,8 @@ subroutine sync8(dd,nfa,nfb,syncmin,nfqso,maxcand,s,candidate, &
|
||||
enddo
|
||||
savg=savg + s(1:NH1,j) !Average spectrum
|
||||
enddo
|
||||
call baseline(savg,nfa,nfb,sbase)
|
||||
! call baseline(savg,nfa,nfb,sbase)
|
||||
call get_spectrum_baseline(dd,nfa,nfb,sbase)
|
||||
|
||||
ia=max(1,nint(nfa/df))
|
||||
ib=nint(nfb/df)
|
||||
|
Loading…
Reference in New Issue
Block a user