mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 13:30:52 -05:00 
			
		
		
		
	git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@8639 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
subroutine decode9w(nfqso,ntol,nsubmode,ss,id2,sync,nsnr,xdt1,f0,decoded)
 | 
						|
 | 
						|
! Decode a weak signal in a wide/slow JT9 submode.
 | 
						|
 | 
						|
  parameter (NSMAX=6827,NZMAX=60*12000)
 | 
						|
  real ss(184,NSMAX)                     !Symbol spectra at 1/2-symbol steps
 | 
						|
  real ccfred(NSMAX)                     !Best sync vs frequency
 | 
						|
  real ccfblue(-9:18)                    !Sync vs time at best frequency
 | 
						|
  real a(5)                              !Fitted Lorentzian params
 | 
						|
  integer*2 id2(NZMAX)                   !Raw 16-bit data
 | 
						|
  integer*1 i1SoftSymbols(207)           !Binary soft symbols
 | 
						|
  character*22 decoded                   !Decoded message
 | 
						|
 | 
						|
  df=12000.0/16384.0                     !Bin spacing in ss()
 | 
						|
  nsps=6912                              !Samples per 9-FSK symbol
 | 
						|
  tstep=nsps*0.5/12000.0                 !Half-symbol duration
 | 
						|
  npts=52*12000
 | 
						|
  limit=10000                            !Fano timeout parameter
 | 
						|
 | 
						|
  ia=max(1,nint((nfqso-ntol)/df))        !Start frequency bin
 | 
						|
  ib=min(NSMAX,nint((nfqso+ntol)/df))    !End frequency bin
 | 
						|
  lag1=-int(2.5/tstep + 0.9999)          !Start lag
 | 
						|
  lag2=int(5.0/tstep + 0.9999)           !End lag
 | 
						|
  nhsym=184                              !Number of half-symbols
 | 
						|
 | 
						|
! First sync pass finds approximate Doppler spread; second pass does a
 | 
						|
! good Lorentzian fit to determine frequency f0.
 | 
						|
  do iter=1,2
 | 
						|
     nadd=3
 | 
						|
     if(iter.eq.2) nadd=2*nint(0.375*a(4)) + 1
 | 
						|
     call sync9w(ss,nhsym,lag1,lag2,ia,ib,ccfred,ccfblue,ipk,lagpk,nadd)
 | 
						|
     s=0.
 | 
						|
     sq=0.
 | 
						|
     ns=0
 | 
						|
     do i=-9,18
 | 
						|
        if(abs(i-lagpk).gt.3) then
 | 
						|
           s=s+ccfblue(i)
 | 
						|
           sq=sq+ccfblue(i)**2
 | 
						|
           ns=ns+1
 | 
						|
        endif
 | 
						|
     enddo
 | 
						|
     base=s/ns
 | 
						|
     rms=sqrt(sq/ns - base**2)
 | 
						|
     sync=(ccfblue(lagpk)-base)/rms
 | 
						|
     xdt0=lagpk*tstep
 | 
						|
     call lorentzian(ccfred(ia),ib-ia+1,a)
 | 
						|
     f0=(ia+a(3))*df
 | 
						|
  enddo
 | 
						|
  ccfblue=(ccfblue-base)/rms
 | 
						|
 | 
						|
  call softsym9w(id2,npts,xdt0,f0,a(4)*df,nsubmode,xdt1-1.05,snrdb,i1softsymbols)
 | 
						|
  nsnr=nint(snrdb)
 | 
						|
  call jt9fano(i1softsymbols,limit,nlim,decoded)
 | 
						|
 | 
						|
!###
 | 
						|
!  do i=-9,18
 | 
						|
!     write(81,3081) i,ccfblue(i)
 | 
						|
!3081 format(i3,f10.3)
 | 
						|
!  enddo
 | 
						|
!  do i=1,NSMAX
 | 
						|
!     write(82,3082) i*df,ccfred(i)
 | 
						|
!3082 format(f10.1,e12.3)
 | 
						|
!  enddo
 | 
						|
!###
 | 
						|
 | 
						|
  return
 | 
						|
end subroutine decode9w
 |