Skip to content
This documentation describes version 4.0.0, which is not released yet. The current version on PyPI is 3.3.0 and does not carry everything described here.

vibration.structural.transfer_stiffness

Dynamic transfer stiffness of resilient elements (ISO 10846, Parts 1 to 5).

The vibro-acoustic transfer property of a resilient element (a vibration isolator, mount, bellows or hose) is its dynamic transfer stiffness: the frequency-dependent ratio of the blocking force phasor F2,b on the output (receiver) side to the displacement phasor u1 on the input (source) side, with the output blocked (ISO 10846-1, 3.7), in N/m:

For an isolator between two structures of large driving-point stiffness, the force delivered to the receiver approximates this blocking force (ISO 10846-1, Equation 7), so characterises the isolator’s transmission. Results are reported as a level, in dB, re the reference stiffness N/m (ISO 10846-2 and -3, 3.17):

and, in the low-frequency range where inertial forces in the element are negligible, the loss factor is the tangent of the phase angle of (ISO 10846-1, 3.8): .

Three laboratory methods determine , in four parts:

  • Direct method (ISO 10846-2 for resilient supports, ISO 10846-4 for other elements): measure the blocked output force F2,b and the input displacement u1 directly: . The mass between the element and the output force transducers biases the measured force; ISO 10846-4 Inequality (3) (ISO 10846-2 Inequality (2)) bounds it, see check_output_mass.
  • Indirect method (ISO 10846-3, and ISO 10846-4 for other elements): load the output with a compact blocking mass m2 and measure the vibration transmissibility ; the blocking force is the mass’s inertia force (ISO 10846-3, Equation 1): for , where mf is the mass of the output flange of the test element. The approximation is valid only where (Inequality (2): dB) and while the blocking mass still behaves rigidly, dB (ISO 10846-3 Inequality (3), ISO 10846-4 Inequality (5)); see transfer_stiffness_indirect and effective_blocking_mass.
  • Driving-point method (ISO 10846-5): measure the input force and the input acceleration with the output blocked, which gives the driving-point stiffness (Formula (3)). Below the upper limiting frequency of clause 6.2 its band averages stand for those of within 2 dB (Formula (7)); see driving_point_stiffness.

Every part reports the result as one-third-octave-band averages of the squared magnitude over at least five narrow-band frequencies (ISO 10846-2 Formula (6), -3 Formula (7), -4 Formula (11), -5 Formula (6)): band_averaged_stiffness. The adequacy conditions the parts share, the output blocked by 20 dB and the unwanted input directions 15 dB down, are check_blocked_output and check_unwanted_input, and the Annex B uncertainty budget of ISO 10846-5 is driving_point_uncertainty.

The dynamic transfer stiffness is a member of the frequency-response-function family (ISO 10846-1, Annex A / Table A.2): , so it converts to mechanical impedance and effective mass through phonometry.vibration.convert_frf ("dynamic_stiffness" <-> "impedance" <-> "apparent_mass"). This module feeds the structure-borne source and building prediction standards (ISO 9611, EN 15657, EN 12354-5).

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

band_averaged_stiffness(
frequencies: ArrayLike,
stiffness: ArrayLike,
*,
valid: ArrayLike | None = None,
) -> BandAveragedStiffness

One-third-octave-band averages of a narrow-band stiffness (ISO 10846).

The band average of every part of the series, ISO 10846-2:2008 Formula (6), -3:2002 Formula (7), -4:2003 Formula (11) and -5:2008 Formula (6):

“where the summation is performed over a minimum of n = 5 frequencies”. Averaging the squared magnitude “is chosen to emphasize the maxima in the stiffness values” (NOTE 1), and the phase is lost (NOTE 3). Each line is assigned to the base-ten one-third-octave band that encloses it, the bands named by the ISO 266 centre frequencies the parts ask for.

Fewer than five lines. The parts leave no band value to a band that holds fewer: the analyser shall resolve “at least five distinct frequencies per one-third-octave band”, and a stepped or swept sine shall put at least five frequencies in “each one-third-octave band for which stiffness data are determined”. Such a band is returned undetermined (NaN) and a TransferStiffnessWarning names it. Lines valid marks False are left out first, as the parts exclude results that fail their adequacy conditions; bands beyond the outermost valid line are not listed, and a band inside the range with no valid line at all is undetermined without a warning, since its lines were excluded rather than missing.

Parameters

NameDescription
frequenciesNarrow-band frequencies , in hertz (one-dimensional, distinct).
stiffnessDynamic stiffness at each frequency (complex or real, finite), in N/m: a transfer stiffness or a driving-point stiffness .
validPer frequency, whether the line enters the average (Default: None, every line).

Returns: The BandAveragedStiffness.

Raises

