<!-- canonical: https://jmrplens.github.io/phonometry/es/buildings/insulation/flanking-lab/ -->
Source: https://jmrplens.github.io/phonometry/es/buildings/insulation/flanking-lab/

EN 12354 predice un edificio a partir de sus uniones, e ISO 10848 es la trayectoria
por la que una unión consigue su número. Dos elementos unidos rígidamente a lo
largo de un borde común se montan en un banco de laboratorio cuyos recintos
están aislados estructuralmente entre sí y de la estructura circundante, de modo
que la unión ensayada es la única trayectoria entre ellos; excitadores y máquinas de
impactos accionan uno de los elementos, y las diferencias
de nivel de velocidad a través de la unión se condensan en el **índice de
reducción vibratoria** $K_{ij}$, junto con los descriptores globales de
flanco $D_\mathrm{n,f}$ (aéreo) y $L_\mathrm{n,f}$ (impacto). Esta guía cubre esa cadena
de medición: la diferencia de niveles de velocidad promediada direccionalmente,
las longitudes de absorción equivalentes, las comprobaciones de validez SEA
de la parte 4 y las tres fichas con formato de informe acreditado. Los valores
empíricos de unión
a los que recurre una predicción cuando no hay medición viven en
[Predicción del aislamiento acústico (EN 12354)](/phonometry/es/buildings/design/insulation-prediction/);
el $K_{ij}$ de teoría ondulatoria de uniones ideales de placas se deriva en
[Transmisión de onda de flexión en uniones de
placas](/phonometry/es/vibration/structural/junction-transmission/).

## El índice de reducción vibratoria y los descriptores de flanco

ISO 10848:2006/2010 es el método de laboratorio que **mide** el **índice de
reducción vibratoria** de unión $K_{ij}$ que la [predicción EN
12354](/phonometry/es/buildings/design/insulation-prediction/)
toma como entrada, junto con los descriptores globales de flanco $D_\mathrm{n,f}$
(aéreo) y $L_\mathrm{n,f}$ (impacto). Es la contraparte de medición de la función
empírica `junction_vibration_reduction()` de esa predicción.

**Índice de reducción vibratoria (Fórmula (13)).**
$K_{ij} = \overline{D}_{v,ij} + 10\log_{10}\!\big(l_{ij} / \sqrt{a_i a_j}\big)$ dB, a
partir de la diferencia de nivel de velocidad promediada direccionalmente
$\overline{D}_{v,ij} = \tfrac{1}{2}(D_{v,ij} + D_{v,ji})$ (Fórmula (11), que hace
$K_{ij}$ simétrico), la longitud de unión de arista común $l_{ij}$ y las
**longitudes de absorción equivalentes**
$a_j = 2{,}2\pi^2 S_j /(T_{\mathrm{s},j} c_0)\sqrt{f_\mathrm{ref}/f}$ (Fórmula (12),
$f_\mathrm{ref} = 1000$ Hz). Para elementos ligeros y bien amortiguados
$a_j = S_j / l_0$ ($l_0 = 1$ m) y la Fórmula (13) se reduce a la Fórmula (14)
simplificada, que no necesita ningún $T_\mathrm{s}$.

Cada símbolo de la Fórmula (13) es una longitud o un área de ese dibujo. La
línea de esquina resaltada es $l_{ij}$, la arista común de los dos elementos;
$S_i$ y $S_j$ son las áreas de las dos placas, que entran a través de sus
longitudes de absorción equivalentes $a_i$ y $a_j$; y $\overline{D}_{v,ij}$ es
lo que lee la pareja de acelerómetros, una vez con el elemento $i$ excitado y
otra con el elemento $j$ excitado. El término
$10\log_{10}(l_{ij}/\sqrt{a_i a_j})$ es lo que convierte el índice en una
propiedad de la *unión* y no de las dos placas concretas que se montaron en el
banco, que es toda la razón por la que EN 12354 puede consumirlo.

### El tiempo de reverberación estructural, y de dónde sale

$T_{\mathrm{s},j}$ es la segunda entrada más influyente de esta página y la que más a
menudo se da por supuesta. **No** es el tiempo de reverberación del recinto: es
la caída de la energía de *ondas de flexión* sobre el propio elemento, medida
con acelerómetros, y es lo que lleva el factor de pérdidas total del elemento a
la longitud de absorción, $\eta_\text{total} = 2{,}2/(f T_\mathrm{s})$
(ISO 10848-1:2017, Fórmula (19)). Como $a_j \propto 1/T_{\mathrm{s},j}$ y $K_{ij}$ lleva
$-10\log_{10}\sqrt{a_i a_j}$, un $T_\mathrm{s}$ equivocado en un factor de dos desplaza
$K_{ij}$ 1,5 dB por cada elemento, y lo desplaza en la dirección que hace
parecer la unión mejor de lo que es cuando $T_\mathrm{s}$ se sobrestima.

