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