Skip to content

emission.sound_power_intensity

Sound power level of a noise source by sound-intensity scanning: ISO 9614-2:1996 (engineering, grade 2; survey/control, grade 3) and ISO 9614-3:2002 (precision, grade 1).

A probe is swept continuously over each segment of a hypothetical surface that encloses the source, reporting the time-averaged signed normal intensity and mean-square pressure per segment. The sound power follows from the partial powers summed over the N segments (clause 9, equations (5), (6), (12), (13)):

The method is not applicable to any band in which (clause 9.2): a strong parasitic source outside the surface makes the net energy flow inward and the determination invalid for that band.

Two scanning-method field indicators qualify the determination, with the area-weighted surface sound pressure level (Annex A, normative):

FpI is the surface pressure-intensity indicator (equivalent to ISO 9614-1 F3 for uniform-area segments, Note 14); F+/- the negative-partial-power indicator (equivalent to ISO 9614-1 F3-F2, Note 15). Because Part 2 weights by segment area Si while phonometry.field_indicators (ISO 9614-1) assumes equal-area positions, the indicators are computed directly here; only the dynamic-capability index is shared with phonometry.dynamic_capability_index.

Qualification criteria per band (Annex B), where K is 10 (engineering) or 7 (survey) per Table 1, criterion 2 is mandatory for grade 2 and optional for grade 3, and the per-segment repeatability limit s comes from Table 2:

A band achieves the engineering grade when criteria 1, 2 and 3 hold, the survey grade when criteria 1 and 3 hold (clause 8.4), otherwise none. An A-weighted sound power level omits, besides the non-determinable bands, the bands in which criteria 1 and/or 2 are not satisfied (clause 10.6 b).

ISO 9614-3:2002 is the same method at precision grade, and that is why it is filed here and not in a module of its own: the same probe swept over the same enclosing surface, the same partial powers summed the same way (equations (5), (8), (9)), only a stricter procedure around them. Part 3 recognises a single grade, fixes the bias-error factor at dB, takes as its input the result of the two scans that its repeatability criterion compares, and refers the level to the reference atmosphere:

Qualification is stricter in the same proportion: four field indicators (Annex B) feed five acceptance criteria evaluated per band (Annex C), and a band that satisfies the scan-density criterion 5 is qualified as a final result even where the field non-uniformity of criterion 4 is not met (C.1.6.2). The exclusion of the net-negative bands is the one rule both parts state alike (clause 9.2).

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

precision_field_indicators(
segment_intensity: np.ndarray,
segment_pressure_levels: np.ndarray,
*,
time_window_intensity: np.ndarray | None = None,
) -> PrecisionFieldIndicators

ISO 9614-3:2002 Annex B field indicators from segment data.

Over the N segments of the whole measurement surface (per band):

With time_window_intensity (an (M, NB) array of window-averaged intensities) the temporal-variability indicator FT (Eq. B.1) is also returned.

Parameters

NameDescription
segment_intensity(N, NB) signed segment normal intensity, W/m^2.
segment_pressure_levels(N, NB) segment pressure levels, dB.
time_window_intensityOptional (M, NB) window intensities for FT.

Returns: PrecisionFieldIndicators.

precision_qualification(
indicators: PrecisionFieldIndicators,
*,
scan_intensity_level_1: np.ndarray | None = None,
scan_intensity_level_2: np.ndarray | None = None,
pressure_residual_index: float | np.ndarray | None = None,
field_nonuniformity_1: np.ndarray | None = None,
field_nonuniformity_2: np.ndarray | None = None,
frequencies: np.ndarray | None = None,
repeatability_limit: float | np.ndarray | None = None,
) -> PrecisionCriteria

Evaluate the five ISO 9614-3:2002 Annex C acceptance criteria per band.

Parameters

NameDescription
indicatorsThe PrecisionFieldIndicators (gives criteria 3 and 4 directly).
scan_intensity_level_1LIn(1) per band (dB), first scan.
scan_intensity_level_2LIn(2) per band (dB), second scan; with the first scan and s this gives criterion 1 ().
pressure_residual_indexdelta_pI0 (dB), scalar or per band; with gives Ld for criterion 2 ().
field_nonuniformity_1FS(1) per band (initial scan density).
field_nonuniformity_2FS(2) per band (doubled density); with FS(1) gives criterion 5.
frequencies(NB,) nominal mid-band frequencies (Hz), selecting the criterion-1 limit s from Table 1.
repeatability_limitOverride for s (dB), scalar or per band.

