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