Ir al contenido

underwater.propagation.closed_form

La referencia de la API se publica en inglés en los dos idiomas: se genera a partir de los docstrings del código, que son su texto original.

Underwater sound propagation: propagation loss (closed-form).

Propagation loss PL, (dB) is the difference between the source level in a given direction and the mean-square sound pressure level at the receiver, (ISO 18405:2017, 3.4.1.4). Here it is the sum of geometrical spreading and volume absorption:

  • spreading_loss — geometrical spreading, (spherical), (cylindrical) or spherical-then-cylindrical ("practical").
  • seawater_absorption — the volume absorption coefficient in dB/km, from three coexisting formulations selectable through model: Francois & Garrison (1982, the default and reference), Ainslie & McColm (1998, a legible simplification of it) and Thorp (1967, a frequency-only form).
  • propagation_loss — the total versus range, returned as a PropagationLossResult with a .plot().

Not transmission loss, which ISO 18405:2017, 3.4.1.3 reserves for the reduction in a specified level between two specified points and whose Note 6 to entry deprecates as a synonym of this quantity.

Sources (clean-room, implemented from the published equations): Francois & Garrison, JASA 72 (1982) via Medwin & Clay; Ainslie & McColm, JASA 103 (1998); Thorp (1967) via Etter (2003). Absorption is validated by the mutual agreement of Francois-Garrison and Ainslie-McColm (~10 % as the latter’s paper states; marginally exceeded at the extreme corners of the stated domain, e.g. 10.4 % at T = −6 °C / 1 MHz and 12.3 % at z = 7 km, a property of the published simplification, both transcriptions verified digit-for-digit).

Auto-generated from the source docstrings by scripts/generate_api_docs.py (make api-docs). Do not edit by hand.

propagation_loss(
range_m: NDArray[np.float64] | list[float] | float,
frequency_hz: float,
*,
law: str = 'spherical',
temperature: float = 10.0,
salinity: float = 35.0,
depth: float = 0.0,
ph: float = 8.0,
model: str = 'francois-garrison',
transition_range: float | None = None,
) -> PropagationLossResult

Total propagation loss versus range.

Parameters

NameDescription
range_mRange(s) from the source, in metres (scalar or array).
frequency_hzAcoustic frequency, in Hz.
lawSpreading law (see spreading_loss).
temperatureTemperature T, in degrees Celsius.
salinitySalinity S, in parts per thousand.
depthDepth, in metres.
phAcidity (default 8).
modelAbsorption model (see seawater_absorption).
transition_rangeTransition range for the "practical" law, in m.

Returns: A PropagationLossResult.

Raises

ExceptionWhen
ValueErrorIf the inputs are invalid.
PropagationLossResult(
range_m: NDArray[np.float64],
pl: NDArray[np.float64],
spreading: NDArray[np.float64],
absorption: NDArray[np.float64],
frequency: float,
absorption_coefficient: float,
law: str,
model: str,
)

Propagation loss versus range (closed-form).

Attributes

NameDescription
range_mRanges from the source, in metres.
plTotal propagation loss per range, in dB.
spreadingGeometrical-spreading contribution per range, in dB.
absorptionVolume-absorption contribution per range, in dB.
frequencyThe acoustic frequency, in Hz.
absorption_coefficientThe absorption coefficient , in dB/km.
lawThe spreading law used.
modelThe absorption model used.
PropagationLossResult.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the propagation loss versus range with its two contributions.

seawater_absorption(
frequency_hz: NDArray[np.float64] | list[float] | float,
*,
temperature: float = 10.0,
salinity: float = 35.0,
depth: float = 0.0,
ph: float = 8.0,
model: str = 'francois-garrison',
) -> NDArray[np.float64]

Volume absorption coefficient , in dB/km.

Parameters

NameDescription
frequency_hzAcoustic frequency, in Hz (scalar or array).
temperatureTemperature T, in degrees Celsius.
salinitySalinity S, in parts per thousand.
depthDepth, in metres (>= 0).
phAcidity (used by Francois-Garrison and Ainslie-McColm; default 8).
model"francois-garrison" (default), "ainslie-mccolm" or "thorp" (the Thorp 1967 frequency-only form of Etter, valid below ~50 kHz; ignores temperature/salinity/depth/ph).

Returns: Absorption coefficient per frequency, in dB/km.

Raises

ExceptionWhen
ValueErrorIf model is unknown or an input is invalid.
spreading_loss(
range_m: NDArray[np.float64] | list[float] | float,
*,
law: str = 'spherical',
transition_range: float | None = None,
) -> NDArray[np.float64]

Geometrical spreading loss, in dB.

"spherical" gives (free field), "cylindrical" gives (perfect waveguide) and "practical" is spherical up to transition_range R0 then cylindrical: (mode stripping in a channel).

Parameters

NameDescription
range_mRange R from the source, in metres (scalar or array, strictly positive).
law"spherical" (default), "cylindrical" or "practical".
transition_rangeTransition range R0 in metres; required for "practical".

Returns: Spreading loss per range, in dB.

Raises

ExceptionWhen
ValueErrorIf the inputs are invalid.