mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05: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
							 |