<!-- canonical: https://jmrplens.github.io/phonometry/es/guides/installed-structure-borne/ -->
Source: https://jmrplens.github.io/phonometry/es/guides/installed-structure-borne/

La **EN 12354-5:2009** predice el nivel de presión acústica en un recinto receptor
causado por equipos de servicio del edificio (bombas, ventiladores, ascensores,
instalaciones de agua) que inyectan **ruido estructural** en el edificio. Cierra
la cadena de vibroacústica estructural: la fuente se describe por su nivel de
potencia acústica estructural característica `L_Ws,c`, derivado de la medición
sobre placa receptora de EN 15657 mediante la conversión de las Fórmulas
(15)/(17) y una corrección de movilidad (**no** el nivel bruto inyectado en la
placa; véase [EN 15657](/phonometry/es/guides/structure-borne-power/)); las
movilidades puntuales de fuente y receptor fijan cuánta potencia se acopla
realmente a la estructura, y la transmisión del edificio la lleva al recinto
receptor. La corrección de movilidad del Anexo I,
`installed_power_from_reception_plate`, refiere el nivel característico de
placa receptora `L_Ws,n` al receptor real,
`L_Ws,inst = L_Ws,n + 10 lg(Y_∞,i / Y_∞,rec)` con `Y_∞,rec = 5·10⁻⁶ m/(N·s)`;
con la movilidad de la fuente en su lugar da `L_Ws,c` (Anexo I.3, Tabla I.8).

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

```python

from phonometry import building

# Potencia característica EN 15657 y movilidades puntuales ilustrativas.
bands = np.array([63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0])
lws_c = np.array([78.0, 82.0, 84.0, 81.0, 77.0, 72.0, 66.0])
ys = (2e-4 + 1e-4j) * (bands / 250.0)        # movilidad de la fuente
yi = (3e-5 + 1e-5j) * np.ones_like(bands)    # movilidad del receptor
dc = np.array([float(building.coupling_term(a, b)) for a, b in zip(ys, yi)])

# Dos vías de transmisión: el forjado excitado y una pared de flanco.
paths = [
    {"adjustment_term": 6.0, "element_area": 12.0,
     "flanking_reduction_index": np.linspace(44.0, 62.0, 7)},
    {"adjustment_term": 7.0, "element_area": 9.0,
     "flanking_reduction_index": np.linspace(46.0, 64.0, 7)},
]
res = building.installed_source_prediction(lws_c, dc, paths, frequencies=bands)
res.plot(language="es")   # potencia característica e instalada, niveles por vía y el total
plt.show()
```

</details>

## 1. Acoplamiento y potencia instalada

Solo parte de la potencia característica se inyecta en el elemento soporte; la
pérdida es el **término de acoplamiento** `D_C` (siempre positivo), fijado para
una excitación puntual por la movilidad de la fuente `Y_s` y la del receptor
`Y_i` (Fórmula 19b):

$$
D_{C,i} = 10\lg\frac{|Y_s + Y_i|^2}{|Y_s|\,\mathrm{Re}\{Y_i\}},
$$

que se reduce a `10 lg(|Y_s|/Re{Y_i})` para una **fuente de fuerza** (movilidad
de fuente alta, Fórmula 19c) y a `−10 lg(|Y_s|·Re{Z_i})` para una **fuente de
velocidad** (movilidad de fuente baja, Fórmula 19d); un soporte elástico añade su
movilidad de transferencia `Y_k` dentro del módulo (Fórmula 19e). El nivel de
potencia **instalada** es entonces (Fórmula 18b) `L_Ws,inst = L_Ws,c − D_C`.

La física detrás de `D_C` es la clásica potencia de entrada de una placa
excitada en un punto: solo la parte real de la movilidad en el punto de
excitación del receptor absorbe potencia, y el desajuste entre `Y_s` e `Y_i`
decide cuánta de la capacidad de la fuente entra realmente en la estructura
(Hopkins 2007, Sección 2.8). Las propias movilidades vienen de la
[cadena de movilidad mecánica](/phonometry/es/guides/mechanical-mobility/):
medidas según ISO 7626, o de las formas cerradas de placa infinita de la
[teoría de paneles](/phonometry/es/guides/panel-sound-insulation/) cuando no
hay medición. Una bomba sobre una losa de hormigón es la fuente de fuerza de
libro: la movilidad de su carcasa queda órdenes de magnitud por encima de la
de la losa, así que `D_C` se reduce a la Fórmula 19c y la potencia inyectada
deja de depender del receptor.

