mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	
		
			
	
	
		
			61 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
|  | subroutine s3avg(nsave,mode65,nutc,nhz,xdt,npol,ntol,s3,nsum,nkv,decoded)
 | ||
|  | 
 | ||
|  | ! Save the current synchronized spectra, s3(64,63), for possible
 | ||
|  | ! decoding of average.
 | ||
|  | 
 | ||
|  |   real s3(64,63)                        !Synchronized spectra for 63 symbols
 | ||
|  |   real s3a(64,63,64)                    !Saved spectra
 | ||
|  |   real s3b(64,63)                       !Average spectra
 | ||
|  |   integer iutc(64),ihz(64),ipol(64)
 | ||
|  |   real dt(64)
 | ||
|  |   character*22 decoded
 | ||
|  |   logical ltext,first
 | ||
|  |   data first/.true./
 | ||
|  |   save
 | ||
|  | 
 | ||
|  |   if(first) then
 | ||
|  |      iutc=-1
 | ||
|  |      ihz=0
 | ||
|  |      ipol=0
 | ||
|  |      first=.false.
 | ||
|  |      ihzdiff=min(100,ntol)
 | ||
|  |      dtdiff=0.2
 | ||
|  |   endif
 | ||
|  | 
 | ||
|  |   do i=1,64
 | ||
|  |      if(nutc.eq.iutc(i) .and. abs(nhz-ihz(i)).lt.ihzdiff) then
 | ||
|  |         nsave=mod(nsave-1+64,64)+1
 | ||
|  |         go to 10
 | ||
|  |      endif
 | ||
|  |   enddo
 | ||
|  |   
 | ||
|  |   iutc(nsave)=nutc                          !Save UTC
 | ||
|  |   ihz(nsave)=nhz                            !Save freq in Hz
 | ||
|  |   ipol(nsave)=npol                          !Save pol
 | ||
|  |   dt(nsave)=xdt                             !Save DT
 | ||
|  |   s3a(1:64,1:63,nsave)=s3                   !Save the spectra
 | ||
|  | 
 | ||
|  | 10 s3b=0.
 | ||
|  |   do i=1,64                                 !Accumulate avg spectra
 | ||
|  |      if(iutc(i).lt.0) cycle
 | ||
|  |      if(mod(iutc(i),2).ne.mod(nutc,2)) cycle !Use only same sequence
 | ||
|  |      if(abs(nhz-ihz(i)).gt.ihzdiff) cycle   !Freq must match
 | ||
|  |      if(abs(xdt-dt(i)).gt.dtdiff) cycle     !DT must match
 | ||
|  |      s3b=s3b + s3a(1:64,1:63,i)
 | ||
|  |      nsum=nsum+1
 | ||
|  |   enddo
 | ||
|  |  
 | ||
|  |   decoded='                      '
 | ||
|  |   if(nsum.ge.2) then                        !Try decoding the sverage
 | ||
|  |      nadd=mode65*nsum
 | ||
|  |      call extract(s3b,nadd,ncount,nhist,decoded,ltext)     !Extract the message
 | ||
|  |      nkv=nsum
 | ||
|  |      if(ncount.lt.0) then 
 | ||
|  |         nkv=0
 | ||
|  |         decoded='                      '
 | ||
|  |      endif
 | ||
|  |   endif
 | ||
|  | 
 | ||
|  |   return
 | ||
|  | end subroutine s3avg
 |