Last updated on Feb 20, 2026.

netsse.analys.dsa#

Functions for transforming spectra observed from advancing floating platforms.

Copyright (C) 2023-2026 Technical University of Denmark, R.E.G. Mounet

This code is part of the NetSSE software.

NetSSE is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

NetSSE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

To credit the author, users are encouraged to use below reference:

Mounet, R. E. G., & Nielsen, U. D. NetSSE: An open-source Python package
for network-based sea state estimation from ships, buoys, and other
observation platforms (version 2.2). Technical University of Denmark,
GitLab. February 2026. https://doi.org/10.11583/DTU.26379811.

Last updated on 20-02-2026 by R.E.G. Mounet

Functions#

polynom_DSA(tau, om0m[, weighting, nu23, full_output])

Computes the polynomial approximation of the Doppler Shift.

trans_2Dmat_DSA(freq_in, beta, U[, freq_out, ...])

Computes the transformation matrices for applying the Doppler shift approximation (DSA) at the given forward speed and for the given frequency and direction discretizations.

Module Contents#

netsse.analys.dsa.polynom_DSA(tau, om0m, weighting='uniform', nu23=None, full_output=False)[source]#

Computes the polynomial approximation of the Doppler Shift.

Note

This implementation uses the derivations presented in Mounet et al. (2025, 2026).

Parameters:
  • tau (array_like of shape (Ntau,)) – Array of Doppler shift intensities.

  • om0m (float) – Cut-off frequency of the DSA.

  • weighting ({'uniform','tripvalpb','lowfreq'}, optional) –

    Weighting method to use:

    • ’uniform’ :

      Equal weight is given to all frequencies in the range [0,om0m] in the cost function. This is the default option. It is introduced in Mounet et al. (2025).

    • ’tripvalpb’ :

      Same as 'uniform' weighting, but the om0m is set to a value of \((1+\sqrt{2})/(2\tau)\) when \(\nu>\nu_{23}\). This ensures the DSA features an optimal accuracy in the range of frequencies where the triple-value problem occurs. This idea is introduced in Mounet et al. (2026).

    • ’lowfreq’ :

      A decreasing (affine) weighting function is applied in the range [0,om0m], such that low frequencies are given more importance in the cost function. This option is not recommended for general use.

  • nu23 (float, optional) – Threshold value of nu for switching between the concave and convex forms of the approximation. Default is None, which means that the convex form is not used.

  • full_output (bool, optional) – If True, the function returns nu``and ``kappa as additional outputs. Default is False.

Returns:

  • rho_p (array_like of shape (Ntau,)) – Computed rho_p values.

  • nu_p (array_like of shape (Ntau,)) – Computed nu_p values.

  • nu (array_like of shape (Ntau,)) – Computed nu values.

  • kappa (array_like of shape (Ntau,)) – Computed kappa values.

See also

trans_2Dmat_DSA

Computes the matrices for applying the Doppler shift approximation (DSA).

References

  1. Mounet, R.E.G., Nielsen, U.D., and Takami, T. (2025). “Doppler Shift Approximation in Seakeeping Problems: A New Formulation for Ships Advancing at Any Forward Speed.” In: Proceedings of the 16th International Symposium on Practical Design of Ships and Other Floating Structures (PRADS 2025), Ann Arbor, MI, USA. (Accepted).

  2. Mounet, R.E.G., Nielsen, U.D., and Takami, T. (2026). “Approximating the Doppler Shift in Sea-Wave Spectra Observed from an Advancing Floating Platform.” Applied Mathematical Modelling. (Submitted).

Example

>>> rho_p, nu_p = polynom_DSA(tau, om0m, weighting='tripvalpb', full_output=False)
netsse.analys.dsa.trans_2Dmat_DSA(freq_in, beta, U, freq_out=None, unit_freq='rad/s', unit_beta='deg', conv='from', max_freq=None, nu23=None, transform='abs2enc', weighting='uniform', highfreq_matching=True)[source]#

Computes the transformation matrices for applying the Doppler shift approximation (DSA) at the given forward speed and for the given frequency and direction discretizations.

Note

