---
title: "Transfer stiffness of resilient elements (ISO 10846)"
description: "The ISO 10846 dynamic transfer stiffness k₂₁ = F₂,b/u₁ of resilient elements: the level Lₖ re 1 N/m and the loss factor (Parts 1-3), the direct method (Part 2), the indirect method k₂₁ = −(2πf)²(m₂+m_f)T from vibration transmissibility (Part 3, Formula 1), and the Annex-A relation to mechanical impedance and effective mass."
references:
  - type: book
    authors: ["Cremer, L.", "Heckl, M.", "Petersson, B. A. T."]
    year: 2005
    title: "Structure-borne sound: Structural vibrations and sound radiation at audio frequencies"
    edition: "3rd ed."
    publisher: "Springer"
    doi: "10.1007/b137728"
    note: "Vibration isolation theory: why an isolator's performance depends on the source and receiver mobilities, the physics behind the blocked-force characterisation. ISBN 978-3-540-22696-3."
  - type: standard
    organization: "International Organization for Standardization"
    year: 2008
    title: "Acoustics and vibration — Laboratory measurement of vibro-acoustic transfer properties of resilient elements — Part 1: Principles and guidelines"
    designation: "ISO 10846-1:2008"
    url: "https://www.iso.org/standard/38936.html"
    note: "The principles part of the series: the blocking-force idealisation and the FRF relations this page implements: the dynamic transfer stiffness k₂₁ = F₂,b/u₁ and its FRF relations (clause 5 and Annex A / Table A.2) and the blocking-force approximation (Eqs. 6/7). Parts 4 and 5 of the series extend the same quantities to elements other than supports and to the driving-point low-frequency method. Conformance is anchored on the closed-form Table-A.2 identity k = jω·Z and the Eq. (6) force ratio 1/1.1."
  - type: standard
    organization: "International Organization for Standardization"
    year: 2008
    title: "Acoustics and vibration — Laboratory measurement of vibro-acoustic transfer properties of resilient elements — Part 2: Direct method for determination of the dynamic stiffness of resilient supports for translatory motion"
    designation: "ISO 10846-2:2008"
    url: "https://www.iso.org/standard/38937.html"
    note: "The direct method, and (with Part 3) the level L_k re 1 N/m and the loss factor (clauses 3.8/3.17). Conformance is anchored on the closed-form level of a decade of stiffness."
  - type: standard
    organization: "International Organization for Standardization"
    year: 2002
    title: "Acoustics and vibration — Laboratory measurement of vibro-acoustic transfer properties of resilient elements — Part 3: Indirect method for determination of the dynamic stiffness of resilient supports for translatory motion"
    designation: "ISO 10846-3:2002"
    url: "https://www.iso.org/standard/34560.html"
    note: "The indirect method k₂₁ = −(2πf)²(m₂+m_f)T (Formula 1) with its validity conditions (clause 6: Inequalities 2 and 3; clause 7.6 linearity). Conformance is anchored on the indirect inertia relation, the |T| = 0.1 ↔ ΔL₁,₂ = 20 dB validity limit and its 1 dB (12 %) accuracy bound, and the 7.6 linearity criterion."
---

import ThemeImage from '../../../components/ThemeImage.astro';
import ReportPreview from '../../../components/ReportPreview.astro';

The vibro-acoustic transfer property of a resilient element (a vibration
isolator, mount, bellows or hose) is its **dynamic transfer stiffness** `k₂₁`,
the frequency-dependent ratio of the *blocking force* on the output (receiver)
side to the displacement on the input (source) side (ISO 10846-1, 3.7):

$$
k_{2,1} = \frac{F_{2,b}}{u_1} \quad [\mathrm{N/m}].
$$

Because a vibration isolator is only effective between structures of large
driving-point stiffness, the force it delivers to the receiver approximates this
blocking force (ISO 10846-1, Eq. 7), so `k₂₁` is the quantity that characterises
the isolator's transmission. `k₂₁` feeds the structure-borne source and building
prediction standards: ISO 9611, EN 15657 and EN 12354-5.

<ThemeImage src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/transfer_stiffness.svg" alt="Dynamic transfer stiffness level of a Kelvin-Voigt isolator: the true level and the indirect-method estimate, which diverges at the mass/spring resonance and converges above it" width="82%" loading="eager" />

<details>
<summary>Show the code for this figure</summary>

