Update allsim.f90 and addit.f90 for the new FT8 and FT4 waveforms.

This commit is contained in:
Joe Taylor 2019-12-04 15:44:38 -05:00
parent 5716cdbcd4
commit 61e8cb65d4
2 changed files with 91 additions and 68 deletions

View File

@ -11,18 +11,11 @@ subroutine addit(itone,nfsample,nsym,nsps,ifreq,sig,dat)
twopi=8.d0*atan(1.d0) twopi=8.d0*atan(1.d0)
dphi=0. dphi=0.
iters=1
if(nsym.eq.79) iters=2 !FT8
if(nsym.eq.103) iters=5 !FT4
do iter=1,iters
f=ifreq f=ifreq
phi=0. phi=0.
ntot=nsym*tsym/dt ntot=nsym*tsym/dt
k=12000 !Start audio at t = 1.0 s k=12000 !Start audio at t = 1.0 s
t=0. t=0.
if(nsym.eq.79) k=12000 + (iter-1)*12000*30 !Special case for FT8
if(nsym.eq.103) k=12000 + (iter-1)*12000*10 !Special case for FT4
isym0=-1 isym0=-1
do i=1,ntot do i=1,ntot
t=t+dt t=t+dt
@ -39,7 +32,6 @@ subroutine addit(itone,nfsample,nsym,nsps,ifreq,sig,dat)
k=k+1 k=k+1
dat(k)=dat(k) + sig*sin(xphi) dat(k)=dat(k) + sig*sin(xphi)
enddo enddo
enddo
return return
end subroutine addit end subroutine addit

View File

