Ir al contenido

environment.propagation.outdoor_propagation

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.

Outdoor sound propagation: ISO 9613-2:1996 general method of calculation.

This part of ISO 9613 predicts octave-band attenuation of sound propagating outdoors from a point source to a receiver under conditions favourable to propagation (moderate downwind, or the equivalent moderate temperature inversion; ISO 9613-2:1996, clause 5). The equivalent-continuous downwind octave-band sound pressure level is (ISO 9613-2:1996):

with the octave-band sound power level, the directivity correction (directivity index plus a solid-angle index DOmega) and A the octave-band attenuation, itself a sum of physical mechanisms:

Implemented here are the four general terms of clause 7:

  • Adiv geometrical divergence, (Eq. (7));
  • Aatm atmospheric absorption, (Eq. (8)) with alpha the ISO 9613-1 coefficient supplied by air_absorption;
  • Agr ground effect, both the general per-region method of 7.3.1 with the Table 3 functions a'/b'/c'/d' (Eq. (9)) and the alternative simplified method of 7.3.2 (Eq. (10));
  • Abar screening by a barrier, with the Dz diffraction formula of Eq. (14) including the C2/C3 factors, the pathlength difference z (Eq. (16)/(17)), the meteorological factor Kmet (Eq. (18)) and the 20 dB (single) / 25 dB (double) limits.

The long-term average level follows from the meteorological correction Cmet (Eq. (6), (21), (22), clause 8). Amisc (foliage, industrial sites, housing; annex A) and reflections from vertical obstacles (clause 7.5) are informative and left to the caller. Accuracy of the method is stated in Table 5 (clause 9): within +/-1 dB to +/-3 dB for broadband noise up to 1000 m.

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

atmospheric_absorption(
distance: float,
frequencies: ArrayLike = (63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0, 8000.0),
temperature: float = 20.0,
relative_humidity: float | None = None,
pressure: float = 101.325,
) -> NDArray[np.float64]

Attenuation due to atmospheric absorption (ISO 9613-2:1996, Eq. (8)).

with alpha the ISO 9613-1 atmospheric attenuation coefficient (here in dB/m, from air_attenuation) at each octave-band midband frequency. Eq. (8) writes alpha in dB/km with ; the two forms are identical.

alpha is evaluated at the exact base-10 midband frequency behind each nominal band label (e.g. 7 943.3 Hz for the “8 kHz” band), the convention behind the ISO 9613-2 Table 2 coefficients (they come from ISO 9613-1 Table 1 at exact midbands; at 8 kHz the nominal-frequency evaluation would run ~1.3 % high). Each supplied frequency is snapped to the nearest exact midband.

Parameters

NameDescription
distanceSource-to-receiver distance d, in metres.
frequenciesOctave-band midband frequencies, in hertz.
temperatureAir temperature, in degrees Celsius.
relative_humidityRelative humidity, in percent (default 70).
pressureAtmospheric pressure, in kilopascals.

Returns: Aatm per band, in decibels.

AtmosphericConditions(
temperature: float = 20.0,
relative_humidity: float | None = None,
pressure: float = 101.325,
)

State of the air behind the atmospheric absorption term Aatm.

The three quantities the ISO 9613-1 attenuation coefficient alpha is a function of (ISO 9613-2:1996, Eq. (8) and Table 2). The defaults are the reference conditions of the tabulated coefficients.

Parameters

NameDescription
temperatureAir temperature, in degrees Celsius.
relative_humidityRelative humidity, in percent; None uses 70.
pressureAtmospheric pressure, in kilopascals.
Barrier(
source_to_edge: float,
edge_to_receiver: float,
parallel_distance: float = 0.0,
edge_separation: float | None = None,
ground_reflections_by_image: bool = False,
lateral: bool = False,
line_of_sight_clear: bool = False,
)

Screening obstacle for the ISO 9613-2 barrier term (clause 7.4).

The barrier is described by the diffraction geometry that feeds the pathlength-difference equations (16)/(17) directly, which is the cleanest match to the Dz formula of Eq. (14).

Parameters