Returns: PrecisionCriteria.

PrecisionCriteria(
criterion_1: np.ndarray | None,
criterion_2: np.ndarray | None,
criterion_3: np.ndarray,
criterion_4: np.ndarray,
criterion_5: np.ndarray | None,
qualified: np.ndarray | None,
)

ISO 9614-3:2002 Annex C acceptance criteria (per band, pass/fail).

Each attribute is a boolean array (True = satisfied) or None when its inputs are absent. criterion_1 scan repeatability (Eq. C.1); criterion_2 dynamic-capability adequacy (Eq. C.2); criterion_3 dB (Eq. C.3); criterion_4 (Eq. C.4); criterion_5 scan-density convergence (Eq. C.5). qualified is the conjunction of criteria 1-3 with the field non-uniformity accepted through criterion 4 or, where evaluated, criterion 5 (C.1.6.2: a band satisfying criterion 5 is qualified as a final result even if ); None unless both criterion 1 and criterion 2 are evaluable.

PrecisionFieldIndicators(
ft: np.ndarray | None,
f_pi_unsigned: np.ndarray,
f_pi_signed: np.ndarray,
fs: np.ndarray,
)

ISO 9614-3:2002 Annex B field indicators (per band).

ft is the temporal-variability indicator (= F1 of ISO 9614-1, Eq. B.1), None unless time-window intensities are supplied. f_pi_unsigned is the unsigned pressure-intensity indicator (= F2, Eq. B.3, using the mean magnitude of the segment intensities) and f_pi_signed the signed one (= F3, Eq. B.6, using the algebraic mean); by construction . fs is the field-non-uniformity indicator (= F4, Eq. B.8).

PrecisionIntensityResult(
frequencies: np.ndarray | None,
partial_power: np.ndarray,
sound_power: np.ndarray,
sound_power_level: np.ndarray,
sound_power_level_normalized: np.ndarray,
not_applicable_band: np.ndarray,
surface_area: float,
sound_power_level_a: float,
)

Result of an ISO 9614-3:2002 sound-power-by-scanning determination.

partial_power is the signed per partial surface and band (Eq. 5); sound_power the signed band total (Eq. 8) and sound_power_level its level (Eq. 9), NaN where (not_applicable_band True, clause 9.2). sound_power_level_normalized is LW0 normalized to 23 deg C / 101 325 Pa (Eq. 10). sound_power_level_a is the A-weighted total over applicable bands (NaN without frequencies and more than one band).

PrecisionIntensityResult.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the LW spectrum; non-applicable bands are hatched/greyed.

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

PrecisionIntensityResult.report(
path: str,
*,
metadata: ReportMetadata | None = None,
engine: str = 'reportlab',
verbose: bool = False,
language: str = 'en',
indicators: PrecisionFieldIndicators | None = None,
criteria: PrecisionCriteria | None = None,
residual_index: float | Sequence[float] | np.ndarray | None = None,
) -> str

Render an ISO 9614-3 precision sound-power determination fiche.

Writes the one-page sound-power test sheet with what ISO 9614-3:2002 clause 10 asks a report of this method to state: the standard-basis line naming the precision scanning method and its single accuracy grade, an optional metadata header (client, noise source, test environment, instrumentation, air temperature, relative humidity, barometric pressure and date, clause 10 a) to d)), a per-band table of the band sound-power level LW, the normalized level LW0 the standard reports (Eq. 10, clause 10 f) 2)) and the expanded uncertainty U of clause 4.3 (clause 10 f) 4)), the sound-power spectrum LW(f) with the non-applicable bands hatched, the boxed A-weighted sound power level LWA (dB re 1 pW) with the totals, the measurement surface area and the grade, an optional verdict row against a declared limit, and a measurement-basis strip carrying the partial-power model, the meteorological normalization, the Annex B field indicators and the Annex C criteria.

Supplying criteria makes the fiche state what clause 10 f) 2) requires it to state: the bands whose criteria are not satisfied are dropped from the A-weighted determination and named on the sheet alongside the bands the method is not applicable to (clause 9.2). The boxed LWA is then the level of the qualified bands, which differs from the result’s own sound_power_level_a whenever a band is rejected; without criteria the fiche boxes the result’s value and says that no qualification was supplied.

The items of clause 10 that are free description rather than computed quantities (the scan geometry and speed, the drawing of the scanning paths, the scanning time per partial surface, the calibration and field-check history, the windscreen, and the probe-reversal checks of clause 6.2.3) belong in the metadata notes and calibration fields; the fiche prints them verbatim in its footer.