ExceptionWhen
ValueErrorfor frequencies that are not one-dimensional, finite, positive and distinct, a stiffness of another length or not finite, a mask that is not boolean or has another length, or no valid line.

Warns

WarningWhen
TransferStiffnessWarningwhen a band holds between one and four valid lines.
BandAveragedStiffness(
nominal_frequencies: np.ndarray,
center_frequencies: np.ndarray,
stiffness: np.ndarray,
line_counts: np.ndarray,
)

One-third-octave-band averages of a narrow-band dynamic stiffness (ISO 10846).

Every part of the series reduces the narrow-band stiffness to one value per one-third-octave band by averaging the squared magnitude over the n lines of the band (ISO 10846-2:2008 Formula (6), -3:2002 Formula (7), -4:2003 Formula (11), -5:2008 Formula (6)):

and reports it as the level re N/m (ISO 10846-2, -3 and -4 3.18, ISO 10846-5 3.17). A band holding fewer than MIN_FREQUENCIES_PER_BAND lines has no value: its stiffness is NaN and determined is False.

Attributes

NameDescription
nominal_frequenciesPreferred centre frequency of each band (ISO 266), in hertz.
center_frequenciesExact base-ten midband frequency of each band, in hertz; a line belongs to the band whose edges, a factor either side, enclose it.
stiffnessBand average , in N/m, NaN where the band holds fewer than five lines.
line_countsNumber of narrow-band lines averaged in each band.

property

Per band, whether it holds enough lines to have a value.

Returns: One boolean per band.

property

Band level re 1 N/m, in dB, NaN where undetermined.

Returns: One level per band.

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

Plot the band levels, with the undetermined bands marked.

Requires matplotlib (pip install phonometry[plot]).

Parameters

NameDescription
axExisting axes, or None to create a figure.
languageLabel language, "en" (default) or "es".
kwargsForwarded to the band-level bars.

Returns: The axes.

base_transmissibility(
frequency: ArrayLike,
mass: float,
stiffness: float,
damping: float = 0.0,
) -> np.ndarray

Transmissibility of a mass on an ideal resilient element (model).

The output mass m on a massless Kelvin-Voigt element (spring k in parallel with a viscous damper c) driven at the input has the base-excitation transmissibility

This ideal-element model is the counterpart of the indirect-method test arrangement (ISO 10846-3): feeding T into transfer_stiffness_indirect with the same mass recovers the element’s transfer stiffness in the high-frequency limit .

Parameters

NameDescription
frequencyFrequency f, in hertz (scalar or array).
massOutput mass m, in kg.
stiffnessElement stiffness k, in N/m.
dampingViscous damping c, in N.s/m (Default: 0.0).

Returns: The complex transmissibility T.

blocking_force_ratio(
driving_point_stiffness: ArrayLike,
termination_stiffness: ArrayLike,
) -> np.ndarray

Ratio of the delivered force to the blocking force (ISO 10846-1, Eq. 6).

For an isolator driving a receiving structure, the output force for a given source displacement u1 is (Equation (6)), where k2,2 is the isolator’s output driving-point stiffness (output blocked at the input) and kt the dynamic driving-point stiffness of the termination. This function returns

the factor by which the delivered force deviates from the blocking force of Equation (7). For the ratio is within 10 % of unity ( at the limit), which is the stiffness mismatch that justifies characterising an isolator by its blocked transfer stiffness alone.

Parameters

NameDescription
driving_point_stiffnessOutput driving-point stiffness k2,2 of the isolator (complex, scalar or array), in N/m.
termination_stiffnessDriving-point stiffness kt of the receiving structure (complex, scalar or array, non-zero), in N/m.

Returns: The complex ratio F2/F2,b.

Raises

ExceptionWhen
ValueErrorfor a zero termination stiffness.
check_blocked_output(
frequencies: ArrayLike,
input_acceleration_level_db: ArrayLike,
output_acceleration_level_db: ArrayLike,
) -> LevelDifferenceCheck

Is the output side blocked well enough for the stiffness to mean anything?

Every part of ISO 10846 is valid “only for those frequencies where”

(ISO 10846-2:2008 Inequality (1), -3:2002 Inequality (2) with a2 the acceleration of the blocking mass, -4:2003 Inequality (2), -5:2008 Inequality (1)): a smaller difference means too little stiffness mismatch between the element and the foundation, or flanking transmission. For the indirect method the same 20 dB is the of TRANSMISSIBILITY_LIMIT.

Parameters

NameDescription
frequenciesFrequencies, in hertz (narrow-band lines or band centres).
input_acceleration_level_dbInput acceleration level , in dB, one per frequency.
output_acceleration_level_dbOutput acceleration level , in dB re the same reference, one per frequency; -inf for an output that does not move.

