<!-- canonical: https://docs.jmrp.io/phonometry/es/vibration/structural/transfer-stiffness/ -->
Source: https://docs.jmrp.io/phonometry/es/vibration/structural/transfer-stiffness/

La propiedad de transferencia vibroacústica de un elemento resiliente (un
aislador de vibraciones, soporte, fuelle o manguera) es su **rigidez dinámica
de transferencia** $k_{2,1}$, el cociente dependiente de la frecuencia entre
la *fuerza de bloqueo* en el lado de salida (receptor) y el desplazamiento en
el lado de entrada (fuente) (ISO 10846-1, 3.7):

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

Como un aislador de vibraciones solo es eficaz entre estructuras de gran rigidez
en el punto de excitación, la fuerza que entrega al receptor aproxima esta fuerza
de bloqueo (ISO 10846-1, Ec. 7), de modo que $k_{2,1}$ es la magnitud que
caracteriza la transmisión del aislador. $k_{2,1}$ alimenta las normas de fuente
estructural y de predicción en edificación: ISO 9611, EN 15657 y EN 12354-5.

Toda la serie está escrita en torno a un banco, y es el banco el que dice qué
significa la magnitud: el elemento se intercala entre una masa de entrada
excitada y una salida que está o bien bloqueada rígidamente o bien cargada con
una masa conocida, bajo una precarga estática declarada, y las dos direcciones
en que se carga en servicio se miden por separado.

## 1. El nivel de rigidez de transferencia y el factor de pérdidas

Los resultados se expresan como un **nivel** re la rigidez de referencia
$k_0 = 1\ \text{N/m}$ (ISO 10846-2 y -3, 3.17) y, en el rango de baja frecuencia
donde las fuerzas de inercia del elemento son despreciables, el **factor de
pérdidas** es la tangente del ángulo de fase de $k_{2,1}$ (ISO 10846-1, 3.8):

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

```python
from phonometry import vibration

# Un soporte resiliente con |k2,1| = 1 MN/m y un factor de pérdidas del 5 %:
k = 1e6 * (1.0 + 0.05j)
print(round(float(vibration.transfer_stiffness_level(k)), 2))   # 120.01  dB re 1 N/m
print(round(float(vibration.loss_factor(k)), 3))                # 0.05
```

## 2. Determinación directa e indirecta

¿Por qué una fuerza *bloqueada* y no, por ejemplo, la transmisibilidad del
aislador? Porque una transmisibilidad es una propiedad del conjunto completo:
cambia con las masas y rigideces que el aislador conecte en cada caso, así
que unos datos medidos en un banco no se trasladarían a otra instalación. La
fuerza bloqueada por unidad de desplazamiento de entrada es una propiedad del
elemento solo, y predice la fuerza que el elemento entrega a cualquier
receptor mucho más rígido que el propio elemento, que es exactamente la
situación para la que se diseña un aislador de vibración. Por eso ISO 10846
intercala el aislador entre una masa de entrada excitada y una salida que
está o bien bloqueada rígidamente o bien cargada con una masa conocida (el
banco dibujado al principio de esta página).

### Las condiciones de ensayo a las que pertenece el número

Una rigidez de transferencia sin su precarga y su temperatura no es un
resultado. El apartado 6.1 de la ISO 10846-1 abre diciéndolo: $k_{2,1}$ depende
de la frecuencia y, «además, depende también de la precarga estática y, en
muchos casos, de la temperatura», y puede depender también de la humedad
relativa. Las condiciones de laboratorio de todas las partes de la serie
incluyen la aplicación de una precarga estática, porque un aislador de caucho o
de muelle caracterizado sin carga trabaja en un punto de su curva
carga-deformación distinto del que ocupa ese mismo aislador soportando su carga
de servicio.

- **La precarga, aplicada y declarada.** El apartado 6.3.3.1 de la ISO 10846-1
  da las dos topologías de banco que dibuja el esquema anterior. La carga por
  gravedad, en la que la masa del lado de salida *es* la precarga, es sencilla
  pero inestable para aisladores grandes con precargas altas; en su lugar, un
  bastidor con un actuador (normalmente hidráulico) aplica la carga, con muelles
  auxiliares que desacoplan la masa de bloqueo del bastidor, que es además lo
  que hace al método indirecto menos vulnerable a la transmisión por flancos a
  través del bastidor. Los elementos que no son apoyos resilientes se cargan
  como exige su servicio: un par estático para un acoplamiento flexible, una
  presión interior representativa para un fuelle o una manguera (6.3.3.2).
- **Fluencia.** Apartado 7.1 de la ISO 10846-2: los elementos con componentes
  de tipo caucho cambian de carga o de deformación por fluencia, así que la
  precarga debe aplicarse al **100 % de la carga estática admisible**, y el
  cambio de carga o de deformación por fluencia debería ser **menor del 10 % al
  día** antes de empezar a medir.
- **Temperatura.** Apartado 7.6.1 de la ISO 10846-2: las mediciones se hacen en
  una o varias condiciones de carga y temperaturas declaradas que cubran el
  rango que se encuentra en la práctica; la temperatura se vigila durante las
  mediciones; y los elementos se exponen al menos **24 h** a esa temperatura,
  dentro de **3 °C**, antes del ensayo.
- **Contacto y configuración.** Otra vez el apartado 7.1: el elemento contacta
  con las bridas en toda su superficie (ayudan la grasa o la cinta de doble
  cara, y las bridas grandes pueden necesitar un aplanado), y todo dispositivo
  que no forme parte del elemento en servicio se retira o se desactiva.

Esas condiciones van en la ficha de la sección 9 junto con el resultado:
`ReportMetadata` las transporta en sus campos `test_room` y `notes`.

### Tres métodos, no dos

El **método directo** (ISO 10846-2) mide la fuerza de salida bloqueada y el
desplazamiento de entrada, $k_{2,1} = F_{2,\mathrm{b}}/u_1$. El **método indirecto**
(ISO 10846-3) carga la salida con una masa de bloqueo compacta $m_2$ y mide la
transmisibilidad de vibración $T = u_2/u_1$; la fuerza de bloqueo es entonces la
fuerza de inercia de la masa (ISO 10846-3, Ec. 1):

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