This implementation uses the derivations presented in Mounet et al. (2025, 2026).

Parameters:
  • freq_in (array_like of shape (NfreqIN,)) – Input frequencies.

  • beta (array_like of shape (Nbeta,)) – Relative wave heading angles.

  • U (float) – Forward speed of the observer [m/s].

  • freq_out (array_like of shape (NfreqOUT), optional) – Output frequencies. If None, it is set to freq_in.

  • unit_freq ({'rad/s','Hz'}, optional) –

    Unit of the frequencies:

    • ’rad/s’ :

      The variables freq_in and freq_out denote the angular frequencies in radians per second. The default is ‘rad/s’.

    • ’Hz’ :

      Frequencies are in Hertz.

  • unit_beta ({'deg','rad'}, optional) – Unit of the relative wave heading angles beta (‘deg’ or ‘rad’). Default is ‘deg’.

  • conv ({'from','to'}, optional) –

    The convention that is used to express the direction beta of wave spectrum:

    • ’from’ :

      The naval architecture convention, indicating where the waves are COMING FROM.

    • ’to’ :

      The oceanographic convention, indicating where the waves are GOING TO. The default is “from” direction.

  • max_freq (float, optional) – Cut-off frequency. If None, it is set to the maximum of freq_in.

  • nu23 (float, optional) – Threshold value of nu for switching between the concave and convex forms of the approximation. Default is None, which means that the convex form is not used.

  • transform (str, optional) – Type of transformation (‘abs2enc’ or ‘enc2abs’). Default is ‘abs2enc’.

  • weighting ({'uniform','tripvalpb','lowfreq'}, optional) –

    Weighting method to use:

    • ’uniform’ :

      Equal weight is given to all frequencies in the range [0,om0m] in the cost function. This is the default option. It is introduced in Mounet et al. (2025).

    • ’tripvalpb’ :

      Same as 'uniform' weighting, but the om0m is set to a value of \((1+\sqrt{2})/(2\tau)\) when \(\nu>\nu_{23}\). This ensures the DSA features an optimal accuracy in the range of frequencies where the triple-value problem occurs. This idea is introduced in Mounet et al. (2026).

    • ’lowfreq’ :

      A decreasing (affine) weighting function is applied to frequencies in the range [0,om0m], such that low frequencies are given more importance in the cost function. This option is not recommended for general use.

  • highfreq_matching (bool, optional) – If True, the convex form of the DSA is overriden to become exact beyond the point where the DSA and the exact Doppler shift intersect each other in Region III of the mapping. If False, the DSA is kept unchanged otherwise. Default is True.

Returns:

  • Omega_in_fromout (ndarray of shape (NfreqOUT,Nbeta)) – Approximated input frequencies as a function of the target frequencies and wave directions.

  • C (ndarray of shape (NfreqOUT*Nbeta,NfreqIN*Nbeta)) – Linear interpolation matrix.

  • D_wave (ndarray of shape (NfreqOUT*Nbeta,NfreqOUT*Nbeta)) – 2D-to-2D transformation matrix for wave spectra.

  • S (ndarray of shape (NfreqOUT,NfreqOUT*Nbeta)) – 2D-to-1D summation matrix.

See also

polynom_DSA

Computes the polynomial approximation of the Doppler Shift.

References

  1. Mounet, R.E.G., Nielsen, U.D., and Takami, T. (2025). “Doppler Shift Approximation in Seakeeping Problems: A New Formulation for Ships Advancing at Any Forward Speed.” In: Proceedings of the 16th International Symposium on Practical Design of Ships and Other Floating Structures (PRADS 2025), Ann Arbor, MI, USA. (Accepted).

  2. Mounet, R.E.G., Nielsen, U.D., and Takami, T. (2026). “Approximating the Doppler Shift in Sea-Wave Spectra Observed from an Advancing Floating Platform.” Applied Mathematical Modelling. (Submitted).

Example

>>> _, C, D, S = trans_2Dmat_DSA(
...     freq_in, beta, U, freq_out, unit_freq='Hz', unit_beta='deg', conv='from', max_freq=0.3,
...     transform='abs2enc', weighting="uniform", highfreq_matching=True)