| 
									
										
										
										
											2022-04-22 15:34:12 -04:00
										 |  |  | subroutine echo_snr(sa,sb,fspread,blue,red,snrdb,db_err,fpeak,snr_detect)
 | 
					
						
							| 
									
										
										
										
											2022-04-22 13:07:23 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   parameter (NZ=4096)
 | 
					
						
							|  |  |  |   real sa(NZ)
 | 
					
						
							|  |  |  |   real sb(NZ)
 | 
					
						
							|  |  |  |   real blue(NZ)
 | 
					
						
							|  |  |  |   real red(NZ)
 | 
					
						
							|  |  |  |   integer ipkv(1)
 | 
					
						
							|  |  |  |   equivalence (ipk,ipkv)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   df=12000.0/32768.0
 | 
					
						
							| 
									
										
										
										
											2022-04-22 15:34:12 -04:00
										 |  |  |   wh=0.5*fspread+10.0
 | 
					
						
							| 
									
										
										
										
											2022-04-22 13:07:23 -04:00
										 |  |  |   i1=nint((1500.0 - 2.0*wh)/df) - 2048
 | 
					
						
							|  |  |  |   i2=nint((1500.0 - wh)/df) - 2048
 | 
					
						
							|  |  |  |   i3=nint((1500.0 + wh)/df) - 2048
 | 
					
						
							|  |  |  |   i4=nint((1500.0 + 2.0*wh)/df) - 2048
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-22 15:34:12 -04:00
										 |  |  | !  call pctile(sb(i1),i2-i1,50,r0)
 | 
					
						
							|  |  |  | !  call pctile(sb(i3+1),i4-i3,50,r1)
 | 
					
						
							|  |  |  | !  ave=0.5*(r0+r1)
 | 
					
						
							|  |  |  | !  blue=sa/ave
 | 
					
						
							|  |  |  | !  red=sb/ave
 | 
					
						
							| 
									
										
										
										
											2022-04-22 13:07:23 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-22 15:34:12 -04:00
										 |  |  |   baseline=(sum(sb(i1:i2-1)) + sum(sb(i3+1:i4)))/(i2+i4-i1-i3)
 | 
					
						
							|  |  |  |   blue=sa/baseline
 | 
					
						
							|  |  |  |   red=sb/baseline
 | 
					
						
							| 
									
										
										
										
											2022-04-22 13:07:23 -04:00
										 |  |  |   psig=sum(red(i2:i3)-1.0)
 | 
					
						
							|  |  |  |   pnoise_2500 = 2500.0/df
 | 
					
						
							|  |  |  |   snrdb=db(psig/pnoise_2500)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   smax=0.
 | 
					
						
							| 
									
										
										
										
											2022-04-22 15:34:12 -04:00
										 |  |  |   mh=max(1,nint(0.2*fspread/df))
 | 
					
						
							| 
									
										
										
										
											2022-04-22 13:07:23 -04:00
										 |  |  |   do i=i2,i3
 | 
					
						
							|  |  |  |      ssum=sum(red(i-mh:i+mh))
 | 
					
						
							|  |  |  |      if(ssum.gt.smax) then
 | 
					
						
							|  |  |  |         smax=ssum
 | 
					
						
							|  |  |  |         ipk=i
 | 
					
						
							|  |  |  |      endif
 | 
					
						
							|  |  |  |   enddo
 | 
					
						
							|  |  |  |   fpeak=ipk*df - 750.0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   call averms(red(i1:i2-1),i2-i1,-1,ave1,rms1)
 | 
					
						
							|  |  |  |   call averms(red(i3+1:i4),i4-i3,-1,ave2,rms2)
 | 
					
						
							|  |  |  |   perr=0.707*(rms1+rms2)*sqrt(float(i2-i1+i4-i3))
 | 
					
						
							|  |  |  |   snr_detect=psig/perr
 | 
					
						
							|  |  |  |   db_err=99.0
 | 
					
						
							|  |  |  |   if(psig.gt.perr) db_err=snrdb - db((psig-perr)/pnoise_2500)
 | 
					
						
							| 
									
										
										
										
											2022-04-22 15:34:12 -04:00
										 |  |  |   if(db_err.lt.0.5) db_err=0.5
 | 
					
						
							| 
									
										
										
										
											2022-04-22 13:07:23 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   return
 | 
					
						
							|  |  |  | end subroutine echo_snr
 |