Initial Commit
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
program msk144sim
|
||||
|
||||
use wavhdr
|
||||
parameter (NMAX=15*12000)
|
||||
real pings(0:NMAX-1)
|
||||
real waveform(0:NMAX-1)
|
||||
character*6 mygrid
|
||||
character arg*8,msg*22,msgsent*22,fname*40
|
||||
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
|
||||
logical*1 bcontest
|
||||
data mygrid/"EN50wc"/
|
||||
|
||||
nargs=iargc()
|
||||
if(nargs.ne.6) then
|
||||
print*,'Usage: msk144sim message freq width nslow snr nfiles'
|
||||
print*,'Example: msk144sim "K1ABC W9XYZ EN37" 1500 0.12 1 2 1'
|
||||
print*,' msk144sim "K1ABC W9XYZ EN37" 1500 2.5 32 15 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,*) nslow
|
||||
call getarg(5,arg)
|
||||
read(arg,*) snrdb
|
||||
call getarg(6,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)
|
||||
i1=len(trim(msg))-5
|
||||
bcontest=.false.
|
||||
if(msg(i1:i1+1).eq.'R ') bcontest=.true.
|
||||
ichk=0
|
||||
call genmsk144(msg,mygrid,ichk,bcontest,msgsent,itone,itype)
|
||||
twopi=8.d0*atan(1.d0)
|
||||
|
||||
nsym=144
|
||||
nsps=6*nslow
|
||||
if( itone(41) .lt. 0 ) nsym=40
|
||||
baud=2000.d0/nslow
|
||||
dphi0=twopi*(freq-0.25d0*baud)/12000.d0
|
||||
dphi1=twopi*(freq+0.25d0*baud)/12000.d0
|
||||
phi=0.0
|
||||
k=0
|
||||
nreps=NMAX/(nsym*nsps)
|
||||
print*,nsym,nslow,nsps,baud,freq
|
||||
do jrep=1,nreps
|
||||
do i=1,nsym
|
||||
if( itone(i) .eq. 0 ) then
|
||||
dphi=dphi0
|
||||
else
|
||||
dphi=dphi1
|
||||
endif
|
||||
do j=1,nsps
|
||||
waveform(k)=cos(phi)
|
||||
k=k+1
|
||||
phi=mod(phi+dphi,twopi)
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
|
||||
if(itype.lt.1 .or. itype.gt.7) then
|
||||
print*,'Illegal message'
|
||||
go to 999
|
||||
endif
|
||||
|
||||
if(nslow.eq.1) 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')
|
||||
|
||||
wave=0.0
|
||||
iwave=0
|
||||
fac=sqrt(6000.0/2500.0)
|
||||
do i=0,NMAX-1
|
||||
xx=gran()
|
||||
if(nslow.eq.1) wave(i)=pings(i)*waveform(i) + fac*xx
|
||||
if(nslow.gt.1) wave(i)=sig*waveform(i) + fac*xx
|
||||
iwave(i)=30.0*wave(i)
|
||||
enddo
|
||||
|
||||
write(10) h,iwave !Save the .wav file
|
||||
close(10)
|
||||
|
||||
enddo
|
||||
|
||||
999 end program msk144sim
|
||||
Reference in New Issue
Block a user