<!-- canonical: https://jmrplens.github.io/phonometry/es/guides/enclosed-space-absorption/ -->
Source: https://jmrplens.github.io/phonometry/es/guides/enclosed-space-absorption/

**EN 12354-6:2003** predice el **área de absorción acústica equivalente total** de
una sala y su **tiempo de reverberación** a partir de la absorción de sus
superficies y objetos, la contraparte de diseño del tiempo de reverberación
medido. Es el miembro de absorción de la familia de acústica de la edificación
EN 12354 (los miembros de aislamiento aéreo y de impacto están en
[Predicción del aislamiento acústico (EN 12354)](/phonometry/es/guides/insulation-prediction/)).
phonometry implementa el modelo normativo de la cláusula 4. (El método
informativo del Anexo D para recintos irregulares queda fuera de alcance.)

## 1. Área de absorción equivalente (cláusula 4.3)

El área de absorción equivalente total suma, sobre las superficies $i$, los
objetos $j$ y las matrices de objetos $k$, el área de cada superficie por su
coeficiente de absorción, las áreas de absorción equivalentes de los objetos,
las matrices de objetos (grupos de objetos idénticos tratados como una
superficie absorbente de área $S_k$) y la absorción del aire (Fórmula 1):

$$
A = \sum_i \alpha_{s,i}\,S_i + \sum_j A_{\mathrm{obj},j}
    + \sum_k \alpha_{s,k}\,S_k + A_{\mathrm{air}}.
$$

Para objetos duros e irregulares cuya absorción no se mide, se usa una
estimación empírica a partir del volumen (Fórmula 4): `Aobj = Vobj**(2/3)`.

```python
from phonometry import room

# EN 12354-6 Anexo E, sala desnuda (29.75 m3), banda de octava de 1000 Hz.
surfaces = [(12.39, 0.05), (12.39, 0.02), (10.90, 0.04),
            (10.90, 0.04), (6.55, 0.04), (6.55, 0.04)]
print(round(room.equivalent_absorption_area(surfaces), 2))  # 2.26  m2
print(round(float(room.hard_object_absorption(0.65)), 3))   # 0.75  m2
```

La absorción del aire usa el coeficiente de atenuación de potencia `m`
(Fórmula 2): `Aair = 4*m*V*(1 - psi)`. Por debajo de 1 kHz y para salas de menos
de 200 m³ puede despreciarse.

## 2. Tiempo de reverberación (cláusula 4.4)

El tiempo de reverberación se obtiene del área de absorción, el volumen y la
fracción de objetos `psi = sum(Vobj)/V` (Fórmula 5):

$$
T = \frac{55{,}3}{c_0}\,\frac{V\,(1 - \psi)}{A},
$$

donde la velocidad del sonido `c0 = 345.6 m/s` hace que el factor `55.3/c0` sea
el familiar `0.16`.

```python
from phonometry import room

surfaces = [(12.39, 0.05), (12.39, 0.02), (10.90, 0.04),
            (10.90, 0.04), (6.55, 0.04), (6.55, 0.04)]
a = room.equivalent_absorption_area(surfaces)
print(round(room.reverberation_time(a, 29.75), 1))          # 2.1  s

# Anexo E caso 2: añadir mobiliario (objetos duros) a la misma sala.
volumes = [0.15, 0.60, 0.05, 0.05, 0.65, 0.65]
aobj = room.hard_object_absorption(volumes)
psi = room.object_fraction(volumes, 29.75)                  # 0.072
a2 = room.equivalent_absorption_area(surfaces, objects=aobj)
print(round(a2, 2), round(room.reverberation_time(a2, 29.75, object_fraction=psi), 1))
# 5.03 0.9
```

Por banda de octava, una sola llamada toma las superficies (con coeficientes de
absorción por banda) y la condición del aire, y devuelve todo el espectro:

