building.prediction.installed_structure_borne
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.
Installed structure-borne sound from service equipment (EN 12354-5:2009).
EN 12354-5 predicts the sound pressure level in a receiving room caused by building service equipment that injects structure-borne sound into the building. The chain closes the structural-vibroacoustics series:
- The source strength is its characteristic structure-borne sound power level
L_Ws,c. It is not the raw reception-plate power of EN 15657 Formula (14): that plate-injected level must first be converted to the plate-independentL_Ws,n(EN 15657 Formulae (15)/(17); seephonometry.building.measurement.structure_borne_power) and then referred to the actual receiver with the Annex I mobility correction (installed_power_from_reception_plate), with the reference plate mobility m/(N.s), or equivalently to the characteristic level with the source mobility (Annex I.3, Table I.8), from whichD_Cis subtracted. - Only part of that power is actually injected into the supporting element; the
loss is the coupling term
D_C(clause 4.4.3), positive in the usual mobility-mismatched cases (seecoupling_termfor the exception), set by the source mobilityY_sand the receiver mobilityY_i(Formula 19b): , which reduces to for a force source (high source mobility, Formula 19c) and to for a velocity source (low source mobility, Formula 19d). An elastic support adds its transfer mobilityY_kinside the modulus (Formula 19e). - The installed power level is then (Formula 18b).
- The normalised sound pressure level in the receiving room for one path (i->j)
follows from the installed power, the structure-to-airborne adjustment term
D_sa(clause 4.4.4), the flanking sound reduction indexR_ij,refand the element area (Formula 18a): with m²; the paths combine energetically (Formula 17).
The source and receiver mobilities/impedances are those of
phonometry.vibration.structural.mechanical_mobility and phonometry.vibration.structural.transfer_stiffness.
The informative tables. Every term of that chain is a number the user would otherwise copy out of the standard, so the two tables of the informative annexes are here as named lookups:
- Table D.1 (Annex D) estimates the mobility of typical construction
elements from their own dimensions, which is how clause D.1.3 builds up a
source mobility
Y_sfor step 2 out of the machine’s mass, feet, chassis panels and pipework:typical_element_mobility, whosestructureargument is the table’s first column and whose keywords are its second (TABLE_D1_QUANTITIES). - Table F.1 (Annex F) gives the octave-band force level
L_Fof the ISO tapping machine, the substitution source of clause D.1.2.3:tapping_machine_force_level, withtapping_machine_characteristic_power_levelandtapping_machine_coupling_termturning it into theL_Ws,candD_Cof step 3.
Annex F also supplies the two terms step 4 takes: the adjustment term D_sa
of Formula (F.3) (structure_to_airborne_adjustment) and the
multi-junction adjustment dK of clause F.1
(multi_junction_adjustment), which the flanking reduction index
R_ij,ref of a path more than one junction away is built with.
Auto-generated from the source docstrings by
scripts/generate_api_docs.py(make api-docs). Do not edit by hand.
coupling_term
Section titled “coupling_term”coupling_term( source_mobility: ArrayLike, receiver_mobility: ArrayLike, *, transfer_mobility: ArrayLike = 0.0,) -> np.ndarrayCoupling term D_C for a point excitation (EN 12354-5, Formula 19b/19e).
— the loss between
the characteristic and the injected structure-borne power. Y_k is the
transfer mobility of an elastic support (Formula 19e; 0 for a rigid
connection, Formula 19b).
Parameters
| Name | Description |
|---|---|
source_mobility | Source point mobility Y_s (complex, non-zero), in m/(N.s). |
receiver_mobility | Receiver point mobility Y_i (complex, positive real part). |
transfer_mobility | Elastic-support transfer mobility Y_k (Default: 0.0). |
Returns: The coupling term D_C, in dB. Positive whenever the source and receiver mobilities are well mismatched (the usual installed case), but not guaranteed non-negative: near a mounting resonance where Y_s and Y_i are of comparable magnitude and opposite phase the numerator collapses and D_C goes negative (the installed power then exceeds the characteristic level; e.g. , m/(N·s) gives dB).
Raises
| Exception | When |
|---|---|
| ValueError | if Y_s is zero/non-finite or Re{Y_i} is not positive and finite. |
coupling_term_force_source
Section titled “coupling_term_force_source”coupling_term_force_source( source_mobility: ArrayLike, receiver_mobility: ArrayLike,) -> np.ndarrayCoupling term for a force source, high source mobility (Formula 19c).
Parameters
| Name | Description |
|---|---|
source_mobility | Source point mobility Y_s (complex, non-zero). |
receiver_mobility | Receiver point mobility Y_i (complex, positive real part). |
Returns: The coupling term D_C, in dB.
Raises
| Exception | When |
|---|---|
| ValueError | if Y_s is zero/non-finite or Re{Y_i} is not positive and finite. |
coupling_term_velocity_source
Section titled “coupling_term_velocity_source”coupling_term_velocity_source( source_mobility: ArrayLike, receiver_impedance: ArrayLike,) -> np.ndarrayCoupling term for a velocity source, low source mobility (Formula 19d).
Parameters
| Name | Description |
|---|---|
source_mobility | Source point mobility Y_s (complex, non-zero). |
receiver_impedance | Receiver point impedance Z_i (complex, positive real part). |
Returns: The coupling term D_C, in dB.
Raises
| Exception | When |
|---|---|
| ValueError | if Y_s is zero/non-finite or Re{Z_i} is not positive and finite. |
installed_power_from_reception_plate
Section titled “installed_power_from_reception_plate”installed_power_from_reception_plate( reception_plate_level: ArrayLike, receiver_mobility: ArrayLike, *, plate_mobility: float = 5e-06,) -> np.ndarrayMobility correction of the reception-plate power (EN 12354-5, Annex I).
, which refers the
characteristic reception-plate power level L_Ws,n (EN 15657
Formula (17), re the 10 cm concrete plate
m/(N.s))
to the characteristic mobility Y_inf,i of the actual receiving
element (floor, wall), yielding the installed power of that element as in
the Annex I.2 whirlpool example. The same correction with the source
mobility instead of Y_inf,i yields the characteristic level
L_Ws,c (Annex I.3, Table I.8), from which
installed_structure_borne_power_level subtracts D_C.
Parameters
| Name | Description |
|---|---|
reception_plate_level | Power level to re-refer (per band), in dB re 1 pW: either the characteristic level L_Ws,n (EN 15657 Formula 17, referred to the default 5e-6 m/(N.s) plate) or a raw Formula (14) plate power together with the mobility of the plate it was measured on, passed as plate_mobility. |
receiver_mobility | Characteristic mobility Y_inf,i of the receiving element (per band; complex values use their magnitude), in m/(N.s). |
plate_mobility | Mobility the input level is referred to (Default: the EN 15657 reference plate, m/(N.s); pass the measured plate mobility when the input is a raw Formula (14) level). |
Returns: The mobility-corrected power level, in dB re 1 pW.
Raises
| Exception | When |
|---|---|
| ValueError | for a non-positive receiver or plate mobility. |
installed_source_prediction
Section titled “installed_source_prediction”installed_source_prediction( characteristic_power_level: ArrayLike, coupling_term: ArrayLike, paths: list[dict[str, Any]], *, frequencies: ArrayLike | None = None,) -> InstalledSourceResultPredict the installed structure-borne SPL over several paths (EN 12354-5).
The band count is set by the widest per-band input (the characteristic
power level, the coupling_term or any path’s adjustment_term /
flanking_reduction_index); every
per-band input must carry one value or that count, and single values
broadcast across the bands (a single-number source level with per-band
path data is valid, and the result’s installed_power_level is
broadcast to the band count).
Parameters
| Name | Description |
|---|---|
characteristic_power_level | Characteristic level L_Ws,c (per band or a single value), in dB. |
coupling_term | Coupling term D_C (per band or a single value), in dB. |
paths | One dict per transmission path with keys adjustment_term (D_sa), flanking_reduction_index (R_ij,ref) and element_area (S_i), each per band where applicable. |
frequencies | Band centre frequencies, in hertz, or None. |
Returns: The InstalledSourceResult.
Raises
| Exception | When |
|---|---|
| ValueError | if paths is empty, a path is missing a required key, or a per-band input matches neither one value nor the band count. |
installed_structure_borne_power_level
Section titled “installed_structure_borne_power_level”installed_structure_borne_power_level( characteristic_power_level: ArrayLike, coupling_term: ArrayLike,) -> np.ndarrayInstalled structure-borne power level (EN 12354-5, Formula 18b).
Parameters
| Name | Description |
|---|---|
characteristic_power_level | Characteristic level L_Ws,c (per band), in dB: the EN 15657 reception-plate level converted with Formulae (15)/(17) and the source-mobility correction (see the module docstring), not the raw plate-injected Formula (14) level. |
coupling_term | Coupling term D_C,i (per band), in dB. |
Returns: The installed structure-borne power level L_Ws,inst, in dB.
InstalledSourceResult
Section titled “InstalledSourceResult”InstalledSourceResult( path_levels: np.ndarray, total_level: np.ndarray, installed_power_level: np.ndarray, frequencies: np.ndarray | None = None,)Installed structure-borne sound prediction (EN 12354-5).
Attributes
| Name | Description |
|---|---|
frequencies | Band centre frequencies, in hertz, or None. |
path_levels | Per-path normalised SPL L_n,s,ij (paths x bands), dB. |
total_level | Combined normalised SPL L_n,s per band, in dB. |
installed_power_level | Installed power level L_Ws,inst per band, dB. |
InstalledSourceResult.overall_level
Section titled “InstalledSourceResult.overall_level”property
Band-summed total level , in dB.
InstalledSourceResult.plot()
Section titled “InstalledSourceResult.plot()”InstalledSourceResult.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the per-path and total normalised sound pressure levels.
Requires matplotlib (pip install phonometry[plot]); returns the
Axes.
InstalledSourceResult.report()
Section titled “InstalledSourceResult.report()”InstalledSourceResult.report( path: str, *, metadata: ReportMetadata | None = None, engine: str = 'reportlab', verbose: bool = False, language: str = 'en',) -> strRender an EN 12354-5 installed structure-borne prediction fiche.
Writes a one-page prediction sheet (an estimate, not a
measurement): a prediction-basis line naming EN 12354-5:2009, an
optional metadata header (client, source equipment, receiving room,
instrumentation, climate, date), a per-band table (nominal
octave/one-third-octave frequency, the installed structure-borne power
level L_Ws,inst, each transmission path’s normalised SPL
L_n,s,ij and the combined total L_n,s), the per-path and total
L_n,s(f) spectra, the boxed band-summed total L_n,s (dB) with
the installed power total and the path count, an optional verdict row
against a declared limit, and a basis strip stating Formulae 18a/17 and
the prediction disclaimer.
Parameters
| Name | Description |
|---|---|
path | Destination path of the PDF file. |
metadata | Optional ReportMetadata supplying the header (client, specimen the source equipment, test_room the receiving room, instrumentation, temperature, relative_humidity, pressure, test_date), the footer identity (laboratory, operator, report_id, notes) and, via requirement, a declared upper limit on the overall L_n,s (lower is better). |
engine | Rendering back end; only "reportlab" is supported. |
verbose | When True the per-band table adds one column per transmission path (up to five); otherwise only the installed power and the combined total are shown. |
language | Fiche language: "en" (default) or "es". |
Returns: The written path as a str.
Raises
| Exception | When |
|---|---|
| ValueError | If engine is not "reportlab" or language is unknown. |
| ImportError | If reportlab (or, for the figure, matplotlib) is not installed (pip install phonometry[report]). |
MINIMUM_MULTI_JUNCTION_KIJ
Section titled “MINIMUM_MULTI_JUNCTION_KIJ”Constant (float).
MINIMUM_MULTI_JUNCTION_KIJ = -5.0multi_junction_adjustment
Section titled “multi_junction_adjustment”multi_junction_adjustment(junctions: int) -> floatVibration reduction index adjustment dK (EN 12354-5, clause F.1).
When the receiving room is more than one junction away from the equipment,
Formula (F.1) sums the junction Kij along the path and subtracts an
adjustment dK that covers the transmission by wave types other than
bending waves. Clause F.1 estimates it from published data as 4 dB for two
junctions and 6 dB for three or more, with the resulting Kij floored at
MINIMUM_MULTI_JUNCTION_KIJ.
Parameters
| Name | Description |
|---|---|
junctions | Number of junctions the transmission path crosses (>= 1). |
Returns: The adjustment dK, in dB (0,0 for a single junction).
Raises
| Exception | When |
|---|---|
| ValueError | for fewer than one junction. |
REFERENCE_AREA
Section titled “REFERENCE_AREA”Constant (float).
REFERENCE_AREA = 10.0structure_borne_pressure_level_path
Section titled “structure_borne_pressure_level_path”structure_borne_pressure_level_path( installed_power_level: ArrayLike, adjustment_term: ArrayLike, flanking_reduction_index: ArrayLike, element_area: float, *, reference_area: float = 10.0,) -> np.ndarrayNormalised structure-borne SPL for one path i->j (Formula 18a).
Parameters
| Name | Description |
|---|---|
installed_power_level | Installed power level L_Ws,inst,i, in dB. |
adjustment_term | Structure-to-airborne adjustment D_sa,i (clause 4.4.4 / Annex F), in dB. |
flanking_reduction_index | Flanking sound reduction index R_ij,ref re S0 (EN 12354-1), in dB. |
element_area | Supporting-element area S_i, in m^2 (> 0). |
reference_area | Reference area (Default: 10 m^2). |
Returns: The normalised path sound pressure level L_n,s,ij, in dB.
Raises
| Exception | When |
|---|---|
| ValueError | for a non-positive area. |
structure_to_airborne_adjustment
Section titled “structure_to_airborne_adjustment”structure_to_airborne_adjustment( frequency: ArrayLike, critical_frequency: float, mass_per_area: float, *, radiation_factor: ArrayLike = 1.0,) -> np.ndarrayAdjustment term D_sa of a supporting element (Formula F.3).
the ratio of injected structure-borne power to incident airborne power that leaves the same free-vibration energy in the element. Clause F.2 gives it for a force excitation perpendicular to a homogeneous supporting element, exact above the critical frequency (where the radiation factor saturates at
- and a good approximation over the whole range.
D_sa is normally negative, and Formula (18a) subtracts it, so it
raises the predicted level: this is the value
structure_borne_pressure_level_path takes as adjustment_term,
sign included.
Parameters
| Name | Description |
|---|---|
frequency | Band centre frequency f, in hertz (> 0). |
critical_frequency | Critical frequency fc,i of the element, in hertz (> 0). |
mass_per_area | Mass per unit area mi of the element, in kg/m^2 (> 0). |
radiation_factor | Radiation factor sigma_i of the element (Default: 1.0, its value above fc; EN 12354-1:2000 Annex B estimates it below). |
Returns: The adjustment term D_sa,i, in dB.
Raises
| Exception | When |
|---|---|
| ValueError | for a non-positive frequency, critical frequency, mass or radiation factor. |
TABLE_D1_QUANTITIES
Section titled “TABLE_D1_QUANTITIES”Constant (dict).
TABLE_D1_QUANTITIES = {'mass': ('mass',), 'bar_end': ('density', 'longitudinal_velocity', 'area'), 'beam': ('density', 'longitudinal_velocity', 'thickness', 'width'), 'plate': ('density', 'longitudinal_velocity', 'thickness'), 'pipe': ('density', 'longitudinal_velocity', 'thickness', 'radius'), 'mass_spring': ('mass', 'stiffness', 'loss_factor')}TABLE_F1_FORCE_LEVEL
Section titled “TABLE_F1_FORCE_LEVEL”Constant (tuple).
TABLE_F1_FORCE_LEVEL = (139.0, 142.0, 145.0, 148.0, 151.0, 154.0, 156.0, 156.0)TABLE_F1_OCTAVE_BANDS
Section titled “TABLE_F1_OCTAVE_BANDS”Constant (tuple).
TABLE_F1_OCTAVE_BANDS = (31.5, 63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0)tapping_machine_characteristic_power_level
Section titled “tapping_machine_characteristic_power_level”tapping_machine_characteristic_power_level( frequency: ArrayLike, force_level: ArrayLike,) -> np.ndarrayCharacteristic power level of the tapping machine (Formula D.9a).
The standard notes the result is about 115 dB re 1 pW per one-third octave
for the ISO tapping machine, treated in clause D.1.3 as a force source with
the mass-like source mobility of its 0,5 kg hammers. Pair it with
tapping_machine_coupling_term and hand both to
installed_source_prediction.
The formula only balances with the reference force F_0 = 1e-6 N, since
it carries no term for ; that is what pins the reading
of Table F.1 against its own printed “re 1 pN” caption.
Parameters
| Name | Description |
|---|---|
frequency | Band centre frequency f, in hertz (> 0). |
force_level | Force level L_F, in dB re 1e-6 N (Table F.1 or tapping_machine_force_level_estimate). |
Returns: The characteristic power level L_Ws,c, in dB re 1 pW.
Raises
| Exception | When |
|---|---|
| ValueError | for a non-positive frequency. |
tapping_machine_coupling_term
Section titled “tapping_machine_coupling_term”tapping_machine_coupling_term( frequency: ArrayLike, receiver_mobility: ArrayLike, *, hammer_mass: float = 0.5,) -> np.ndarrayCoupling term of the tapping machine (EN 12354-5, Formula D.9b).
with and M the hammer mass of clause D.1.3,
which the standard takes as 0,5 kg. It is the mass-like-source form of
Formula (19b), for a machine standing on a plate-like element of real
mobility Y_i; Annex F Formulae (F.4) to (F.6b) estimate that Y_i.
Parameters
| Name | Description |
|---|---|
frequency | Band centre frequency f, in hertz (> 0). |
receiver_mobility | Real mobility Y_i of the supporting element, in m/(N.s) (> 0). |
hammer_mass | Source mass M, in kilograms (Default: TAPPING_HAMMER_MASS, the 0,5 kg of clause D.1.3 and ISO 10140-5). |
Returns: The coupling term D_C,i, in dB.
Raises
| Exception | When |
|---|---|
| ValueError | for a non-positive frequency, mobility or mass. |
tapping_machine_force_level
Section titled “tapping_machine_force_level”tapping_machine_force_level() -> np.ndarrayTabulated ISO tapping machine force level (EN 12354-5, Table F.1).
The eight octave-band values of Table F.1, in the order of
TABLE_F1_OCTAVE_BANDS (31,5 Hz to 4 kHz). Clause F.4.2
offers them for the tapping machine used in place of an electrodynamic
shaker when measuring D_Fp,n (Formula F.9), and clause D.1.2.3
restricts the source to low-mobility receiving structures.
Feed them to tapping_machine_characteristic_power_level for the
L_Ws,c that installed_source_prediction takes.
Returns: The force level L_F per octave band, in dB re 1e-6 N (the table caption prints “re 1 pN”; see docs/ERRATA.md).
tapping_machine_force_level_estimate
Section titled “tapping_machine_force_level_estimate”tapping_machine_force_level_estimate( frequency: ArrayLike, *, bandwidth: str = 'octave',) -> np.ndarrayClosed form printed under Table F.1 for the tapping machine force level.
The standard qualifies this with “up till about 1000 Hz”: it reproduces the
first six tabulated values to the printed decibel, and above that it
departs from the table, which
flattens at 156 dB (the closed form gives 157 dB at 2 kHz and 160 dB at
4 kHz). Use tapping_machine_force_level for the octave bands the
table covers and this only where it does not, chiefly the one-third-octave
bands the standard does not tabulate.
Parameters
| Name | Description |
|---|---|
frequency | Band centre frequency f, in hertz (> 0). |
bandwidth | "octave" (coefficient 2,5) or "third" (coefficient 0,8). |
Returns: The force level L_F, in dB re 1e-6 N (the standard prints “re 1 pN”; see docs/ERRATA.md).
Raises
| Exception | When |
|---|---|
| ValueError | for a non-positive frequency or an unknown bandwidth. |
total_structure_borne_pressure_level
Section titled “total_structure_borne_pressure_level”total_structure_borne_pressure_level(path_levels: ArrayLike) -> np.ndarrayCombine path sound pressure levels energetically (Formula 17).
Parameters
| Name | Description |
|---|---|
path_levels | Path levels L_n,s,ij; sum is over the first axis (paths), broadcasting any trailing band axis. |
Returns: The total normalised sound pressure level L_n,s, in dB.
typical_element_mobility
Section titled “typical_element_mobility”typical_element_mobility( structure: str, *, frequency: ArrayLike | None = None, mass: float | None = None, density: float | None = None, longitudinal_velocity: float | None = None, thickness: float | None = None, width: float | None = None, area: float | None = None, radius: float | None = None, stiffness: float | None = None, loss_factor: float | None = None,) -> np.ndarrayNamed lookup of EN 12354-5, Table D.1 (mobility of typical elements).
Returns the mobility magnitude |Y| the third column of Table D.1
prints, in m/(N.s), for the row named by structure:
"mass", described bymass[kg]: ."bar_end", described bydensity[kg/m3],longitudinal_velocity[m/s] andarea[m2]: ."beam", described by , ,thickness[m] andwidth[m]: ."plate", described by , and : ."pipe", described by , , andradius[m]: ."mass_spring", described by ,stiffness[N/m] andloss_factor[-]: .
TABLE_D1_QUANTITIES carries the “Describing quantities” column as
the keyword names of this function, and only the quantities a row describes
may be supplied.
Frequency is not among them, because it is the band frequency of the
prediction and not a property of the element, but it appears in four of the
six expressions: "mass", "beam", "pipe" and "mass_spring"
require frequency and the other two reject it.
Clause D.1.3 offers the table for building up a source mobility Y_s
from the machine’s own parts, which is what coupling_term needs and
what a measurement of the equipment does not give. Annex F Formulae (F.4)
to (F.6b) cover the receiver mobility Y_i of the supporting element;
the "plate" row is the same quantity as Formula (F.4)
and as
phonometry.vibration.structural.point_mobility.infinite_plate_mobility,
written in , and instead of mass and
bending stiffness.
The "mass_spring" row is the machine on non-rigid feet: its second
bracket holds the two reactances, which cancel at the mass-spring
resonance and leave the
mobility at its damping-limited minimum, the frequency at which the mount
injects the most power. loss_factor=0 returns exactly zero there,
which coupling_term then rejects.
Parameters
| Name | Description |
|---|---|
structure | Table D.1 row name. |
frequency | Frequency f, in hertz, for the frequency-dependent rows only. |
mass | Mass M, in kilograms (rows "mass", "mass_spring"). |
density | Density rho, in kg/m^3. |
longitudinal_velocity | Quasi-longitudinal wave speed cL, in m/s. |
thickness | Thickness t, in metres. |
width | Beam width w, in metres (row "beam"). |
area | Cross-sectional area S, in m^2 (row "bar_end"). |
radius | Pipe radius r, in metres (row "pipe"). |
stiffness | Support stiffness s, in N/m (row "mass_spring"). |
loss_factor | Support loss factor eta (row "mass_spring"). |
Returns: The mobility magnitude |Y|, in m/(N.s).
Raises
| Exception | When |
|---|---|
| ValueError | for an unknown row, a missing or surplus describing quantity, a frequency that the row does not take (or lacks), or a non-positive value. |