Returns: The LevelDifferenceCheck (condition="blocked_output").

Raises

ExceptionWhen
ValueErrorfor frequencies that are not finite and positive, or level spectra that do not carry one level per frequency.

Warns

WarningWhen
TransferStiffnessWarningwhere dB.
check_output_mass(
frequencies: ArrayLike,
output_mass_kg: float,
output_force_level_db: ArrayLike,
output_acceleration_level_db: ArrayLike,
) -> OutputMassCheck

Is the mass in front of the output force transducers light enough?

ISO 10846-4:2003 Inequality (3), and ISO 10846-2:2008 Inequality (2) for resilient supports:

with the force level re 1 µN and the acceleration level re 1 µm/s² of the output side (ISO 10846-4 3.15 and 3.16, the references of ISO 1683). If it fails, NOTE 2 says what to do: a lighter m0, or stiffer (more, or larger) force transducers. See OutputMassCheck for the bias it bounds.

Parameters

NameDescription
frequenciesFrequencies, in hertz.
output_mass_kgThe mass m0 between the element and the output force transducers: the output flange, the force distribution plate and half the mass of the transducers (ISO 10846-4), or the plate and half the transducers for a resilient support (ISO 10846-2), in kg.
output_force_level_dbMeasured output force level , in dB re 1 µN, one per frequency.
output_acceleration_level_dbOutput acceleration level , in dB re 1 µm/s², one per frequency.

Returns: The OutputMassCheck.

Raises

ExceptionWhen
ValueErrorfor frequencies that are not finite and positive, a negative mass, or level spectra that do not carry one finite level per frequency.

Warns

WarningWhen
TransferStiffnessWarningwhere m0 exceeds its limit.
check_unwanted_input(
frequencies: ArrayLike,
excitation_level_db: ArrayLike,
unwanted_level_db: ArrayLike,
) -> LevelDifferenceCheck

Does the input move in the excitation direction alone, by 15 dB?

Every part of ISO 10846 is valid only where the input acceleration in the excitation direction exceeds that in the directions perpendicular to it by at least 15 dB:

(ISO 10846-2:2008 Inequality (3), -3:2002 Inequality (5), -4:2003 Inequality (7), -5:2008 Inequality (2)), the unwanted accelerations read at the edge of the excitation mass or force distribution plate in the plane of the input flange. With several unwanted directions, the loudest one at each frequency decides. (ISO 10846-2:2008 7.6.1, which excludes the lines that fail this pre-run, prints the reference as “6.1, Inequality (1)”, the blocked-output condition; the condition meant is 6.4, Inequality (3), as the same sentence in Parts 3 to 5 shows. See the errata register.)

Parameters

NameDescription
frequenciesFrequencies, in hertz.
excitation_level_dbAcceleration level in the excitation direction, in dB, one per frequency.
unwanted_level_dbAcceleration level in a perpendicular direction, in dB re the same reference, one per frequency; or one row per direction, shape (directions, frequencies).

Returns: The LevelDifferenceCheck (condition="unwanted_input").

Raises

ExceptionWhen
ValueErrorfor frequencies that are not finite and positive, or level spectra that do not carry one level per frequency.

Warns

WarningWhen
TransferStiffnessWarningwhere the difference is below 15 dB.
driving_point_stiffness(
frequencies: ArrayLike,
input_force_n: ArrayLike,
input_acceleration_m_s2: ArrayLike,
*,
output_acceleration_m_s2: ArrayLike | None = None,
unwanted_acceleration_m_s2: ArrayLike | None = None,
) -> DrivingPointStiffnessResult

Dynamic driving-point stiffness of a resilient support (ISO 10846-5 Formula (3)).

, from the input force and the input acceleration measured with the output side of the element blocked. With the output acceleration given, Inequality (1), dB, is checked line by line (check_blocked_output); with the unwanted accelerations given, Inequality (2), 15 dB (check_unwanted_input). A line that fails either raises a TransferStiffnessWarning and is excluded from the evaluation. The result finds (6.2) and averages the valid lines into bands (Formulas (6), (7)).

Parameters

NameDescription
frequenciesFrequencies, in hertz, strictly increasing; the sweep needs lines between 1 Hz and 20 Hz for the low-frequency value, and 7.5 asks for a 0,2 Hz spacing there.
input_force_nInput force phasor F1, in N.
input_acceleration_m_s2Input acceleration phasor a1, in m/s², non-zero.
output_acceleration_m_s2Output-flange acceleration phasor a2, in m/s² (Default: None, Inequality (1) not checked).
unwanted_acceleration_m_s2Input acceleration phasor in a direction perpendicular to the excitation, in m/s², or one row per direction (Default: None, Inequality (2) not checked).

