hydrac.instruments.acoustique

Acoustic instruments (hydrac.instruments.acoustique)

class hydrac.instruments.acoustique.Acoustic[source]

Bases: hydrac.instruments.instruments.Instrument

Acoustic class.

Base class : hydrac.instruments.instruments.Instrument

This class is meant to be subclassed, not instantiated directly.

The Acoustic class handles hydroacoustic devices data contained in param and contains methods dedicated to their processing such as water absorption correction and spherical spreading correction along an acoustic profile (spreading_and_att_correction()) given the carrier frequency of the device, the physical parameters of the water (Temperature, Salinity…).

The param structure is common to all hydroacoustic instruments. Each param can contain several sets of profiles (ex. param.P0, param.P1…), the structure of which is described in the table below.

Description of the param container
Parameter Name Type Size Description
BurstTime float 1 Time of first ping
PingRate int 1 Ping rate in Hz
NumPingsTot int 1 Total number of pings
NumChannels int 1 Number of active frequency channels = F
NumProfilesSamples float F Effective number of profiles = Ns
NumAverage float F Number of pings averaged to create a profile
SampleRate float F Profile rate in Hz
BinLengthMM float F Cellsize in mm
StartBin float F Range of the first cell
NumBins float F Number of cells along a profile
TransducerRadius float F Radius of each active transducer = N
TransducerBeamWidth float F BeamWidth of each active transducer
TransducerKt float F Calibration constant of each transducer
Frequency float F Carrier frequency of each transducer in Hz
StartBin float F Range of the first cell
PulseLength float F Pulse length in s
RxGain/TxGain float F Gain at Emission/Reception in dB
RawIntensity float NxNsxF Raw HAC data
BinRange float NxF Ranges of each cell per channel
time float Ns Time of each sample in s
TransducerAngle float F Gain at Emission/Reception in dB
depth float Ns Depth of the transducers
FileName str (-) Filename used to generate the data
preproc_acoustic_data(self, w_obj=None, phy_instr=None)[source]

The most useful method for user is preproc_acoustic_data(). From this method, several kinds of processing are possible, the goal of which is to calculate the calibrated hydroacoustic intensity parameter Intensity :

1 - If the HAC data were collected along with environmental data, it is possible to input these data, stored as an object K from hydrac.instruments.physicalparam.PhysicalParam:

# Intanciate HAC object
>>> A=hydrac.instruments.aquascat.Aquascat('Campaign_1')
# Intanciate environnemental data object
>>> K=hydrac.instruments.sbe.SBE('Campaign_1')
>>> A.preproc_acoustic_data(phy_instr=K)

2 - If no environemental data were acquired along with the HAS data, the user is prompted to at least refer to the water temperature from which waterabsorption can be computed from hydrac.model.water.Water:

# Intanciate HAC object
>>> A=hydrac.instruments.aquascat.Aquascat('Campaign_1')
>>> A.preproc_acoustic_data()
# The user is prompted for water temperature
No water parameters data... Please enter a mean temerature value to
estimate sound attenuation :
14

The calibrated intensity is calculated using the raw intensity measured by the instrument (stored in the variable RawIntensity), corrected from water absorption, spherical spreading, nearfield effects. A calibration coefficient taking account of the transducers sensitivity and directivity patterns is also applied. Finally, the calibrated (or absolute) intensity is returned normalized by the sample volume and stored in the variable Intensity, as a volume backscattering coefficient, or sv in m2/m3 (see McLennan et al. 2002, https://doi.org/10.1006/jmsc.2001.1158).

\[s_v = \frac{3}{\pi} \frac{V_{rms}^2 \Psi^2r^2}{16K_t^2}e^{4r(\alpha_{w})}\]

where :

  • \(V_{rms}\) is the root mean square voltage measured by the instrument
  • \(\Psi\) is the nearfield correction factor
  • \(K_t\) is the calibration coefficient
  • \(\alpha_{w}\) is the attenuation due to water

This method also attaches a deployment strategy (prompted from the user) to assert the measurement geometry (from the surface, from the bottom, profiles in the water column…) from the class hydrac.instruments.mod_deployment.ModeDeployment:

>>> A.preproc_acoustic_data()
# The user is prompted for water temperature
No water parameters data... Please enter a mean temerature value to
estimate sound attenuation :
14
# The user is prompted for a deployment strategy
Deployment Mod :
Mooring
# The user is prompted for potential temporal averaging of the data
Select a temporal window for averaging of moored acoustic parameter
instrument (0 for no averaging):
1
Select a vertical bin size for averaging of casted physical parameter
instrument (0 for no averaging):
0.5
>>> A.mode_depl
'Mooring'
Parameters:
w_obj=None : object

Water object from hydrac.model.water.Water

phy_instr=None : object

Physical Instrument object from hydrac.instruments.physicalparam

spreading_and_att_correction(self, i1, aux=None)[source]

Corrects RawIntensity Samples from water absorption and spherical spreading.

1 - Attenuation due to water : several models exist to predict the amount of energy lost by the acoustic wave as it travels into water; A most famous example is the model of François & Garrison (1982), (https://doi.org/10.1121/1.388170).

2 - Spherical spreading : the latter is a function of the range and follows a decrease proportionnal to \(\frac{1}{r^2}\) for spherical waves.

../_images/tvg.pdf
Parameters:
i1=None : int

Profile set number in param

aux=None : bool

if physical parameters were as input of hydrac.instruments.acoustique.Acoustic.preproc_acoustic_data(), water absorption has been computed for each cell in the HAC profile for each frequency channel hence a different implementation.

Returns:
Intensity : numpy.array

The corrected Intensity profiles for each sets of profiles

hac_data_decimation(self, autodetect='off', st=None, ed=None)[source]

This method corrects for potential corrupt data, for example when attenuation is such that no more useful signal can be extracted from the data, or when data in the nearfield have not been corrrected. This noise detection is done using autodetect_noise()

Also, given the application, instruments can be deployed horizontally in the water column. Supposing weak attenuation and homogeneous medium, one can average the HAC profiles at each depth sampled by the instrument to increase the Signal to Noise Ratio (SNR).

Corresponding modifications are directly applied to the Intensity variable of the profile set P contained in param.

Parameters:
autodetect : str, {‘on’, ‘off’}

automatic detection of noise floor reached by the instrument and removal of noise data.

st, ed : int, int

start and end cell number to be considered for either averaging or noise/nearfield removal.

autodetect_noise(self, data)[source]

Noise detection…

red(self, C, x1, x2)[source]

Boundary detection for profile spliting

split_profiles(self, B, b1, b2, bx)[source]

If profiles are too big or if several physical instrument profile sets overlap to the current HAC profile, the latter is split into several profiles of shorter duration each. The original profile is removed.

sort_profiles(self)[source]

Renames the profile sets according to the current number of profiles in the set. For exemple, if the original profile set contains the profile P0, after spliting profiles P0 into P1, P2 and P3 of shorter durations, those are renames P0, P1 and P2 respectively.

Classes

Acoustic() Acoustic class.