Mídelo como prescribe el apartado 7.3 de ISO 10848-1:2017: excitación puntual
con un excitador electrodinámico y una señal MLS o de barrido sinusoidal (el
método de laboratorio preferente, según ISO 18233) o con un martillo de
impacto, la respuesta al impulso integrada de ISO 3382-2 con integración hacia
atrás, aceleración en vez de velocidad para que ninguna integración emborrone
la caída, al menos tres posiciones de excitación y tres posiciones de medición
por excitación, y las separaciones mínimas del apartado 7.3.3 (0,5 m a los
bordes del elemento, 1 m entre las posiciones de excitación y las de medición,
0,5 m entre posiciones de medición). Evalúa entre 5 dB y 15 dB sobre una caída
que arranque al menos 35 dB por encima del ruido de fondo (apartado 7.3.4); los
elementos pesados acoplados a otros elementos pesados dan una caída recta corta
seguida de una curva a medida que vuelve energía del resto de la estructura,
así que el intervalo de evaluación corto no es una comodidad sino una exigencia
de la física. El apartado 7.3.5 fija el suelo por debajo del cual un análisis
directo deja de ser fiable: $T_\mathrm{s} > 70/f$ y $T_\mathrm{s} > 2T_\text{det}$, con
$T_\text{det}$ el tiempo de reverberación del detector promediador.

Espera unas décimas de segundo en una placa pesada de hormigón montada en un
edificio, decreciendo con la frecuencia, y bastante menos en un elemento ligero
bien amortiguado, que es la razón por la que la vía ligera de la Fórmula (14)
prescinde por completo de $T_\mathrm{s}$. La identidad del factor de pérdidas es la
comprobación de sensatez de un valor medido: a 500 Hz un $T_\mathrm{s}$ de 0,35 s da
$\eta = 2{,}2/(500 \times 0{,}35) = 0{,}013$, un factor de pérdidas total
verosímil para una placa pesada in situ, mientras que un $\eta$ que salga por
encima de 0,1 o por debajo de 0,005 dice que la caída se leyó mal, no que la
placa sea rara.

**Descriptores globales.** $D_\mathrm{n,f} = L_1 - L_2 - 10\log_{10}(A/A_0)$ (Fórmula (4),
aéreo) y $L_\mathrm{n,f} = L_2 + 10\log_{10}(A/A_0)$ (Fórmula (5), máquina de impactos),
$A_0 = 10\ \text{m}^2$; sus números únicos $D_\mathrm{n,f,w}$ / $L_\mathrm{n,f,w}$ reutilizan
los motores de ISO 717. El número único $\overline{K}_{ij}$ es la media
aritmética entre 200 y 1250 Hz en tercios de octava, o entre 125 y 1000 Hz en
bandas de octava (Anexo A).

*$K_{ij}$ sube de forma sostenida con la frecuencia en una unión rígida de
paredes pesadas, así que ninguna banda por sí sola lo representa. La línea
discontinua es la media aritmética entre 200 y 1250 Hz, el intervalo que
prescribe el Anexo A, y es esa media, no la curva, lo que consume una
predicción EN 12354.*

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

```python

from phonometry import building

freqs = [100, 125, 160, 200, 250, 315, 400, 500, 630,
         800, 1000, 1250, 1600, 2000, 2500, 3150, 4000, 5000]
# Diferencia de nivel de velocidad promediada direccionalmente en una unión en T (dB):
dv = np.array([4.5, 4.8, 5.2, 5.6, 6.0, 6.5, 7.0, 7.6, 8.1, 8.7,
               9.2, 9.8, 10.3, 10.9, 11.4, 11.9, 12.3, 12.7])
res = building.vibration_reduction_index(
    dv, junction_length=4.0, area_i=12.0, area_j=10.0, frequency=freqs,
    structural_reverberation_time_i=0.35, structural_reverberation_time_j=0.40,
)
print(res.single_number)   # Kij medio entre 200 y 1250 Hz (Anexo A)
res.plot(language="es")
plt.show()
```

</details>

**Validez.** $K_{ij}$ se apoya en una simplificación de análisis estadístico de
energía: `strong_coupling_satisfied()` comprueba la desigualdad de la
Fórmula (15) y, para las uniones pesadas de la Parte 4, `modal_density()`,
`band_mode_count()` y `modal_overlap_factor()` (Fórmulas (5)/(4)/(6)) cuantifican
dónde el número de modos es demasiado bajo para que $K_{ij}$ sea fiable. Pasa el
factor de solapamiento modal por banda a
`vibration_reduction_index(..., modal_overlap=M)`: las bandas con $M < 0{,}25$ se
marcan en `result.bracketed` y quedan excluidas del número único
$\overline{K}_{ij}$, como exige el apartado 9 de la parte 4.
Como ISO 10848 no contiene ningún ejemplo numérico resuelto, la conformidad se
ancla en identidades de forma cerrada ($K_{ij}$ simplificado, $a_j$ a
$f_\mathrm{ref}$, $\eta$).