```python
import matplotlib.pyplot as plt
import numpy as np
from phonometry import vibration

# Kelvin-Voigt isolator k + jwc loaded by an 8 kg blocking mass.
k, c, m2 = 1.0e6, 120.0, 8.0
f0 = np.sqrt(k / m2) / (2.0 * np.pi)
f = np.logspace(np.log10(f0 / 5.0), np.log10(f0 * 40.0), 600)

k_true = k + 1j * 2.0 * np.pi * f * c
t = vibration.base_transmissibility(f, m2, k, c)
k_indirect = vibration.transfer_stiffness_indirect(f, t, m2)  # warns where T is not small

fig, ax = plt.subplots()
ax.semilogx(f, vibration.transfer_stiffness_level(k_true),
            label="true $L_k$ of $k+j\\omega c$")
ax.semilogx(f, vibration.transfer_stiffness_level(k_indirect), "--",
            label="indirect method $-(2\\pi f)^2 m_2 T$")
ax.axvline(f0, color="0.6", linestyle=":", label="resonance $f_0$")
ax.set(xlabel="Frequency [Hz]", ylabel="Transfer stiffness level $L_k$ [dB re 1 N/m]")
ax.grid(True, which="both", alpha=0.3)
ax.legend()
plt.show()
```

</details>

## 1. The transfer-stiffness level and loss factor

Results are reported as a **level** re the reference stiffness `k₀ = 1 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 `k₂₁` (ISO 10846-1, 3.8):

$$
L_k = 10\lg\frac{|k_{2,1}|^2}{k_0^2} = 20\lg\frac{|k_{2,1}|}{k_0}, \qquad
\eta = \frac{\mathrm{Im}(k_{2,1})}{\mathrm{Re}(k_{2,1})}.
$$

```python
from phonometry import vibration

# A resilient mount with |k2,1| = 1 MN/m and a 5 % loss factor:
k = 1e6 * (1.0 + 0.05j)
print(round(float(vibration.transfer_stiffness_level(k)), 2))   # 120.00  dB re 1 N/m
print(round(float(vibration.loss_factor(k)), 3))                # 0.05
```

## 2. Direct and indirect determination

Why a *blocked* force rather than, say, the isolator's transmissibility?
Because a transmissibility is a property of a whole assembly: it changes with
whatever masses and stiffnesses the isolator happens to connect, so data
measured on one rig would not transfer to another installation. The blocked
force per unit input displacement is a property of the element alone, and it
predicts the force the element delivers to any receiver that is much stiffer
than the element itself, which is exactly the situation a vibration isolator
is designed for. ISO 10846 therefore sandwiches the isolator between a driven
input mass and an output that is either rigidly blocked or loaded with a
known mass:

<ThemeImage src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/diagram_transfer_stiffness_rig.svg" alt="ISO 10846 transfer-stiffness rigs: the isolator under test between a driven excitation mass and either a blocked output with a force transducer, the direct method, or a resiliently supported blocking mass, the indirect method" width="92%" />

The **direct method** (ISO 10846-2) measures the blocked output force and the
input displacement, `k₂₁ = F₂,b/u₁`. The **indirect method** (ISO 10846-3) loads
the output with a compact blocking mass `m₂` and measures the vibration
transmissibility `T = u₂/u₁`; the blocking force is then the inertia force of the
mass (ISO 10846-3, Eq. 1):

$$
k_{2,1} = -(2\pi f)^2\,(m_2 + m_f)\,T \qquad (T \ll 1),
$$

with `m_f` the mass of the output flange. The approximation is valid well above
the mass/spring resonance, where `T` is small.

```python
import numpy as np
from phonometry import vibration

# Indirect method: a 10 kg blocking mass, transmissibility 0.01 at 500 Hz.
k = vibration.transfer_stiffness_indirect(500.0, 0.01, blocking_mass=10.0)
print(f"{abs(complex(k)):.3e}")            # 9.870e+05  N/m

# Bundle a swept measurement into a result carrying its level and loss factor:
f = np.logspace(1.5, 3.3, 200)
t = vibration.base_transmissibility(f, mass=8.0, stiffness=1e6, damping=120.0)
res = vibration.indirect_transfer_stiffness_result(f, t, blocking_mass=8.0)
print(round(float(res.level[-1]), 1))      # ~126  dB re 1 N/m (high-f)
```

The `TransferStiffnessResult` carries the complex `k₂₁` and exposes `.level`,
`.loss_factor`, `.magnitude`, `.to("impedance"/"apparent_mass")` and `.plot()`.

The two methods split the frequency axis between them. The direct method
works from 1 Hz, the lower bound of the ISO 10846-2 scope (in practice the
floor is set by the rig and its instrumentation), up to where the test rig's
own resonances intrude (typically a few hundred hertz for large elements); the
indirect method only becomes valid well above the blocking-mass/spring
resonance, where the transmissibility is small, and extends the
characterisation into the kilohertz range. A full isolator dataset is
usually the two spliced together.

## 3. Validity of the indirect method

ISO 10846-3 (clause 6) requires the `T ≪ 1` approximation to be accurate
within **1 dB** (12 % of the stiffness magnitude), which bounds the usable
frequency range on both sides:

* **Impedance mismatch (Inequality 2).** Valid only where
  `ΔL₁,₂ = La₁ − La₂ ≥ 20 dB`, i.e. `|T| ≤ 0.1`, the constant
  `TRANSMISSIBILITY_LIMIT`. `transfer_stiffness_indirect` computes the
  per-band `|T|` and emits a `PhonometryWarning` when any band exceeds it
  (routine near or below the mass/spring resonance, as in the figure above).
* **Rigid blocking mass (Inequality 3).** Above an upper frequency `f₃` the
  blocking mass no longer moves as a rigid body; results are valid only while
  its measured effective mass `m₂,eff = 2F₂/(a′₁ + a″₁)` (Eq. 4) stays within
  1 dB of the rigid mass: `10 lg(m₂,eff²/m₂²) ≤ 1 dB`.
* **Linearity (clause 7.6).** Two input spectra 10 dB apart must give
  transfer-stiffness levels within 1.5 dB.

The blocking-force idealisation itself is quantified by ISO 10846-1, Eq. (6):
for an isolator of output driving-point stiffness `k₂,₂` on a termination of
stiffness `k_t`, the delivered force is `F₂/F₂,b = 1/(1 + k₂,₂/k_t)`, within
10 % of the blocking force for `|k₂,₂| < 0.1 |k_t|` (Eq. 7):

```python
import warnings
from phonometry import vibration

