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:
Adivgeometrical divergence, (Eq. (7));Aatmatmospheric absorption, (Eq. (8)) withalphathe ISO 9613-1 coefficient supplied byair_absorption;Agrground effect, both the general per-region method of 7.3.1 with the Table 3 functionsa'/b'/c'/d'(Eq. (9)) and the alternative simplified method of 7.3.2 (Eq. (10));Abarscreening by a barrier, with theDzdiffraction formula of Eq. (14) including theC2/C3factors, the pathlength differencez(Eq. (16)/(17)), the meteorological factorKmet(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
Section titled “atmospheric_absorption”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
| Name | Description |
|---|---|
distance | Source-to-receiver distance d, in metres. |
frequencies | Octave-band midband frequencies, in hertz. |
temperature | Air temperature, in degrees Celsius. |
relative_humidity | Relative humidity, in percent (default 70). |
pressure | Atmospheric pressure, in kilopascals. |
Returns: Aatm per band, in decibels.
AtmosphericConditions
Section titled “AtmosphericConditions”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
| Name | Description |
|---|---|
temperature | Air temperature, in degrees Celsius. |
relative_humidity | Relative humidity, in percent; None uses 70. |
pressure | Atmospheric pressure, in kilopascals. |
Barrier
Section titled “Barrier”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
| Name | Description |
|---|---|
source_to_edge | Distance dss from the source to the (first) diffraction edge, in metres (ISO 9613-2:1996, Eq. (16)). |
edge_to_receiver | Distance dsr from the (second) diffraction edge to the receiver, in metres. |
parallel_distance | Component a of the source-receiver separation parallel to the barrier edge, in metres (0 for a purely 2-D section). |
edge_separation | Spacing 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_image | When True the ground reflections are assumed to be handled separately by image sources, so ; otherwise (Eq. (14)). |
lateral | When 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_clear | When 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. |
Barrier.is_double
Section titled “Barrier.is_double”property
Whether double diffraction (Eq. (17)/(15)) applies (e given).
barrier_attenuation
Section titled “barrier_attenuation”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
| Name | Description |
|---|---|
barrier | Barrier geometry (Barrier). |
distance | Straight-line source-to-receiver distance d, in metres. |
frequencies | Octave-band midband frequencies, in hertz. |
Returns: Dz per band, in decibels (>= 0).
Raises
| Exception | When |
|---|---|
| ValueError | If distance or any frequency is not positive. |
DEFAULT_FREQUENCIES
Section titled “DEFAULT_FREQUENCIES”Constant (tuple).
DEFAULT_FREQUENCIES = (63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0, 8000.0)directivity_omega
Section titled “directivity_omega”directivity_omega( source_height: float, receiver_height: float, projected_distance: float,) -> floatSolid-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
| Name | Description |
|---|---|
source_height | Source height hs, in metres. |
receiver_height | Receiver height hr, in metres. |
projected_distance | Ground-plane projected distance dp, in metres. |
Returns: DOmega, in decibels (0 to ~3 dB).
DirectivityCorrection
Section titled “DirectivityCorrection”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
| Name | Description |
|---|---|
index | Source directivity index Di, in decibels. |
d_omega | Solid-angle index DOmega, in decibels (see directivity_omega for the alternative ground method). |
geometric_divergence
Section titled “geometric_divergence”geometric_divergence(distance: float) -> floatAttenuation 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
| Name | Description |
|---|---|
distance | Straight-line source-to-receiver distance d, in metres. |
Returns: Adiv, in decibels (51 dB at 100 m, 11 dB at 1 m).
Raises
| Exception | When |
|---|---|
| ValueError | If distance is not positive. |
ground_attenuation
Section titled “ground_attenuation”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
| Name | Description |
|---|---|
distance | Straight-line source-to-receiver distance d, in metres. |
source_height | Source height hs above ground, in metres. |
receiver_height | Receiver height hr above ground, in metres. |
frequencies | Octave-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_source | Ground factor Gs of the source region ([0, 1]). |
ground_middle | Ground factor Gm of the middle region ([0, 1]). |
ground_receiver | Ground factor Gr of the receiver region ([0, 1]). |
projected_distance | Ground-plane projected distance dp, in metres; defaults to . |
Returns: Agr per band, in decibels (negative denotes a net gain).
Raises
| Exception | When |
|---|---|
| ValueError | If a ground factor is outside [0, 1], distance is not positive, a height is negative, or a frequency is not positive. |
ground_attenuation_alternative
Section titled “ground_attenuation_alternative”ground_attenuation_alternative(distance: float, mean_height: float) -> floatGround 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
| Name | Description |
|---|---|
distance | Source-to-receiver distance d, in metres. |
mean_height | Mean height hm of the propagation path above the ground (, figure 3), in metres. |
Returns: Agr, in decibels (>= 0).
Raises
| Exception | When |
|---|---|
| ValueError | If distance is not positive. |
GroundFactors
Section titled “GroundFactors”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
| Name | Description |
|---|---|
source | Ground factor Gs of the source region ([0, 1]). |
middle | Ground factor Gm of the middle region ([0, 1]). |
receiver | Ground factor Gr of the receiver region ([0, 1]). |
meteorological_correction
Section titled “meteorological_correction”meteorological_correction( projected_distance: float, source_height: float, receiver_height: float, c0: float,) -> floatMeteorological 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
| Name | Description |
|---|---|
projected_distance | Ground-plane projected distance dp, in metres. |
source_height | Source height hs, in metres. |
receiver_height | Receiver height hr, in metres. |
c0 | Meteorological factor C0, in decibels. |
Returns: Cmet, in decibels (>= 0 for ).
outdoor_propagation_attenuation
Section titled “outdoor_propagation_attenuation”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,) -> OutdoorAttenuationTotal 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
| Name | Description |
|---|---|
distance | Straight-line source-to-receiver distance d, in metres. |
source_height | Source height hs above ground, in metres. |
receiver_height | Receiver height hr above ground, in metres. |
frequencies | Octave-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_source | Ground factor Gs of the source region ([0, 1], 0 = hard, 1 = porous). |
ground_middle | Ground factor Gm of the middle region ([0, 1]). |
ground_receiver | Ground factor Gr of the receiver region ([0, 1]). |
barrier | Optional screening obstacle (Barrier). |
temperature | Air temperature, in degrees Celsius. |
relative_humidity | Relative humidity, in percent (default 70). |
pressure | Atmospheric pressure, in kilopascals. |
projected_distance | Ground-plane projected distance dp, in metres; defaults to . |
Returns: OutdoorAttenuation with the per-band term breakdown.
Raises
| Exception | When |
|---|---|
| ValueError | If distance is not positive. |
OutdoorAttenuation
Section titled “OutdoorAttenuation”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
| Name | Description |
|---|---|
frequencies | Nominal octave-band midband frequencies, in hertz. |
a_div | Geometrical divergence Adiv (Eq. (7)), in dB, per band (identical across bands). |
a_atm | Atmospheric absorption Aatm (Eq. (8)), in dB, per band. |
a_gr | Ground effect Agr (Eq. (9) or (10)), in dB, per band. A negative value denotes a net gain from ground reflection. |
a_bar | Screening Abar (Eq. (12)/(13)), in dB, per band (>= 0). |
a_total | Total attenuation A (Eq. (4)), in dB, per band. |
d_omega | Solid-angle directivity index DOmega (Eq. (11)), in dB; non-zero only for the alternative ground method of 7.3.2. |
OutdoorAttenuation.plot()
Section titled “OutdoorAttenuation.plot()”OutdoorAttenuation.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the stacked per-band attenuation terms with the total.
Requires matplotlib (pip install phonometry[plot]); returns the
Axes.
OutdoorAttenuation.report()
Section titled “OutdoorAttenuation.report()”OutdoorAttenuation.report( path: str, *, metadata: ReportMetadata | None = None, engine: str = 'reportlab', verbose: bool = False, language: str = 'en', source_emission: SourceEmission | None = None,) -> strRender 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
| Name | Description |
|---|---|
path | Destination path of the PDF file. |
metadata | Optional 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). |
engine | Rendering back end; only "reportlab" is supported. |
verbose | When 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). |
language | Fiche language: "en" (default) or "es". |
source_emission | Optional 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
| Exception | When |
|---|---|
| ValueError | If engine is not "reportlab", language is unknown, or a supplied source_emission sound power does not match the number of frequency bands. |
| ImportError | If reportlab or matplotlib is not installed (pip install "phonometry[report,plot]"). |
predicted_receiver_level
Section titled “predicted_receiver_level”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
| Name | Description |
|---|---|
sound_power_level | Octave-band sound power level Lw, in decibels (re 1 pW), one value per frequency. |
geometry | Source-to-receiver geometry of the path (PropagationGeometry): the distance d, the two heights and the optional projected distance dp. |
frequencies | Octave-band midband frequencies, in hertz. |
ground | Ground factors of the three regions (GroundFactors); None is hard ground throughout. |
barrier | Optional screening obstacle (Barrier). |
atmosphere | Air temperature, humidity and pressure behind the atmospheric absorption term (AtmosphericConditions); None is the reference air of the tabulated coefficients. |
directivity | Directivity correction Dc = Di + DOmega (DirectivityCorrection); None is an omnidirectional source in free space (). |
c0 | Meteorological factor C0, in decibels; None returns the downwind level LfT(DW) (). |
Returns: Predicted octave-band level per frequency, in decibels.
PropagationGeometry
Section titled “PropagationGeometry”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
| Name | Description |
|---|---|
distance | Straight-line source-to-receiver distance d, in metres. |
source_height | Source height hs above ground, in metres. |
receiver_height | Receiver height hr above ground, in metres. |
projected_distance | Ground-plane projected distance dp, in metres; None defaults to . |
SourceEmission
Section titled “SourceEmission”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
| Name | Description |
|---|---|
sound_power_level | Octave-band source sound power level Lw (dB re 1 pW), one value per band of the attenuation result. |
directivity_index | Source directivity index Di, in decibels. |
d_omega | Solid-angle index DOmega, in decibels (see directivity_omega for the alternative ground method). |
cmet | Optional meteorological correction Cmet (dB), obtained from meteorological_correction; None reports the downwind level LfT(DW) directly (). |