Returns: The DrivingPointStiffnessResult.

Raises

ExceptionWhen
ValueErrorfor frequencies that are not finite, positive and strictly increasing, phasors that do not carry one value per frequency, a zero input acceleration, or no adequate line from 1 Hz to 20 Hz.

Warns

WarningWhen
TransferStiffnessWarningwhere Inequality (1) or (2) fails.
driving_point_uncertainty(
band_level_db: float,
*,
repeatability_range_db: float,
signal_uncertainty_db: float = 0.3,
instrumentation_uncertainty_db: float = 0.5,
test_rig_uncertainty_db: float = 0.2886751345948129,
discrepancy_uncertainty_db: float = 1.1547005383792517,
linearity_uncertainty_db: float = 0.43301270189221935,
) -> DrivingPointUncertainty

Uncertainty of a band level measured by the driving-point method (ISO 10846-5 Annex B).

Table B.1, built on phonometry.metrology.combine_uncertainty:

  • , signal processing and background noise, normal, 0,3 dB (B.3.1);
  • , instrumentation, normal, 0,5 dB when only the minimum requirements are met, 0,3 dB “with good choices and precautions” (B.3.2);
  • , installation repeatability, rectangular, for a spread of between the highest and lowest level of repeated installations (B.3.3);
  • , the test rig, rectangular, dB (B.3.4);
  • , the driving-point stiffness standing for the transfer stiffness, rectangular over dB, dB (B.3.5);
  • , linearity, rectangular, dB (B.3.6).

The last three are the expressions B.3.4 to B.3.6 print, 0,289, 1,155 and 0,433 dB. Table B.1 carries them rounded up to one decimal, 0,3, 1,2 and 0,5 dB, the conservative rounding an uncertainty may take (ISO/IEC Guide 98-3:2008, 7.2.6); the defaults keep the expressions. With the defaults and no repeatability spread, dB and dB, against 1,456 dB and 2,91 dB with the rounded table. Every default can be replaced by a reasoned estimate, as the annex encourages, and the note to (B.3) allows doing so band by band.

Parameters

NameDescription
band_level_dbThe measured band level , in dB re 1 N/m.
repeatability_range_dbThe difference between the highest and lowest band level of repeated installations, in dB (0 for none observed).
signal_uncertainty_dbStandard uncertainty of , in dB (Default: 0,3).
instrumentation_uncertainty_dbStandard uncertainty , in dB (Default: 0,5).
test_rig_uncertainty_dbStandard uncertainty , in dB (Default: ).
discrepancy_uncertainty_dbStandard uncertainty , in dB (Default: ).
linearity_uncertainty_dbStandard uncertainty , in dB (Default: ).

Returns: The DrivingPointUncertainty.

Raises

ExceptionWhen
ValueErrorfor a non-finite band level, or a negative or non-finite spread or standard uncertainty.
DrivingPointStiffnessResult(
frequencies: np.ndarray,
driving_point_stiffness: np.ndarray,
adequate: np.ndarray | None = None,
)

A dynamic driving-point stiffness and the transfer stiffness it stands for (ISO 10846-5).

With the output of the element blocked, the input force and acceleration give the driving-point stiffness (ISO 10846-5:2008 Formula (3))

which equals the transfer stiffness at low frequencies only. Clause 6.2 finds where that ends: the upper limiting frequency is “the lowest frequency, at which the driving point stiffness level becomes 2 dB smaller than the low-frequency stiffness”, the low-frequency value being “the average for 1 Hz to 20 Hz”. Below it the band averages of stand for those of , , within 2 dB (Formula (7)).

The low-frequency value is taken as the Formula (6) average of the lines from 1 Hz to 20 Hz, the one average the part defines for a stiffness; for the flat stiffness the clause presumes, it and the mean of the levels agree. The crossing of the 2 dB threshold is interpolated in the logarithm of frequency between the last line above it and the first line on or below it, and every line above is excluded; a line exactly on the threshold is itself and stays in, since 8.3 states the 2 dB for . Lines that fail Inequality (1) or (2) (adequate) are excluded from the evaluation altogether, as 7.6.1 requires, and so are lines below the 1 Hz at which the method starts.

Attributes

NameDescription
frequenciesFrequencies, in hertz, strictly increasing.
driving_point_stiffnessComplex at each frequency, in N/m.
adequatePer frequency, whether Inequalities (1) and (2) hold, or None when they were not checked.

DrivingPointStiffnessResult.band_average()

Section titled “DrivingPointStiffnessResult.band_average()”
DrivingPointStiffnessResult.band_average() -> BandAveragedStiffness

One-third-octave-band averages of over the valid lines (Formulas (6), (7)).

