1program test_qra64 2 3 character*71 cmd1,cmd2,line 4 character*22 msg 5 character*8 arg 6 character*1 csubmode 7 integer nretcode(0:11) 8 logical decok 9 10 nargs=iargc() 11 if(nargs.ne.9) then 12 print*,'Usage: test_qra64 "msg" A-D depth freq DT fDop TRp nfiles SNR' 13 print*,'Example: test_qra64 "K1ABC W9XYZ EN37" A 3 1000 0.0 5.0 60 100 -20' 14 print*,' SNR = 0 to loop over all relevant SNRs' 15 go to 999 16 endif 17 call getarg(1,msg) 18 call getarg(2,csubmode) 19 call getarg(3,arg) 20 read(arg,*) ndepth 21 call getarg(4,arg) 22 read(arg,*) nf0 23 call getarg(5,arg) 24 read(arg,*) dt 25 call getarg(6,arg) 26 read(arg,*) fDop 27 call getarg(7,arg) 28 read(arg,*) ntrperiod 29 call getarg(8,arg) 30 read(arg,*) nfiles 31 call getarg(9,arg) 32 read(arg,*) nsnr 33 34 nsps=6192 35 i50=-28 36 ia=-20 37 ib=-33 38 if(nsnr.ne.0) then 39 ia=nsnr 40 ib=nsnr 41 endif 42 43 baud=12000.0/nsps 44 tsym=1.0/baud 45 46! 1 2 3 4 5 6 7 47! 12345678901234567890123456789012345678901234567890123456789012345678901' 48 cmd1='qra64sim "K1ABC W9XYZ EN37 " A 1 0.2 0.00 100 F -20 > junk0' 49 50 cmd2='jt9 -q -L 300 -H 3000 -f 1000 -d 3 -b A *.wav > junk' 51 52 write(cmd1(10:33),'(a)') '"'//msg//'"' 53 cmd1(35:35)=csubmode 54 write(cmd1(40:43),'(f4.1)') fDop 55 write(cmd1(44:48),'(f5.2)') dt 56 write(cmd1(49:53),'(i5)') nfiles 57 58 write(cmd2(26:29),'(i4)') nf0 59 write(cmd2(34:34),'(i1)') ndepth 60 cmd2(39:39)=csubmode 61 62 call system('rm -f *.wav') 63 64 write(*,1000) (j,j=0,11) 65 write(12,1000) (j,j=0,11) 661000 format(/'SNR d Dop Sync Dec Bad',i6,11i4,' tdec'/80('-')) 67 68 dterr=tsym/4.0 69 nferr=max(1,nint(0.5*baud),nint(fdop/3.0)) 70 ndecodes0=nfiles 71 72 do nsnr=ia,ib,-1 73 nsync=0 74 ndecodes=0 75 nfalse=0 76 nretcode=0 77 write(cmd1(57:59),'(i3)') nsnr 78 call system(cmd1) 79 call sec0(0,tdec) 80 call system(cmd2) 81 call sec0(1,tdec) 82 open(10,file='junk',status='unknown') 83 n=0 84 do iline=1,9999 85 read(10,'(a71)',end=10) line 86 if(index(line,'<Decode').eq.1) cycle 87 read(line(11:20),*) xdt,nf 88 irc=-1 89 if(line(23:23).ne.' ') read(line(45:46),*) irc 90 decok=index(line,'W9XYZ').gt.0 91 if((abs(xdt-dt).le.dterr .and. abs(nf-nf0).le.nferr) .or. decok) then 92 nsync=nsync+1 93 endif 94 if(irc.lt.0) cycle 95 if(decok) then 96 i=irc 97 if(i.le.11) then 98 ndecodes=ndecodes + 1 99 else 100 i=mod(i,10) 101 endif 102 nretcode(i)=nretcode(i) + 1 103 else 104 nfalse=nfalse + 1 105 print*,'False: ',line 106 endif 107 enddo ! iline 10810 close(10) 109 write(*,1100) nsnr,ndepth,fDop,nsync,ndecodes,nfalse,nretcode, & 110 tdec/nfiles 111 write(12,1100) nsnr,ndepth,fDop,nsync,ndecodes,nfalse,nretcode, & 112 tdec/nfiles 1131100 format(i3,i2,f5.1,2i5,i4,i6,11i4,f6.2) 114 if(ndecodes.lt.nfiles/2 .and. ndecodes0.ge.nfiles/2) then 115 snr_thresh=nsnr + float(nfiles/2 - ndecodes)/(ndecodes0-ndecodes) 116 write(13,1200) ndepth,fdop,csubmode,snr_thresh 1171200 format(i1,f6.1,2x,a1,f7.1) 118 flush(13) 119 endif 120 flush(6) 121 flush(12) 122 if(ndecodes.eq.0) exit !Bail out if no decodes at this SNR 123 ndecodes0=ndecodes 124 enddo ! nsnr 125 126999 end program test_qra64 127 128 include 'sec0.f90' 129 130