```python

from phonometry import building

freqs = [200, 250, 315, 400, 500, 630, 800, 1000, 1250]
lij, s_i, s_j = 4.0, 12.0, 10.0     # longitud de unión (m), áreas de elemento (m^2)
ts = np.linspace(0.30, 0.10, 9)     # tiempo de reverberación estructural Ts (s)
dv_ij = [5.6, 6.0, 6.5, 7.0, 7.6, 8.1, 8.7, 9.2, 9.8]    # elemento i excitado (dB)
dv_ji = [6.4, 6.8, 7.3, 7.8, 8.4, 8.9, 9.5, 10.0, 10.6]  # elemento j excitado (dB)

# Kij desde ambas direcciones de excitación (simétrico por el promedio direccional):
dbar = building.direction_averaged_level_difference(dv_ij, dv_ji)
res = building.vibration_reduction_index(dbar, lij, s_i, s_j, frequency=freqs,
                                structural_reverberation_time_i=ts,
                                structural_reverberation_time_j=ts)
res.k_ij           # Kij por banda (Fórmula (13))
res.single_number  # Kij medio entre 200 y 1250 Hz, o None sin ese conjunto de bandas
res.octave_bands() # Kij en octavas (su número único promedia 125-1000 Hz)

# Descriptor global aéreo de flanco y una comprobación de validez de la Parte 4:
dnf = building.normalized_flanking_level_difference(np.full(9, 75.0), np.full(9, 42.0),
                                           absorption_area=np.full(9, 12.0))
m = building.modal_overlap_factor(s_i, critical_frequency=85.0,
                         structural_reverberation_time=ts)
res_m = building.vibration_reduction_index(dbar, lij, s_i, s_j, frequency=freqs,
                                  modal_overlap=m)   # bandas con M < 0,25 acotadas
res_m.bracketed    # marcas por banda; las bandas acotadas salen del número único

# Con 16 bandas de tercio de octava (o 5 de octava), dnf.plot() dibuja Dn,f
# frente a la referencia ISO 717-1 desplazada con Dn,f,w anotado (requiere matplotlib):
```

*El descriptor global de flancos $D_\mathrm{n,f}$ es una magnitud aérea, así que su
número único $D_\mathrm{n,f,w}$ sale del motor de ISO 717-1 sin cambios; entra
directamente en el modelo EN 12354-1 como dato de la trayectoria por flancos de la
unión ensayada (el homólogo de impactos $L_\mathrm{n,f}$ se evalúa igual según
ISO 717-2).*

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

```python

from phonometry import building

# Una unión ligera en el laboratorio: nivel del recinto emisor, nivel del
# recinto receptor por la trayectoria por flancos y el área de absorción receptora.
l1 = np.full(16, 80.0)
dnf_target = np.array([48, 49, 50, 51, 52, 54, 55, 57,
                       58, 59, 60, 61, 62, 63, 64, 65], dtype=float)
dnf = building.normalized_flanking_level_difference(
    l1, l1 - dnf_target, absorption_area=np.full(16, 10.0)
)

# Una línea: Dn,f frente a la referencia ISO 717-1 desplazada:
dnf.plot(language="es")
plt.show()

# A mano, desde el índice que porta el resultado:
w = dnf.rating
fig, ax = plt.subplots()
ax.semilogx(w.band_centers, dnf.d_n_f, "o-", label="Dn,f (flancos)")
ax.semilogx(w.band_centers, w.shifted_reference, "s--",
            label="referencia desplazada")
ax.fill_between(w.band_centers, w.measured, w.shifted_reference,
                where=w.measured < w.shifted_reference, interpolate=True,
                alpha=0.3, label="desviaciones desfavorables")
ax.set_xlabel("Frecuencia [Hz]")
ax.set_ylabel("Diferencia de niveles normalizada de flancos [dB]")
ax.set_title(f"Dn,f,w = {w.rating} dB  (C={w.c:+d}; Ctr={w.ctr:+d})")
ax.legend()
plt.show()
```

</details>

<span id="la-medicion-iso-10848-1-2017"></span>

## La medición (apartados 7 y 9 de ISO 10848-1:2017)

Las fórmulas de más arriba son indiferentes a cómo se obtuvieron sus entradas.
La norma no lo es, y uno de sus requisitos decide si el número significa algo
siquiera.

**El apantallamiento va primero (apartado 9).** Una unión de tres o cuatro
elementos tiene dos elementos que dan a cada recinto, y un nivel en el recinto
receptor alimentado por *todos* ellos no es atribuible a ninguna trayectoria en
concreto. Por eso los elementos que no se ensayan se apantallan, uno tras otro,
y la regla cambia según la magnitud: al medir $D_\mathrm{n,f}$ para la transmisión a
través de $i$ y $j$, apantalla el otro elemento **en los dos recintos**; al
medir $L_\mathrm{n,f}$, apantalla el otro elemento **en el recinto receptor**; al medir
$K_{ij}$ con excitación estructural **no hace falta apantallar nada**, porque la
excitación se aplica a un elemento y no a un campo sonoro. El sonido radiado
medido por intensidad según ISO 15186-1 tampoco necesita apantallamiento en el
recinto receptor, porque la superficie envolvente hace el mismo trabajo.

