WSJT-X/lib/msk144sim.f90
Steven Franke 403f16d296 More work on msk144 decoder.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6791 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
2016-06-22 02:29:37 +00:00

93 lines
2.2 KiB
Fortran

program msk144sim
use wavhdr
parameter (NMAX=15*12000)
real pings(0:NMAX-1)
real waveform(0:864-1)
character arg*8,msg*22,msgsent*22,fname*40
character*512 pchk_file
character*3 rpt(0:7)
real wave(0:NMAX-1) !Simulated received waveform
real*8 twopi,freq,phi,dphi0,dphi1,dphi
type(hdr) h !Header for .wav file
integer*2 iwave(0:NMAX-1)
integer itone(144) !Message bits
integer b11(11) !Barker-11 code
data b11/1,1,1,0,0,0,1,0,0,1,0/
data rpt /'26 ','27 ','28 ','R26','R27','R28','RRR','73 '/
pchk_file='./peg-128-80-reg3.pchk'
nargs=iargc()
if(nargs.ne.5) then
print*,'Usage: msk144sim message freq width snr nfiles'
print*,' '
print*,'Example: msk144sim "K1ABC W9XYZ EN37" 1500 0.12 2 1'
go to 999
endif
call getarg(1,msg)
call getarg(2,arg)
read(arg,*) freq
call getarg(3,arg)
read(arg,*) width
call getarg(4,arg)
read(arg,*) snrdb
call getarg(5,arg)
read(arg,*) nfiles
!sig is the peak amplitude of the ping.
sig=sqrt(2.0)*10.0**(0.05*snrdb)
h=default_header(12000,NMAX)
ichk=0
call genmsk144(msg,ichk,msgsent,itone,itype,pchk_file)
twopi=8.d0*atan(1.d0)
dphi0=twopi*(freq-500)/12000.0
dphi1=twopi*(freq+500)/12000.0
phi=0.0
indx=0
do i=1,144
if( itone(i) .eq. 0 ) then
dphi=dphi0
else
dphi=dphi1
endif
do j=1,6
waveform(indx)=cos(phi);
indx=indx+1
phi=mod(phi+dphi,twopi)
enddo
enddo
if(itype.lt.1 .or. itype.gt.7) then
print*,'Illegal message'
go to 999
endif
call makepings(pings,NMAX,width,sig)
! call sgran()
do ifile=1,nfiles !Loop over requested number of files
write(fname,1002) ifile !Output filename
1002 format('000000_',i6.6)
open(10,file=fname(1:13)//'.wav',access='stream',status='unknown')
fac=sqrt(6000.0/2500.0)
j=-1
do i=0,NMAX-1
j=mod(j+1,864)
xx=gran()
wave(i)=pings(i)*waveform(j) + fac*xx
iwave(i)=30.0*wave(i)
enddo
write(10) h,iwave !Save the .wav file
close(10)
! call jtmsk_short(cwave,NMAX,msg)
enddo
999 end program msk144sim