73 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| module ft8_decode
 | |
| 
 | |
|   type :: ft8_decoder
 | |
|      procedure(ft8_decode_callback), pointer :: callback
 | |
|    contains
 | |
|      procedure :: decode
 | |
|   end type ft8_decoder
 | |
| 
 | |
|   abstract interface
 | |
|      subroutine ft8_decode_callback (this,sync,snr,dt,freq,nbadcrc,decoded)
 | |
|        import ft8_decoder
 | |
|        implicit none
 | |
|        class(ft8_decoder), intent(inout) :: this
 | |
|        real, intent(in) :: sync
 | |
|        integer, intent(in) :: snr
 | |
|        real, intent(in) :: dt
 | |
|        real, intent(in) :: freq
 | |
|        integer, intent(in) :: nbadcrc
 | |
|        character(len=22), intent(in) :: decoded
 | |
|      end subroutine ft8_decode_callback
 | |
|   end interface
 | |
| 
 | |
| contains
 | |
| 
 | |
|   subroutine decode(this,callback,ss,iwave,nfqso,newdat,npts8,nutc,nfa,    &
 | |
|        nfsplit,nfb,ntol,nzhsym,nagain,ndepth,nmode,nsubmode,nexp_decode)
 | |
| 
 | |
|     use timer_module, only: timer
 | |
|     include 'fsk4hf/ft8_params.f90'
 | |
| 
 | |
|     class(ft8_decoder), intent(inout) :: this
 | |
|     procedure(ft8_decode_callback) :: callback
 | |
|     real ss(1,1)  !### dummy, to be removed ###
 | |
|     real s(NH1,NHSYM)
 | |
|     real candidate(3,100)
 | |
|     logical, intent(in) :: newdat, nagain
 | |
|     integer*2 iwave(15*12000)
 | |
|     character datetime*13,message*22
 | |
| 
 | |
|     this%callback => callback
 | |
|     write(datetime,1001) nutc        !### TEMPORARY ###
 | |
| 1001 format("000000_",i6.6)
 | |
| 
 | |
|     call timer('sync8   ',0)
 | |
|     call sync8(iwave,nfa,nfb,nfqso,s,candidate,ncand)
 | |
|     call timer('sync8   ',1)
 | |
| 
 | |
|     syncmin=4.0
 | |
| !    rewind 51
 | |
|     do icand=1,ncand
 | |
|        sync=candidate(3,icand)
 | |
|        if(sync.lt.syncmin) cycle
 | |
|        f1=candidate(1,icand)
 | |
|        xdt=candidate(2,icand)
 | |
|        nsnr=min(99,nint(10.0*log10(sync) - 25.5))    !### empirical ###
 | |
|        call timer('ft8b    ',0)
 | |
|        call ft8b(s,nfqso,f1,xdt,nharderrors,dmin,nbadcrc,message)
 | |
|        xdt=xdt-0.6
 | |
|        call timer('ft8b    ',1)
 | |
|        if (associated(this%callback)) call this%callback(sync,nsnr,xdt,   &
 | |
|             f1,nbadcrc,message)
 | |
| !       write(13,1110) datetime,0,nsnr,xdt,f1,nharderrors,dmin,message
 | |
| !1110   format(a13,2i4,f6.2,f7.1,i4,' ~ ',f6.2,2x,a22,'  FT8')
 | |
| !       write(51,3051) xdt,f1,sync,dmin,nsnr,nharderrors,nbadcrc,message
 | |
| !3051   format(4f9.1,3i5,2x,a22)
 | |
| !       flush(51)
 | |
|     enddo
 | |
| 
 | |
|     return
 | |
|   end subroutine decode
 | |
| 
 | |
| end module ft8_decode
 | 
