LADCPproc.backscatter
author A.M. Thurnherr <athurnherr@yahoo.com>
Fri, 06 Mar 2015 15:54:23 -0500
changeset 33 dd5b67a41791
parent 31 af03ca38fc2a
parent 29 f72cd642972c
permissions -rw-r--r--
merged Explorer with DoMORE-1 changes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     1
#======================================================================
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     2
#                    L A D C P P R O C . B A C K S C A T T E R 
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     3
#                    doc: Wed Oct 20 13:02:27 2010
33
dd5b67a41791 merged Explorer with DoMORE-1 changes
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 31 29
diff changeset
     4
#                    dlm: Fri Mar  6 15:52:50 2015
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     5
#                    (c) 2010 A.M. Thurnherr
33
dd5b67a41791 merged Explorer with DoMORE-1 changes
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 31 29
diff changeset
     6
#                    uE-Info: 32 0 NIL 0 0 72 2 2 4 NIL ofnI
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     7
#======================================================================
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     8
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 0
diff changeset
     9
# HISTORY:
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 0
diff changeset
    10
#	Oct 20, 2010: - created
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 0
diff changeset
    11
#	Dec 10, 2010: - BUG: backscatter above sea surface made code bomb
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 0
diff changeset
    12
#						 when run with uplooker data
2
16726a31a399 pre IWISE
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 1
diff changeset
    13
#	Jun 15, 2011: - added calculation of backscatter profiles from
16726a31a399 pre IWISE
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 1
diff changeset
    14
#				    subset of bins
3
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
    15
#	Jul  7, 2011: - use $BEAM? vars to clarify code
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
    16
#				  - save SV values to use in BT code
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
    17
#	Jul 14, 2011: - implemented Sv_V04
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    18
#	Jul 15, 2011: - modified Sv_V04 to take noise levels into account (Sv_T11)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    19
#	Apr 10, 2012: - BUG: ensonified volume in Sv_T11 was wrong
12
65582c172355 V1.0beta3
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
    20
#	May 16, 2012: - BUG: find_backscatter_seabed() used wrong start depth for
65582c172355 V1.0beta3
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
    21
#						 search
65582c172355 V1.0beta3
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
    22
#				  - BUG: same used bins entirely below seabed (only possible
65582c172355 V1.0beta3
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
    23
#						 for shallow casts)
28
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
    24
#	Mar 21, 2014: - adapted to new [LADCPproc.utils]
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
    25
#	Mar 27, 2014: - adapted to depthOfBinAlongBeam()
29
f72cd642972c whoosher
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
    26
#	May 25, 2014: - made search_below integer
31
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
    27
#	Jul 27, 2014: - moved depthOfGI() to [LADCPproc.utils]
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
    28
#	Aug  5, 2014: - BUG: find_backscatter_seabed() discarded everything if
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
    29
#						 LADCP bin 1 had the backscatter max at the edge of
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
    30
#						 the search domain, which could easily happen when
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
    31
#						 the bottom stop was a long way from the seabed
3
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
    32
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
    33
my($BEAM1) = 0;
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
    34
my($BEAM2) = 1;
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
    35
my($BEAM3) = 2;
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
    36