NameDescription
source_to_edgeDistance dss from the source to the (first) diffraction edge, in metres (ISO 9613-2:1996, Eq. (16)).
edge_to_receiverDistance dsr from the (second) diffraction edge to the receiver, in metres.
parallel_distanceComponent a of the source-receiver separation parallel to the barrier edge, in metres (0 for a purely 2-D section).
edge_separationSpacing e between the two diffraction edges for double (thick-barrier) diffraction, in metres; None selects single diffraction (Eq. (16), ). When given, Eq. (17) and the C3 factor of Eq. (15) are used with the 25 dB limit.
ground_reflections_by_imageWhen True the ground reflections are assumed to be handled separately by image sources, so ; otherwise (Eq. (14)).
lateralWhen True the diffraction is around a vertical edge (Eq. (13)): (the ground term is not cancelled) and . Default False selects top-edge diffraction (Eq. (12)).
line_of_sight_clearWhen True the line of sight between source and receiver passes above the top edge: ISO 9613-2:1996 (text after Eq. (16)) then gives the path difference z a negative sign, and Eq. (14) is still evaluated (with , Eq. (18)), so Dz falls continuously from dB at grazing to 0 for deeper geometries. The edge distances stay the unsigned geometric lengths; only the sign convention of z changes.

property

Whether double diffraction (Eq. (17)/(15)) applies (e given).

barrier_attenuation(
barrier: Barrier,
distance: float,
frequencies: ArrayLike = (63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0, 8000.0),
) -> NDArray[np.float64]

Barrier diffraction attenuation Dz (ISO 9613-2:1996, Eq. (14)).

with (or 40 when ground reflections are handled by image sources), for single diffraction or Eq. (15) for double, the pathlength difference z (Eq. (16)/(17)), and the meteorological factor Kmet (Eq. (18), 1 for ). Dz is limited to 20 dB (single) or 25 dB (double). When the line of sight passes above the top edge (Barrier(line_of_sight_clear=True)) z takes a negative sign (ISO 9613-2:1996, text after Eq. (16)) and Eq. (14) still applies: Dz falls continuously from dB at grazing () towards 0 as the clearance deepens, clamped at 0 (the logarithm’s argument is floored at 1 — a barrier below the sight line never amplifies).

Parameters

NameDescription
barrierBarrier geometry (Barrier).
distanceStraight-line source-to-receiver distance d, in metres.
frequenciesOctave-band midband frequencies, in hertz.

Returns: Dz per band, in decibels (>= 0).

Raises

ExceptionWhen
ValueErrorIf distance or any frequency is not positive.

Constant (tuple).

DEFAULT_FREQUENCIES = (63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0, 8000.0)
directivity_omega(
source_height: float,
receiver_height: float,
projected_distance: float,
) -> float

Solid-angle directivity index DOmega (ISO 9613-2:1996, Eq. (11)).

Accounts for the apparent increase in source power from ground reflection near the source when the alternative ground method (Eq. (10)) is used:

Parameters

NameDescription
source_heightSource height hs, in metres.
receiver_heightReceiver height hr, in metres.
projected_distanceGround-plane projected distance dp, in metres.

Returns: DOmega, in decibels (0 to ~3 dB).

DirectivityCorrection(index: float = 0.0, d_omega: float = 0.0)

Directivity correction (Eq. (3)).

The two terms the standard adds to the sound power level of a point source: the directivity index of the source itself and the solid-angle index of the space it radiates into. Both are zero for an omnidirectional source radiating into free space.

Parameters

NameDescription
indexSource directivity index Di, in decibels.
d_omegaSolid-angle index DOmega, in decibels (see directivity_omega for the alternative ground method).
geometric_divergence(distance: float) -> float

Attenuation due to geometrical divergence (ISO 9613-2:1996, Eq. (7)).

Spherical spreading in the free field from a point source:

The +11 () sets the sound pressure level at the reference distance m from an omnidirectional point source (Note 7).

Parameters

NameDescription
distanceStraight-line source-to-receiver distance d, in metres.

Returns: Adiv, in decibels (51 dB at 100 m, 11 dB at 1 m).

Raises

ExceptionWhen
ValueErrorIf distance is not positive.
ground_attenuation(
distance: float,
source_height: float,
receiver_height: float,
frequencies: ArrayLike = (63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0, 8000.0),
ground_source: float = 0.0,
ground_middle: float = 0.0,
ground_receiver: float = 0.0,
projected_distance: float | None = None,
) -> NDArray[np.float64]

