| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  | program allsim
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-13 11:35:47 -04:00
										 |  |  | ! Generate simulated data for WSJT-X modes: JT4, JT9, JT65, FT8, FT4, QRA64,
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  | ! and WSPR.  Also unmodulated carrier and 20 WPM CW.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   use wavhdr
 | 
					
						
							|  |  |  |   use packjt
 | 
					
						
							|  |  |  |   parameter (NMAX=60*12000)
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   type(hdr) h                            !Header for the .wav file
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  |   integer*2 iwave(NMAX)                  !Generated waveform (no noise)
 | 
					
						
							|  |  |  |   integer itone(206)                     !Channel symbols (values 0-8)
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   integer icw(250)                       !Encoded CW message bits
 | 
					
						
							|  |  |  |   integer*1 msgbits(77)                  !Encoded message bits for FT8, FT4
 | 
					
						
							|  |  |  |   real dat(NMAX)                         !Audio waveform
 | 
					
						
							|  |  |  |   complex cwave(NMAX)
 | 
					
						
							|  |  |  |   real wave(NMAX)
 | 
					
						
							|  |  |  |   character message*22,msgsent*22,arg*8
 | 
					
						
							| 
									
										
										
										
											2019-03-13 11:35:47 -04:00
										 |  |  |   character*37 msg37,msgsent37
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   nargs=iargc()
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   if(nargs.ne.1 .and. nargs.ne.2) then
 | 
					
						
							|  |  |  |      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'
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  |      go to 999
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   call getarg(1,arg)
 | 
					
						
							|  |  |  |   read(arg,*) snrdb                  !S/N in dB (2500 hz reference BW)
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   isig=0
 | 
					
						
							|  |  |  |   if(nargs.eq.2) then
 | 
					
						
							|  |  |  |      call getarg(2,arg)
 | 
					
						
							|  |  |  |      read(arg,*) isig
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   message='CQ KA2ABC FN20'
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   msg37=message//'               '
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  |   rmsdb=25.
 | 
					
						
							|  |  |  |   rms=10.0**(0.05*rmsdb)
 | 
					
						
							|  |  |  |   sig=10.0**(0.05*snrdb)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   call init_random_seed()       !Seed Fortran RANDOM_NUMBER generator
 | 
					
						
							|  |  |  |   call sgran()                  !Seed C rand generator (used in gran)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   h=default_header(12000,NMAX)
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  |   open(10,file='000000_0000.wav',access='stream',status='unknown')
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   do i=1,NMAX                   !Generate gaussian noise
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  |      dat(i)=gran()
 | 
					
						
							|  |  |  |   enddo
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   itone=0
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   if(isig.eq.0 .or. isig.eq.1) then
 | 
					
						
							|  |  |  |      call addit(itone,12000,85,6912,400,sig,dat)    !Unmodulated carrier
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   if(isig.eq.0 .or. isig.eq.2) then
 | 
					
						
							|  |  |  |      call morse('CQ CQ DE KA2ABC KA2ABC',icw,ncw)
 | 
					
						
							|  |  |  |      call addcw(icw,ncw,600,sig,dat)                !CW
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   if(isig.eq.0 .or. isig.eq.3) then
 | 
					
						
							|  |  |  |      call genwspr(message,msgsent,itone)
 | 
					
						
							|  |  |  |      call addit(itone,12000,86,8192,800,sig,dat)       !WSPR (only 59 s of data)
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   if(isig.eq.0 .or. isig.eq.4) then
 | 
					
						
							|  |  |  |      call gen9(message,0,msgsent,itone,itype)
 | 
					
						
							|  |  |  |      call addit(itone,12000,85,6912,1000,sig,dat)      !JT9
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   if(isig.eq.0 .or. isig.eq.5) then
 | 
					
						
							|  |  |  |      call gen4(message,0,msgsent,itone,itype)
 | 
					
						
							|  |  |  |      call addit(itone,11025,206,2520,1200,sig,dat)     !JT4
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   if(isig.eq.0 .or. isig.eq.6) then
 | 
					
						
							|  |  |  |      call genft8(msg37,i3,n3,msgsent37,msgbits,itone)  !FT8
 | 
					
						
							|  |  |  |      nwave=79*1920
 | 
					
						
							|  |  |  |      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
 | 
					
						
							| 
									
										
										
										
											2017-08-01 18:01:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   if(isig.eq.0 .or. isig.eq.7) then
 | 
					
						
							|  |  |  |      call genft4(msg37,0,msgsent37,msgbits,itone)      !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
 | 
					
						
							| 
									
										
										
										
											2019-03-13 11:35:47 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   if(isig.eq.0 .or. isig.eq.8) then
 | 
					
						
							|  |  |  |      call genqra64(message,0,msgsent,itone,itype)
 | 
					
						
							|  |  |  |      call addit(itone,12000,84,6912,1800,sig,dat)      !QRA64
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   if(isig.eq.0 .or. isig.eq.9) then
 | 
					
						
							|  |  |  |      call gen65(message,0,msgsent,itone,itype)
 | 
					
						
							|  |  |  |      call addit(itone,11025,126,4096,2000,sig,dat)     !JT65
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:44:38 -05:00
										 |  |  |   iwave=nint(rms*dat)
 | 
					
						
							|  |  |  |   write(10) h,iwave
 | 
					
						
							| 
									
										
										
										
											2017-02-24 18:20:56 +00:00
										 |  |  |   close(10)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 999 end program allsim
 |