my($BEAM4) = 3;
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 0
diff changeset
    37
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    38
#----------------------------------------------------------------------
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    39
# Volume Scattering Coefficient
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    40
#
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    41
# 1) There are currently 4 different methods for correcting echo
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    42
#	 amplitudes as a function of range. The method to calculate Sv
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    43
#    of Deines (1999) is the only published one, although Visbeck's
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    44
#    correction was presumably used by Visbeck and Thurnherr (2009).
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    45
# 	 The third method (Thurnherr 2011) improves on Visbeck's code.
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    46
#	 The fourth method consists in no correction.
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    47
# 2) The following observations stand out when plotting echo amplitudes
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    48
#	 against bin number in clear water (e.g. below 1400m in first
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    49
#	 downcast of IWISE yoyo cast 160; [Documentation/Sv_comparison.eps]):
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    50
#		- the corrections works approximately for the valid bins
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    51
#		  (2-13 in case of IWISE) but it amounts to a slight
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    52
#		  overcorrection, i.e. the resulting corrected backscatter
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    53
#		  profiles increase with increasing distance from the
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    54
#		  transducer
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    55
#		- in terms of remaining vertical structure, the different
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    56
#		  methods are nearly identical
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    57
#		- however, Visbeck (2004) shows fairly large instrument
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    58
#		  dependent biases because (instrument-specific) noise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    59
#		  is not considered
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    60
#		- the vertical structure can be improved by decreasing the
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    61
#		  attenuation parameter to something like 0.05; I have
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    62
#		  verified this for the Deines and Thurnherr expressions
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    63
#		  with a single IWISE station; however, there remain
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    64
#		  small (but noticeable) instrument-specific biases
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    65
#	3) Therefore, the default code is Deines (1999); if this is
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    66
#	   not good enough, it is probably possible to derive an
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    67
#	   empirical correction from in-situ data.
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    68
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    69
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    70
#----------------------------------------------------------------------
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    71
# Volume Scattering Coefficient, following Deines (IEEE 1999)
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    72
# NOTES:
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    73
#	- instrument specific! (300kHz Workhorse)
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    74
#   - no sound-speed correction applied
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    75
#   - R in bin center, instead of last quarter
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    76
#   - transmit power assumes 33V batteries
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    77
# Results:
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    78
#	- correction seems to work for a subset of bins (~bins 3-9 for 
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    79
#	  2010 P403 station 46) 
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    80
#	- this may imply that noise level depends on bin
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    81
# 	- far bins are important for seabed detection, i.e. cannot simply
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    82
#	  be discarded at this stage
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    83
#----------------------------------------------------------------------
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    84
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    85
sub log10 {
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    86
    my $n = shift;
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    87
    return log($n)/log(10);
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    88
}   
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    89
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
    90
