Skip to content

ISO 9613-1:1993

ISO 9613-1:1993

This module implements ISO 9613-1:1993 which provides analytical methods for calculating sound attenuation due to atmospheric absorption under various meteorological conditions.

The module provides functions for calculating: - Sound speed in different temperatures - Saturation vapor pressure - Molar concentration of water vapor - Relaxation frequencies of oxygen and nitrogen - Atmospheric absorption coefficients

Constants

SOUNDSPEED: Speed of sound constant.

REFERENCE_TEMPERATURE: Reference temperature constant.

REFERENCE_PRESSURE: Reference pressure constant.

TRIPLE_TEMPERATURE: Triple point isotherm temperature constant.

Reference

ISO 9613-1:1993: Acoustics — Attenuation of sound during propagation outdoors

Attributes

SOUNDSPEED module-attribute

SOUNDSPEED = 343.2

Speed of sound.

REFERENCE_TEMPERATURE module-attribute

REFERENCE_TEMPERATURE = 293.15

Reference temperature.

REFERENCE_PRESSURE module-attribute

REFERENCE_PRESSURE = 101.325

International Standard Atmosphere pressure in kilopascal.

TRIPLE_TEMPERATURE module-attribute

TRIPLE_TEMPERATURE = 273.16

Triple point isotherm temperature.

Functions

soundspeed

soundspeed(
    temperature: float,
    reference_temperature: float = REFERENCE_TEMPERATURE,
) -> float

Calculate speed of sound \(c\) in air.

Notes

The speed of sound is calculated using the formula: $$ c = 343.2 \left( \frac{T}{T_0} \right) $$

PARAMETER DESCRIPTION
temperature

Ambient temperature \(T_0\).

TYPE: float

reference_temperature

Reference temperature \(T\).

TYPE: float DEFAULT: REFERENCE_TEMPERATURE

RETURNS DESCRIPTION
float

Speed of sound in m/s.

TYPE: float

Source code in acoustic_toolbox/standards/iso_9613_1_1993.py
def soundspeed(
    temperature: float, reference_temperature: float = REFERENCE_TEMPERATURE
) -> float:
    r"""Calculate speed of sound $c$ in air.

    Notes:
        The speed of sound is calculated using the formula:
        $$
        c = 343.2 \left( \frac{T}{T_0} \right)
        $$

    Args:
        temperature: Ambient temperature $T_0$.
        reference_temperature: Reference temperature $T$.

    Returns:
        float: Speed of sound in m/s.
    """
    return 343.2 * np.sqrt(temperature / reference_temperature)

saturation_pressure

saturation_pressure(
    temperature: float,
    reference_pressure: float = REFERENCE_PRESSURE,
    triple_temperature: float = TRIPLE_TEMPERATURE,
) -> float

Calculate saturation vapor pressure \(p_{sat}\).

Notes

The saturation vapor pressure is calculated using the formula: $$ p_{sat} = 10^C \cdot p_r $$

with exponent \(C\) given by: $$ C = -6.8346 \cdot \left( \frac{T_{01}}{T} \right)^{1.261} + 4.6151 $$

PARAMETER DESCRIPTION
temperature

Ambient temperature \(T\).

TYPE: float

reference_pressure

Reference pressure \(p_r\).

TYPE: float DEFAULT: REFERENCE_PRESSURE

triple_temperature

Triple point temperature \(T_{01}\).

TYPE: float DEFAULT: TRIPLE_TEMPERATURE

RETURNS DESCRIPTION
float

Saturation vapor pressure

TYPE: float

Source code in acoustic_toolbox/standards/iso_9613_1_1993.py
def saturation_pressure(
    temperature: float,
    reference_pressure: float = REFERENCE_PRESSURE,
    triple_temperature: float = TRIPLE_TEMPERATURE,
) -> float:
    r"""Calculate saturation vapor pressure $p_{sat}$.

    Notes:
        The saturation vapor pressure is calculated using the formula:
        $$
        p_{sat} = 10^C \cdot p_r
        $$

        with exponent $C$ given by:
        $$
        C = -6.8346 \cdot \left( \frac{T_{01}}{T} \right)^{1.261}  + 4.6151
        $$

    Args:
        temperature: Ambient temperature $T$.
        reference_pressure: Reference pressure $p_r$.
        triple_temperature: Triple point temperature $T_{01}$.

    Returns:
        float: Saturation vapor pressure
    """
    return reference_pressure * 10.0 ** (
        -6.8346 * (triple_temperature / temperature) ** (1.261) + 4.6151
    )

molar_concentration_water_vapour