Only the lines at or below are averaged. For those bands 8.3 states that the band averages of stand for those of within 2 dB, and Annex B (B.3.5) assumes the same dB for its uncertainty budget; the criterion of 6.2 itself only watches fall below its own low-frequency value, so the 2 dB is the standard’s statement, not something the average can prove line by line.

Up to 20 Hz the 0,2 Hz line spacing of 7.5 leaves the lowest bands with fewer than five lines; the NOTE to clause 9 m) accepts narrow-band data there, so those bands are left undetermined without a warning.

Returns: The BandAveragedStiffness.

Warns

WarningWhen
TransferStiffnessWarningwhen a band above 20 Hz holds fewer than MIN_FREQUENCIES_PER_BAND valid lines.

property

Driving-point stiffness level re 1 N/m at each frequency, in dB.

property

Loss factor (Formula (4)).

DrivingPointStiffnessResult.low_frequency_level_db

Section titled “DrivingPointStiffnessResult.low_frequency_level_db”

property

The low-frequency stiffness level of 6.2, in dB re 1 N/m.

Returns: of the mean squared magnitude over the adequate lines from 1 Hz to 20 Hz, re .

property

Driving-point stiffness magnitude , in N/m.

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

Plot the driving-point stiffness level with the 6.2 threshold and .

Requires matplotlib (pip install phonometry[plot]).

Parameters

NameDescription
axExisting axes, or None to create a figure.
languageLabel language, "en" (default) or "es".
kwargsForwarded to the level curve.

Returns: The axes.

DrivingPointStiffnessResult.threshold_level_db

Section titled “DrivingPointStiffnessResult.threshold_level_db”

property

The level 2 dB below the low-frequency value, whose crossing is .

Returns: The threshold, in dB re 1 N/m.

DrivingPointStiffnessResult.upper_limiting_frequency_hz

Section titled “DrivingPointStiffnessResult.upper_limiting_frequency_hz”

property

of 6.2, in hertz, or None when the sweep never reaches it.

Returns: , or None.

property

Per frequency, whether the line is evaluated.

A line is evaluated when it is adequate, lies at or above 1 Hz and lies at or below : 8.3 states the accuracy of Formula (7) “if ”, so a line that sits exactly on the 2 dB threshold, and is itself, is kept.

Returns: One boolean per frequency.

DrivingPointUncertainty(budget: UncertaintyResult)

Uncertainty budget of a band level measured by the driving-point method (ISO 10846-5 Annex B).

The band level is modelled as the measured one plus five corrections of zero estimate (Formula (B.1)),

every sensitivity coefficient is 1, the combined standard uncertainty is the root sum of squares of the six contributions (Formula (B.2)) and the expanded uncertainty for 95 % coverage is (Formula (B.3)), the six inputs being “assumed to result in a normal distribution”.

Attributes

NameDescription
budgetThe GUM budget, one row per input quantity of Table B.1.

property

The band level , in dB re 1 N/m.

DrivingPointUncertainty.combined_uncertainty_db

Section titled “DrivingPointUncertainty.combined_uncertainty_db”

property

Combined standard uncertainty , in dB (Formula (B.2)).

property

The coverage factor 2 of Formula (B.3).

DrivingPointUncertainty.expanded_uncertainty_db

Section titled “DrivingPointUncertainty.expanded_uncertainty_db”

property

Expanded uncertainty , in dB (Formula (B.3)).

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

Plot the contribution of each input quantity, with u and U.

Requires matplotlib (pip install phonometry[plot]).

Parameters

NameDescription
axExisting axes, or None to create a figure.
languageLabel language, "en" (default) or "es".
kwargsForwarded to the contribution bars.

Returns: The axes.

effective_blocking_mass(
frequencies: ArrayLike,
force_n: ArrayLike,
first_acceleration_m_s2: ArrayLike,
second_acceleration_m_s2: ArrayLike,
*,
blocking_mass_kg: float,
) -> EffectiveBlockingMass

Effective mass of a blocking mass from one force and two accelerations.

ISO 10846-4:2003 Formula (6) (ISO 10846-3:2002 Formula (4)): , with the block supported on soft springs (a mass-spring resonance below 10 Hz), the force F2 applied along the axis through its centre of mass, and the two accelerometers placed symmetrically inside the contact area S a distance apart; the force and acceleration measurements follow ISO 7626-1 and ISO 7626-2. See EffectiveBlockingMass for f3.

Parameters

NameDescription
frequenciesFrequencies, in hertz, strictly increasing.
force_nExcitation force phasor F2, in N, one per frequency.
first_acceleration_m_s2Acceleration phasor , in m/s², one per frequency.
second_acceleration_m_s2Acceleration phasor , in m/s², one per frequency.
blocking_mass_kgThe mass m2 of the block, in kg.

Returns: The EffectiveBlockingMass.