```python
from phonometry import room

# Coeficientes de absorción por banda (125 Hz a 8 kHz) de cada superficie.
plaster = [0.02, 0.03, 0.03, 0.04, 0.05, 0.05, 0.05]
tile = [0.15, 0.35, 0.65, 0.85, 0.90, 0.90, 0.85]
result = room.enclosed_space_reverberation(
    [(54.0, plaster), (20.0, plaster), (20.0, tile)],
    volume=60.0, air_condition="20C_50-70",
)
print(result.reverberation_time.round(2))
# [2.13 1.03 0.62 0.48 0.43 0.42 0.4 ]
result.plot()   # la figura de abajo: A y T por banda de octava
```

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

```python

from phonometry import room

plaster = [0.02, 0.03, 0.03, 0.04, 0.05, 0.05, 0.05]
tile = [0.15, 0.35, 0.65, 0.85, 0.90, 0.90, 0.85]
walls_floor = [(54.0, plaster), (20.0, plaster)]
for ceiling in (plaster, tile):
    room.enclosed_space_reverberation(
        [*walls_floor, (20.0, ceiling)], 60.0, air_condition="20C_50-70",
    ).plot(language="es")
plt.show()
```

</details>

El `ReverberationResult` lleva el área de absorción y el tiempo de reverberación
por banda, el volumen y la fracción de objetos, y su `.plot()` dibuja el espectro
del tiempo de reverberación. Es la contraparte de predicción del tiempo de
reverberación medido en
[Acústica de salas](/phonometry/es/guides/room-acoustics/)
(ISO 3382) y de la absorción en cámara reverberante de
[Materiales acústicos](/phonometry/es/guides/materials/) (ISO 354).

## 3. De dónde salen los datos de entrada

**Coeficientes de superficie.** La norma espera que los $\alpha_{s,i}$
procedan de mediciones de laboratorio según EN ISO 354, el método de cámara
reverberante de
[Materiales acústicos](/phonometry/es/guides/materials/); se admiten
valores teóricos, empíricos o de campo siempre que se declare la fuente de
los datos. ISO 354 entrega datos en tercios de octava, y un cálculo en
bandas de octava toma como entrada la media aritmética de los tres tercios.
Un coeficiente de cámara reverberante puede superar 1,0 (la difracción de
borde dispersa hacia la muestra más energía de la que intercepta su área
plana); entra en la Fórmula 1 tal como se midió, sin recorte, porque la
misma convención de campo difuso que lo produjo es la que supone el modelo.

**Mobiliario y ocupantes.** Los objetos contribuyen por tres vías: un área
de absorción equivalente medida $A_{obj}$ cuando existe (personas y
asientos tienen valores tabulados en el Anexo C informativo), la estimación
de la Fórmula 4 $V_{obj}^{2/3}$ para objetos duros, irregulares y sin
medir (mobiliario, maquinaria), y los *conjuntos* de objetos valorados como
una superficie absorbente $\alpha_s S_k$ cuando muchos objetos similares
cubren una zona (un público sentado, una estantería de almacén). Los objetos
también desplazan aire: su volumen sumado entra en la fracción de objetos
$\psi$ que acorta $T$ en la Fórmula 5 más allá de lo que haría su absorción
sola.

**Aire.** El término de aire $A_{air} = 4mV(1-\psi)$ usa el coeficiente de
atenuación de potencia $m$ de la Tabla 1 de la norma, resuelto por las
cadenas `air_condition` (clase de temperatura y humedad relativa, derivada
de ISO 9613-1); solo importa por encima de 1 kHz y crece con el volumen.
Los seis perfiles integrados, de `"10C_30-50"` a `"20C_70-90"` (la
cláusula 4.3 recomienda `"20C_50-70"` cuando no se especifican
condiciones), cubren solo las bandas de octava estándar de 125 Hz a 8 kHz
y no pueden combinarse con un eje de frecuencias propio;
`air_condition=None` (el valor por defecto) omite el término de aire, y
para otras frecuencias o condiciones, calcula $m$ según ISO 9613-1 y
encadena `air_absorption_area` con `equivalent_absorption_area`.