Ground attenuation by the general per-region method (7.3.1, Eq. (9)).

(source, receiver and middle regions), each evaluated with the Table 3 expressions and its ground factor G (0 = hard, 1 = porous, in between = porous fraction). For the source region and ; for the receiver region and (Table 3, note 1). The middle-region term uses the overlap factor q of note 2:

with at 63 Hz and above.

Parameters

NameDescription
distanceStraight-line source-to-receiver distance d, in metres.
source_heightSource height hs above ground, in metres.
receiver_heightReceiver height hr above ground, in metres.
frequenciesOctave-band midband frequencies, in hertz. Table 3 is defined for the eight nominal octave bands 63 Hz-8 kHz only; any other requested frequency is snapped to the nearest nominal octave band for the Table 3 lookup.
ground_sourceGround factor Gs of the source region ([0, 1]).
ground_middleGround factor Gm of the middle region ([0, 1]).
ground_receiverGround factor Gr of the receiver region ([0, 1]).
projected_distanceGround-plane projected distance dp, in metres; defaults to .

Returns: Agr per band, in decibels (negative denotes a net gain).

Raises

ExceptionWhen
ValueErrorIf a ground factor is outside [0, 1], distance is not positive, a height is negative, or a frequency is not positive.
ground_attenuation_alternative(distance: float, mean_height: float) -> float

Ground attenuation by the alternative A-weighted method (7.3.2, Eq. (10)).

Valid only when the A-weighted receiver level alone is of interest, the sound propagates over porous or mostly-porous ground and is not a pure tone (ISO 9613-2:1996, 7.3.2):

Negative results are replaced by zero. When this method is used, add the solid-angle index directivity_omega (Eq. (11)) to Dc in Eq. (3).

Parameters

NameDescription
distanceSource-to-receiver distance d, in metres.
mean_heightMean height hm of the propagation path above the ground (, figure 3), in metres.

Returns: Agr, in decibels (>= 0).

Raises

ExceptionWhen
ValueErrorIf distance is not positive.
GroundFactors(
source: float = 0.0,
middle: float = 0.0,
receiver: float = 0.0,
)

Ground factors G of the three regions (ISO 9613-2:1996, clause 7.3.1).

The general ground method splits the path into a source region, a middle region and a receiver region, each with its own factor between 0 (hard ground: paving, water, ice, compacted ground) and 1 (porous ground: grass, trees, farmland). The default is hard ground throughout.

Parameters

NameDescription
sourceGround factor Gs of the source region ([0, 1]).
middleGround factor Gm of the middle region ([0, 1]).
receiverGround factor Gr of the receiver region ([0, 1]).
meteorological_correction(
projected_distance: float,
source_height: float,
receiver_height: float,
c0: float,
) -> float

Meteorological correction Cmet (ISO 9613-2:1996, Eq. (21)/(22)).

C0 (dB) reflects local wind and temperature-gradient statistics; practical values lie in 0..~5 dB (note 22). Subtract Cmet from LAT(DW) for the long-term average level (Eq. (6)).

Parameters

NameDescription
projected_distanceGround-plane projected distance dp, in metres.
source_heightSource height hs, in metres.
receiver_heightReceiver height hr, in metres.
c0Meteorological factor C0, in decibels.

Returns: Cmet, in decibels (>= 0 for ).

outdoor_propagation_attenuation(
distance: float,
source_height: float,
receiver_height: float,
frequencies: ArrayLike = (63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0, 8000.0),
ground_source: float = 0.0,
ground_middle: float = 0.0,
ground_receiver: float = 0.0,
barrier: Barrier | None = None,
temperature: float = 20.0,
relative_humidity: float | None = None,
pressure: float = 101.325,
projected_distance: float | None = None,
) -> OutdoorAttenuation

Total octave-band outdoor attenuation (ISO 9613-2:1996, Eq. (4)).