Raises

ExceptionWhen
ValueErrorfor frequencies that are not finite, positive and strictly increasing, phasors of another length, a zero or non-finite effective mass, or a non-positive m2.
EffectiveBlockingMass(
frequencies: np.ndarray,
effective_mass_kg: np.ndarray,
blocking_mass_kg: float,
)

Effective mass of a blocking mass over frequency, and its limit f3.

The indirect method treats the blocking mass as rigid; above some frequency it no longer is, and the force it measures departs from . Driven alone on soft supports through its centre of mass, with two accelerometers a spacing apart inside the contact area S, its effective mass is (ISO 10846-4:2003 Formula (6); the same quantity is ISO 10846-3:2002 Formula (4))

and the results of the indirect method are presented only up to f3, “the lowest frequency at which the effective mass deviates more than 12 % (i.e. 1 dB in level) from the mass m2”, where dB (ISO 10846-4 Inequality (5), ISO 10846-3 Inequality (3)). A deviation below 40 Hz is the mass-spring behaviour of the block on its supports and is ignored in finding f3.

Attributes

NameDescription
frequenciesFrequencies, in hertz, strictly increasing.
effective_mass_kg at each frequency, in kg.
blocking_mass_kgThe mass m2 of the block, in kg.

property

, in dB.

Returns: One deviation per frequency.

property

The 40 Hz below which a deviation is not read as a loss of rigidity, in hertz.

Returns: 40.0 (ISO 10846-3 6.2.3, ISO 10846-4 6.3.3.2).

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

Plot the deviation from m2 with the 1 dB tolerance and f3.

Requires matplotlib (pip install phonometry[plot]).

Parameters

NameDescription
axExisting axes, or None to create a figure.
languageLabel language, "en" (default) or "es".
kwargsForwarded to the deviation curve.

Returns: The axes.

EffectiveBlockingMass.upper_frequency_limit_hz

Section titled “EffectiveBlockingMass.upper_frequency_limit_hz”

property

f3, in hertz, or None when the mass stays rigid over the sweep.

The deviation crosses 1 dB between the last line inside it and the first line (from 40 Hz up) outside it; the crossing is interpolated in the logarithm of frequency.

Returns: f3, or None.

property

Per frequency, whether it lies below the first line outside 1 dB.

Returns: One boolean per frequency.

indirect_transfer_stiffness_result(
frequency: ArrayLike,
transmissibility: ArrayLike,
blocking_mass: float,
*,
flange_mass: float = 0.0,
) -> TransferStiffnessResult

Indirect-method transfer stiffness bundled as a TransferStiffnessResult.

See transfer_stiffness_indirect for the ISO 10846-3 validity conditions (Inequalities (2) and (3)); bands with trigger a TransferStiffnessWarning, and the result marks them not valid, so that band_average leaves them out.

Parameters

NameDescription
frequencyFrequencies f, in hertz (array).
transmissibilityVibration transmissibility (complex).
blocking_massBlocking mass m2, in kg (> 0).
flange_massOutput-flange mass mf, in kg (Default: 0.0).

Returns: The TransferStiffnessResult (indirect method).

Warns

WarningWhen
TransferStiffnessWarningwhere any (Inequality (2) violated).
LevelDifferenceCheck(
frequencies: np.ndarray,
difference_db: np.ndarray,
limit_db: float,
condition: Literal['blocked_output', 'unwanted_input'],
)

An ISO 10846 level-difference condition judged frequency by frequency.

Two conditions of the series take this form. The output is blocked where the input acceleration level exceeds the output one by at least 20 dB, dB ("blocked_output"; ISO 10846-2:2008 Inequality (1), -3:2002 Inequality (2), -4:2003 Inequality (2), -5:2008 Inequality (1)). The input is unidirectional where the acceleration in the excitation direction exceeds that in every direction perpendicular to it by at least 15 dB, dB ("unwanted_input"; ISO 10846-2:2008 Inequality (3), -3:2002 Inequality (5), -4:2003 Inequality (7), -5:2008 Inequality (2)). The measurements are valid only at the frequencies where the condition holds.

Attributes

NameDescription
frequenciesFrequencies judged, in hertz.
difference_dbThe level difference at each frequency, in dB (+inf where the second level is that of a zero signal).
limit_dbThe least difference the condition accepts, in dB.
condition"blocked_output" or "unwanted_input".

property

Per frequency, whether the difference reaches the limit.

Returns: One boolean per frequency.

property

Whether the condition holds at every frequency judged.

Returns: True when no frequency falls short of the limit.

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

Plot the level difference against its limit, failures marked.

Requires matplotlib (pip install phonometry[plot]).

Parameters

