WSJT-X/lib/sumsim.f90

43 lines
1.1 KiB
Fortran

program sumsim
! Sum a number of *.wav files so that multiple signals are present
use wavhdr
parameter (NMAX=60*12000)
type(hdr) h !Header for the .wav file
integer*2 iwave(NMAX) !i*2 data
real wave(NMAX) !r*4 data
character*80 fname
nargs=iargc()
if(nargs.lt.1) then
print*,'Usage: sumsim file1 [file2, ...]'
go to 999
endif
wave=0.
do ifile=1,nargs
call getarg(ifile,fname)
open(10,file=trim(fname),status='old',access='stream')
read(10) h
npts=h%ndata/2
nfsample=h%nsamrate
read(10) iwave(1:npts)
n=len(trim(fname))
wave(1:npts)=wave(1:npts) + iwave(1:npts)
rms=sqrt(dot_product(wave(1:npts),wave(1:npts))/npts)
write(*,1000) ifile,npts,float(npts)/nfsample,rms,fname(n-14:n)
1000 format(i3,i8,f6.1,f10.3,2x,a15)
close(10)
enddo
! fac=1.0/sqrt(float(nargs))
fac=1.0/nargs
iwave(1:npts)=nint(fac*wave(1:npts))
open(12,file='000000_0000.wav',access='stream',status='unknown')
write(12) h,iwave(1:npts)
close(12)
999 end program sumsim