# |T| = 0.5 violates Inequality (2): the indirect result is flagged.
with warnings.catch_warnings(record=True) as caught:
    warnings.simplefilter("always")
    vibration.transfer_stiffness_indirect(50.0, 0.5, blocking_mass=10.0)
print(caught[0].category.__name__)                     # PhonometryWarning

# Blocking-force approximation at the 10 % limit (ISO 10846-1, Eq. 6):
print(round(abs(complex(vibration.blocking_force_ratio(1e5, 1e6))), 4))   # 0.9091
```

## 4. Relation to the FRF family

The dynamic stiffness is a member of the frequency-response-function family
(ISO 10846-1, Annex A / Table A.2): it is the reciprocal of the receptance and
relates to the mechanical impedance `Z` and effective mass `m_eff` by
`k = jω·Z = −ω²·m_eff`. These conversions are the same as the
[mechanical mobility](/phonometry/guides/mechanical-mobility/) `convert_frf`
pivot:

```python
from phonometry import vibration

k = 1e6 + 5e4j                                  # N/m, at 250 Hz
Z = vibration.convert_frf(k, 250.0, "dynamic_stiffness", "impedance")
print(abs(complex(vibration.convert_frf(Z, 250.0, "impedance", "dynamic_stiffness"))))  # 1.0012e6
```

## 5. Test-report fiche

`TransferStiffnessResult.report(path)` renders a one-page
dynamic-transfer-stiffness characterisation report for a resilient element
(ISO 10846-1:2008 definition; determined by the direct method, ISO 10846-2:2008,
or the indirect blocking-mass method, ISO 10846-3:2002). The transfer stiffness
is a continuous frequency-response function, not an octave-band quantity, so the
sheet presents it honestly as the $L_k(f)$ level spectrum plus a compact table
of characteristic points (the determination method, the blocking mass for the
indirect method, the frequency range, and the low-frequency stiffness plateau
$|k_{2,1}|$, its level $L_k$ and the loss factor there), and a boxed
low-frequency $L_k$ (the plateau that characterises the element below its
internal resonances). It is a characterisation, so there is no pass/fail
verdict; `language="es"` renders the Spanish fiche. The fiche always embeds the
$L_k(f)$ spectrum, so it needs both the report and plot extras
(`pip install "phonometry[report,plot]"`).

```python
import numpy as np
from phonometry import ReportMetadata, TransferStiffnessResult, transfer_stiffness_direct

freqs = np.array([20, 31.5, 50, 80, 125, 200, 315, 500, 800, 1250, 2000], dtype=float)
k21 = 1e6 + 1j * (2 * np.pi * freqs) * 80.0     # Kelvin-Voigt element k + jwc
u1 = 1e-6 + 0j
k = transfer_stiffness_direct(k21 * u1, u1)     # direct method: k2,1 = F2,b/u1
res = TransferStiffnessResult(frequencies=freqs, transfer_stiffness=k)
res.report(
    "transfer_stiffness.pdf",
    metadata=ReportMetadata(
        specimen="Rubber vibration isolator",
        measurement_standard="ISO 10846-2",
    ),
)   # one-page fiche (needs phonometry[report,plot])
```

<ReportPreview
	name="iso10846_transfer_stiffness_example"
	title="ISO 10846 dynamic-transfer-stiffness example report (PDF)"
	description="One-page dynamic-transfer-stiffness fiche: a metadata header, a table of the FRF characteristic points (the determination method, the frequency range and the low-frequency stiffness, level and loss factor) beside the transfer-stiffness level spectrum, and the boxed low-frequency level."
	caption="Dynamic-transfer-stiffness fiche (TransferStiffnessResult.report): the FRF characteristic points and the transfer-stiffness level spectrum."
/>

## See also

- API reference: [`vibration.transfer_stiffness`](/phonometry/reference/api/vibration/transfer-stiffness/) and [`vibration.mechanical_mobility`](/phonometry/reference/api/vibration/mechanical-mobility/).