@ -3,82 +3,113 @@ program allsim
! Generate simulated data for WSJT-X modes: JT4, JT9, JT65, FT8, FT4, QRA64, ! Generate simulated data for WSJT-X modes: JT4, JT9, JT65, FT8, FT4, QRA64,
! and WSPR. Also unmodulated carrier and 20 WPM CW. ! and WSPR. Also unmodulated carrier and 20 WPM CW.
use wavhdr use wavhdr
use packjt use packjt
parameter (NMAX=60*12000) parameter (NMAX=60*12000)
type(hdr) h type(hdr) h !Header for the .wav file
integer*2 iwave(NMAX) !Generated waveform (no noise) integer*2 iwave(NMAX) !Generated waveform (no noise)
integer itone(206) !Channel symbols (values 0-8) integer itone(206) !Channel symbols (values 0-8)
integer icw(250) integer icw(250) !Encoded CW message bits
integer*1 msgbits(87) integer*1 msgbits(77) !Encoded message bits for FT8, FT4
logical*1 bcontest real dat(NMAX) !Audio waveform
real*4 dat(NMAX) complex cwave(NMAX)
character message*22,msgsent*22,arg*8,mygrid*6 real wave(NMAX)
character message*22,msgsent*22,arg*8
character*37 msg37,msgsent37 character*37 msg37,msgsent37
nargs=iargc() nargs=iargc()
if(nargs.ne.1) then if(nargs.ne.1 .and. nargs.ne.2) then
print*,'Usage: allsim <snr>' print*,'Usage: allsim snr [isig]'
print*,'Examples: allsim -10 #Include all signal types'
print*,' allsim -10 6 #Include FT8 only'
print*,'isig order: 1 2 3 4 5 6 7 8 9'
print*,' Carrier CW WSPR JT9 JT4 FT8 FT4 QRA64 JT65'
go to 999 go to 999
endif endif
call getarg(1,arg) call getarg(1,arg)
read(arg,*) snrdb !S/N in dB (2500 hz reference BW) read(arg,*) snrdb !S/N in dB (2500 hz reference BW)
isig=0
if(nargs.eq.2) then
call getarg(2,arg)
read(arg,*) isig
endif
message='CQ KA2ABC FN20' message='CQ KA2ABC FN20'
mygrid='FN20 ' msg37=message//' '
bcontest=.false.
rmsdb=25. rmsdb=25.
rms=10.0**(0.05*rmsdb) rms=10.0**(0.05*rmsdb)
sig=10.0**(0.05*snrdb) sig=10.0**(0.05*snrdb)
npts=NMAX
call init_random_seed() !Seed Fortran RANDOM_NUMBER generator call init_random_seed() !Seed Fortran RANDOM_NUMBER generator
call sgran() !Seed C rand generator (used in gran) call sgran() !Seed C rand generator (used in gran)
h=default_header(12000,npts) h=default_header(12000,NMAX)
open(10,file='000000_0000.wav',access='stream',status='unknown') open(10,file='000000_0000.wav',access='stream',status='unknown')
do i=1,npts !Generate gaussian noise do i=1,NMAX !Generate gaussian noise
dat(i)=gran() dat(i)=gran()
enddo enddo
itone=0 itone=0
if(isig.eq.0 .or. isig.eq.1) then
call addit(itone,12000,85,6912,400,sig,dat) !Unmodulated carrier call addit(itone,12000,85,6912,400,sig,dat) !Unmodulated carrier
endif
if(isig.eq.0 .or. isig.eq.2) then
call morse('CQ CQ DE KA2ABC KA2ABC',icw,ncw) call morse('CQ CQ DE KA2ABC KA2ABC',icw,ncw)
! print*,ncw
! write(*,3001) icw(1:ncw)
!3001 format(50i1)
call addcw(icw,ncw,600,sig,dat) !CW call addcw(icw,ncw,600,sig,dat) !CW
endif
if(isig.eq.0 .or. isig.eq.3) then
call genwspr(message,msgsent,itone) call genwspr(message,msgsent,itone)
call addit(itone,12000,86,8192,800,sig,dat) !WSPR (only 59 s of data) call addit(itone,12000,86,8192,800,sig,dat) !WSPR (only 59 s of data)
endif
if(isig.eq.0 .or. isig.eq.4) then
call gen9(message,0,msgsent,itone,itype) call gen9(message,0,msgsent,itone,itype)
call addit(itone,12000,85,6912,1000,sig,dat) !JT9 call addit(itone,12000,85,6912,1000,sig,dat) !JT9
endif
if(isig.eq.0 .or. isig.eq.5) then
call gen4(message,0,msgsent,itone,itype) call gen4(message,0,msgsent,itone,itype)
call addit(itone,11025,206,2520,1200,sig,dat) !JT4 call addit(itone,11025,206,2520,1200,sig,dat) !JT4
endif
i3=-1 if(isig.eq.0 .or. isig.eq.6) then
n3=-1 call genft8(msg37,i3,n3,msgsent37,msgbits,itone) !FT8
call genft8(message,i3,n3,msgsent,msgbits,itone) nwave=79*1920
call addit(itone,12000,79,1920,1400,sig,dat) !FT8 call gen_ft8wave(itone,79,1920,2.0,12000.0,1400.0,cwave,wave,0,nwave)
dat(6001:6000+nwave)=dat(6001:6000+nwave) + sig*wave(1:nwave)
k=30*12000
dat(6001+k:6000+nwave+k)=dat(6001+k:6000+nwave+k) + sig*wave(1:nwave)
endif
msg37=message//' ' if(isig.eq.0 .or. isig.eq.7) then
call genft4(msg37,0,msgsent37,itone) call genft4(msg37,0,msgsent37,msgbits,itone) !FT4
call addit(itone,12000,103,512,1600,sig,dat) !FT4 nwave=105*576
call gen_ft4wave(itone,103,576,12000.0,1600.0,cwave,wave,0,nwave)
dat(6001:6000+nwave)=dat(6001:6000+nwave) + sig*wave(1:nwave)
k=15*12000
dat(6001+k:6000+nwave+k)=dat(6001+k:6000+nwave+k) + sig*wave(1:nwave)
k=30*12000
dat(6001+k:6000+nwave+k)=dat(6001+k:6000+nwave+k) + sig*wave(1:nwave)
k=45*12000
dat(6001+k:6000+nwave+k)=dat(6001+k:6000+nwave+k) + sig*wave(1:nwave)
endif
if(isig.eq.0 .or. isig.eq.8) then
call genqra64(message,0,msgsent,itone,itype) call genqra64(message,0,msgsent,itone,itype)
call addit(itone,12000,84,6912,1800,sig,dat) !QRA64 call addit(itone,12000,84,6912,1800,sig,dat) !QRA64
endif
if(isig.eq.0 .or. isig.eq.9) then
call gen65(message,0,msgsent,itone,itype) call gen65(message,0,msgsent,itone,itype)
call addit(itone,11025,126,4096,2000,sig,dat) !JT65 call addit(itone,11025,126,4096,2000,sig,dat) !JT65
endif
iwave(1:npts)=nint(rms*dat(1:npts)) iwave=nint(rms*dat)
write(10) h,iwave
write(10) h,iwave(1:npts)
close(10) close(10)
999 end program allsim 999 end program allsim