WSJT-X/lib/fmtave.f90

65 lines
1.5 KiB
Fortran

program fmtave
! Average groups of frequency-calibration measurements.
implicit real*8 (a-h,o-z)
character infile*80
character*8 cutc,cutc1
nargs=iargc()
if(nargs.ne.1) then
print*,'Usage: fmtave <infile>'
print*,'Example: fmtave fmt.all'
go to 999
endif
call getarg(1,infile)
open(10,file=infile,status='old')
open(12,file='fmtave.out',status='unknown')
write(*,1000)
1000 format(' Freq DF CAL N rms UTC Call'/ &
' (kHz) (Hz) ? (Hz)'/ &
'----------------------------------------------------')
nkhz0=0
sum=0.d0
sumsq=0.d0
n=0
do i=1,99999
read(10,*,end=10) cutc,nkHz,ncal,noffset,faudio,df,dblevel,snr
if((nkHz.ne.nkHz0) .and. i.ne.1) then
ave=sum/n
rms=0.d0
if(n.gt.1) then
rms=sqrt(abs(sumsq - sum*sum/n)/(n-1.d0))
endif
fMHz=0.001d0*nkHz0
write(*,1010) fMHz,ave,ncal0,n,rms,cutc1
write(12,1010) fMHz,ave,ncal0,n,rms,cutc1
1010 format(f8.3,f9.3,i4,i5,f8.2,2x,a8,2x,a6)
sum=0.d0
sumsq=0.d0
n=0
endif
dial_error=faudio-noffset
sum=sum + dial_error
sumsq=sumsq + dial_error**2
n=n+1
if(n.eq.1) then
cutc1=cutc
ncal0=ncal
endif
nkHz0=nkHz
enddo
10 ave=sum/n
rms=0.d0
if(n.gt.0) then
rms=sqrt((sumsq - sum*sum/n)/(n-1.d0))
endif
fMHz=0.001d0*nkHz
write(*,1010) fMHz,ave,ncal,n,rms,cutc1
write(12,1010) fMHz,ave,ncal,n,rms,cutc1
999 end program fmtave