WSJT-X/lib/superfox/plotspec.f90

40 lines
758 B
Fortran

subroutine plotspec(dat)
use sfox_mod
real dat(NMAX)
real s(0:NSPS/2)
complex c(0:NSPS-1)
integer ipk(1)
nblks=NZ/NSPS
s=0.
fac=1.0/NSPS
do j=1,nblks
ib=j*NSPS
ia=ib-NSPS+1
c=fac*dat(ia:ib)
call four2a(c,NSPS,1,-1,1)
do i=0,NSPS/2
s(i)=s(i) + real(c(i))**2 + aimag(c(i))**2
enddo
enddo
df=12000.0/NSPS
ipk=maxloc(s)
f0=df*(ipk(1)-1)
p_sig_plus_noise=maxval(s)
p_noise=0.
do i=0,NSPS/2
f=i*df
if(f.le.2500+df .and. abs(f-f0).gt.0.5*df) p_noise=p_noise + s(i)
write(40,1000) f,s(i)
1000 format(2f10.3)
enddo
p_sig=p_sig_plus_noise - p_noise*df/2500.0
snr=p_sig/p_noise
snrdb=db(snr)
write(*,1100) snrdb
1100 format('Measured SNR:',f7.2)
end subroutine plotspec