| 
									
										
										
										
											2016-06-01 23:46:36 +00:00
										 |  |  | program msk144sim
 | 
					
						
							| 
									
										
										
										
											2016-05-26 21:19:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   use wavhdr
 | 
					
						
							|  |  |  |   parameter (NMAX=15*12000)
 | 
					
						
							|  |  |  |   real pings(0:NMAX-1)
 | 
					
						
							| 
									
										
										
										
											2016-06-22 21:18:08 +00:00
										 |  |  |   real waveform(0:NMAX-1)
 | 
					
						
							| 
									
										
										
										
											2018-07-07 10:35:59 -05:00
										 |  |  |   character arg*8,msg*37,msgsent*37,fname*40
 | 
					
						
							| 
									
										
										
										
											2016-05-26 21:19:09 +00:00
										 |  |  |   real wave(0:NMAX-1)              !Simulated received waveform
 | 
					
						
							| 
									
										
										
										
											2016-06-10 14:18:10 +00:00
										 |  |  |   real*8 twopi,freq,phi,dphi0,dphi1,dphi
 | 
					
						
							| 
									
										
										
										
											2016-05-26 21:19:09 +00:00
										 |  |  |   type(hdr) h                          !Header for .wav file
 | 
					
						
							|  |  |  |   integer*2 iwave(0:NMAX-1)
 | 
					
						
							|  |  |  |   integer itone(144)                   !Message bits
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   nargs=iargc()
 | 
					
						
							| 
									
										
										
										
											2018-11-23 15:10:44 -06:00
										 |  |  |   if(nargs.ne.5) then
 | 
					
						
							|  |  |  |      print*,'Usage:   msk144sim       message      freq width snr nfiles'
 | 
					
						
							|  |  |  |      print*,'Example: msk144sim "K1ABC W9XYZ EN37" 1500  0.12   2    1'
 | 
					
						
							|  |  |  |      print*,'         msk144sim "K1ABC W9XYZ EN37" 1500  2.5   15    1'
 | 
					
						
							| 
									
										
										
										
											2016-05-26 21:19:09 +00:00
										 |  |  |      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)
 | 
					
						
							| 
									
										
										
										
											2017-06-06 18:57:17 +00:00
										 |  |  |   read(arg,*) snrdb
 | 
					
						
							| 
									
										
										
										
											2018-11-23 15:10:44 -06:00
										 |  |  |   call getarg(5,arg)
 | 
					
						
							| 
									
										
										
										
											2017-06-07 18:28:38 +00:00
										 |  |  |   read(arg,*) nfiles
 | 
					
						
							| 
									
										
										
										
											2016-05-28 20:53:35 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | !sig is the peak amplitude of the ping. 
 | 
					
						
							| 
									
										
										
										
											2016-05-26 21:19:09 +00:00
										 |  |  |   sig=sqrt(2.0)*10.0**(0.05*snrdb)
 | 
					
						
							|  |  |  |   h=default_header(12000,NMAX)
 | 
					
						
							| 
									
										
										
										
											2016-12-17 21:18:47 +00:00
										 |  |  |   i1=len(trim(msg))-5
 | 
					
						
							| 
									
										
										
										
											2016-05-26 21:19:09 +00:00
										 |  |  |   ichk=0
 | 
					
						
							| 
									
										
										
										
											2018-07-07 12:57:16 -05:00
										 |  |  |   itype=1
 | 
					
						
							| 
									
										
										
										
											2018-07-11 14:42:48 -04:00
										 |  |  |   call genmsk_128_90(msg,ichk,msgsent,itone,itype) 
 | 
					
						
							| 
									
										
										
										
											2018-09-20 09:49:42 -05:00
										 |  |  |   write(*,*) 'Requested message: ',msg
 | 
					
						
							|  |  |  |   write(*,*) 'Message sent     : ',msgsent
 | 
					
						
							|  |  |  |   write(*,*) 'Tones: '
 | 
					
						
							| 
									
										
										
										
											2018-10-20 10:16:17 -05:00
										 |  |  |   if(itone(41).ge.0) then
 | 
					
						
							|  |  |  |      write(*,'(1x,72i1)') itone(1:72)
 | 
					
						
							|  |  |  |      write(*,'(1x,72i1)') itone(73:144)
 | 
					
						
							|  |  |  |   else
 | 
					
						
							|  |  |  |      write(*,'(1x,40i1)') itone(1:40)
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2018-09-20 10:10:29 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-27 20:46:48 +00:00
										 |  |  |   twopi=8.d0*atan(1.d0)
 | 
					
						
							| 
									
										
										
										
											2016-07-05 21:06:04 +00:00
										 |  |  |   nsym=144
 | 
					
						
							| 
									
										
										
										
											2018-11-23 15:10:44 -06:00
										 |  |  |   nsps=6
 | 
					
						
							| 
									
										
										
										
											2016-07-29 21:09:56 +00:00
										 |  |  |   if( itone(41) .lt. 0 ) nsym=40
 | 
					
						
							| 
									
										
										
										
											2018-11-23 15:10:44 -06:00
										 |  |  |   baud=2000.d0
 | 
					
						
							| 
									
										
										
										
											2017-06-06 18:57:17 +00:00
										 |  |  |   dphi0=twopi*(freq-0.25d0*baud)/12000.d0
 | 
					
						
							|  |  |  |   dphi1=twopi*(freq+0.25d0*baud)/12000.d0
 | 
					
						
							| 
									
										
										
										
											2016-05-27 20:46:48 +00:00
										 |  |  |   phi=0.0
 | 
					
						
							| 
									
										
										
										
											2017-06-06 18:57:17 +00:00
										 |  |  |   k=0
 | 
					
						
							|  |  |  |   nreps=NMAX/(nsym*nsps)
 | 
					
						
							| 
									
										
										
										
											2018-09-20 09:49:42 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-22 21:18:08 +00:00
										 |  |  |   do jrep=1,nreps
 | 
					
						
							| 
									
										
										
										
											2016-07-05 21:06:04 +00:00
										 |  |  |     do i=1,nsym
 | 
					
						
							| 
									
										
										
										
											2016-06-22 21:18:08 +00:00
										 |  |  |       if( itone(i) .eq. 0 ) then
 | 
					
						
							|  |  |  |         dphi=dphi0
 | 
					
						
							|  |  |  |       else
 | 
					
						
							|  |  |  |         dphi=dphi1
 | 
					
						
							|  |  |  |       endif
 | 
					
						
							| 
									
										
										
										
											2017-06-06 18:57:17 +00:00
										 |  |  |       do j=1,nsps
 | 
					
						
							|  |  |  |         waveform(k)=cos(phi)
 | 
					
						
							|  |  |  |         k=k+1
 | 
					
						
							| 
									
										
										
										
											2016-06-22 21:18:08 +00:00
										 |  |  |         phi=mod(phi+dphi,twopi)
 | 
					
						
							|  |  |  |       enddo 
 | 
					
						
							|  |  |  |     enddo
 | 
					
						
							|  |  |  |   enddo 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-26 21:19:09 +00:00
										 |  |  |   if(itype.lt.1 .or. itype.gt.7) then
 | 
					
						
							|  |  |  |      print*,'Illegal message'
 | 
					
						
							|  |  |  |      go to 999
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-23 15:10:44 -06:00
										 |  |  |   call makepings(pings,NMAX,width,sig)
 | 
					
						
							| 
									
										
										
										
											2016-05-28 20:53:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-22 02:29:37 +00:00
										 |  |  | !  call sgran()
 | 
					
						
							| 
									
										
										
										
											2016-05-26 21:19:09 +00:00
										 |  |  |   do ifile=1,nfiles                  !Loop over requested number of files
 | 
					
						
							|  |  |  |      write(fname,1002) ifile         !Output filename
 | 
					
						
							| 
									
										
										
										
											2016-06-05 17:58:04 +00:00
										 |  |  | 1002 format('000000_',i6.6)
 | 
					
						
							|  |  |  |      open(10,file=fname(1:13)//'.wav',access='stream',status='unknown')
 | 
					
						
							| 
									
										
										
										
											2016-05-26 21:19:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-22 21:18:08 +00:00
										 |  |  |      wave=0.0
 | 
					
						
							|  |  |  |      iwave=0
 | 
					
						
							| 
									
										
										
										
											2016-05-26 21:19:09 +00:00
										 |  |  |      fac=sqrt(6000.0/2500.0)
 | 
					
						
							|  |  |  |      do i=0,NMAX-1
 | 
					
						
							|  |  |  |         xx=gran()
 | 
					
						
							| 
									
										
										
										
											2018-11-23 15:10:44 -06:00
										 |  |  |         wave(i)=pings(i)*waveform(i) + fac*xx
 | 
					
						
							| 
									
										
										
										
											2016-05-26 21:19:09 +00:00
										 |  |  |         iwave(i)=30.0*wave(i)
 | 
					
						
							|  |  |  |      enddo
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      write(10) h,iwave               !Save the .wav file
 | 
					
						
							|  |  |  |      close(10)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   enddo
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 23:46:36 +00:00
										 |  |  | 999 end program msk144sim
 |