Assembles the four general terms of clause 7 into (the informative Amisc is omitted). The ground effect uses the general per-region method (7.3.1). With a barrier, the top-edge insertion loss (Eq. (12)) folds the ground effect of the screened path into Dz (note 13); for a lateral (vertical-edge) barrier (Eq. (13)) and the ground term is retained.

Parameters

NameDescription
distanceStraight-line source-to-receiver distance d, in metres.
source_heightSource height hs above ground, in metres.
receiver_heightReceiver height hr above ground, in metres.
frequenciesOctave-band midband frequencies, in hertz. The ground term snaps each frequency to the nearest nominal octave band (Table 3 is octave-band only) and the atmospheric term evaluates the exact base-10 midband behind it (see atmospheric_absorption).
ground_sourceGround factor Gs of the source region ([0, 1], 0 = hard, 1 = porous).
ground_middleGround factor Gm of the middle region ([0, 1]).
ground_receiverGround factor Gr of the receiver region ([0, 1]).
barrierOptional screening obstacle (Barrier).
temperatureAir temperature, in degrees Celsius.
relative_humidityRelative humidity, in percent (default 70).
pressureAtmospheric pressure, in kilopascals.
projected_distanceGround-plane projected distance dp, in metres; defaults to .

Returns: OutdoorAttenuation with the per-band term breakdown.

Raises

ExceptionWhen
ValueErrorIf distance is not positive.
OutdoorAttenuation(
frequencies: NDArray[np.float64],
a_div: NDArray[np.float64],
a_atm: NDArray[np.float64],
a_gr: NDArray[np.float64],
a_bar: NDArray[np.float64],
a_total: NDArray[np.float64],
d_omega: NDArray[np.float64],
)

Per-octave-band ISO 9613-2 attenuation breakdown (clause 7).

Every array is aligned with frequencies. The terms sum, band by band, to a_total (ISO 9613-2:1996, Eq. (4) without the informative Amisc), so users can see the divergence, atmospheric, ground and barrier contributions separately.

Attributes

NameDescription
frequenciesNominal octave-band midband frequencies, in hertz.
a_divGeometrical divergence Adiv (Eq. (7)), in dB, per band (identical across bands).
a_atmAtmospheric absorption Aatm (Eq. (8)), in dB, per band.
a_grGround effect Agr (Eq. (9) or (10)), in dB, per band. A negative value denotes a net gain from ground reflection.
a_barScreening Abar (Eq. (12)/(13)), in dB, per band (>= 0).
a_totalTotal attenuation A (Eq. (4)), in dB, per band.
d_omegaSolid-angle directivity index DOmega (Eq. (11)), in dB; non-zero only for the alternative ground method of 7.3.2.
OutdoorAttenuation.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the stacked per-band attenuation terms with the total.

Requires matplotlib (pip install phonometry[plot]); returns the Axes.

OutdoorAttenuation.report(
path: str,
*,
metadata: ReportMetadata | None = None,
engine: str = 'reportlab',
verbose: bool = False,
language: str = 'en',
source_emission: SourceEmission | None = None,
) -> str

Render a one-page ISO 9613-2 outdoor-propagation prediction fiche.

Writes a prediction sheet (clearly labelled a prediction, not a measurement) laid out like an environmental-noise propagation calculation: the standard-basis line naming ISO 9613-2:1996 (general method, conditions favourable to propagation), an optional metadata header (source/situation, client, receiver position, meteorological conditions, date), a per-band table of the attenuation terms (Adiv, Aatm, Agr, Abar and the total A) and the attenuation-breakdown plot, closed by a boxed single result and a footer identity/disclaimer block.

When a source_emission is supplied, the fiche also lists the source power level Lw and the composed downwind level LfT(DW) per band and boxes the A-weighted downwind level LAT(DW) at the receiver, with an optional PASS/FAIL verdict against a declared limit level (a lower level is better). Without it the fiche boxes the octave-band range of the total attenuation A.

Parameters