NameDescription
axExisting axes, or None to create a figure.
languageLabel language, "en" (default) or "es".
kwargsForwarded to the level-difference curve.

Returns: The axes.

loss_factor(stiffness: ArrayLike) -> np.ndarray

Loss factor (ISO 10846-1, 3.8).

Valid in the low-frequency range where inertial forces in the element are negligible; it is the tangent of the phase angle of the transfer stiffness.

Parameters

NameDescription
stiffnessDynamic transfer stiffness (complex, scalar or array, with a non-zero real part), in N/m.

Returns: The loss factor eta (dimensionless).

Raises

ExceptionWhen
ValueErrorfor a purely imaginary stiffness (), for which the loss factor is undefined.

Constant (int).

MIN_FREQUENCIES_PER_BAND = 5
OutputMassCheck(
frequencies: np.ndarray,
output_mass_kg: float,
mass_limit_kg: np.ndarray,
)

The mass in front of the output force transducers, against its limit.

In the direct method the mass m0 between the element and the output force transducers (the output flange, the force distribution plate and half the transducers) biases the measured force by its own inertia force . ISO 10846-4:2003 Inequality (3) bounds it, and so does ISO 10846-2:2008 Inequality (2) for resilient supports, where the mass is called m2 and counts the force distribution plate and half the transducers only:

with the levels re 1 µN and 1 µm/s² (ISO 10846-4 3.15 and 3.16), so the bound is . Since , the force levels differ by at most dB with , which at the bound () is 0,54 dB against the 0,51 dB of an inertia force in phase with the measured one: the “0,5 dB” of NOTE 1.

Attributes

NameDescription
frequenciesFrequencies judged, in hertz.
output_mass_kgThe mass m0, in kg.
mass_limit_kgThe right-hand side of the inequality at each frequency, in kg.

property

Largest the mass can cause, in dB.

, reached when the inertia force opposes the measured force; inf where , when the mass can cancel the force altogether.

Returns: One bound per frequency, in dB.

property

Per frequency, whether m0 is within its limit.

Returns: One boolean per frequency.

property

The inertia force over the measured force, .

Returns: One ratio per frequency; 0,06 where m0 sits on its limit.

property

Whether m0 is within its limit at every frequency judged.

Returns: True when the inequality holds throughout.

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

Plot the mass limit over frequency against the mass in place.

Requires matplotlib (pip install phonometry[plot]).

Parameters

NameDescription
axExisting axes, or None to create a figure.
languageLabel language, "en" (default) or "es".
kwargsForwarded to the mass-limit curve.

Returns: The axes.

Constant (float).

REFERENCE_STIFFNESS = 1.0
transfer_stiffness_direct(
blocking_force: ArrayLike,
input_displacement: ArrayLike,
) -> np.ndarray

Dynamic transfer stiffness by the direct method (ISO 10846-2).

, the blocked output force phasor over the input displacement phasor.

Parameters

NameDescription
blocking_forceBlocked output force phasor F2,b (complex), in N.
input_displacementInput displacement phasor u1 (complex, non-zero), in m.

Returns: The dynamic transfer stiffness , in N/m.

Raises

ExceptionWhen
ValueErrorfor a zero input displacement (dead input channel).
transfer_stiffness_indirect(
frequency: ArrayLike,
transmissibility: ArrayLike,
blocking_mass: float,
*,
flange_mass: float = 0.0,
) -> np.ndarray

Dynamic transfer stiffness by the indirect method (ISO 10846-3, Eq. 1).

: the blocking force is the inertia force of a compact blocking mass m2 (plus the output flange mass mf), derived from the measured vibration transmissibility . Valid for (i.e. well above the mass/spring resonance).

Validity (ISO 10846-3, clause 6). The approximation of Formula (1) is required accurate within 1 dB, i.e. within 12 % of the calculated stiffness magnitude. This holds only where Inequality (2) is met: dB, i.e. (TRANSMISSIBILITY_LIMIT). Lines with |T| above that limit (routine near or below the mass/spring resonance) trigger a TransferStiffnessWarning; the result marks each of them as not valid, and its band average leaves them out. The upper frequency limit f3 additionally requires the blocking mass to vibrate as a rigid body: results are valid only while its effective mass m2,eff, measured per Formula (4) as (two accelerometers spaced across the contact area), stays within 1 dB of the rigid mass, dB (Inequality (3), 6.2.3); effective_blocking_mass finds f3.

Parameters

NameDescription
frequencyFrequency f, in hertz (scalar or array).
transmissibilityVibration transmissibility (complex, scalar or array; velocity and acceleration ratios have the same value).
blocking_massBlocking mass m2, in kg (> 0).
flange_massOutput-flange mass mf, in kg (Default: 0.0).

Returns: The dynamic transfer stiffness , in N/m.