El apantallamiento tiene que ser lo bastante bueno para que merezca la pena
montarlo. Cuando los tres o cuatro elementos de la unión son idénticos, basta
con un $\Delta R$ de 10 dB en todas las bandas. En general, excita el elemento 1
y después el elemento 2 con el mismo tipo de excitación, lee el nivel de
velocidad medio del elemento receptor $j$ en cada caso y exige
$\Delta R_\text{min} = 10 - L_{v,1j} + L_{v,2j}$ cuando
$L_{v,1j} - L_{v,2j} \le 10$ dB, y nada en absoluto cuando la diferencia ya
supera los 10 dB (Fórmulas (23) y (24)). Un apantallamiento pesado sobre un
elemento ligero puede cambiar la mismísima transmisión que se está midiendo, y
hay que evitarlo. **Un $K_{ij}$ o un $D_\mathrm{n,f}$ declarado sin decir cómo se
apantallaron los demás elementos, y cómo se verificó ese apantallamiento, es un
número de pareja de recintos con una etiqueta de trayectoria pegada encima**, y
entra directo en una predicción EN 12354, donde el error no está acotado en
dirección.

**Acelerómetros (apartado 7.2.3).** Montados directamente sobre la superficie
del elemento de ensayo, rígidos en la dirección normal a ella. La cera de abeja
o de petróleo es cómoda, pero una fijación floja cuesta exactitud en alta
frecuencia; donde la textura de la superficie derrote a la cera, pega con
cemento una arandela metálica pequeña y encera o atornilla sobre ella
(ISO 5348). La masa del acelerómetro debe ser lo bastante pequeña para no
cargar la placa, que es lo que hace explícito la Fórmula (16):
$m_\text{acc} < 1/(2\pi f Y_\mathrm{dp})$, con la movilidad puntual de una placa
delgada isótropa estimada por la Fórmula (17) como
$Y_\mathrm{dp} = 1/(8\sqrt{B\rho_\mathrm{s}}) = 1/(2{,}3\,\rho_\mathrm{s} c_\mathrm{L} h)$. La desigualdad
aprieta en el extremo **superior** del intervalo de bandas, así que
compruébala en la banda más alta, no en la más baja.

**Excitación (apartado 7.2.4).** Estacionaria, con un excitador electrodinámico
alimentado con ruido o con una máquina de impactos (adaptada para paredes, con
los impactos controlados mecánicamente para que se repitan), o transitoria, con
golpes de martillo únicos o repetidos a mano, en cuyo caso $D_{v,ij}$ debe
medirse en los dos elementos **simultáneamente**. Los golpes múltiples a mano
se reparten sobre 1 m² a 2 m², a 1 Hz o 2 Hz, durante 20 s a 30 s. En cada
banda el nivel de velocidad del elemento receptor debe superar el ruido de
fondo en al menos 10 dB; por debajo de eso se aplica la corrección de
ISO 10140-4, que no debe superar 1,3 dB. Cuida que el ruido aéreo de la propia
fuente, o la radiación del elemento excitado, no exciten a los demás: es el
mismo fallo que el apantallamiento existe para evitar, llegando por otra vía.

**Posiciones (apartado 7.2.5).** Al menos **cuatro** posiciones de excitación en
un elemento emisor de tipo A (pesado, homogéneo) y **seis** en uno de tipo B,
con al menos **tres** posiciones de medición por posición de excitación en cada
placa, repartidas al azar por la superficie en lugar de en retícula. Las
separaciones mínimas son: 0,5 m de una posición de excitación a los bordes del
elemento, 1,0 m entre posiciones de excitación (0,7 m en el tipo B), 1,0 m de
una posición de excitación a la unión ensayada, 1,0 m de una posición de
excitación a sus posiciones de medición asociadas, 0,25 m de una posición de
medición a los bordes del elemento y 0,5 m entre las posiciones de medición de
una misma posición de excitación. En elementos no homogéneos (ladrillo hueco,
viguetas y bovedillas) las posiciones deben repartirse además entre los
subelementos, y en forjados entramados el eje de la máquina de impactos se
sitúa a 45° respecto a las viguetas. En uniones ligeras el operador debería
mantenerse fuera del forjado salvo que pueda demostrarse que su peso y su
amortiguamiento no influyen.

**Las dos direcciones.** $K_{ij}$ es simétrico solo porque la norma lo hace
serlo: recorre todo el procedimiento con el elemento $i$ excitado y otra vez
con el elemento $j$ excitado, y promedia las dos diferencias de niveles antes
de la Fórmula (13), que es exactamente lo que hace
`direction_averaged_level_difference` en el fragmento de más arriba.