con $m_\mathrm{f}$ la masa de la brida de salida, que transporta la palabra clave
`flange_mass=` (vale cero por defecto). No es un refinamiento: la ISO 10846-3
mide la vibración del centro de masas del *cuerpo compacto* que forman la masa
de bloqueo junto con la brida de salida del elemento de ensayo, así que $m_\mathrm{f}$
es todo lo que se pese con ella: la brida y cualquier utillaje auxiliar que se
mueva como parte del elemento de ensayo. Dejada en cero, declara una rigidez
baja en un factor $m_2/(m_2 + m_\mathrm{f})$. La aproximación es válida bastante por
encima de la resonancia masa/resorte, donde $T$ es pequeña.

```python

from phonometry import vibration

# Método indirecto: masa de bloqueo de 10 kg, transmisibilidad 0,01 a 500 Hz,
# y la brida de salida de 1,2 kg del elemento de ensayo atornillada encima.
k = vibration.transfer_stiffness_indirect(500.0, 0.01, blocking_mass=10.0,
                                          flange_mass=1.2)
print(f"{abs(complex(k)):.3e}")            # 1.105e+06  N/m
# flange_mass vale 0 por defecto: declara 9.870e+05 N/m, un 12 % por debajo.

# Agrupa una medición en barrido en un resultado con su nivel y factor de pérdidas:
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.levels[-1]), 1))      # 125.1  dB re 1 N/m (alta f)

res.plot()   # el espectro de nivel Lk(f), como en la figura de arriba (requiere matplotlib)
```

El `TransferStiffnessResult` transporta el $k_{2,1}$ complejo y expone `.levels`,
`.loss_factor`, `.magnitude`, `.to("impedance"/"apparent_mass")`,
`.band_average()` (sección 4) y `.plot()`.

El apartado 6.1 de la ISO 10846-1 cuenta **tres** métodos, no dos, «porque son
complementarios en cuanto a sus puntos fuertes y débiles». El tercero es el
**método de punto de excitación**, que mide el desplazamiento de entrada y la
fuerza de entrada, y da por tanto la rigidez en el punto de excitación
$k_{1,1}$ y no $k_{2,1}$. Solo en baja frecuencia, por debajo de la primera
resonancia interna del elemento, donde la rigidez en el punto de excitación y
la de transferencia son **iguales**, puede usarse para determinar la rigidez de
transferencia, que es la razón de que la serie lo recoja siquiera: quien tenga
un banco caro de punto de excitación puede aprovecharlo para la rigidez de
transferencia en baja frecuencia. Esa misma identidad es la razón de que la
ficha de la sección 9 enmarque la *meseta* de baja frecuencia y no un valor a
una frecuencia: por debajo de las resonancias internas solo hay una rigidez que
declarar. La Parte 5 de la serie especifica ese método, y la sección 6 lo
calcula, con la frecuencia hasta la que puede sustituir a la rigidez de
transferencia.

Los métodos se reparten el eje de frecuencia, y los dos límites del método
indirecto tienen nombre. Es válido entre $f_2$ y $f_3$, «típicamente
20 Hz $\le f_2 \le$ 50 Hz y 2 kHz $\le f_3 \le$ 5 kHz» (ISO 10846-3,
apartado 1), y a cada uno lo mueven cosas contrarias:

- **$f_2$** es donde la Desigualdad 2 empieza a cumplirse. Por debajo, las
  resonancias propias del banco (las del elemento, la placa de reparto de
  carga, la masa de bloqueo y los muelles auxiliares en conjunto) rompen la
  desadaptación de impedancias. Queda aproximadamente en **tres veces la
  frecuencia natural más alta** de ese conjunto, y una masa de bloqueo *más
  pesada* lo baja.
