| 
									
										
										
										
											2017-01-05 18:35:26 +00:00
										 |  |  | subroutine freqcal(id2,k,nkhz,noffset,ntol,line)
 | 
					
						
							| 
									
										
										
										
											2017-01-04 19:07:35 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   parameter (NZ=30*12000,NFFT=55296,NH=NFFT/2)
 | 
					
						
							|  |  |  |   integer*2 id2(0:NZ-1)
 | 
					
						
							| 
									
										
										
										
											2017-01-12 03:48:18 +00:00
										 |  |  |   complex sp,sn
 | 
					
						
							| 
									
										
										
										
											2017-01-04 19:07:35 +00:00
										 |  |  |   real x(0:NFFT-1)
 | 
					
						
							| 
									
										
										
										
											2017-01-12 03:48:18 +00:00
										 |  |  |   real xi(0:NFFT-1)
 | 
					
						
							| 
									
										
										
										
											2017-01-10 14:51:32 +00:00
										 |  |  |   real w(0:NFFT-1)                      !Window function
 | 
					
						
							| 
									
										
										
										
											2017-01-09 22:54:47 +00:00
										 |  |  |   real s(0:NH)
 | 
					
						
							| 
									
										
										
										
											2017-01-09 15:55:42 +00:00
										 |  |  |   character line*80,cflag*1
 | 
					
						
							| 
									
										
										
										
											2017-01-10 14:51:32 +00:00
										 |  |  |   logical first
 | 
					
						
							| 
									
										
										
										
											2017-01-04 19:07:35 +00:00
										 |  |  |   complex cx(0:NH)
 | 
					
						
							|  |  |  |   equivalence (x,cx)
 | 
					
						
							| 
									
										
										
										
											2017-01-10 14:51:32 +00:00
										 |  |  |   data n/0/,k0/9999999/,first/.true./
 | 
					
						
							| 
									
										
										
										
											2017-01-12 03:48:18 +00:00
										 |  |  |   save n,k0,w,first,pi,fs,xi
 | 
					
						
							| 
									
										
										
										
											2017-01-04 19:07:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-10 14:51:32 +00:00
										 |  |  |   if(first) then
 | 
					
						
							|  |  |  |      pi=4.0*atan(1.0)
 | 
					
						
							| 
									
										
										
										
											2017-01-12 03:48:18 +00:00
										 |  |  |      fs=12000.0
 | 
					
						
							| 
									
										
										
										
											2017-01-10 14:51:32 +00:00
										 |  |  |      do i=0,NFFT-1
 | 
					
						
							|  |  |  |         ww=sin(i*pi/NFFT)
 | 
					
						
							|  |  |  |         w(i)=ww*ww/NFFT
 | 
					
						
							| 
									
										
										
										
											2017-01-12 03:48:18 +00:00
										 |  |  |         xi(i)=2.0*pi*i
 | 
					
						
							| 
									
										
										
										
											2017-01-10 14:51:32 +00:00
										 |  |  |      enddo
 | 
					
						
							|  |  |  |      first=.false.
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							|  |  |  |   
 | 
					
						
							| 
									
										
										
										
											2017-01-05 20:20:43 +00:00
										 |  |  |   if(k.lt.NFFT) go to 900
 | 
					
						
							| 
									
										
										
										
											2017-01-04 19:07:35 +00:00
										 |  |  |   if(k.lt.k0) n=0
 | 
					
						
							|  |  |  |   k0=k
 | 
					
						
							|  |  |  |      
 | 
					
						
							| 
									
										
										
										
											2017-01-10 14:51:32 +00:00
										 |  |  |   x=w*id2(k-NFFT:k-1)              !Apply window
 | 
					
						
							| 
									
										
										
										
											2017-01-04 19:07:35 +00:00
										 |  |  |   call four2a(x,NFFT,1,-1,0)       !Compute spectrum, r2c
 | 
					
						
							| 
									
										
										
										
											2017-01-12 03:48:18 +00:00
										 |  |  |   df=fs/NFFT
 | 
					
						
							| 
									
										
										
										
											2017-01-09 22:54:47 +00:00
										 |  |  |   if (ntol.gt.noffset) then
 | 
					
						
							|  |  |  |      ia=0
 | 
					
						
							|  |  |  |      ib=nint((noffset*2)/df)
 | 
					
						
							|  |  |  |   else
 | 
					
						
							|  |  |  |      ia=nint((noffset-ntol)/df)
 | 
					
						
							|  |  |  |      ib=nint((noffset+ntol)/df)
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2017-01-04 19:07:35 +00:00
										 |  |  |   smax=0.
 | 
					
						
							|  |  |  |   s=0.
 | 
					
						
							| 
									
										
										
										
											2019-05-11 09:36:15 -05:00
										 |  |  |   ipk=-99
 | 
					
						
							| 
									
										
										
										
											2017-01-04 19:07:35 +00:00
										 |  |  |   do i=ia,ib
 | 
					
						
							|  |  |  |      s(i)=real(cx(i))**2 + aimag(cx(i))**2
 | 
					
						
							|  |  |  |      if(s(i).gt.smax) then
 | 
					
						
							|  |  |  |         smax=s(i)
 | 
					
						
							|  |  |  |         ipk=i
 | 
					
						
							|  |  |  |      endif
 | 
					
						
							|  |  |  |   enddo
 | 
					
						
							| 
									
										
										
										
											2019-05-11 09:36:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   if(ipk.ge.1) then
 | 
					
						
							|  |  |  |     call peakup(s(ipk-1),s(ipk),s(ipk+1),dx)
 | 
					
						
							|  |  |  |     fpeak=df * (ipk+dx)
 | 
					
						
							|  |  |  |     ap=(fpeak/fs+1.0/(2.0*NFFT))
 | 
					
						
							|  |  |  |     an=(fpeak/fs-1.0/(2.0*NFFT))
 | 
					
						
							|  |  |  |     sp=sum(id2((k-NFFT):k-1)*cmplx(cos(xi*ap),-sin(xi*ap)))
 | 
					
						
							|  |  |  |     sn=sum(id2((k-NFFT):k-1)*cmplx(cos(xi*an),-sin(xi*an)))
 | 
					
						
							|  |  |  |     fpeak=fpeak+fs*(abs(sp)-abs(sn))/(abs(sp)+abs(sn))/(2*NFFT)
 | 
					
						
							|  |  |  |     xsum=0.
 | 
					
						
							|  |  |  |     nsum=0
 | 
					
						
							|  |  |  |     do i=ia,ib
 | 
					
						
							|  |  |  |        if(abs(i-ipk).gt.10) then
 | 
					
						
							|  |  |  |           xsum=xsum+s(i)
 | 
					
						
							|  |  |  |           nsum=nsum+1
 | 
					
						
							|  |  |  |        endif
 | 
					
						
							|  |  |  |     enddo
 | 
					
						
							|  |  |  |     ave=xsum/nsum
 | 
					
						
							|  |  |  |     snr=db(smax/ave)
 | 
					
						
							|  |  |  |     pave=db(ave) + 8.0
 | 
					
						
							|  |  |  |   else
 | 
					
						
							|  |  |  |     snr=-99.9
 | 
					
						
							|  |  |  |     pave=-99.9
 | 
					
						
							|  |  |  |     fpeak=-99.9
 | 
					
						
							|  |  |  |     ferr=-99.9
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2017-01-05 18:35:26 +00:00
										 |  |  |   cflag=' '
 | 
					
						
							|  |  |  |   if(snr.lt.20.0) cflag='*'
 | 
					
						
							| 
									
										
										
										
											2017-01-04 19:07:35 +00:00
										 |  |  |   n=n+1
 | 
					
						
							| 
									
										
										
										
											2017-01-05 18:35:26 +00:00
										 |  |  |   nsec=mod(time(),86400)
 | 
					
						
							|  |  |  |   nhr=nsec/3600
 | 
					
						
							|  |  |  |   nmin=mod(nsec/60,60)
 | 
					
						
							|  |  |  |   nsec=mod(nsec,60)
 | 
					
						
							|  |  |  |   ncal=1
 | 
					
						
							|  |  |  |   ferr=fpeak-noffset
 | 
					
						
							|  |  |  |   write(line,1100)  nhr,nmin,nsec,nkhz,ncal,noffset,fpeak,ferr,pave,   &
 | 
					
						
							| 
									
										
										
										
											2019-05-11 09:36:15 -05:00
										 |  |  |             snr,cflag,char(0)
 | 
					
						
							| 
									
										
										
										
											2017-01-09 15:55:42 +00:00
										 |  |  | 1100 format(i2.2,':',i2.2,':',i2.2,i7,i3,i6,2f10.3,2f7.1,2x,a1,a1)
 | 
					
						
							| 
									
										
										
										
											2017-01-04 19:07:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-05 20:20:43 +00:00
										 |  |  | 900 return
 | 
					
						
							| 
									
										
										
										
											2017-01-04 19:07:35 +00:00
										 |  |  | end subroutine freqcal
 |