## Techos suspendidos: el trayecto por el plenum (ISO 140-9, Vigran 9.2.3)

Dos despachos separados por un tabique que se detiene en el techo suspendido
comparten un único plenum continuo por encima. El sonido sale del recinto
emisor a través de las placas del techo, viaja lateralmente por encima del
tabique y vuelve a bajar a través de las placas del recinto receptor. Ese
trayecto suele ser el eslabón más débil de una distribución de oficinas, y no
es lo que describe el $R_\mathrm{w}$ de un tabique.

*Izquierda: el plenum cobra una penalización fija frente a la suma de los dos
techos, unos 10 dB en esta geometría, y duplicar su profundidad solo devuelve
3 dB de ella, que es la razón por la que la placa es la palanca y el hueco no.
Derecha: la misma magnitud tal como la mide un laboratorio acreditado, con la
curva ASTM E413 ajustada al $D_\mathrm{n,c}$ medido y sus deficiencias sombreadas; la
clase se lee sobre la curva desplazada a 500 Hz.*

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

```python

from phonometry import ceiling_attenuation_class, plenum_flanking_reduction_index

fig, (ax_path, ax_cac) = plt.subplots(1, 2, figsize=(13.0, 5.6))

# Izquierda: la geometría de la Sección 9.2.3 de Vigran, LS = LR = 4,75 m, techo
# de placa de yeso de 9,5 mm, paredes laterales del plenum reflectantes, a dos
# profundidades de plenum.
freqs = np.array([63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0])
ceiling = np.array([17.0, 21.0, 25.0, 29.0, 32.0, 30.0, 38.0])
x = np.arange(freqs.size)
for depth, style in ((0.43, "-o"), (0.86, "--o")):
    res = plenum_flanking_reduction_index(
        ceiling, ceiling, ceiling_length=4.75, plenum_height=depth,
        frequency=freqs,
    )
    ax_path.plot(x, res.reduction_index, style, label=f"Rcl, plenum h = {depth:g} m")
ax_path.plot(x, 2.0 * ceiling, ":s", label="RS + RR (los dos techos)")
ax_path.set_xticks(x, ["63", "125", "250", "500", "1k", "2k", "4k"])
ax_path.set(xlabel="Frecuencia [Hz]", ylabel="Índice de reducción acústica [dB]")
ax_path.legend()

# Derecha: un informe de ensayo acreditado ASTM E1414 valorado según ASTM E413.
dnc = np.array([14.4, 18.6, 21.7, 24.1, 23.4, 30.3, 33.7, 35.2,
                41.6, 44.2, 42.1, 36.8, 35.7, 36.0, 36.9, 37.9])
cac = ceiling_attenuation_class(dnc)
xc = np.arange(dnc.size)
ax_cac.fill_between(xc, cac.measured, cac.shifted_reference,
                    where=cac.measured < cac.shifted_reference,
                    interpolate=True, alpha=0.25, label="deficiencias")
ax_cac.plot(xc, cac.measured, "-o", label="Dn,c (medido)")
ax_cac.plot(xc, cac.shifted_reference, "--s", label="curva ASTM E413 ajustada")
ax_cac.set(xlabel="Frecuencia [Hz]",
           ylabel="Atenuación normalizada del techo Dn,c [dB]",
           title=f"CAC = {cac.rating} dB")
ax_cac.legend()
plt.show()
```

</details>

### El modelo unidimensional