molar_concentration_water_vapour(
    relative_humidity: float,
    saturation_pressure: float,
    pressure: float,
) -> float

Calculate molar concentration of water vapour \(h\).

Notes

The molar concentration of water vapour is calculated using the formula: $$ h = h_r \frac{p_{sat}}{p_a} $$

PARAMETER DESCRIPTION
relative_humidity

Relative humidity \(h_r\)

TYPE: float

saturation_pressure

Saturation pressure \(p_{sat}\)

TYPE: float

pressure

Ambient pressure \(p_a\)

TYPE: float

RETURNS DESCRIPTION
float

Molar concentration of water vapour

TYPE: float

Source code in acoustic_toolbox/standards/iso_9613_1_1993.py
def molar_concentration_water_vapour(
    relative_humidity: float, saturation_pressure: float, pressure: float
) -> float:
    r"""Calculate molar concentration of water vapour $h$.

    Notes:
        The molar concentration of water vapour is calculated using the formula:
        $$
        h = h_r  \frac{p_{sat}}{p_a}
        $$

    Args:
        relative_humidity: Relative humidity $h_r$
        saturation_pressure: Saturation pressure $p_{sat}$
        pressure: Ambient pressure $p_a$

    Returns:
        float: Molar concentration of water vapour
    """
    return relative_humidity * saturation_pressure / pressure

relaxation_frequency_oxygen

relaxation_frequency_oxygen(
    pressure: float,
    h: float,
    reference_pressure: float = REFERENCE_PRESSURE,
) -> float

Calculate relaxation frequency of oxygen \(f_{r,O}\).

Notes

The relaxation frequency of oxygen is calculated using the formula: $$ f_{r,O} = \frac{p_a}{p_r} \left( 24 + 4.04 \cdot 10^4 h \frac{0.02 + h}{0.391 + h} \right) $$

PARAMETER DESCRIPTION
pressure

Ambient pressure \(p_a\)

TYPE: float

h

Molar concentration of water vapour \(h\)

TYPE: float

reference_pressure

Reference pressure \(p_r\).

TYPE: float DEFAULT: REFERENCE_PRESSURE

RETURNS DESCRIPTION
float

Relaxation frequency of oxygen in Hz

TYPE: float

See Also

molar_concentration_water_vapour: Function to calculate molar concentration of water vapour

Source code in acoustic_toolbox/standards/iso_9613_1_1993.py
def relaxation_frequency_oxygen(
    pressure: float, h: float, reference_pressure: float = REFERENCE_PRESSURE
) -> float:
    r"""Calculate relaxation frequency of oxygen $f_{r,O}$.

    Notes:
        The relaxation frequency of oxygen is calculated using the formula:
        $$
        f_{r,O} = \frac{p_a}{p_r} \left( 24 + 4.04 \cdot 10^4 h \frac{0.02 + h}{0.391 + h}  \right)
        $$

    Args:
        pressure: Ambient pressure $p_a$
        h: Molar concentration of water vapour $h$
        reference_pressure: Reference pressure $p_r$.

    Returns:
        float: Relaxation frequency of oxygen in Hz

    See Also:
        [molar_concentration_water_vapour][acoustic_toolbox.standards.iso_9613_1_1993.molar_concentration_water_vapour]: Function to calculate molar concentration of water vapour
    """
    return (
        pressure
        / reference_pressure
        * (24.0 + 4.04 * 10.0**4.0 * h * (0.02 + h) / (0.391 + h))
    )

relaxation_frequency_nitrogen

relaxation_frequency_nitrogen(
    pressure: float,
    temperature: float,
    h: float,
    reference_pressure: float = REFERENCE_PRESSURE,
    reference_temperature: float = REFERENCE_TEMPERATURE,
) -> float

Calculate relaxation frequency of nitrogen \(f_{r,N}\).

Notes

The relaxation frequency of nitrogen is calculated by: $$ f_{r,N} = \frac{p_a}{p_r} \left( \frac{T}{T_0} \right)^{-½} \cdot \left( 9 + 280 \cdot h \cdot \exp \left( -4.170 \left[ \left(\frac{T}{T_0} \right)^{-⅓} -1 \right] \right) \right) $$

PARAMETER DESCRIPTION
pressure

Ambient pressure \(p_a\)

TYPE: float

temperature

Ambient temperature \(T\)

TYPE: float

h

Molar concentration of water vapour \(h\)

TYPE: float

reference_pressure

Reference pressure \(p_{ref}\).

TYPE: float DEFAULT: REFERENCE_PRESSURE

reference_temperature

Reference temperature \(T_{ref}\).

TYPE: float DEFAULT: REFERENCE_TEMPERATURE