- **$f_3$** es donde la masa de bloqueo deja de moverse como cuerpo rígido. Se
  sube haciendo el bloque *compacto* y de un material denso y de alta velocidad
  de onda, para lo que se elige normalmente el acero. Se deduce de la dimensión
  o de la masa del bloque con las propias curvas de la norma, o se halla
  experimentalmente a partir de la masa efectiva (apartado 6.2.3): se apoya el
  bloque solo sobre muelles blandos con una resonancia masa-resorte por debajo
  de 10 Hz, se excita por su centro de masas y se leen dos acelerómetros
  colocados simétricamente dentro del área de contacto con una separación
  $D = \sqrt{S}$; $f_3$ es entonces la frecuencia más baja a la que
  $m_{2,\text{eff}} = 2F_2/(a'_1 + a''_1)$ se aparta de $m_2$ más de 1 dB.

Las dos exigencias tiran en sentidos opuestos, pesado para un $f_2$ bajo y
compacto para un $f_3$ alto, que es la razón de que un rango amplio necesite a
veces más de una masa de bloqueo, y de que un conjunto de datos completo de un
aislador suela ser el empalme de los métodos directo e indirecto. El método
directo cubre la parte baja, desde 1 Hz (el límite inferior del alcance de la
ISO 10846-2; en la práctica el suelo lo fijan el banco y su instrumentación)
hasta donde se cuelan las resonancias propias del banco, típicamente unos pocos
cientos de hercios para elementos grandes.

**Excitación y promediado** (ISO 10846-2, 7.5). La fuente puede ser una
sinusoide por pasos discretos, un barrido sinusoidal, un barrido sinusoidal
periódico o ruido de banda limitada. Debe aplicarse el tiempo suficiente para
que duplicar el tiempo de promediado cambie el resultado como mucho
**0,1 dB**; y para la sinusoide por pasos o el barrido periódico, las
frecuencias de la fuente deben espaciarse de modo que cada banda de tercio de
octava para la que se declare rigidez contenga al menos **cinco** de ellas.

**Las demás direcciones.** Un apoyo bajo una máquina trabaja a cortante además
de a compresión, y su rigidez transversal suele ser la menor de las dos. El
apartado 5.2 de la ISO 10846-2 y el 5.2 de la ISO 10846-3 normalizan
disposiciones aparte para las traslaciones transversales, dibujadas en el panel
inferior de la figura del banco: la dificultad ahí está en suprimir el
movimiento de entrada no deseado, lo que se hace con guiado por rodamientos de
baja fricción en la entrada o con dos elementos nominalmente iguales colocados
simétricamente, con una placa de reparto de fuerza de entrada que hace de masa
de excitación y una fuerza cortante de salida sumada de dos transductores,
$F_2 = F_2' + F_2''$. `transfer_stiffness_direct` y
`transfer_stiffness_indirect` son relaciones escalares entre FRF y por tanto
son indiferentes a la dirección: la biblioteca no impide declarar $k_{2,1}$ por
dirección, y la norma espera que se haga.

## 3. Validez del método indirecto

La ISO 10846-3 (apartado 6) exige que la aproximación $T \ll 1$ sea exacta dentro
de **1 dB** (12 % de la magnitud de la rigidez), lo que acota el rango de
frecuencia utilizable por ambos lados:

* **Desadaptación de impedancias (Desigualdad 2).** Válido solo donde
  $\Delta L_{1,2} = L_{a1} - L_{a2} \ge 20\ \text{dB}$, es decir,
  $|T| \le 0{,}1$ (la constante `TRANSMISSIBILITY_LIMIT`).
  `transfer_stiffness_indirect` calcula el $|T|$
  de cada línea de frecuencia y emite un `TransferStiffnessWarning` cuando
  alguna línea lo supera (habitual cerca o por debajo de la resonancia masa/resorte, como en
  la figura anterior); el resultado que construye marca esas líneas como no
  válidas, y su promedio por bandas las deja fuera.
* **Masa de bloqueo rígida (Desigualdad 3).** Por encima de una frecuencia
  superior $f_3$ la masa de bloqueo deja de moverse como cuerpo rígido; los
  resultados solo son válidos mientras su masa efectiva medida
  $m_{2,\text{eff}} = 2F_2/(a'_1 + a''_1)$ (Ec. 4) se mantenga dentro de 1 dB de
  la masa rígida: $|10\log_{10}(m_{2,\text{eff}}^2/m_2^2)| \le 1\ \text{dB}$.
  `effective_blocking_mass` halla $f_3$ a partir de esa medida (sección 5).
* **Linealidad (apartado 7.6).** Dos espectros de entrada separados 10 dB
  deben dar niveles de rigidez de transferencia dentro de 1,5 dB. El número no
  es arbitrario, y es el único criterio de aquí que va de verdad sobre el
  *material*: el Anexo D de la ISO 10846-1 reúne la física. Las propiedades
  dinámicas dependen de la precarga, de la amplitud de vibración, de la
  frecuencia y de la temperatura; para el caucho cargado, el módulo en fase y
  el ángulo de fase son esencialmente independientes de la amplitud por debajo
  de amplitudes de deformación a cortante del orden de $10^{-3}$ y caen de
  forma apreciable por encima de unos $2 \times 10^{-3}$, tanto más cuanto
  mayor es el contenido de negro de carbono. Así que los elementos que fallan
  son los cauchos muy cargados y todo aquello con una dependencia de la
  amplitud buscada de propósito: un soporte hidráulico depende fuertemente de
  la amplitud *por diseño*, y no puede describirse con un único espectro $L_k$.
  Eso convierte el criterio en algo sobre lo que actuar en lugar de un
  cumple/no cumple: las amplitudes de deformación que ocurren **en servicio** dictan
  las amplitudes de ensayo, y el apartado 7.6 dice qué significa entonces el
  resultado, a saber, que los datos solo pueden declararse válidos para
  amplitudes de entrada iguales o menores que la mayor de las dos ensayadas. La
  cota superior del nivel de entrada validado va en el informe de ensayo.

### Qué tienen que hacer el banco y la instrumentación

Todos los criterios anteriores son propiedades del elemento y del modelo. Los
apartados 6 y 7 de la ISO 10846-2 añaden un conjunto de ensayos previos y de
requisitos de equipo que deciden si hay resultado siquiera. Una de las dos
diferencias de nivel, el ensayo previo de unidireccionalidad, puede juzgarse a
partir de los espectros medidos (`check_unwanted_input`, sección 5); el ensayo
previo de fondo y el resto se dejan al operador.

* **Un ensayo previo de fondo** (7.6.1). Con la fuente apagada, mide
  $L_{F_2}$ y $L_{a_1}$; la salida de la fuente debe ajustarse para que superen
  el fondo en al menos **15 dB** en cada banda de interés.
* **Un ensayo previo de unidireccionalidad** (6.4, Desigualdad 3). La
  aceleración en la dirección de excitación debe superar a las componentes
  perpendiculares no deseadas en al menos **15 dB**, medida en el borde de la masa
  de excitación en el plano de la brida de entrada: el acelerómetro que dibuja
  la figura del banco. Las bandas que no lo cumplen se excluyen del resultado;
  `check_unwanted_input` las juzga. (El apartado 7.6.1 remite esta exclusión
  al «6.1, Inequality (1)», los 20 dB de la salida bloqueada; la condición a
  la que se refiere es la Desigualdad (3) del 6.4, como muestran las partes
  hermanas. Véanse las [erratas](/phonometry/es/reference/errata/).)
* **Transductores** (6.5, 6.6). Los acelerómetros y los transductores de fuerza
  deben tener un nivel de sensibilidad independiente de la frecuencia dentro de
  **0,5 dB**, estar calibrados a la temperatura del laboratorio y tener una
  sensibilidad transversal por debajo del 5 %. Donde se sumen varias señales de
  transductor, la función de sensibilidad resultante debe cumplir ese mismo
  requisito de 0,5 dB.
* **Analizador** (6.8). La resolución espectral debe dar al menos **cinco
  frecuencias distintas** en cada banda de tercio de octava de interés, y la
  diferencia de respuesta en frecuencia entre el canal de aceleración de
  entrada y el de fuerza de salida debe quedar por debajo de 0,5 dB o aplicarse
  como corrección.
* **La coherencia** entre las señales de entrada y de salida es el indicador
  recomendado durante la medida (7.6.2): delata mala relación señal-ruido y no
  linealidad, y se lee exactamente como la lee la
  [lista del Anexo A.1 de la guía de movilidad](/phonometry/es/vibration/structural/mechanical-mobility/).

El Anexo B de la Parte 2 dice cuánto vale cada una de estas cosas. Su balance
de incertidumbre asigna 0,3 dB al procesado de señal y al ruido de fondo,
**0,5 dB** a la instrumentación cuando solo se cumplen los requisitos mínimos
anteriores, **0,5 dB** al banco de ensayo (por el movimiento de salida residual
que acotan las dos desigualdades) y **0,5 dB** a la linealidad. Estos dos
últimos son términos rectangulares sobre un intervalo de 1,5 dB,
$1{,}5/(2\sqrt{3}) = 0{,}433$ dB cada uno, que el anexo redondea hacia arriba a
0,5 dB. Las tres son comparables, que es el argumento para no saltarse
ninguna: ninguna domina, así que ninguna es opcional.

<details>
<summary>Mostrar el código de esta figura</summary>

```python

from phonometry import vibration

# Aislador Kelvin-Voigt k + jwc cargado con una masa de bloqueo de 8 kg.
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)  # avisa donde T no es pequeña

# Una línea: la determinación indirecta empaquetada como resultado dibuja su
# propio espectro de nivel Lk(f):
res = vibration.indirect_transfer_stiffness_result(f, t, blocking_mass=m2)
res.plot(language="es")
plt.show()

# A mano, la rigidez verdadera del elemento frente a la estimación indirecta:
fig, ax = plt.subplots()
ax.semilogx(f, vibration.transfer_stiffness_level(k_true),
            label="$L_k$ real de $k+j\\omega c$")
ax.semilogx(f, vibration.transfer_stiffness_level(k_indirect), "--",
            label="método indirecto $-(2\\pi f)^2 m_2 T$")   # aquí no hay brida
ax.axvline(f0, color="0.6", linestyle=":", label="resonancia $f_0$")
ax.set(xlabel="Frecuencia [Hz]", ylabel="Nivel de rigidez de transferencia $L_k$ [dB re 1 N/m]")
ax.grid(True, which="both", alpha=0.3)
ax.legend()
plt.show()
```

</details>

*El criterio, y el error que compra. El método indirecto es válido desde donde
$|T|$ baja de 0,1, que son 187,5 Hz para este elemento, y no la resonancia
masa/resorte de 56 Hz ni la regla empírica de $3f_0$; y ese límite se elige
porque es el que mantiene el error de rigidez dentro del 1 dB que exige el
apartado, como enseña el segundo eje del panel central. El panel inferior es el
factor de pérdidas: para un elemento de Kelvin-Voigt $\eta = \omega c/k$ sube
proporcionalmente a la frecuencia, que es la principal carencia del modelo como
descripción del caucho real, cuyo factor de pérdidas es mucho más plano. La
definición vale solo en el rango de baja frecuencia donde las fuerzas de
inercia dentro del elemento son despreciables.*

La propia idealización de la fuerza de bloqueo la cuantifica la ISO 10846-1,
Ec. (6): para un aislador con rigidez en el punto de excitación de salida
$k_{2,2}$ sobre una terminación de rigidez $k_\mathrm{t}$, la fuerza entregada es
$F_2/F_{2,\mathrm{b}} = 1/(1 + k_{2,2}/k_\mathrm{t})$, dentro del 10 % de la fuerza de bloqueo para
$|k_{2,2}| < 0{,}1\,|k_\mathrm{t}|$ (Ec. 7):

```python

from phonometry import vibration

# |T| = 0,5 viola la Desigualdad (2): el resultado indirecto queda avisado.
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__)                     # TransferStiffnessWarning

# Aproximación de la fuerza de bloqueo en el límite del 10 % (ISO 10846-1, Ec. 6):
print(round(abs(complex(vibration.blocking_force_ratio(1e5, 1e6))), 4))   # 0.9091
```

## 4. Un valor por banda de tercio de octava

Una medida en barrido o por pasos da $k_{2,1}$ en cientos de líneas, y todas
las partes de la serie lo declaran como un valor por banda de tercio de octava:
la media del módulo al cuadrado sobre las $n$ líneas que contiene la banda
(ISO 10846-2 Fórmula (6), -3 Fórmula (7), -4 Fórmula (11), -5 Fórmula (6)),

$$
k_\mathrm{av} = \left\{ \frac{1}{n} \sum_{i=1}^{n} \lvert k_{2,1}(f_i) \rvert^2 \right\}^{1/2},
\qquad L_{k,\mathrm{av}} = 10 \lg \frac{k_\mathrm{av}^2}{k_0^2},
$$

«donde la suma se extiende a un mínimo de $n = 5$ frecuencias». Promediar el
cuadrado y no el nivel da peso a los máximos, que las partes llaman
«normalmente los más importantes», y la fase se pierde. Las cinco líneas son
además un requisito de la medida: el analizador debe resolver al menos cinco
frecuencias distintas por banda, y una sinusoide por pasos o un barrido debe
poner cinco en cada banda de la que se declare un valor. Por eso
`band_averaged_stiffness` deja sin valor (NaN) una banda de una a cuatro líneas
y emite un `TransferStiffnessWarning`, en lugar de promediar demasiado pocas.
Asigna cada línea a la banda de base diez que la contiene, nombra las bandas
por sus centros de la ISO 266 y deja fuera antes las líneas que no cumplieron
una condición de adecuación, porque todas las partes las excluyen de la
evaluación: el resultado indirecto marca las líneas con $|T| > 0{,}1$, de modo
que su `.band_average()` promedia solo la parte válida del barrido.

```python

from phonometry import vibration

# Método directo, un soporte Kelvin-Voigt k + jwc, líneas cada 2 Hz:
f = np.arange(90.0, 1120.0, 2.0)
k21 = 1.0e6 + 1j * 2.0 * np.pi * f * 80.0
direct = vibration.TransferStiffnessResult(
    frequencies=f, transfer_stiffness=vibration.transfer_stiffness_direct(k21 * 1e-6, 1e-6)
)
bands = direct.band_average()
print(bands.nominal_frequencies[[0, -1]], bands.line_counts[[0, -1]])  # [ 100. 1000.] [ 12 114]
print(round(float(bands.levels[-1]), 2))                               # 120.99  dB re 1 N/m

# Método indirecto con una masa de bloqueo de 8 kg: |T| baja a 0,1 a 187,5 Hz,
# así que las líneas hasta 186 Hz no cumplen la Desigualdad (2) y nunca llegan a
# la media; la banda de 200 Hz promedia sus 18 líneas desde 188 Hz.
t = vibration.base_transmissibility(f, mass=8.0, stiffness=1.0e6, damping=120.0)
with warnings.catch_warnings():
    warnings.simplefilter("ignore", vibration.TransferStiffnessWarning)
    indirect = vibration.indirect_transfer_stiffness_result(f, t, blocking_mass=8.0)
bands = indirect.band_average()
print(bands.nominal_frequencies[0], bands.line_counts[0])  # 200.0 18
bands.plot(language="es")   # los niveles por banda, con las bandas sin valor marcadas
```

## 5. Comprobar el banco a partir de los espectros medidos

Tres de las condiciones de adecuación de la serie son diferencias de nivel o
una masa, y pueden juzgarse con lo que el banco midió. Cada comprobación
devuelve la condición frecuencia a frecuencia con un `.passes` global, se
dibuja con `.plot()` y avisa (`TransferStiffnessWarning`) donde la condición
no se cumple.

* **La salida está bloqueada**, $\Delta L_{1,2} = L_{a1} - L_{a2} \ge 20$ dB
  (ISO 10846-5 Desigualdad (1); Desigualdad (1) de la Parte 2, (2) de las
  Partes 3 y 4): `check_blocked_output`. Una diferencia menor indica una
  desadaptación de rigidez insuficiente entre el elemento y la base, o
  transmisión por flancos.
* **La entrada se mueve en una sola dirección**, la de excitación al menos
  15 dB por encima de cada una de las perpendiculares (Parte 5 Desigualdad (2);
  (3) de la Parte 2, (5) de la Parte 3, (7) de la Parte 4):
  `check_unwanted_input`, que toma una fila de niveles por dirección no
  deseada y deja decidir a la más fuerte.
* **La masa delante de los transductores de fuerza de salida es lo bastante
  ligera** para el método directo (ISO 10846-4 Desigualdad (3), ISO 10846-2
  Desigualdad (2)): la brida de salida, la placa de reparto de fuerza y la
  mitad de los transductores, $m_0$, llevan una fuerza de inercia $m_0 a_2$ que
  los transductores leen como parte de la fuerza de bloqueo, y no debe superar
  el 6 % de la fuerza,

  $$
  m_0 \le 0{,}06 \times \frac{10^{L_{F2}/20}}{10^{L_{a2}/20}}\ \text{kg},
  $$

  con $L_{F2}$ re 1 µN y $L_{a2}$ re 1 µm/s², de modo que la cota es
  $0{,}06\,|F_2|/|a_2|$. En la cota los niveles de fuerza difieren en
  $20 \lg 1{,}06 = 0{,}51$ dB cuando la fuerza de inercia está en fase con la
  medida y en $-20 \lg 0{,}94 = 0{,}54$ dB cuando se le opone: los 0,5 dB de la
  NOTA 1 (que la ISO 10846-4 imprime como «05 dB»; véanse las
  [erratas](/phonometry/es/reference/errata/)). `check_output_mass` devuelve el
  límite y ese sesgo en el peor caso, `bias_bound_db`.

En el método indirecto la pregunta es hasta dónde sigue siendo rígida la masa
de bloqueo. La Fórmula (6) de la ISO 10846-4 (Fórmula (4) de la ISO 10846-3)
mide su masa efectiva con el bloque sobre resortes blandos, excitado por una
fuerza $F_2$ a través de su centro de masas y leído por dos acelerómetros a
$\sqrt{S}$ de distancia dentro del área de contacto,
$m_{2,\mathrm{eff}} = |2F_2/(a'_1 + a''_1)|$; el límite superior $f_3$ es la
frecuencia más baja a la que se aparta de $m_2$ en más de 1 dB (12 %),
Desigualdad (5), ignorando por debajo de 40 Hz el apartamiento debido al
comportamiento masa-resorte del bloque sobre sus apoyos.
`effective_blocking_mass` interpola el cruce entre la última línea dentro de
1 dB y la primera fuera.

```python

from phonometry import vibration

f = [63.0, 125.0, 250.0]
check = vibration.check_blocked_output(f, [110.0, 110.0, 110.0], [85.0, 88.0, 86.0])
print(check.holds, check.passes)                        # [ True  True  True] True

# m0 = 0,4 kg (brida de salida, placa de reparto de fuerza y la mitad de los
# transductores) bajo una fuerza de salida de 1 N (120 dB re 1 µN) y una
# aceleración de salida de 0,1 m/s² (100 dB re 1 µm/s²):
mass = vibration.check_output_mass([125.0], 0.4, [120.0], [100.0])
print(mass.mass_limit_kg, mass.passes, mass.bias_bound_db.round(3))   # [0.6] True [0.355]

# Un bloque de 20 kg cuya masa efectiva crece como (f/3 kHz)^2 sobre la rígida:
fe = np.geomspace(20.0, 5000.0, 400)
m_eff = 20.0 * (1.0 + (fe / 3000.0) ** 2)
ones = np.ones(fe.size, dtype=complex)
block = vibration.effective_blocking_mass(fe, m_eff * ones, ones, ones, blocking_mass_kg=20.0)
print(round(block.upper_frequency_limit_hz, 1))         # 1047.9  Hz
```

## 6. El método de punto de excitación (ISO 10846-5)

Con la salida del elemento bloqueada, la fuerza y la aceleración de entrada dan
la **rigidez en el punto de excitación** (Fórmula (3)),

$$
k_{1,1}(f) = \frac{F_1}{u_1} = -(2\pi f)^2 \frac{F_1}{a_1},
$$

que solo coincide con la rigidez de transferencia a baja frecuencia. Dos cosas
la separan: la masa entre el elemento y los transductores de fuerza de entrada,
cuya inercia leen los transductores junto con el elemento, y las resonancias
internas del propio elemento. El apartado 6.2 fija dónde acaba la
aproximación. El valor de baja frecuencia es «la media de 1 Hz a 20 Hz», y la
**frecuencia límite superior** $f_\mathrm{UL}$ es «la frecuencia más baja a la
que el nivel de rigidez en el punto de excitación se hace 2 dB menor que la
rigidez de baja frecuencia». Hasta ella las medias por banda de $k_{1,1}$
sustituyen a las de $k_{2,1}$ dentro de 2 dB (Fórmula (7),
$k_\mathrm{av} = k_{\mathrm{av}(2,1)} \approx k_{\mathrm{av}(1,1)}$), y por
encima el método no dice nada. $f_\mathrm{UL}$ suele estar entre 50 Hz y
200 Hz, así que es un método de baja frecuencia, pensado para quien tiene un
banco de punto de excitación.

`driving_point_stiffness` calcula $k_{1,1}$, toma el valor de baja frecuencia
como la media de la Fórmula (6) de las líneas de 1 Hz a 20 Hz (para la rigidez
plana que el apartado presupone, lo mismo que la media de los niveles) e
interpola el cruce del umbral de 2 dB. Si recibe la aceleración de salida o las
aceleraciones de entrada no deseadas, comprueba las Desigualdades (1) y (2)
línea a línea y deja fuera de todo las líneas que no las cumplen, como pide el
7.6.1. Su `.band_average()` promedia solo las líneas válidas, las que quedan en
$f_\mathrm{UL}$ o por debajo (el 8.3 enuncia los 2 dB «si
$f \le f_\mathrm{UL}$»). Para esas bandas, los 2 dB de la Fórmula (7) son una
afirmación de la propia norma, que el Anexo B vuelve a suponer para su
balance (B.3.5): el criterio del 6.2 solo vigila que $k_{1,1}$ caiga por
debajo de su propio valor de baja frecuencia, así que nada en la media prueba
la cota línea a línea. Por debajo de 20 Hz el 7.5 pide un paso de 0,2 Hz entre
líneas en lugar de cinco líneas por banda, lo que deja las bandas más bajas por
debajo de cinco; esas bandas quedan sin valor, sin aviso, y la nota del
apartado 9 m) acepta ahí datos en banda estrecha.

<details>
<summary>Mostrar el código de esta figura</summary>

```python

from phonometry import vibration

# Un elemento de 1 MN/m con un factor de pérdidas del 5 %, excitado a través de
# una placa de reparto de fuerza de 2 kg: los transductores de fuerza de entrada
# leen la inercia de la placa con el elemento.
f = np.arange(1.0, 200.0, 0.2)          # las líneas de 0,2 Hz del 7.5
w = 2.0 * np.pi * f
k21 = 1.0e6 * (1.0 + 0.05j)
res = vibration.driving_point_stiffness(f, (k21 - w**2 * 2.0) * 1e-6, -(w**2) * 1e-6)
print(round(res.upper_limiting_frequency_hz, 1))    # 52.2  Hz

# Una línea cada una: el nivel con el umbral de 2 dB y f_UL, y las bandas.
res.plot(language="es")
res.band_average().plot(language="es")
plt.show()

# A mano, los dos paneles de arriba: k1,1 frente a k2,1, y su diferencia.
bands = res.band_average()
centres = bands.center_frequencies[bands.determined]
band_levels = bands.levels[bands.determined]
l21 = 20.0 * np.log10(abs(k21))
f_ul = res.upper_limiting_frequency_hz
fig, (top, bottom) = plt.subplots(2, 1, sharex=True, figsize=(10, 8.8))
for panel in (top, bottom):
    panel.axvspan(f_ul, f[-1], color="0.9")            # por encima de f_UL: sin evaluar
    panel.axvline(f_ul, color="C1")
    panel.grid(True, which="both", alpha=0.3)
top.semilogx(f, res.levels, label="rigidez en el punto de excitación $L_{k_{1,1}}$")
top.axhline(l21, color="C2", linestyle="--", label="rigidez de transferencia $L_{k_{2,1}}$")
top.axhline(res.threshold_level_db, color="k", linestyle=":",
            label="2 dB por debajo del valor de 1 Hz a 20 Hz")
top.plot(centres, band_levels, "o", color="C1",
         label="media en banda $L_{k,\\mathrm{av}}$, Fórmula (6)")
top.set(ylabel="$L_k$ [dB re 1 N/m]", ylim=(l21 - 7.0, l21 + 2.5))
top.legend(loc="lower left")
bottom.axhspan(-2.0, 2.0, color="C2", alpha=0.15, label="$\\pm$2 dB de la Fórmula (7)")
bottom.semilogx(f, res.levels - l21,
                label="$L_{k_{1,1}} - L_{k_{2,1}}$, banda estrecha")
bottom.plot(centres, band_levels - l21, "o", color="C1",
            label="medias por banda por debajo de $f_\\mathrm{UL}$")
bottom.set(xlabel="Frecuencia [Hz]", ylabel="Diferencia [dB]",
           xlim=(f[0], f[-1]), ylim=(-7.0, 3.0))
bottom.legend(loc="lower left")
plt.show()
```

</details>

*Dónde se detiene el método. La placa de reparto de fuerza entre los
transductores de fuerza de entrada y el elemento es de 2 kg, $m_\mathrm{p}$,
así que la rigidez medida es $k_{2,1} - \omega^2 m_\mathrm{p}$ y se aparta de
la rigidez de transferencia según sube la frecuencia; a 52,2 Hz está 2 dB por debajo de su valor de 1 Hz a
20 Hz, y nada por encima se evalúa. Todas las medias por banda por debajo
quedan dentro de los ±2 dB de la Fórmula (7); la última, a 50 Hz, promedia solo
las 37 líneas por debajo de $f_\mathrm{UL}$ y queda 1,8 dB por debajo.*

**El balance de incertidumbre** (Anexo B) escribe el nivel por banda como
el medido más cinco correcciones de estimación nula, todas con coeficiente de
sensibilidad 1 (Fórmula (B.1)), las combina por raíz de la suma de cuadrados
(B.2) y toma $U = 2u$ para una cobertura del 95 % (B.3).
`driving_point_uncertainty` lo construye sobre
`metrology.combine_uncertainty`: el procesado de señal 0,3 dB y la
instrumentación 0,5 dB (normales), la repetibilidad de instalación
$p/\sqrt{3}$ para una dispersión $2p$ entre instalaciones repetidas, y tres
términos rectangulares, el banco de ensayo $1/(2\sqrt{3}) = 0{,}289$ dB, la
discrepancia del punto de excitación $2/\sqrt{3} = 1{,}155$ dB por sus
$\pm 2$ dB, y la linealidad $1{,}5/(2\sqrt{3}) = 0{,}433$ dB. Esos tres son las
expresiones que imprime el anexo. La Tabla B.1 los lleva redondeados hacia
arriba a una décima, 0,3, 1,2 y 0,5 dB, el redondeo conservador que admite
una incertidumbre (ISO/IEC Guide 98-3, 7.2.6), que deja $u$ en 1,456 dB en
lugar de 1,394 dB sin dispersión de repetibilidad. La biblioteca conserva las
expresiones, y cualquier término puede pasarse como argumento para reproducir
la tabla o para declarar una estimación razonada. Domina el término de discrepancia: es el precio de medir
$k_{1,1}$ en lugar de $k_{2,1}$.

```python
from phonometry import vibration

budget = vibration.driving_point_uncertainty(119.3, repeatability_range_db=0.6)
print(round(budget.combined_uncertainty_db, 3))    # 1.405  dB
print(round(budget.expanded_uncertainty_db, 2))    # 2.81  dB (U = 2u)
budget.plot(language="es")   # una barra por magnitud de entrada, con u y U
```

## 7. Leer $L_k$, y para qué sirve

Un nivel en dB re 1 N/m necesita una escala antes de significar nada. Cada
década de rigidez son 20 dB, así que el rango de trabajo abarca más o menos
esto:

| Elemento | $|k_{2,1}|$ | $L_k$ |
|---|---|---|
| un soporte de caucho blando o un muelle helicoidal de acero | $10^5$ N/m | 100 dB |
| un soporte de máquina de uso general | $10^6$ N/m | 120 dB |
| una placa encolada rígida o un elastómero duro | $10^7$ N/m | 140 dB |
| una conexión rígida (para comparar) | $10^8$ N/m en adelante | 160 dB en adelante |

Cuanto más bajo, mejor, y la forma importa más que el valor: en la figura
anterior el nivel **sube** con la frecuencia, que es el aislador volviéndose
más rígido, y por tanto menos eficaz, justo en el rango donde importa el ruido
estructural. Esa subida es lo más útil que un espectro $L_k(f)$ le dice a un
ingeniero sobre un soporte, y es lo que no puede decir una hoja de
características que declare una sola rigidez estática.

Por sí solo, $k_{2,1}$ sigue sin predecir nada, porque la fuerza bloqueada es
solo lo que el elemento entrega a un receptor mucho más rígido que él mismo.
`blocking_force_ratio` pone precio a esa hipótesis frente a una terminación
real:

```python
# El mismo soporte de 1 MN/m bajo un forjado de hormigón y bajo uno ligero de madera.
for k_t in (3e9, 2e6, 5e5):
    ratio = abs(complex(vibration.blocking_force_ratio(1e6, k_t)))
    print(f"{k_t:.0e}", round(ratio, 3))     # 1.0 / 0.667 / 0.333
```

Sobre el forjado de hormigón ($k_\mathrm{t} = 3$ GN/m) la fuerza entregada *es* la
fuerza bloqueada, la Ecuación (7) se cumple con tres órdenes de magnitud de
margen y el número de la hoja de características es directamente utilizable.
Sobre un forjado ligero de 2 MN/m no: solo llegan dos tercios de la fuerza
bloqueada (−3,5 dB), la Ecuación (7) no se cumple y la caracterización del
soporte deja de predecir lo que hace la instalación. Eso no es un fallo del
aislador (un receptor más móvil se lleva *menos* fuerza, así que la instalación
real es más silenciosa que la estimación por fuerza bloqueada), sino un fallo de
la *descripción con un solo número*, y la salida es una predicción que lleve las
dos movilidades:
[ruido estructural instalado (EN 12354-5)](/phonometry/es/buildings/design/installed-structure-borne/),
alimentada por una fuente caracterizada según
[EN 15657](/phonometry/es/buildings/design/structure-borne-power/). La regla que
hay detrás de las dos es la regla de las movilidades de fuente y receptor de la
[guía de movilidad](/phonometry/es/vibration/structural/mechanical-mobility/#por-que-la-potencia-la-deciden-dos-movilidades).

## 8. Relación con la familia de FRF

La rigidez dinámica es un miembro de la familia de funciones de respuesta en
frecuencia (ISO 10846-1, Anexo A / Tabla A.2): es la recíproca de la receptancia
y se relaciona con la impedancia mecánica $Z$ y la masa efectiva $m_\text{eff}$
por $k = j\omega Z = -\omega^2 m_\text{eff}$. Estas conversiones son el mismo
pivote `convert_frf` de la
[movilidad mecánica](/phonometry/es/vibration/structural/mechanical-mobility/):

```python
from phonometry import vibration

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

## 9. Ficha de informe

`TransferStiffnessResult.report(path)` genera un informe de una página con la
caracterización de la rigidez dinámica de transferencia de un elemento resiliente
(definición de la ISO 10846-1:2008; determinada por el método directo,
ISO 10846-2:2008, o el método indirecto de masa de bloqueo, ISO 10846-3:2002).
La ficha muestra el espectro de nivel $L_k(f)$ junto a una tabla compacta de
puntos característicos (el método de determinación, la masa de bloqueo del
método indirecto, el rango de frecuencias y la meseta de rigidez a baja
frecuencia $|k_{2,1}|$, su nivel $L_k$ y el factor de pérdidas allí), después
los niveles en bandas de tercio de octava $L_{k,\mathrm{av}}$ de la sección 4,
que el informe de ensayo de las dos partes presenta (ISO 10846-2 9 m),
ISO 10846-3 10 j)), y un $L_k$ a baja frecuencia enmarcado (la meseta que
caracteriza el elemento por debajo de sus resonancias internas). Los puntos
característicos se leen en la línea *válida* más baja y el espectro dibuja
aparte las líneas excluidas, así que un resultado indirecto nunca informa de la
zona de la resonancia que la Desigualdad (2) descarta; una banda de menos de
cinco líneas válidas imprime su número de líneas en lugar de un nivel. Es una
caracterización, así que no hay veredicto de cumple/no cumple;
`language="es"` genera la ficha en español. La ficha siempre incrusta el
espectro $L_k(f)$, por lo que necesita los extras de informe y de gráficos
(`pip install "phonometry[report,plot]"`).

```python

from phonometry import ReportMetadata, vibration

# Diez líneas en cada banda de tercio de octava de 20 Hz a 2 kHz:
freqs = 1000.0 * 10.0 ** ((np.arange(-175, 35) + 0.5) / 100.0)
k21 = 1e6 + 1j * (2 * np.pi * freqs) * 80.0     # elemento Kelvin-Voigt k + jwc
u1 = 1e-6 + 0j
k = vibration.transfer_stiffness_direct(k21 * u1, u1)     # método directo: k2,1 = F2,b/u1
res = vibration.TransferStiffnessResult(frequencies=freqs, transfer_stiffness=k)
res.report(
    "rigidez_transferencia.pdf",
    metadata=ReportMetadata(
        specimen="Aislador de vibraciones de caucho",
        measurement_standard="ISO 10846-2",
    ),
    language="es",
)   # ficha de una página (necesita phonometry[report,plot])
```

## Qué cubre esta guía

La definición $k_{2,1} = F_{2,\mathrm{b}}/u_1$ de la ISO 10846-1:2008, el nivel (ISO
10846-2 y -3, 3.17) y el factor de pérdidas (ISO 10846-1, 3.8)
(`transfer_stiffness_level`, `loss_factor`), el método directo de la ISO
10846-2:2008 (`transfer_stiffness_direct`) y el método indirecto de la ISO
10846-3:2002 de la Fórmula 1 (`transfer_stiffness_indirect`, incluido su
término `flange_mass=`). También están implementadas la aproximación de la
fuerza de bloqueo de las Ecuaciones 6-7 (`blocking_force_ratio`) y las
relaciones FRF del Anexo A / Tabla A.2 (`convert_frf`).
`TransferStiffnessResult` agrupa una determinación en barrido, y `.report()`
genera la ficha de caracterización con sus niveles en bandas de tercio de
octava.

La media en bandas de tercio de octava de todas las partes, ISO 10846-2
Fórmula (6), -3 Fórmula (7), -4:2003 Fórmula (11) y -5:2008 Fórmula (6), sin
valor para una banda de menos de cinco líneas (`band_averaged_stiffness`,
`TransferStiffnessResult.band_average`). Las condiciones de adecuación que las
ISO 10846-4:2003 y -5:2008 enuncian como desigualdades: los 20 dB de la salida
bloqueada y los 15 dB de las direcciones de entrada no deseadas
(`check_blocked_output`, `check_unwanted_input`) y el límite de la masa de
salida de la Desigualdad (3) de la ISO 10846-4 (`check_output_mass`), y la masa
de bloqueo efectiva de la Fórmula (6) de la ISO 10846-4 con su $f_3$
(`effective_blocking_mass`). La rigidez en el punto de excitación de la
Fórmula (3) de la ISO 10846-5:2008, su frecuencia límite superior (6.2) y las
medias por banda de la Fórmula (7) (`driving_point_stiffness`), y el
balance de incertidumbre del Anexo B (`driving_point_uncertainty`).
Ninguna de las dos partes trae un ejemplo resuelto, así que la conformidad se
ancla en formas cerradas.

Los montajes de ensayo de la ISO 10846-4 para acoplamientos, fuelles,
mangueras, soportes de tuberías y cables los describe la norma, no se modelan:
las mismas funciones les sirven una vez medidas las fuerzas y las
aceleraciones. Los nomogramas de $f_3$ de la Figura 11 para cubos y cilindros
de acero no están tabulados; $f_3$ se halla a partir de una masa efectiva
medida. El ensayo de linealidad (dos espectros de entrada separados 10 dB
dentro de 1,5 dB, apartado 7.7 de las ISO 10846-2, -4 y -5 y apartado 7.6 de la
ISO 10846-3) no se comprueba en el código, ni tampoco el acondicionamiento de
precarga, fluencia y temperatura, el ensayo previo de fondo, la planitud de
0,5 dB de los transductores y el emparejamiento entre canales, ni el paso de
0,2 Hz entre líneas que la ISO 10846-5 pide por debajo de 20 Hz: la página los
describe y los deja al operador. Los soportes hidráulicos quedan del
todo fuera de la descripción con un solo espectro: su rigidez depende de la
amplitud por diseño, así que un único $L_k(f)$ no los caracteriza.

## Véase también

- [Movilidad mecánica y la familia de FRF (ISO 7626-1)](/phonometry/es/vibration/structural/mechanical-mobility/):
  la regla de las movilidades de fuente y receptor que dice cuándo una fuerza
  bloqueada es la descripción correcta, y el vocabulario de FRF al que
  pertenecen las conversiones de esta página.
- [Potencia acústica estructural de equipos (EN 15657)](/phonometry/es/buildings/design/structure-borne-power/):
  la caracterización de fuente que queda al otro lado del aislador.
- [Ruido estructural instalado (EN 12354-5)](/phonometry/es/buildings/design/installed-structure-borne/):
  la predicción que consume $k_{2,1}$ junto con las dos movilidades y lo
  convierte en un nivel en un recinto receptor.
- Referencia de la API: [`vibration.structural.transfer_stiffness`](/phonometry/es/reference/api/vibration/transfer-stiffness/) y [`vibration.structural.mechanical_mobility`](/phonometry/es/reference/api/vibration/mechanical-mobility/).
- Teoría: [Movilidades puntuales y eficiencia de radiación](/phonometry/es/reference/theory/vibration/#movilidades-puntuales-y-eficiencia-de-radiación-cremer-5-hopkins-29): las definiciones de movilidad e impedancia de las que la rigidez de transferencia es la inversa.
