Starting on a decoder for QRA66. Now have found xdt and f0 from the sync vector.

This commit is contained in:
Joe Taylor
2020-07-31 16:38:21 -04:00
parent 77b7e71424
commit c4ef1e3e25
3 changed files with 85 additions and 2 deletions
+78
View File
@@ -9,6 +9,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
use ft8_decode
use ft4_decode
use fst4_decode
use qra66_decode
include 'jt9com.f90'
include 'timer_common.inc'
@@ -37,6 +38,10 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
integer :: decoded
end type counting_fst4_decoder
type, extends(qra66_decoder) :: counting_qra66_decoder
integer :: decoded
end type counting_qra66_decoder
real ss(184,NSMAX)
logical baddata,newdat65,newdat9,single_decode,bVHF,bad0,newdat,ex
integer*2 id2(NTMAX*12000)
@@ -54,6 +59,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
type(counting_ft8_decoder) :: my_ft8
type(counting_ft4_decoder) :: my_ft4
type(counting_fst4_decoder) :: my_fst4
type(counting_qra66_decoder) :: my_qra66
!cast C character arrays to Fortran character strings
datetime=transfer(params%datetime, datetime)
@@ -69,6 +75,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
my_ft8%decoded = 0
my_ft4%decoded = 0
my_fst4%decoded = 0
my_qra66%decoded = 0
! For testing only: return Rx messages stored in a file as decodes
inquire(file='rx_messages.txt',exist=ex)
@@ -187,6 +194,16 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
go to 800
endif
if(params%nmode.eq.66) then
! We're in QRA66 mode
call timer('decqra66',0)
call my_qra66%decode(qra66_decoded,id2,params%nutc,params%nfa, &
params%nfb,params%nfqso,params%ndepth,logical(params%lapcqonly), &
mycall,hiscall,hisgrid)
call timer('decqra66',1)
go to 800
endif
if(params%nmode.eq.240) then
! We're in FST4 mode
ndepth=iand(params%ndepth,3)
@@ -759,4 +776,65 @@ contains
return
end subroutine fst4_decoded
subroutine qra66_decoded (this,nutc,sync,nsnr,dt,freq,decoded,nap, &
qual,ntrperiod,fmid,w50)
use qra66_decode
implicit none
class(qra66_decoder), intent(inout) :: this
integer, intent(in) :: nutc
real, intent(in) :: sync
integer, intent(in) :: nsnr
real, intent(in) :: dt
real, intent(in) :: freq
character(len=37), intent(in) :: decoded
integer, intent(in) :: nap
real, intent(in) :: qual
integer, intent(in) :: ntrperiod
real, intent(in) :: fmid
real, intent(in) :: w50
character*2 annot
character*37 decoded0
character*70 line
decoded0=decoded
annot=' '
if(nap.ne.0) then
write(annot,'(a1,i1)') 'a',nap
if(qual.lt.0.17) decoded0(37:37)='?'
endif
if(ntrperiod.lt.60) then
write(line,1001) nutc,nsnr,dt,nint(freq),decoded0,annot
1001 format(i6.6,i4,f5.1,i5,' ` ',1x,a37,1x,a2)
write(13,1002) nutc,nint(sync),nsnr,dt,freq,0,decoded0
1002 format(i6.6,i4,i5,f6.1,f8.0,i4,3x,a37,' FST4')
else
write(line,1003) nutc,nsnr,dt,nint(freq),decoded0,annot
1003 format(i4.4,i4,f5.1,i5,' ` ',1x,a37,1x,a2,2f7.3)
write(13,1004) nutc,nint(sync),nsnr,dt,freq,0,decoded0
1004 format(i4.4,i4,i5,f6.1,f8.0,i4,3x,a37,' FST4')
endif
if(fmid.ne.-999.0) then
if(w50.lt.0.95) write(line(65:70),'(f6.3)') w50
if(w50.ge.0.95) write(line(65:70),'(f6.2)') w50
endif
write(*,1005) line
1005 format(a70)
call flush(6)
call flush(13)
select type(this)
type is (counting_qra66_decoder)
this%decoded = this%decoded + 1
end select
return
end subroutine qra66_decoded
end subroutine multimode_decoder