RETURNS DESCRIPTION
float

Relaxation frequency of nitrogen in Hz

TYPE: float

Source code in acoustic_toolbox/standards/iso_9613_1_1993.py
def relaxation_frequency_nitrogen(
    pressure: float,
    temperature: float,
    h: float,
    reference_pressure: float = REFERENCE_PRESSURE,
    reference_temperature: float = REFERENCE_TEMPERATURE,
) -> float:
    r"""Calculate relaxation frequency of nitrogen $f_{r,N}$.

    Notes:
        The relaxation frequency of nitrogen is calculated by:
        $$
        f_{r,N} = \frac{p_a}{p_r} \left( \frac{T}{T_0} \right)^{-1/2} \cdot \left( 9 + 280 \cdot h \cdot \exp \left( -4.170 \left[ \left(\frac{T}{T_0} \right)^{-1/3} -1 \right] \right) \right)
        $$

    Args:
        pressure: Ambient pressure $p_a$
        temperature: Ambient temperature $T$
        h: Molar concentration of water vapour $h$
        reference_pressure: Reference pressure $p_{ref}$.
        reference_temperature: Reference temperature $T_{ref}$.

    Returns:
        float: Relaxation frequency of nitrogen in Hz
    """
    return (
        pressure
        / reference_pressure
        * (temperature / reference_temperature) ** (-0.5)
        * (
            9.0
            + 280.0
            * h
            * np.exp(
                -4.170 * ((temperature / reference_temperature) ** (-1.0 / 3.0) - 1.0)
            )
        )
    )

attenuation_coefficient

attenuation_coefficient(
    pressure: float,
    temperature: float,
    reference_pressure: float,
    reference_temperature: float,
    relaxation_frequency_nitrogen: float,
    relaxation_frequency_oxygen: float,
    frequency: float | NDArray[float64],
) -> float | NDArray[float64]

Calculate attenuation coefficient \(\alpha\) describing atmospheric absorption in dB/m for the specified frequency.

PARAMETER DESCRIPTION
pressure

Ambient pressure \(p_a\)

TYPE: float

temperature

Ambient temperature \(T\)

TYPE: float

reference_pressure

Reference pressure \(p_{ref}\)

TYPE: float

reference_temperature

Reference temperature \(T_{ref}\)

TYPE: float

relaxation_frequency_nitrogen

Relaxation frequency of nitrogen \(f_{r,N}\)

TYPE: float

relaxation_frequency_oxygen

Relaxation frequency of oxygen \(f_{r,O}\)

TYPE: float

frequency

Frequencies \(f\) to calculate \(\alpha\) for

TYPE: float | NDArray[float64]

RETURNS DESCRIPTION
float | NDArray[float64]

float | NDArray[np.float64]: Attenuation coefficient in dB/m

Source code in acoustic_toolbox/standards/iso_9613_1_1993.py
def attenuation_coefficient(
    pressure: float,
    temperature: float,
    reference_pressure: float,
    reference_temperature: float,
    relaxation_frequency_nitrogen: float,
    relaxation_frequency_oxygen: float,
    frequency: float | NDArray[np.float64],
) -> float | NDArray[np.float64]:
    r"""Calculate attenuation coefficient $\alpha$ describing atmospheric absorption in dB/m for the specified ``frequency``.

    Args:
        pressure: Ambient pressure $p_a$
        temperature: Ambient temperature $T$
        reference_pressure: Reference pressure $p_{ref}$
        reference_temperature: Reference temperature $T_{ref}$
        relaxation_frequency_nitrogen: Relaxation frequency of nitrogen $f_{r,N}$
        relaxation_frequency_oxygen: Relaxation frequency of oxygen $f_{r,O}$
        frequency: Frequencies $f$ to calculate $\alpha$ for

    Returns:
        float | NDArray[np.float64]: Attenuation coefficient in dB/m
    """
    return (
        8.686
        * frequency**2.0
        * (
            (
                1.84
                * 10.0 ** (-11.0)
                * (reference_pressure / pressure)
                * (temperature / reference_temperature) ** (0.5)
            )
            + (temperature / reference_temperature) ** (-2.5)
            * (
                0.01275
                * np.exp(-2239.1 / temperature)
                * (
                    relaxation_frequency_oxygen
                    + (frequency**2.0 / relaxation_frequency_oxygen)
                )
                ** (-1.0)
                + 0.1068
                * np.exp(-3352.0 / temperature)
                * (
                    relaxation_frequency_nitrogen
                    + (frequency**2.0 / relaxation_frequency_nitrogen)
                )
                ** (-1.0)
            )
        )
    )

:::