sub Sv_D99($$$$$)
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    91
{
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    92
    my($temp,$PL,$Er,$R,$EA) = @_;
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    93
    my($C)      = -143;                 # RDI Workhorse monitor
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    94
    my($Ldbm)   = 10 * log10($PL);
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    95
    my($PdbW)   = 14.0;
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    96
    my($alpha)  = 0.069;
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    97
#    my($alpha)  = 0.048;
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    98
    my($Kc)     = 0.45;
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    99
    
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   100
    return $C + 10*log10(($temp+273)*$R**2) - $Ldbm - $PdbW
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   101
              + 2*$alpha*$R + $Kc*($EA-$Er);
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   102
}
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   103
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   104
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   105
# Volume Scattering Coefficient, following Visbeck (code 2004)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   106
#
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   107
## function [ts,bcs]=targ($EA,$R,$alpha,$PL,$EAS,$ap)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   108
## Target strength of EA for volume scatterer
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   109
## $EA = echoamp in  dB
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   110
## $R = distance in  m
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   111
## $alpha = attenuation dB/m
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   112
## $PL = pulse/bin legth in  m
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   113
## $EAS = source level
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   114
## $ap = aperature in degree
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   115
## M. Visbeck 2004
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   116
#
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   117
# Results:
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   118
#	- overall, correction with distance works similarly well to Deines (1999)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   119
#	- constant bias, which could be taken care of by changing EAS
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   120
#	- however, much more serious UL/DL differences than Deines (1999)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   121
#----------------------------------------------------------------------
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   122
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   123
sub Sv_V04($$$$$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   124
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   125
    my($temp,$PL,$Er,$R,$EA) = @_;	# only uses $R and $EA
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   126
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   127
#	my($alpha) = 0.039;		## attenuation dB/m for 150 kHz
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   128
	my($alpha) = 0.062;		## attenuation dB/m for 300 kHz
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   129
	
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   130
	my($EAS) = 100;			## source level in dB
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   131
	my($ap) = rad(2);		## beam aperature in DEGREE convert to radian
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   132
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   133
	my($r1) = tan($ap)*($R-$PL/2);	## radius of top and bottom of each bin
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   134
	my($r2) = tan($ap)*($R+$PL/2);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   135
	my($V) = $PI*$PL/3 * ($r1**2+$r2**2+$r1*$r2);	## ensonified volume 
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   136
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   137
	my($TL) = 20*log10($R) + $alpha*$R;				## transmission loss
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   138
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   139
	my($TS) = 0.45*$EA - $EAS + 2*$TL - 10*log10($V);	## target strength
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   140
	my($BCS) = exp($TS/10);							## backscatter cross section
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   141
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   142
	return $TS;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   143
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   144
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   145
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   146
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   147
# Volume Scattering Coefficient, Thurnherr [2011]
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   148
#
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   149
# in an attempt to improved on Visbeck's code, I made several
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   150
# modifications:
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   151
#	- add 5cm to beam radius (transducer radius)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   152
#	- take beam noise into account (as in Deines [1999])
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   153
#	- use different equation for ensonified volume
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   154
# results:
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   155
#	- inclusion of beam noise greatly reduces UL/DL differences in IWISE data
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   156
#	- constant offset from Deines values, which could be taken care of by changing EAS
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   157
#	- remaining changes don't have great effects
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   158
#----------------------------------------------------------------------
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   159
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   160
sub Sv_T11($$$$$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   161
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   162
    my($temp,$PL,$Er,$R,$EA) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   163
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   164
#	my($alpha) = 0.067;				# Deines [1999]
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   165
	my($alpha) = 0.062;				# Visbeck [2004]
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   166
#	my($alpha) = 0.048;				# attenuation dB/m for 300 kHz
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   167
	my($EAS) = 100;					# source level in dB
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   168
	my($ap) = rad(2);				# beam aperature in DEGREE convert to radian
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   169
	my($r0) = 0.05;					# beam radius at source (transducer radius)
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   170
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   171
	my($d1) = $R - $PL/2;			# distance to top and bottom of bin
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   172
	my($d2) = $R + $PL/2;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   173
	my($r1) = $r0 + $d1*tan($ap);	# radius of top and bottom of each bin
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   174
	my($r2) = $r0 + $d2*tan($ap);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   175
	
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   176
	my($V) = $PI/3 * ($d2*$r2**2 - $d1*$r1**2);	# ensonified volume
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   177
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   178
	my($TL) = 20*log10($R) + $alpha*$R;		# transmission loss
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   179
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   180
	my($TS) = 0.45*($EA-$Er) - $EAS + 2*$TL - 10*log10($V);	# target strength
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   181
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   182
	return $TS;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   183
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   184
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   185
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   186
# no correction for attenuation losses
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   187
#
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   188
# however, noise level is still taken into consideration
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   189
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   190
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   191
sub Sv_nocorr($$$$$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   192
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   193
    my($temp,$PL,$Er,$R,$EA) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   194
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   195
	return 0.45*($EA-$Er);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   196
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   197
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   198
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   199
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   200
sub mk_backscatter_profs($$)
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   201
{
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   202
	my($LADCP_start,$LADCP_end) = @_;
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   203
	
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   204
	my(@Er) = (1e99,1e99,1e99,1e99);						# echo intensity reference level
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   205
	for (my($ens)=$LADCP_start; $ens<=$LADCP_end; $ens++) {
3
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
   206
		$Er[$BEAM1] = $LADCP{ENSEMBLE}[$ens]->{ECHO_AMPLITUDE}[$LADCP{N_BINS}-1][$BEAM1]
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
   207
			if ($LADCP{ENSEMBLE}[$ens]->{ECHO_AMPLITUDE}[$LADCP{N_BINS}-1][$BEAM1] < $Er[$BEAM1]);
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
   208
		$Er[$BEAM2] = $LADCP{ENSEMBLE}[$ens]->{ECHO_AMPLITUDE}[$LADCP{N_BINS}-1][$BEAM2]
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
   209
			if ($LADCP{ENSEMBLE}[$ens]->{ECHO_AMPLITUDE}[$LADCP{N_BINS}-1][$BEAM2] < $Er[$BEAM2]);
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
   210
		$Er[$BEAM3] = $LADCP{ENSEMBLE}[$ens]->{ECHO_AMPLITUDE}[$LADCP{N_BINS}-1][$BEAM3]
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
   211
			if ($LADCP{ENSEMBLE}[$ens]->{ECHO_AMPLITUDE}[$LADCP{N_BINS}-1][$BEAM3] < $Er[$BEAM3]);
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
   212
		$Er[$BEAM4] = $LADCP{ENSEMBLE}[$ens]->{ECHO_AMPLITUDE}[$LADCP{N_BINS}-1][$BEAM4]
711dd29cb6dd post 2011_IWISE
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 2
diff changeset
   213
			if ($LADCP{ENSEMBLE}[$ens]->{ECHO_AMPLITUDE}[$LADCP{N_BINS}-1][$BEAM4] < $Er[$BEAM4]);
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   214
    }
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   215
	print(STDERR "\n\t\@per-beam noise levels = @Er") if ($opt_d);
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   216
28
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   217
	my($Svfunc);											# Sv method
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   218
	if ($opt_u =~ /^[dD]/) {
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   219
		$Svfunc = \&Sv_D99;
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   220
	} elsif ($opt_u =~ /^[vV]/) {
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   221
		$Svfunc = \&Sv_V04;
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   222
	} elsif ($opt_u =~ /^[tT]/) {
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   223
		$Svfunc = \&Sv_T11;
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   224
	} else {
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   225
		$Svfunc = \&Sv_nocorr;
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   226
	}
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   227
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   228
	for (my($ens)=$LADCP_start; $ens<=$LADCP_end; $ens++) {
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   229
		for (my($bin)=0; $bin<$LADCP{N_BINS}; $bin++) {
28
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   230
			my($range_to_bin) = &rangeToBin($ens,$bin);
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   231
28
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   232
			for (my($beam)=0; $beam<4; $beam++) {
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   233
				my($gi) = int(&depthOfBinAlongBeam($ens,$bin,$beam) / $GRID_DZ);
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   234
				next if ($gi < 0);
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   235
				$LADCP{ENSEMBLE}[$ens]->{SV}[$bin][$beam] = &$Svfunc($LADCP{ENSEMBLE}[$ens]->{CTD_TEMP},
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   236
							 							    		 $LADCP{TRANSMITTED_PULSE_LENGTH},
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   237
														    		 $Er[$beam],$range_to_bin,
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   238
							            			        		 $LADCP{ENSEMBLE}[$ens]->{ECHO_AMPLITUDE}[$bin][$beam]);
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 3
diff changeset
   239
28
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   240
				$sSv[$gi][$bin] += $LADCP{ENSEMBLE}[$ens]->{SV}[$bin][$beam];
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   241
				$nSv[$gi][$bin]++;							            			        		 
2
16726a31a399 pre IWISE
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 1
diff changeset
   242
28
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   243
				if ($bin>=$Svbin_start && $bin<=$Svbin_end) {
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   244
					$sSv_prof[$gi] += $LADCP{ENSEMBLE}[$ens]->{SV}[$bin][$beam];
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   245
					$nSv_prof[$gi]++;
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   246
				} # if $bin
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   247
			} # for $beam
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   248
		} # for $bin
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   249
	} # for $end
79bf60e97208 after merge with laptop version
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   250
} # sub
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   251
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   252
sub find_backscatter_seabed($)
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   253
{
12
65582c172355 V1.0beta3
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   254
	my($water_depth) = @_;
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   255
	my(@wdepth_gi);												# water_depth indices
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   256
29
f72cd642972c whoosher
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   257
	my($search_below) = int(max(0,$water_depth-$BT_begin_search_above));
12
65582c172355 V1.0beta3
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   258
	my($mdgi) = int($search_below/$GRID_DZ);					# grid index to begin search
31
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   259
	printf(STDERR "\n\t\tlooking for seabed below %d m (gi = [%d..%d])",$search_below,$mdgi,scalar(@nSv))
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   260
		if ($opt_d);
12
65582c172355 V1.0beta3
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   261
65582c172355 V1.0beta3
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   262
	print(STDERR "\n\t\tseabed-max grid indices:") if ($opt_d);
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   263
	
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   264
	for (my($bin)=0; $bin<$LADCP{N_BINS}; $bin++) { 			# find backscatter min/max below $search_below in each bin
12
65582c172355 V1.0beta3
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   265
		my($min,$max,$gimax,$firstvalid,$lastvalid) = (1e99,-1e99,-1,-1,-1);
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   266
		for (my($gi)=$mdgi; $gi<@nSv; $gi++) {
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   267
			next unless ($nSv[$gi][$bin] > 0);
12
65582c172355 V1.0beta3
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   268
			$firstvalid = $gi if ($firstvalid < 0);
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   269
			my($avg) = $sSv[$gi][$bin] / $nSv[$gi][$bin];
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   270
			$lastvalid = $gi;
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   271
			$min = $avg if ($avg < $min);
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   272
			$max = $avg, $gimax = $gi if ($avg > $max);
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   273
		}
31
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   274
		if ($max-$min>10 && $gimax!=$firstvalid && $gimax!=$lastvalid) { 				# ignore boundary maxima & scatter
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   275
			printf(STDERR " %d",$gimax) if ($opt_d);
0
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   276
			push(@wdepth_gi,$gimax);
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   277
		}
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   278
	}
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   279
	
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   280
	return (depthOfGI(avg(@wdepth_gi)),stddev(@wdepth_gi)*$GRID_DZ);
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   281
}
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   282
de00d0f32431 initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   283
1;