**Límites de validez (cláusula 4.6).** El modelo supone una sala corriente
y razonablemente difusa: ninguna dimensión más de 5 veces otra, pares de
superficies opuestas cuyos coeficientes difieran en menos de un factor 3
(salvo que haya objetos difusores) y una fracción de objetos por debajo de
0,2. Fuera de esos límites el campo no es difuso y el modelo yerra por el
lado optimista: la propia cláusula de precisión de la norma registra
tiempos de reverberación medidos de hasta el doble de la predicción en
salas de baja difusividad. Las alternativas clásicas para esos casos viven
en
[Predicción del tiempo de reverberación](/phonometry/es/guides/reverberation-prediction/).

## 4. Informe del recinto (`.report()`)

`ReverberationResult.report(path)` genera una ficha PDF de una página que
caracteriza el recinto: una línea de base que nombra la EN 12354-6:2003, un
bloque de cabecera de metadatos opcional (cliente, sala, descripción, volumen de
la sala, fracción de objetos, condiciones climáticas), una tabla por bandas del
área de absorción acústica equivalente $A$ y el tiempo de reverberación $T$
junto a la gráfica del tiempo de reverberación (`.plot()`), y el tiempo de
reverberación de frecuencias medias destacado con el área de absorción de
frecuencias medias al lado. La EN 12354-6 ofrece una **estimación** para campo
difuso, no una medición, por lo que no se emite ningún veredicto CUMPLE/NO
CUMPLE; un tiempo de reverberación objetivo indicado mediante el campo
`requirement` de los metadatos se imprime solo como línea de referencia, ya que
el tiempo de reverberación de una sala es un intervalo objetivo y no una
magnitud en la que simplemente cuanto más alto o más bajo, mejor. Usa el mismo
contenedor `ReportMetadata` y el mismo motor de renderizado que las demás
fichas; pasar `metadata=None` produce una ficha de caracterización básica. El
renderizado necesita reportlab (`pip install phonometry[report]`); solo se
admite `engine="reportlab"`. La ficha se renderiza en inglés por defecto; pasa
`language="es"` para una ficha en español (cadenas fijas traducidas y separador
decimal de coma).

```python
from phonometry import (
    enclosed_space_reverberation, hard_object_absorption, object_fraction,
    ReportMetadata,
)

surfaces = [                                   # por banda de octava, 125 Hz - 8 kHz
    (20.0, [0.05, 0.10, 0.20, 0.30, 0.40, 0.50, 0.55]),  # suelo enmoquetado
    (20.0, [0.20, 0.40, 0.65, 0.75, 0.80, 0.80, 0.75]),  # techo acústico
    (45.0, [0.02, 0.02, 0.03, 0.04, 0.05, 0.05, 0.05]),  # paredes de yeso pintado
]
volumes = [0.5, 0.8, 0.3]                      # mobiliario, m^3
result = enclosed_space_reverberation(
    surfaces, 50.0,
    objects=hard_object_absorption(volumes),
    object_fraction=object_fraction(volumes, 50.0),
    air_condition="20C_50-70",
)
result.report(
    "enclosed_space_fiche.pdf",
    metadata=ReportMetadata(
        specimen="Sala de reuniones, amueblada",
        test_room="Sala de reuniones M2",
        measurement_standard="EN 12354-6",
        temperature=20.0, relative_humidity=55.0,
        laboratory="Laboratorio de referencia Phonometry",
        requirement=0.6,          # impreso como línea de referencia, sin veredicto
    ),
    language="es",
)                                 # la tabla A/T por bandas + el T_mid destacado
```

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

## Véase también

- Referencia de la API: [`room.enclosed_space_absorption`](/phonometry/es/reference/api/rooms/enclosed-space-absorption/).