```python
from phonometry import building

# Una fuente casi de fuerza (Y_s >> Y_i) sobre un forjado de hormigón:
dc = building.coupling_term(2e-4 + 1e-4j, 3e-5 + 1e-5j)
print(round(float(dc), 2))                                          # ~8.5 dB
print(round(float(building.installed_structure_borne_power_level(82.0, dc)), 1))  # L_Ws instalada
```

## 2. Transmisión al recinto receptor

Las partes 1 y 2 de EN 12354 tratan recintos excitados por vía aérea y por la
máquina de impactos normalizada; la parte 5 cubre las fuentes que sacuden el
edificio *directamente*: bombas, ventiladores, ascensores, bañeras de
hidromasaje, cisternas y las conducciones que las anclan a paredes y forjados.
Una vez que la potencia instalada está en la estructura, varios elementos
radian al recinto receptor: el propio elemento excitado y cada elemento al
que la vibración llega a través de las uniones. Cada par elemento
excitado/elemento radiante `i→j` es una vía de transmisión con su propio
término de ajuste y su índice de flancos:

Cada camino de transmisión `i→j` da un nivel de presión acústica normalizado a
partir de la potencia instalada, el término de ajuste estructura-a-aéreo `D_sa`,
el índice de reducción acústica de flancos `R_ij,ref` (EN 12354-1) y el área del
elemento (Fórmula 18a):

$$
L_{n,s,ij} = L_{Ws,\mathrm{inst},i} - D_{sa,i} - R_{ij,\mathrm{ref}}
             - 10\lg\frac{S_i}{S_0} - 10\lg\frac{A_0}{4},
$$

con `S₀ = A₀ = 10 m²`, y los caminos se combinan energéticamente (Fórmula 17):

```python

from phonometry import building

bands = np.array([250.0, 500.0, 1000.0])
res = building.installed_source_prediction(
    characteristic_power_level=np.array([80.0, 82.0, 78.0]),
    coupling_term=np.array([9.0, 10.0, 11.0]),
    paths=[
        {"adjustment_term": 5.0,
         "flanking_reduction_index": np.array([50.0, 52.0, 55.0]), "element_area": 12.0},
        {"adjustment_term": 6.0,
         "flanking_reduction_index": np.array([52.0, 54.0, 57.0]), "element_area": 8.0},
    ],
    frequencies=bands,
)
print(np.round(res.total_level, 1))      # total L_n,s por banda
print(round(res.overall_level, 1))       # nivel sumado en bandas [dB]

res.plot()   # la cascada L_n,s por camino y total, como en la figura de arriba (requiere matplotlib)
```

El `InstalledSourceResult` transporta los niveles por camino, el total por banda,
el nivel de potencia instalada y `.overall_level`, y su `.plot()` dibuja toda la
cascada.

## 3. El informe de predicción (`.report()`)

Una predicción termina como un *documento*. El `InstalledSourceResult` expone
un método `.report()` que escribe una ficha PDF de una página, **claramente
etiquetada como predicción, no como medición**: una línea de base de predicción
que nombra la EN 12354-5:2009, una cabecera de metadatos opcional (cliente,
equipo fuente, recinto receptor, instrumentación, clima, fecha), una tabla por
bandas (frecuencia nominal de octava/tercio de octava, el nivel de potencia
acústica estructural instalada $L_{Ws,inst}$, el NPS normalizado de cada camino
de transmisión $L_{n,s,ij}$ y el total combinado $L_{n,s}$), los espectros
$L_{n,s}(f)$ por camino y total, y el total sumado en bandas $L_{n,s}$ (dB)
recuadrado, con la potencia instalada total y el número de caminos.