Raises

ExceptionWhen
ValueErrorfor a non-positive frequency or blocking mass.

Warns

WarningWhen
TransferStiffnessWarningwhere any (Inequality (2) violated).
transfer_stiffness_level(
stiffness: ArrayLike,
*,
reference: float = 1.0,
) -> np.ndarray

Level of the dynamic transfer stiffness (ISO 10846-2/-3, 3.17).

dB, with k0 the reference stiffness.

Parameters

NameDescription
stiffnessDynamic transfer stiffness (complex or real, scalar or array, non-zero), in N/m.
referenceReference stiffness k0 (Default: 1 N/m), in N/m.

Returns: The level L_k, in dB re k0.

Raises

ExceptionWhen
ValueErrorfor a non-positive reference, a non-finite stiffness, or a zero stiffness magnitude (a dead channel has no level).
TransferStiffnessResult(
frequencies: np.ndarray,
transfer_stiffness: np.ndarray,
blocking_mass: float | None = None,
valid: np.ndarray | None = None,
)

A dynamic transfer stiffness over frequency (ISO 10846).

Attributes

NameDescription
frequenciesFrequencies, in hertz.
transfer_stiffnessComplex per frequency, in N/m.
blocking_massBlocking mass m2 used (indirect method), in kg, or None for the direct method.
validPer frequency, whether the line meets the adequacy conditions of its part and so enters the band average (results that fail them “shall be excluded from the evaluation of the dynamic stiffness function”, ISO 10846-2, -4 and -5 7.6.1, ISO 10846-3 7.5.1), or None when every line does. The indirect method sets it from Inequality (2), .
TransferStiffnessResult.band_average() -> BandAveragedStiffness

One-third-octave-band averages of (every part’s band average).

ISO 10846-2:2008 Formula (6), ISO 10846-3:2002 Formula (7) and ISO 10846-4:2003 Formula (11) average the squared magnitude over the narrow-band lines of each band; see band_averaged_stiffness. Lines valid marks as failing their adequacy conditions are left out, as the parts require.

Returns: The BandAveragedStiffness.

Warns

WarningWhen
TransferStiffnessWarningwhen a band holds fewer than MIN_FREQUENCIES_PER_BAND valid lines.

property

Transfer-stiffness level L_k re 1 N/m, in dB (3.17).

property

Loss factor per frequency (3.8).

property

Transfer-stiffness magnitude , in N/m.

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

Plot the transfer-stiffness level L_k(f).

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

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

Render a dynamic-transfer-stiffness fiche to a PDF (ISO 10846).

Writes a one-page transfer-stiffness characterisation report for a resilient element: the standard-basis line naming the determination method (direct, ISO 10846-2:2008, or indirect blocking-mass, ISO 10846-3:2002; definition per ISO 10846-1:2008), an optional metadata header, a two-panel body with a compact table of the FRF’s characteristic points (the method, the blocking mass for the indirect method, the frequency range, and the low-frequency stiffness plateau , its level L_k and the loss factor eta there) beside the transfer-stiffness level spectrum L_k(f), the one-third-octave band levels of band_average that the test report of ISO 10846-2 (9 m)) and ISO 10846-3 (10 j)) presents, a boxed low-frequency L_k with the stiffness magnitude and method alongside, and a footer identity/disclaimer block.

The characteristic points are read at the lowest line valid keeps, since the part excludes the others from the evaluation, and the spectrum draws the excluded lines apart. A band holding fewer than five valid lines prints its line count instead of a level. A transfer-stiffness determination is a characterisation, so there is no pass/fail verdict.

Parameters

NameDescription
pathDestination path of the PDF file.
metadataOptional ReportMetadata supplying the header identity (specimen is the tested resilient element) and the footer identity; the requirement field is ignored.
engineRendering back end; only "reportlab" is supported.
verboseAccepted for a uniform .report() signature; the transfer-stiffness fiche has a single body layout, so it has no effect.
languageFiche language: "en" (default, English) or "es" (Spanish, with a comma decimal separator).

Returns: The written path as a str.

Raises

ExceptionWhen
ValueErrorIf engine is not "reportlab" or language is unknown, or valid marks every line as failing its adequacy conditions (there is then no value to report).
ImportErrorIf reportlab or matplotlib is not installed. The fiche always embeds the L_k(f) spectrum, so both are required (pip install "phonometry[report,plot]").
TransferStiffnessResult.to(target: str) -> np.ndarray

Convert to an FRF (ISO 10846-1 Annex A / Table A.2).

target is "impedance" () or "apparent_mass" (); see phonometry.vibration.convert_frf.

Advisory when an ISO 10846 adequacy condition or a band count fails.

Constant (float).

TRANSMISSIBILITY_LIMIT = 0.1