Parameters

NameDescription
pathDestination path of the PDF file.
metadataOptional ReportMetadata supplying the header (client, specimen the noise source, test_room the test environment, instrumentation, temperature, relative_humidity, pressure, test_date), the footer identity (laboratory, operator, report_id, notes) and, via requirement, a declared A-weighted sound-power limit the fiche checks the result against (lower is better).
engineRendering back end; only "reportlab" is supported.
verboseWhen True the per-band table adds the four Annex B field indicators and the per-band grade cell.
languageFiche language: "en" (default) or "es".
indicatorsOptional PrecisionFieldIndicators from precision_field_indicators, tabulated per band with verbose and summarised in the basis strip (clause 10 f) 1)).
criteriaOptional PrecisionCriteria from precision_qualification, which decides the per-band grade cell and the clause 10 f) 2) omission described above.
residual_indexOptional pressure-residual intensity index delta_pI0 of the probe and analyser (clause 10 d) 5)), a scalar or a per-band array; the strip states it and the dynamic capability Ld = delta_pI0 - K that criterion 2 tests.

Returns: The written path as a str.

Raises

ExceptionWhen
ValueErrorIf engine is not "reportlab", language is unknown, or a supplied indicators, criteria or residual_index does not span the result’s bands.
ImportErrorIf reportlab (or, for the figure, matplotlib) is not installed (pip install phonometry[report]).
sound_power_intensity(
normal_intensity: np.ndarray,
areas: np.ndarray,
*,
normal_intensity_2: np.ndarray | None = None,
pressure_levels: np.ndarray | None = None,
pressure_residual_index: float | np.ndarray | None = None,
frequencies: np.ndarray | None = None,
band_type: BandType = 'third',
grade: Grade = 'engineering',
repeatability_limit: float | np.ndarray | None = None,
) -> SoundPowerIntensityResult

Sound power level by sound-intensity scanning (ISO 9614-2:1996).

normal_intensity is an (N_seg, N_bands) array (or (N_seg,) for a single band) of the signed, segment-averaged normal sound intensity (W/m^2), and areas the (N_seg,) segment areas Si (m^2). The partial powers are summed to the band sound power P and level (equations (12), (6), (13)). Bands with are flagged (negative_band) and reported as NaN (clause 9.2).

Supplying normal_intensity_2 (the second grade-2 sweep) makes normal_intensity the first sweep, uses their mean for the partial powers (Eq. 12), and evaluates the repeatability criterion 3. Supplying pressure_levels (Lpi) evaluates FpI (Eq. A.1) and, with pressure_residual_index (delta_pI0), criterion 1. The per-band achieved grade (clause 8.4) is returned when both a second sweep and delta_pI0 are available. When criteria 1 and 2 are evaluable (pressure_levels and pressure_residual_index supplied), the bands failing them are omitted from the A-weighted total and flagged in a_weighting_omitted_bands (clause 10.6 b); otherwise every determinable band is summed and a SoundPowerWarning notes the missing screening.

Parameters

NameDescription
normal_intensity(N_seg, N_bands) signed normal intensity, W/m^2.
areas(N_seg,) segment areas Si, m^2.
normal_intensity_2Optional second sweep, same shape (criterion 3).
pressure_levelsOptional (N_seg, N_bands) Lpi (dB) for FpI.
pressure_residual_indexdelta_pI0 (dB), scalar or per band, for the dynamic-capability index / criterion 1.
frequencies(N_bands,) nominal band centres (Hz), for the A-weighted total and the Table 2 repeatability limits.
band_type'octave' or 'third' (Table 2 lookup).
grade'engineering' (grade 2) or 'survey' (grade 3); selects K for the reported Ld and the criterion-2 warning.
repeatability_limitOverride for the criterion-3 limit s (dB), scalar or per band; defaults to ISO 9614-2 Table 2 by frequencies for 'engineering'. For 'survey' the default is the A-weighted 4 dB reused per band (extrapolated — non-normative).

Returns: SoundPowerIntensityResult.

sound_power_intensity_precision(
partial_intensity: np.ndarray,
areas: np.ndarray,
*,
frequencies: np.ndarray | None = None,
temperature: float = 23.0,
barometric_pressure: float = 101325.0,
) -> PrecisionIntensityResult

Sound power by intensity scanning, precision (ISO 9614-3:2002).