Los metadatos se aportan mediante un `ReportMetadata`, cuyos campos aplicables
aquí son el **equipo fuente** (`specimen`), el **recinto receptor**
(`test_room`), el **cliente**, la **instrumentación** y la identidad del pie
(`laboratory`, `operator`, `report_id`, `notes`). Aportar `requirement` añade un
veredicto PASS/FAIL frente a un límite superior declarado sobre el $L_{n,s}$
global (menos es mejor). `verbose=True` añade una columna por camino de
transmisión (hasta cinco); en otro caso solo se muestran la potencia instalada
y el total combinado. `language="es"` genera la ficha en español con comas
decimales. La franja de base indica las Fórmulas 18a/17 y el aviso de
predicción.

```python

from phonometry import ReportMetadata, installed_source_prediction

bands = np.array([63, 125, 250, 500, 1000, 2000], float)
lwc = np.array([84.4, 82.5, 69.9, 67.6, 61.6, 49.9])   # potencia característica [dB]
dsa = np.array([-13.6, -17.3, -17.4, -20.0, -26.9, -32.9])
paths = [
    {"adjustment_term": dsa,
     "flanking_reduction_index": np.array([43.0, 46, 50.2, 54.7, 64.6, 73]),
     "element_area": 12.8},
    {"adjustment_term": dsa,
     "flanking_reduction_index": np.array([37.0, 41.2, 35.9, 37.7, 49, 57.8]),
     "element_area": 12.8},
]
res = installed_source_prediction(lwc, 16.2, paths, frequencies=bands)

res.report(
    "installed_structure_borne.pdf",
    metadata=ReportMetadata(
        client="Example dwelling refurbishment",
        specimen="WC flushing cistern (wall-fixed)",
        test_room="Receiving room: adjacent bedroom",
        report_id="EXAMPLE-12354-5",
        requirement=45.0,
    ),
    language="es",
)   # L_n,s global ~ 43 dB -> límite declarado 45 dB: PASS
```

La ficha de ejemplo se regenera con `make reports` y se mantiene renderizada en
el repositorio; pulsa la vista previa para abrir el PDF.

## Qué cubre esta guía

**Cubierto.** La EN 12354-5:2009: el término de acoplamiento `D_C`
(cláusula 4.4.3, Fórmulas 19b-e, con sus límites de fuente de fuerza y de
fuente de velocidad) mediante `coupling_term`, el nivel de potencia
instalada `L_Ws,inst = L_Ws,c − D_C` (Fórmula 18b) mediante
`installed_structure_borne_power_level`, y el nivel de presión acústica
normalizado por camino y su total energético (Fórmulas 18a, 17) mediante
`installed_source_prediction`. Validado contra los propios ejemplos
resueltos del Anexo I de la norma, la bañera de hidromasaje (I.2) y la
cisterna (I.3), dentro del redondeo de ±0,15 dB de los intermedios impresos.

**No cubierto.** Las tablas de valores por defecto de los Anexos D y F para
el término de ajuste estructura-a-aéreo `D_sa` y el índice de reducción por
flancos `R_ij,ref` no están implementadas; ambos son entradas que se aportan
a partir de mediciones, de la EN 12354-1 o de los propios anexos de la
norma. Solo está implementada la edición de 2009, no la revisión de 2023.

## Véase también

- [Potencia de ruido estructural de equipos (EN 15657)](/phonometry/es/guides/structure-borne-power/):
  la caracterización sobre placa receptora que aporta `L_Ws,c` y la movilidad
  de fuente que consume esta predicción.
- [Movilidad mecánica y la familia de FRF (ISO 7626-1)](/phonometry/es/guides/mechanical-mobility/):
  las `Y_s` e `Y_i` medidas tras el término de acoplamiento.
- [Transmisión de ondas de flexión en uniones de placas](/phonometry/es/guides/junction-transmission/):
  la física de unión que lleva la potencia instalada a los radiadores por
  flancos.
- [Predicción del aislamiento acústico (EN 12354)](/phonometry/es/guides/insulation-prediction/):
  los miembros aéreo y de impactos de la misma familia de predicción.
- Referencia de la API: [`building.installed_structure_borne`](/phonometry/es/reference/api/building/installed-structure-borne/).