La variante unidimensional de Mechel, tal como la
presenta Vigran en la Sección 9.2.3, trata el plenum como un conducto revestido
por un lado. El techo de cada lado tiene un factor de transmisión
$\tau_\mathrm{S} = \tau_\mathrm{S,pl}\tau_\mathrm{S,a}$ (las placas por el eventual absorbente del
plenum, Ec. (9.14)); la potencia inyectada se reparte, con una fracción $s_\mathrm{S}$
dirigida hacia el tabique, y decae como $\exp(-mx)$ con el coeficiente de
atenuación de potencia
$m = 2\,\mathrm{Re}\{\Gamma\} = -2\,\mathrm{Im}\{k'\}$ (Ecs. (9.15) y (9.16)).
Integrando sobre la longitud del techo a ambos lados se obtiene la Ec. (9.18),
cuyo lado receptor incorpora la fuga de vuelta al recinto,
$m'_\mathrm{R} = m_\mathrm{R} + s_\mathrm{R}\tau_\mathrm{R}/h$ (Ec. (9.17)). Vigran imprime el $m_\mathrm{R}$ *sin prima* en
el denominador de esa expresión; es una errata, registrada en
[el registro de erratas](/phonometry/es/reference/errata/), y aquí se usa el
$m'_\mathrm{R}$ derivado. Leída al pie de la letra, la forma impresa no es monótona con
el amortiguamiento del plenum (añadir absorbente predeciría un trayecto peor
que no poner nada) y no está acotada cuando $m_\mathrm{R} \to 0$. Para un plenum con poca atenuación y
$s_\mathrm{S} = s_\mathrm{R} = 0{,}5$ eso se reduce a la forma compacta que hace visible la
geometría (Ecs. (9.19) y (9.20)):

$$
R_\mathrm{cl} = R_\mathrm{S} + R_\mathrm{R} - 10\log_{10}\!\left[\frac{\varepsilon^2 L_\mathrm{R}}{4h}\right],
$$

con $\varepsilon = 1$ para paredes laterales del plenum totalmente absorbentes
y $\varepsilon = 2$ para totalmente reflectantes. Un plenum profundo ayuda, un
recinto largo perjudica, y duplicar el aislamiento de las placas ayuda el doble
porque $R_\mathrm{S}$ y $R_\mathrm{R}$ aparecen los dos. Referido al área del tabique en lugar de
a la del techo, $R_\mathrm{cl,p} = R_\mathrm{cl} + 10\log_{10}(H_\mathrm{S}/L_\mathrm{S})$ (Ec. (9.13)), que es lo
que permite sumar el trayecto por el techo al trayecto directo como factores de
transmisión.

```python
from phonometry import partition_referenced_reduction_index
# `plenum_flanking_reduction_index` es el import del bloque de figura de arriba.

freqs = [63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0]
ceiling = [17.0, 21.0, 25.0, 29.0, 32.0, 30.0, 38.0]   # placa de yeso de 9,5 mm

# La geometría del ejemplo de Vigran: LS = LR = 4,75 m, plenum 0,43 m,
# paredes laterales reflectantes.
res = plenum_flanking_reduction_index(
    ceiling, ceiling, ceiling_length=4.75, plenum_height=0.43, frequency=freqs
)
print(round(res.geometry_term, 1))    # 10.4 dB cobrados a RS + RR
res.plot()                            # Rcl frente a los dos techos

# Un plenum revestido atenúa el trayecto lateral (Ec. (9.18) en vez de (9.20)):
damped = plenum_flanking_reduction_index(
    ceiling, ceiling, ceiling_length=4.75, plenum_height=0.43,
    attenuation_source=[0.5] * 7, attenuation_receiving=[0.5] * 7,
)

# Referido al tabique en lugar de al techo (Ec. (9.13)):
print(partition_referenced_reduction_index(res.reduction_index, 2.7, 4.75))
```

### La magnitud medida: la atenuación normalizada del techo

Un techo no se valora por $R_\mathrm{cl}$ sino por la
**diferencia de niveles normalizada del techo suspendido** $D_\mathrm{n,c} = D - 10\log_{10}(A/A_0)$
(ISO 140-9:1985, apartado 3.3), con $A$ el área de absorción acústica
equivalente del recinto receptor y la referencia $A_0 = 10\ \text{m}^2$. La
instalación tiene dos recintos de al menos 50 m³ cuyos volúmenes difieren en al
menos un 10 %, un tabique divisorio adelgazado a 100 mm como máximo en su parte
superior y un plenum de 650 mm a 760 mm de profundidad con una pared lateral y
las dos testeras revestidas; la norma imprime la absorción exigida al
revestimiento, $\alpha_\mathrm{s} \ge 0{,}65$ a 125 Hz y $\ge 0{,}80$ de 250 Hz a
4000 Hz, y exige $\alpha < 0{,}10$ en la otra pared lateral y en el techo del
plenum. Su equivalente norteamericana, ASTM E1414, usa
$A_0 = 12\ \text{m}^2$, de modo que un valor ASTM queda unos
$10\log_{10}(12/10) = 0{,}79$ dB por encima para los mismos recintos.

ISO valora $D_\mathrm{n,c}$ con la curva de ISO 717-1, dando $D_\mathrm{n,c,w}$; ASTM E1414
lo valora a través de ASTM E413 como **clase de atenuación de techo**. E413
redondea los datos al entero más próximo (apartado 5.2), eleva su curva de
referencia en pasos de 1 dB mientras la suma de las deficiencias no supere
32 dB y ninguna deficiencia individual pase de 8 dB (apartados 5.3 y 5.4), y
lee la valoración sobre la curva desplazada a 500 Hz (apartado 5.5).

```python
from phonometry import normalized_ceiling_attenuation, weighted_rating
# `ceiling_attenuation_class` es el import del bloque de figura de arriba.

# Dn,c a partir de la pareja medida: los niveles del recinto emisor y del
# receptor sobre el plenum común y el área de absorción del recinto receptor,
# por banda. ASTM E1414 normaliza a A0 = 12 m2, ISO 140-9 a A0 = 10 m2.
l1_c = [80.0] * 16                       # recinto emisor, por banda
l2_c = [45.0] * 16                       # recinto receptor, por el trayecto del plenum
absorption = [12.0] * 16                 # A del recinto receptor por banda (m2)
astm = normalized_ceiling_attenuation(l1_c, l2_c, absorption, reference_area=12.0)
iso140_9 = normalized_ceiling_attenuation(l1_c, l2_c, absorption)
print(round(float(astm[0]), 2), round(float(iso140_9[0]), 2))   # 35.0 34.21

# Una placa acústica de yeso perforada de 28 mm, medida según ASTM E1414 (CAC 34).
dnc = [14.4, 18.6, 21.7, 24.1, 23.4, 30.3, 33.7, 35.2,
       41.6, 44.2, 42.1, 36.8, 35.7, 36.0, 36.9, 37.9]
res = ceiling_attenuation_class(dnc)
print(res.rating, res.deficiency_sum, res.max_deficiency)   # 34, 27.0, 7.0
res.plot()                                                  # Dn,c frente a la curva

# El número único ISO del mismo espectro, trasladado a A0 = 10 m2:
iso = [v - 0.79 for v in dnc]
print(weighted_rating(iso).rating)                          # Dn,c,w
```

## Informes de transmisión por flancos ISO 10848 (`.report()`)

Cada uno de los tres resultados genera una ficha PDF de una página.
`VibrationReductionResult.report()` escribe un informe de **caracterización de
la unión** del índice de reducción vibratoria $K_{ij}$ (ISO 10848-1:2006):
la línea de base normativa, una cabecera de metadatos opcional, la tabla de
$K_{ij}$ por banda junto a la curva $K_{ij}(f)$ y un recuadro con el número
único (media de $K_{ij}$) sobre el intervalo de bandas del anexo A, con el
recuento de bandas promediadas y acotadas. Las bandas acotadas por solapamiento
modal insuficiente ($M < 0{,}25$, ISO 10848-4:2010 apartado 9) imprimen su valor
entre corchetes y se excluyen de la media; `verbose=True` añade una columna que
indica si cada banda entra en la media.

`FlankingLevelDifferenceResult.report()` y `FlankingImpactLevelResult.report()`
escriben informes de **medición** de los descriptores globales $D_\mathrm{n,f}$
(aéreo) y $L_\mathrm{n,f}$ (impactos, máquina de impactos), reutilizando la misma
disposición de dos paneles del aislamiento: la magnitud por banda junto a la
curva medida frente a la referencia ISO 717 desplazada y el número único
$D_\mathrm{n,f,w}$ (C; Ctr) (ISO 717-1) o $L_\mathrm{n,f,w}$ (CI) (ISO 717-2).
`verbose=True` anexa
la evaluación ISO 717 por banda (el valor, la referencia desplazada y la
desviación desfavorable). Un `requirement` indicado en `ReportMetadata` añade un
veredicto ($D_\mathrm{n,f,w}$ cumple igualando o superándolo, $L_\mathrm{n,f,w}$ igualándolo o
por debajo), y `language="es"` genera cada ficha en español. Se necesita
reportlab y, para la figura que incrusta la ficha, matplotlib
(`pip install "phonometry[report,plot]"`).

```python

from phonometry import building, ReportMetadata

freqs = [100, 125, 160, 200, 250, 315, 400, 500, 630,
         800, 1000, 1250, 1600, 2000, 2500, 3150, 4000, 5000]
dv = np.array([4.5, 4.8, 5.2, 5.6, 6.0, 6.5, 7.0, 7.6, 8.1, 8.7,
               9.2, 9.8, 10.3, 10.9, 11.4, 11.9, 12.3, 12.7])
m = np.full(18, 1.0); m[:3] = 0.1                        # acota las bandas bajas
kij = building.vibration_reduction_index(
    dv, junction_length=4.0, area_i=12.0, area_j=10.0, frequency=freqs,
    structural_reverberation_time_i=0.35, structural_reverberation_time_j=0.40,
    modal_overlap=m,
)
kij.report("Kij.pdf", metadata=ReportMetadata(specimen="Unión rígida en T"),
           language="es")

l1 = np.full(16, 80.0)
dnf = np.array([48, 49, 50, 51, 52, 54, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65],
               dtype=float)
dres = building.normalized_flanking_level_difference(
    l1, l1 - dnf, absorption_area=np.full(16, 10.0)
)
dres.report("Dnf.pdf", metadata=ReportMetadata(requirement=55.0), language="es")

recv = np.array([58, 57, 56, 55, 54, 52, 50, 48, 46, 44, 42, 40, 38, 36, 34, 32],
                dtype=float)
lres = building.normalized_flanking_impact_level(recv, absorption_area=np.full(16, 10.0))
lres.report("Lnf.pdf", metadata=ReportMetadata(requirement=55.0), language="es")
```

Las fichas de ejemplo se regeneran con `make reports` y se mantienen en el
repositorio. Pulsa una vista previa para abrir el PDF:

## Qué cubre esta guía

El índice de reducción vibratoria $K_{ij}$ de ISO 10848-1:2006 (Fórmula (13))
desde la diferencia de niveles de velocidad promediada direccionalmente
(Fórmula (11)) y las longitudes de absorción equivalentes (Fórmula (12)), con
la forma simplificada para elementos ligeros (Fórmula (14)), el factor de
pérdidas total y la media de número único del Anexo A, mediante
`building.direction_averaged_level_difference` y
`building.vibration_reduction_index`; los descriptores globales $D_\mathrm{n,f}$
(Fórmula (4)) y $L_\mathrm{n,f}$ (Fórmula (5)) con sus números únicos de ISO 717,
mediante `building.normalized_flanking_level_difference` y
`building.normalized_flanking_impact_level`; la comprobación de acoplamiento
fuerte (Fórmula (15)) y las comprobaciones de validez de ISO 10848-4:2010 por
densidad modal, recuento de modos por banda y solape modal que ponen entre
corchetes las bandas poco fiables (`building.strong_coupling_satisfied`,
`building.modal_density`, `building.band_mode_count`,
`building.modal_overlap_factor`); y las tres fichas de una página con
`.report()`.

Las partes 2, 3 y 4 de ISO 10848 difieren en los tipos de unión y de elemento
de ensayo a los que se aplican; phonometry implementa solo las fórmulas
genéricas de $K_{ij}$/$D_\mathrm{n,f}$/$L_\mathrm{n,f}$ de la parte 1, más la comprobación
de solape modal de la parte 4, no los montajes de ensayo específicos de
instalación que describen las otras partes. La adquisición de [La
medición](#la-medicion-iso-10848-1-2017) está documentada aquí y no se
comprueba en ninguna parte: nada verifica que los demás elementos se
apantallaran, que el apantallamiento alcanzara $\Delta R_\text{min}$, que se
respetaran los recuentos y las separaciones de posiciones, que el acelerómetro
cumpliera la desigualdad de carga másica, ni que $T_\mathrm{s}$ se midiera sobre los
elementos ya montados en lugar de suponerse. Como ISO 10848 no contiene
ejemplo numérico resuelto, la conformidad se ancla en identidades de forma
cerrada ($K_{ij}$ simplificado, $a_j$ en $f_\mathrm{ref}$, $\eta$).

La rama de techos suspendidos cubre la atenuación normalizada del techo
$D_\mathrm{n,c}$ del apartado 3.3 de ISO 140-9:1985, la clase de atenuación de techo
de ASTM E413-22 que invoca ASTM E1414 y el modelo unidimensional de plenum de
la Sección 9.2.3 de Vigran, con `building.normalized_ceiling_attenuation`,
`building.ceiling_attenuation_class`,
`building.plenum_flanking_reduction_index` y
`building.partition_referenced_reduction_index`. El modelo de plenum no tiene
salida numérica publicada propia, así que se ancla en sus formas cerradas y en
las propiedades estructurales que una lectura errónea rompe: la monotonía con
el amortiguamiento del plenum, la cota $\tau_\mathrm{cl} \le 1$ y la convergencia de
la Ec. (9.18) a la Ec. (9.20); la cadena de medición y la clase se anclan en
informes de laboratorio acreditados ASTM E1414. La constante de propagación
$k'$ de un conducto revestido es aquí un dato de entrada, no una predicción.

## Véase también

- [Predicción del aislamiento acústico (EN 12354)](/phonometry/es/buildings/design/insulation-prediction/):
  el modelo de flancos que consume el $K_{ij}$ medido, y sus valores
  empíricos de unión del Anexo E.
- [Transmisión de onda de flexión en uniones de placas](/phonometry/es/vibration/structural/junction-transmission/):
  los coeficientes de transmisión de teoría ondulatoria tras el $K_{ij}$ de
  una unión ideal.
- [Medición del aislamiento en laboratorio](/phonometry/es/buildings/insulation/insulation-lab/):
  la instalación de ISO 10140 cuya transmisión directa esquivan estas trayectorias por flancos.
- [Índices globales de aislamiento (ISO 717)](/phonometry/es/buildings/insulation/insulation-ratings/):
  los motores de curva de referencia tras $D_\mathrm{n,f,w}$ y $L_\mathrm{n,f,w}$.
- [Teoría](/phonometry/es/reference/theory/rooms-buildings/): las fórmulas
  de flancos en la derivación de EN 12354.
- [Acústica de oficinas diáfanas (ISO 3382-3)](/phonometry/es/buildings/rooms/open-plan-acoustics/): el contexto de oficina
  diáfana en el que suele aparecer el trayecto por el techo.
- Referencia de la API: [`building.measurement.flanking_transmission`](/phonometry/es/reference/api/building/flanking-transmission/)
  y [`building.prediction.ceiling_plenum`](/phonometry/es/reference/api/building/ceiling-plenum/).
- 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): la teoría de movilidad y eficiencia de radiación que hay detrás de un trayecto por flancos.