partial_intensity is an (N, NB) array (or (N,) for a single band) of the signed normal intensity on each of the N partial surfaces (already the two-scan result), and areas the (N,) partial surface areas . The partial powers (Eq. 5) are summed to (Eq. 8) and (Eq. 9); a band with net is flagged (not_applicable_band, clause 9.2) and reported as NaN. normalizes to reference meteorology:

Parameters

NameDescription
partial_intensity(N, NB) signed normal intensity, W/m^2.
areas(N,) partial surface areas Si, m^2.
frequencies(NB,) nominal mid-band frequencies (Hz), for LWA.
temperatureAir temperature theta (deg C), for LW0 (Eq. 10).
barometric_pressureBarometric pressure B (Pa), for LW0.

Returns: PrecisionIntensityResult.

SoundPowerIntensityResult(
frequencies: np.ndarray | None,
partial_power: np.ndarray,
partial_power_level: np.ndarray,
sound_power: np.ndarray,
sound_power_level: np.ndarray,
negative_band: np.ndarray,
surface_pressure_intensity_index: np.ndarray | None,
negative_partial_power_index: np.ndarray | None,
repeatability: np.ndarray | None,
dynamic_capability_index: np.ndarray | None,
achieved_grade: np.ndarray | None,
surface_area: float,
sound_power_level_a: float,
a_weighting_omitted_bands: np.ndarray | None,
grade: str,
)

Result of an ISO 9614-2:1996 sound-power-by-scanning determination.

partial_power is the signed per segment and band (Eq. 12); partial_power_level the magnitude level (Eq. 8), with the sign carried by partial_power. sound_power is the signed band total (Eq. 6) and sound_power_level its level (Eq. 13), NaN where (negative_band True, method not applicable, clause 9.2). surface_pressure_intensity_index (FpI, Eq. A.1) and negative_partial_power_index (F+/-, Eq. A.2) are per band, None when the inputs they need are absent. repeatability is per segment and band (criterion 3), None without a second scan; it is where the two sweeps reverse the flow direction on a segment (opposite-sign partial powers), a gross non-repeatability that criterion 3 must reject even when the magnitudes happen to match. dynamic_capability_index is Ld for the requested grade. achieved_grade is the per-band class 'engineering'/ 'survey'/'none' (clause 8.4), None when the qualifying inputs (delta_pI0 and a second scan) are absent. sound_power_level_a is the A-weighted total over determinable bands (NaN without frequencies and more than one band), which omits the bands failing criteria 1 and/or 2 (clause 10.6 b) whenever those criteria are evaluable. a_weighting_omitted_bands flags the bands so omitted (per band, True = omitted); it is None when the criteria inputs (pressure_levels and pressure_residual_index) are absent, in which case every determinable band is summed and a warning is emitted.

SoundPowerIntensityResult.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the LW spectrum; non-positive bands are hatched as unusable.

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

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

Render an ISO 9614-2 sound-power-by-intensity determination fiche.

Writes a one-page sound-power test sheet: the standard-basis line naming the intensity-scanning method and its measurement grade (ISO 9614-2:1996 engineering grade 2 or survey grade 3), an optional metadata header (client, noise source, test environment, instrumentation, climate, date), a per-band table (nominal octave/one-third-octave frequency and the intensity-derived band sound-power level LW), the sound-power spectrum LW(f) with net-negative bands hatched as unusable, the boxed A-weighted sound power level LWA (dB re 1 pW) with the total LW, the measurement surface area S and the determination grade, an optional verdict row against a declared limit, and a measurement-basis strip stating the partial-power model, the field indicators (FpI, F+/-) and the Annex B qualification criteria.

Parameters

NameDescription
pathDestination path of the PDF file.
metadataOptional ReportMetadata supplying the header (client, specimen the noise source, test_room the test environment, instrumentation, temperature, relative_humidity, pressure, test_date), the footer identity (laboratory, operator, report_id, notes) and, via requirement, a declared A-weighted sound-power limit the fiche checks the result against (lower is better).
engineRendering back end; only "reportlab" is supported.
verboseWhen True the per-band table adds the field indicators FpI and F+/- and the per-band achieved grade.
languageFiche language: "en" (default) or "es".

Returns: The written path as a str.

Raises

ExceptionWhen
ValueErrorIf engine is not "reportlab" or language is unknown.
ImportErrorIf reportlab (or, for the figure, matplotlib) is not installed (pip install phonometry[report]).