NameDescription
pathDestination path of the PDF file.
metadataOptional ReportMetadata supplying the header identity (specimen the source/situation, client, test_room the receiver position), the temperature / relative_humidity / pressure conditions and the footer identity. A supplied requirement is read as the maximum acceptable A-weighted downwind level in dB (used only when a source_emission is given).
engineRendering back end; only "reportlab" is supported.
verboseWhen True and a source_emission is supplied, the per-band table adds the A-weighted band level (LfT(DW) plus the band A-weighting), whose energy sum is the boxed LAT(DW).
languageFiche language: "en" (default) or "es".
source_emissionOptional SourceEmission (the source sound power Lw and directivity, plus an optional meteorological correction) that turns the attenuation breakdown into the boxed A-weighted downwind level at the receiver.

Returns: The written path as a str.

Raises

ExceptionWhen
ValueErrorIf engine is not "reportlab", language is unknown, or a supplied source_emission sound power does not match the number of frequency bands.
ImportErrorIf reportlab or matplotlib is not installed (pip install "phonometry[report,plot]").
predicted_receiver_level(
sound_power_level: ArrayLike,
geometry: PropagationGeometry,
*,
frequencies: ArrayLike = (63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0, 8000.0),
ground: GroundFactors | None = None,
barrier: Barrier | None = None,
atmosphere: AtmosphericConditions | None = None,
directivity: DirectivityCorrection | None = None,
c0: float | None = None,
) -> NDArray[np.float64]

Predicted octave-band receiver level (ISO 9613-2:1996, Eq. (3)/(6)).

Composes the downwind octave-band sound pressure level:

from the total attenuation outdoor_propagation_attenuation. When c0 is given, the meteorological correction Cmet (Eq. (21)/(22)) is subtracted band by band to approximate the long-term average level LfT(LT) (Eq. (6)); the standard applies Cmet to the A-weighted level, so this is a per-band convenience.

Parameters

NameDescription
sound_power_levelOctave-band sound power level Lw, in decibels (re 1 pW), one value per frequency.
geometrySource-to-receiver geometry of the path (PropagationGeometry): the distance d, the two heights and the optional projected distance dp.
frequenciesOctave-band midband frequencies, in hertz.
groundGround factors of the three regions (GroundFactors); None is hard ground throughout.
barrierOptional screening obstacle (Barrier).
atmosphereAir temperature, humidity and pressure behind the atmospheric absorption term (AtmosphericConditions); None is the reference air of the tabulated coefficients.
directivityDirectivity correction Dc = Di + DOmega (DirectivityCorrection); None is an omnidirectional source in free space ().
c0Meteorological factor C0, in decibels; None returns the downwind level LfT(DW) ().

Returns: Predicted octave-band level per frequency, in decibels.

PropagationGeometry(
distance: float,
source_height: float,
receiver_height: float,
projected_distance: float | None = None,
)

Source-to-receiver geometry of the propagation path (ISO 9613-2:1996).

The three lengths every term of the method needs: the straight-line distance d of the divergence and atmospheric terms (Eq. (7)/(8)), and the two heights above the ground the ground effect of clause 7.3.1 and the meteorological correction of clause 8 are written in.

Parameters

NameDescription
distanceStraight-line source-to-receiver distance d, in metres.
source_heightSource height hs above ground, in metres.
receiver_heightReceiver height hr above ground, in metres.
projected_distanceGround-plane projected distance dp, in metres; None defaults to .
SourceEmission(
sound_power_level: ArrayLike,
directivity_index: float = 0.0,
d_omega: float = 0.0,
cmet: float | None = None,
)

Source emission terms for the ISO 9613-2 downwind receiver level (Eq. (3)).

Passed to OutdoorAttenuation.report so the prediction fiche can box the A-weighted downwind level at the receiver from an octave-band attenuation breakdown. The level is composed as with the directivity correction (ISO 9613-2:1996, Eq. (3)); an optional meteorological correction cmet is subtracted for the long-term average level (Eq. (6)).

This report-time object keeps the emission out of outdoor_propagation_attenuation (which stays purely an attenuation calculation), so the receiver level is a presentation concern of the fiche.

Parameters

NameDescription
sound_power_levelOctave-band source sound power level Lw (dB re 1 pW), one value per band of the attenuation result.
directivity_indexSource directivity index Di, in decibels.
d_omegaSolid-angle index DOmega, in decibels (see directivity_omega for the alternative ground method).
cmetOptional meteorological correction Cmet (dB), obtained from meteorological_correction; None reports the downwind level LfT(DW) directly ().