<!-- canonical: https://jmrplens.github.io/phonometry/es/buildings/rooms/room-image-sources/ -->
Source: https://jmrplens.github.io/phonometry/es/buildings/rooms/room-image-sources/

Dos modelos clásicos predicen el campo sonoro de una sala rectangular antes de
construirla. El modelo de **fuentes imagen** da el patrón determinista de
reflexiones tempranas — toda la respuesta al impulso como suma de imágenes
especulares de la fuente — mientras que el modelo **estacionario** da el nivel
estadístico al que se asienta una fuente de potencia conocida, separado en un
campo directo y otro reverberante. Esta página cubre ambos en
`phonometry.room`: el primero complementa la respuesta al impulso *medida* de la
[guía de Acústica de salas](/phonometry/es/buildings/rooms/room-acoustics/) con una
sintética, y el segundo complementa la tasa de decaimiento única de la
[guía de Predicción del tiempo de reverberación](/phonometry/es/buildings/rooms/reverberation-prediction/)
con una predicción de nivel frente a distancia, uniendo la
[potencia acústica](/phonometry/es/devices/emission/sound-power/) de una fuente con el nivel
que produce en el interior.

## 1. Respuesta al impulso por fuentes imagen

Una sala rectangular rígida o absorbente — una *caja de zapatos* — refleja una
fuente puntual en sus seis paredes, y cada reflexión es exactamente el sonido en
campo libre de una **imagen especular** de la fuente. Reflejar una coordenada en
una pared ($S_n = S - 2 d\,\mathbf{n}$) convierte la fuente en una retícula
regular de imágenes, y la respuesta al impulso es el sonido directo más un impulso
retardado y atenuado por imagen,

$$
g(t) = \sum_n A_n\ \delta(t - t_n), \qquad
A_n = \frac{1}{4\pi r_n}\ e^{-m r_n / 2} \prod_{\text{paredes}} R_w^{\,k_{w,n}},
\qquad t_n = \frac{r_n}{c}.
$$

Cada imagen a distancia $r_n$ del receptor llega en $t_n = r_n/c$ con una
amplitud formada por la divergencia esférica $1/(4\pi r_n)$, el producto de los
**factores de reflexión de presión** de pared $R_w = \sqrt{1 - \alpha_w}$ cada
uno elevado al número de reflexiones $k_{w,n}$ que esa imagen hizo en la pared
$w$, y la pérdida de presión del aire $e^{-m r_n/2}$ a lo largo del camino ($m$
el coeficiente de atenuación de potencia (intensidad) en neperios por metro, de modo
que la intensidad cae como $e^{-m r}$ y la presión como $e^{-m r/2}$: el mismo $m$
que las guías de
[tiempo de reverberación](/phonometry/es/buildings/rooms/reverberation-prediction/)
y de [EN 12354-6](/phonometry/es/buildings/rooms/enclosed-space-absorption/)
entregan a sus términos $4mV$). Una caja de zapatos tiene exactamente
$\tfrac{2}{3}(2 i_0^3 + 3 i_0^2 + 4 i_0)$ imágenes audibles hasta el orden de
reflexión $i_0$ (1560 en el orden 10), y la densidad de reflexiones crece como
$\mathrm{d}N/\mathrm{d}t = 4\pi c^3 t^2 / V$.

La construcción en una planta: cada reflexión en pared es el sonido en línea
recta de una imagen en una sala espejo, así que la geometría sola fija cada
llegada. En la sala de 7 × 5 m de abajo el sonido directo llega a los 10,7 ms
y las cuatro imágenes laterales de primer orden en planta le siguen entre
17,3 y 21,6 ms; las imágenes de techo y suelo de la sala 3D se omiten en el
dibujo.

```python

from phonometry import room

# Sala de 7 x 5 x 3 m, fuente y receptor descentrados.
res = room.image_source_rir(
    dimensions=(7.0, 5.0, 3.0),
    source=(2.0, 1.6, 1.5),
    receiver=(5.2, 3.4, 1.7),
    absorption=0.12,          # absorción de pared uniforme (escalar)
    fs=48000,
    # Orden suficiente para cubrir un ajuste de T30; véase «Elegir max_order,
    # duration y fs» más abajo. El 20 por defecto trunca a la mitad la cola de
    # esta sala.
    max_order=60,
)

print(res.ir.shape)                          # (n_muestras,) RIR de banda ancha
print(round(res.direct_time * 1000, 2))      # 10.72  llegada del sonido directo, ms
print(res.times.size == room.audible_image_count(60) + 1)   # imágenes + fuente

res.plot()   # el reflectograma; la figura de abajo dibuja la misma sala a orden 10

# La RIR sintética entra directa en el análisis de decaimiento de ISO 3382.
params = room.room_parameters(res.ir, res.fs, limits=None)
print(bool(params.t30_valid[0]))             # True: la ventana de decaimiento es usable
print(round(float(params.t30[0]), 2))        # 1.06 s, especular
print(round(float(room.eyring_reverberation_time(105.0, [(142.0, 0.12)])), 2))
# 0.93 s, la estimación difusa de Eyring para la misma sala
```

`image_source_rir` devuelve un `ImageSourceResult`. Su `ir` es la RIR muestreada
(un array 1D en banda ancha, o una fila por banda de octava con absorción por
banda), mientras que la tabla **exacta** de reflexiones a resolución submuestral
se guarda en `times`, `distances`, `orders`, `amplitudes` e `image_positions`,
de modo que la geometría es exacta con independencia de la frecuencia de
muestreo. El sonido directo y las reflexiones tempranas individuales son
magnitudes geométricas exactas con precisión de máquina.

Leída como una lista de llegadas, esa tabla esconde lo que el método es en
realidad. Cada imagen está a una distancia fija $r_n$ del receptor y aporta una
única llegada en $r_n/c$, así que el reflectograma no es una señal que decae:
es una retícula estática de puntos que una esfera va leyendo según se expande
desde el receptor a la velocidad del sonido. Esa mirada convierte la densidad de
reflexiones en algo que se puede ver: el volumen de la esfera crece como $t^3$,
la retícula tiene una imagen por cada volumen de sala $V$, y el recuento de las
que ha barrido tiene que seguir por tanto $N(t) = \frac{4\pi}{3}(ct)^3/V$, cuya
derivada es la densidad de reflexiones $4\pi c^3t^2/V$ que se cita más abajo.
El clip hace ese barrido:

El reflectograma inferior muestra todo el patrón: el sonido directo a 0 dB y
luego la nube de reflexiones coloreada por orden de reflexión decayendo bajo la
envolvente de divergencia $1/r$. Las reflexiones de orden 1 (las seis paredes)
quedan justo por debajo del sonido directo; los órdenes superiores llegan más
tarde, más densos y más débiles.

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

```python

from phonometry import room

res = room.image_source_rir((7.0, 5.0, 3.0), (2.0, 1.6, 1.5),
                            (5.2, 3.4, 1.7), 0.12, fs=48000, max_order=10)

# Una línea: el reflectograma (nivel en dB rel. directo vs tiempo, por orden).
res.plot(language="es")
plt.show()

# A mano: dispersión de las amplitudes de reflexión coloreadas por orden.
t_ms = np.asarray(res.times) * 1e3
amp = np.asarray(res.amplitudes)
level = 20 * np.log10(np.abs(amp) / np.max(np.abs(amp)))
order = np.asarray(res.orders)
fig, ax = plt.subplots()
sc = ax.scatter(t_ms[order > 0], level[order > 0], c=order[order > 0],
                cmap="viridis", s=18)
ax.stem([t_ms[order == 0][0]], [0.0])         # sonido directo
fig.colorbar(sc, label="Orden de reflexión")
ax.set_xlabel("Tiempo de llegada [ms]"); ax.set_ylabel("Nivel rel. directo [dB]")
ax.set_xlim(0, 120); ax.set_ylim(-60, 5)
plt.show()
```

</details>

Cada punto del reflectograma es una imagen especular en un lugar concreto, y
`.plot_geometry()` enseña dónde: la vista en planta de abajo dibuja la sala,
la fuente, el receptor y todas las imágenes hasta tercer orden sobre la
retícula de salas espejo, coloreadas por orden de reflexión.

*La misma sala, fuente y receptor que el reflectograma de arriba, dibujados hasta
tercer orden para que la retícula siga siendo legible: el reflectograma llega al
orden 10 y esta planta es sus tres primeras capas. Cada imagen vive en una sala
espejo en el plano de altura de la fuente, y solo su distancia al receptor fija el
tiempo de llegada y la divergencia $1/(4\pi r)$ de esa reflexión.*

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

```python

from phonometry import room

res = room.image_source_rir((7.0, 5.0, 3.0), (2.0, 1.6, 1.5),
                            (5.2, 3.4, 1.7), 0.12, fs=48000, max_order=3)

# Una línea: la retícula de imágenes en planta, coloreada por orden.
res.plot_geometry(language="es")
plt.show()
```

</details>

**Por banda, por pared y con aire.** Pasa coeficientes por banda (un array por
pared `(6, n_bandas)`, un vector por banda o una lista `frequencies`) para
sintetizar un decaimiento por banda de octava; un vector de longitud 6 fija cada
pared por separado (orden `x0, xL, y0, yL, z0, zL`); y `air_attenuation` (el
coeficiente de intensidad `m` de `air_attenuation_m`) añade la pérdida de aire
`exp(-m r / 2)` que se come la cola de altas frecuencias.

```python

from phonometry import room

freqs = [250.0, 500.0, 1000.0, 2000.0, 4000.0]
alpha = np.array([[0.10, 0.15, 0.25, 0.40, 0.50]] * 6)   # (6 paredes, 5 bandas)
res = room.image_source_rir((7.0, 5.0, 3.0), (2.0, 1.6, 1.5), (5.2, 3.4, 1.7),
                            alpha, fs=48000, max_order=60, frequencies=freqs)
print(res.ir.shape)                                  # (5 bandas, n_muestras)
res.plot()   # un decaimiento por banda; la figura de abajo añade el término de aire
```

*La rama por bandas de `image_source_rir` para la sala propia de esta página,
cada banda dibujada sin aire (continua) y con $m$ a 20 °C y 50 % de HR (a trazos).
Las bandas se abren en abanico porque la absorción de las paredes sube con la
frecuencia, de T30 = 1,06 s a 250 Hz a 0,25 s a 4 kHz. El término de aire es aquí
el segundo mecanismo, mucho menor: quita un 0,4 % al decaimiento de 250 Hz y un
4,4 % al de 4 kHz. Ese es el tamaño honesto del efecto en una sala de 105 m³ — las
reflexiones sencillamente no recorren distancia suficiente — y es la razón de que
la absorción del aire sea un
[efecto de volumen](/phonometry/es/buildings/rooms/reverberation-prediction/#1-sabine-eyring-y-millington-sette)
más que un efecto de frecuencia: pon esas mismas paredes alrededor de 2 000 m³ y
el mismo argumento le quita decenas de por ciento a la banda más alta.*

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

```python

# `np`, `room`, `freqs` y `alpha` vienen del bloque por bandas de arriba.

# environment.air_attenuation_m(freqs, 20.0, 50.0), Np/m a 20 C y 50 % de HR
m = [3.02e-4, 6.28e-4, 1.074e-3, 2.277e-3, 6.831e-3]

fig, ax = plt.subplots()
for attenuation, style in ((0.0, "-"), (m, "--")):
    banded = room.image_source_rir(
        (7.0, 5.0, 3.0), (2.0, 1.6, 1.5), (5.2, 3.4, 1.7), alpha,
        fs=48000, max_order=60, frequencies=freqs,
        air_attenuation=attenuation,
    )
    for row, f in zip(banded.ir, freqs):
        time, level = room.decay_curve(row, banded.fs)
        ax.plot(time, level, style, label=f"{f:g} Hz")
ax.set_xlabel("Tiempo [s]")
ax.set_ylabel("Nivel re estado estacionario [dB]")
plt.show()
```

</details>

**Reproducir el decaimiento estadístico.** La tasa de decaimiento inicial de la
RIR sintética reproduce el tiempo de reverberación de **Eyring**
$T = -24 V \ln 10 / (c S \ln(1 - \bar\alpha))$, porque la tasa media de
reflexiones $cS/4V$ es igual a $\tfrac{c}{2}(1/L_x + 1/L_y + 1/L_z)$. La
coincidencia solo es estrecha en el límite casi cúbico: una sala alargada
sostiene la energía a lo largo de su eje largo, así que su decaimiento
*especular* puro es más lento que la estimación difusa de Eyring — exactamente
la anisotropía que los
[modelos de Fitzroy y Arau-Puchades](/phonometry/es/buildings/rooms/reverberation-prediction/)
se construyeron para corregir. El modelo capta solo reflexiones especulares (sin
difracción ni difusión) y es exacto para factores de reflexión de pared reales e
independientes del ángulo.

*Los mismos 105 m³ y la misma $\bar\alpha$ = 0,12 uniforme, estirados de un cubo a
un pasillo 6:1. Eyring *baja* al estirar la sala, porque estirar a volumen
constante añade área de contorno; el decaimiento especular *sube*, porque el eje
largo sigue devolviendo energía que el recorrido libre medio ya había dado por
perdida. Los dos coinciden dentro de un 5 % para el cubo — la tolerancia
documentada del apartado de validación de más abajo — y se separan de inmediato:
pasado aproximadamente 1,5:1 el decaimiento especular queda fuera de la banda de
±10 %, y en 6:1 es 2,5 veces la estimación de Eyring. Esta es la anisotropía que
motiva los modelos de Fitzroy y Arau-Puchades, y la razón de que la guía de
predicción del tiempo de reverberación liste las salas desproporcionadas entre los
casos en que fallan todas las fórmulas estadísticas.*

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

```python

# `np` y `room` son las importaciones del bloque por bandas de arriba.

volume, alpha = 105.0, 0.12
side = volume ** (1.0 / 3.0)
ratios, specular, eyring = [1.0, 1.5, 2.0, 3.0, 4.0, 5.0, 6.0], [], []
for r in ratios:
    lx, ly = side * r ** (2.0 / 3.0), side * r ** (-1.0 / 3.0)
    area = 2.0 * (2.0 * lx * ly + ly * ly)      # una caja lx x ly x ly
    eyring.append(room.eyring_reverberation_time(volume, [(area, alpha)]))
    res = room.image_source_rir((lx, ly, ly), (lx * 0.28, ly * 0.32, ly * 0.5),
                                (lx * 0.74, ly * 0.68, ly * 0.57), alpha,
                                fs=48000, max_order=60)
    # La pendiente inicial de la densidad de energía reverberante, desde la
    # tabla exacta de reflexiones y no desde la RI muestreada.
    edges = np.arange(0.0, float(np.max(res.times)), 0.004)
    energy, _ = np.histogram(res.times, bins=edges, weights=np.asarray(res.amplitudes) ** 2)
    centres, good = 0.5 * (edges[:-1] + edges[1:]), energy > 0.0
    level = 10.0 * np.log10(np.where(good, energy, 1.0) / energy[good][0])
    band = good & (level <= -1.0) & (level >= -20.0)
    specular.append(-60.0 / np.polyfit(centres[band], level[band], 1)[0])

fig, ax = plt.subplots()
ax.plot(ratios, eyring, "--", label="Eyring")
ax.plot(ratios, specular, "-o", label="especular (fuentes imagen)")
ax.set_xlabel("Alargamiento de la sala $L_x : L_y = L_z$")
ax.set_ylabel("Tiempo de reverberación [s]")
ax.legend()
plt.show()
```

</details>

### Parámetros de `image_source_rir()`

| Parámetro | Tipo | Unidades | Rango / defecto | Notas |
| :--- | :--- | :--- | :--- | :--- |
| `dimensions` | (float, float, float) | m | todas > 0 | Longitudes de sala `(Lx, Ly, Lz)` |
| `source` / `receiver` | (float, float, float) | m | estrictamente dentro de la sala | Posiciones `(x, y, z)` |
| `absorption` | escalar / (6,) / (n,) / (6, n) | — | `[0, 1]` | Uniforme, por pared, por banda o por pared y banda |
| `fs` | int | Hz | > 0 | Frecuencia de muestreo |
| `max_order` | int | — | ≥ 0, defecto 20 | Corte de orden de reflexión |
| `speed_of_sound` | float | m/s | > 0, defecto 343 | Velocidad del sonido `c` |
| `air_attenuation` | float o (n,) | 1/m | ≥ 0, defecto 0 | Coeficiente de intensidad del aire `m` |
| `duration` | float, opcional | s | > 0 | Longitud de la RIR (defecto: última llegada) |
| `frequencies` | (n,), opcional | Hz | — | Centros de banda que etiquetan un resultado por banda |

Devuelve un `ImageSourceResult` (`ir`, `fs`, `frequencies` y la tabla exacta de
reflexiones `times`/`distances`/`orders`/`amplitudes`/`image_positions`) con
`.plot()`, `.plot_geometry()` (la planta de salas espejo de arriba) y una
propiedad `direct_time`. `audible_image_count(order)` da el
recuento de imágenes de la caja de zapatos y `reflection_density(t, volume)` la
densidad $4\pi c^3 t^2 / V$.

### Elegir `max_order`, `duration` y `fs`

`max_order` no es un mando de calidad, es un **horizonte temporal**. La retícula
de imágenes solo está completa hasta un radio de aproximadamente `max_order` ×
la dimensión más corta de la sala, así que cubrir $t$ segundos de decaimiento
exige

$$
\text{orden} \approx \frac{c\,t}{L_\text{min}} .
$$

Un ajuste de T30 abarca 35 dB, unos $0{,}58\,T$ de decaimiento. La sala de
7 × 5 × 3 m de arriba tiene $L_\text{min} = 3$ m y un tiempo de Eyring cercano a
0,93 s, así que necesita $343 \times 0{,}54 / 3 \approx 60$. Por debajo de eso
la cola sencillamente falta, y el T30 ajustado sale corto:

| `max_order` | imágenes audibles | T30 ajustado | tiempo de ejecución |
| ---: | ---: | ---: | ---: |
| 12 | 2 624 | 0,28 s | < 0,1 s |
| 20 (por defecto) | 11 520 | 0,43 s | < 0,1 s |
| 30 | 37 880 | 0,60 s | < 0,1 s |
| 40 | 88 640 | 0,75 s | 0,1 s |
| 60 | 295 360 | 1,06 s | 0,2 s |

La estimación de Eyring para esta sala es de 0,93 s, así que el orden 12 se
queda corto por un factor de 3,3 y el 20 por defecto, por un factor de 2,1. La
objeción del coste no vale: el orden 60 son 295 360 imágenes y se resuelve en
dos décimas de segundo.

*T30 leído por `room_parameters` sobre la RIR sintética, frente al orden con el que
se construyó la retícula. La subida es el truncamiento: cada orden extra añade una
capa de llegadas más tardías, así que la ventana de ajuste sigue encontrando más
decaimiento que ajustar. La regla de completitud fija el **suelo** — por debajo del
orden que cubre la ventana de ajuste el número está sencillamente mal, que es lo
que cuantifica la tabla de arriba —, pero no es un criterio de convergencia. Pasado
el cruce, el T30 especular sigue derivando por encima de Eyring, porque una sala de
7 × 5 × 3 no es casi cúbica y su eje largo sostiene energía que la estimación de
campo difuso ya ha gastado; la figura siguiente barre exactamente eso. Lee el T30
de este modelo como una magnitud especular dependiente del orden, no como una
predicción de un tiempo de reverberación medido.*

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

```python

# `room` es la importación del bloque del apartado 1 de arriba.

orders = list(range(8, 62, 2))
t30 = []
for order in orders:
    res = room.image_source_rir((7.0, 5.0, 3.0), (2.0, 1.6, 1.5),
                                (5.2, 3.4, 1.7), 0.12, fs=48000,
                                max_order=order)
    params = room.room_parameters(res.ir, res.fs, limits=None)
    t30.append(float(params.t30[0]))

eyring = float(room.eyring_reverberation_time(105.0, [(142.0, 0.12)]))
fig, ax = plt.subplots()
ax.plot(orders, t30, "-o", label="T30 de la RIR sintética")
ax.axhline(eyring, ls="--", label=f"Eyring, {eyring:.2f} s")
ax.fill_between(orders, 0.9 * eyring, 1.1 * eyring, alpha=0.15)
ax.set_xlabel("max_order")
ax.set_ylabel("Tiempo de reverberación [s]")
ax.legend()
plt.show()
```

</details>

**`t30_valid` no ve una retícula truncada.** Lee el rango de decaimiento del
array que le entreguen, así que devuelve `True` en todos los órdenes de la tabla
anterior. El indicador detecta una *grabación* ruidosa o demasiado corta; no puede
detectar un modelo que dejó de generar reflexiones. Una `duration` más corta que
el decaimiento trunca la cola exactamente igual, y en silencio.

Otras dos advertencias pertenecen a este mismo apartado. `fs` cuantiza todas las
llegadas a la retícula de muestreo, así que el trabajo con reflexiones tempranas
— tiempos de llegada, ITDG, fracciones laterales — debe leer la tabla exacta
`times` / `amplitudes` en lugar de buscar picos en la `ir` muestreada. Y
`absorption` entra como un factor de reflexión de presión real e independiente
del ángulo $\sqrt{1-\alpha}$, de modo que la incidencia rasante se trata igual
que la normal.

Y por último, la frontera honesta: si el orden que hace falta para cubrir el
tiempo de reverberación vuelve impracticable la ejecución — una sala grande con
un $L_\text{min}$ pequeño, o una cola larga — al método de imágenes puro se le
está pidiendo un trabajo que corresponde a un modelo híbrido con cola tardía
estadística, o a la
[simulación FDTD](/phonometry/es/simulation/fdtd-simulation/).

## 2. Campo estacionario de sala

Cuando una fuente de potencia acústica constante funciona en una sala, el nivel se
asienta en la suma de un **campo directo** que cae con la distancia y un **campo
reverberante** difuso que es (aproximadamente) el mismo en todas partes. La
**constante de sala** $R = S\bar\alpha/(1-\bar\alpha)$ mide cuánto campo
reverberante levanta una potencia dada, y el nivel estacionario es

$$
L_p = L_W + 10 \log_{10}\!\left( \frac{Q}{4\pi r^2} + \frac{4}{R} \right),
$$

con el factor de directividad de la fuente $Q$ (1 omnidireccional, 2 sobre un
suelo duro, 4 en una arista, 8 en una esquina). Los dos términos se cruzan en la
**distancia crítica** $r_\mathrm{c} = \sqrt{Q R / 16\pi}$: más cerca que $r_\mathrm{c}$ domina el
campo directo y duplicar la distancia baja el nivel 6 dB; más lejos manda el
campo reverberante y alejarse apenas ayuda.

El $(1-\bar\alpha)$ del denominador de $R$ y el 4 de la ecuación del nivel salen
de la misma contabilidad. Solo la potencia que *no* se absorbe en el primer
encuentro pasa a construir el campo reverberante, que es lo que divide $A$ entre
$(1-\bar\alpha)$; y el 4 es el factor de campo difuso entre densidad de energía e
intensidad incidente sobre una superficie, el mismo 4 que aparece en el término de
aire $4mV$ de las fórmulas de reverberación. Eso le da a $R$ su lectura: es el
área de ventana abierta que retiraría potencia al mismo ritmo, así que una sala con
$R$ = 25 m² se comporta, en lo que respecta a un oyente lejano, como una sala con
25 m² de ventana abierta. Por tanto $R$ siempre supera al área de Sabine
$A = S\bar\alpha$, y la diferencia se desvanece cuando $\bar\alpha \to 0$, que es
la razón de que el módulo prefiera $R$ y de que el $A/16\pi$ de Kuttruff coincida
con él en una sala viva.

Dónde se monta una fuente no es un detalle, porque $Q$ mueve $r_\mathrm{c}$ como
$\sqrt{Q}$: la misma máquina tiene una distancia crítica de 1,11 m sobre un
soporte y de 3,14 m en la esquina del mismo taller. La lámina de abajo fija los
cuatro valores a montajes reales.

*Los cuatro valores de $Q$ como cuatro montajes, con la distancia crítica que
produce cada uno en el taller de 12 × 8 × 4 m de la figura de abajo
($R$ = 62 m²). $Q$ multiplica solo el término directo: la meseta reverberante no
se mueve, así que montar una máquina en la esquina sube el nivel cerca de ella sin
cambiar el nivel en el extremo opuesto de la sala.*

```python
from phonometry import room

field = room.steady_state_field(
    sound_power_level=90.0,     # Lw, dB re 1 pW
    surface_area=100.0,          # área total de contorno S, m^2
    mean_absorption=0.2,         # absorción media de Sabine alpha_bar
)
print(round(field.room_constant, 1))          # 25.0 m^2
print(round(field.critical_distance, 2))       # 0.71 m
field.plot()                                    # directo / reverberante / total vs distancia
```

Para una sala que merece dibujarse — un taller de 12 × 8 × 4 m, $S$ = 352 m²,
$\bar\alpha$ = 0,15, así que $R$ = 62 m² —, `SteadyFieldResult.plot()` dibuja los
niveles directo, reverberante y total frente a la distancia con la distancia
crítica marcada: la curva total sigue el campo directo $1/r^2$ cerca de la fuente
y se aplana en la meseta reverberante más allá de $r_\mathrm{c}$ = 1,11 m.

*Una fuente de 90 dB re 1 pW en un taller de 12 x 8 x 4 m con absorción
media de 0,15: dentro de $r_\mathrm{c} = 1{,}11$ m alejarse baja el nivel 6 dB por
duplicación; más allá manda la meseta reverberante y solo la absorción, no
la distancia, baja el nivel (Bies 5.ª ed., §6.4).*

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

```python

from phonometry import room

field = room.steady_state_field(
    sound_power_level=90.0,     # Lw, dB re 1 pW
    surface_area=352.0,          # un taller de 12 x 8 x 4 m
    mean_absorption=0.15,
)

# Una línea: niveles directo, reverberante y total con rc marcada.
field.plot(language="es")
plt.show()

# A mano, desde los campos del resultado:
fig, ax = plt.subplots()
ax.semilogx(field.distances, field.direct, "--", label="Campo directo")
ax.semilogx(field.distances, field.reverberant, ":", label="Campo reverberante")
ax.semilogx(field.distances, field.total, label="Total")
ax.axvline(field.critical_distance, ls="-.",
           label=f"rc = {field.critical_distance:.2f} m")
ax.set_xlabel("Distancia a la fuente [m]")
ax.set_ylabel("Nivel de presión acústica [dB]")
ax.legend()
plt.show()
```

</details>

*Izquierda: $Q$ mueve el cruce, no la meseta. Duplicar $Q$ sube el campo directo
3 dB y empuja $r_\mathrm{c}$ hacia fuera un factor $\sqrt{2}$, pero el nivel reverberante
lejos de la fuente es idéntico en las cuatro curvas, porque $Q$ nunca entra en el
término $4/R$. Derecha: la absorción hace lo contrario. Escalonar $\bar\alpha$ de
0,05 a 0,35 lleva la constante de sala de 18,5 m² a 189,5 m² y la meseta de
83,3 dB a 73,2 dB — 10,1 dB, exactamente $10\lg(R_2/R_1)$ — mientras que la
asíntota de campo cercano no se mueve. Ese es el contenido preciso de «más allá de
$r_\mathrm{c}$ solo la absorción, y no la distancia, baja el nivel», y son siete veces más
absorción para 10 dB.*

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

```python

# `room` es la importación del bloque de campo estacionario de arriba.

grid = np.logspace(-1, 1.3, 200)
fig, (left, right) = plt.subplots(1, 2, figsize=(12.5, 5.0), sharey=True)
for q in (1.0, 2.0, 4.0, 8.0):
    field = room.steady_state_field(sound_power_level=90.0, surface_area=352.0,
                                    mean_absorption=0.15, distances=grid,
                                    directivity=q)
    left.semilogx(field.distances, field.total, label=f"Q = {q:g}")
    left.axvline(field.critical_distance, ls=":", alpha=0.5)
for absorption in (0.05, 0.15, 0.35):
    field = room.steady_state_field(sound_power_level=90.0, surface_area=352.0,
                                    mean_absorption=absorption, distances=grid,
                                    directivity=2.0)
    right.semilogx(field.distances, field.total,
                   label=rf"$\bar\alpha$ = {absorption:g}")
for ax in (left, right):
    ax.set_xlabel("Distancia a la fuente [m]")
    ax.legend()
left.set_ylabel("Nivel de presión acústica [dB]")
plt.show()
```

</details>

Las piezas se exponen por separado, de modo que una medición
de emisión puede pasar directa a una predicción de nivel:

```python
from phonometry import room

R = room.room_constant(100.0, 0.2)                     # constante de sala de Bies, 25 m^2
print(round(float(room.critical_distance(R)), 3))      # 0.705 m (Q = 1)
print(round(float(room.steady_state_spl(90.0, 5.0, R)), 2))   # nivel a 5 m, dB
```

**$Q$ entra dos veces, y la segunda es una decisión de modelado.** Siempre
concentra el campo directo en $Q/(4\pi r^2)$. Que *además* aumente la potencia
radiada depende del comportamiento en impedancia de la propia fuente (Norton y
Karczub, 2.ª ed., tabla 4.5), y `steady_state_spl` lo expone como `source_model`.
Una fuente de **potencia constante** radia $\Pi_0$ esté donde esté — el valor por
defecto, y el modelo adecuado para una máquina cuya salida fijan sus propias
pérdidas internas. Una fuente de **velocidad de volumen constante** queda cargada
por los contornos reflectantes y radia $\Pi_0 Q$, de modo que una esquina añade
$10\lg Q$ = 9 dB por encima de la concentración por directividad; esa es la cota
superior conservadora que declarar cuando se desconoce el tipo de fuente. Una
fuente de **presión constante** radia $\Pi_0/Q$, la cota inferior teórica.

```python
# `room` y `R` vienen del bloque de arriba.
print([round(float(room.steady_state_spl(90.0, 5.0, R, directivity=8.0,
                                         source_model=model)), 1)
       for model in room.SOURCE_POWER_MODELS])
# [82.7, 91.7, 73.7] dB para constant_power / constant_volume / constant_pressure
```

Dieciocho decibelios entre las cotas, para una sola máquina montada en esquina.
Las normas dejan la elección al ingeniero, así que, en cualquier informe que
lleve un nivel previsto, declara qué modelo se ha supuesto.

**Cuánto vale la meseta reverberante.** Como la meseta es $L_W + 10\lg(4/R)$,
añadir absorción la cambia en $10\lg(R_2/R_1)$: duplicar la constante de sala
compra 3 dB, y una rehabilitación realista en un taller duro compra quizá de 5 a
8 dB antes de que el denominador $(1-\bar\alpha)$ sature el rendimiento. De ahí se
siguen dos consecuencias. Tratar la sala solo ayuda a los receptores **más allá**
de la distancia crítica, así que un operario de pie junto a la máquina no gana
nada con un techo acústico y ahí la solución es la fuente, un cerramiento o una
pantalla. Y la meseta plana es una idealización: en un espacio industrial grande o
achatado el nivel sigue bajando con la distancia bastante más allá del cruce
previsto, así que este modelo sobrestima el nivel lejos de la fuente, subestima el
beneficio de la distancia, y el cruce se lee mejor como una referencia de orden de
magnitud que como una frontera.

La distancia de reverberación de Kuttruff ($r_\mathrm{c} = \sqrt{A/16\pi}$ para $Q = 1$)
usa el área de absorción de Sabine $A = S\bar\alpha$ en lugar de la constante de
sala $R = A/(1-\bar\alpha)$; ambas coinciden para $\bar\alpha$ pequeño, y este
módulo usa $R$ de modo que $r_\mathrm{c}$ es exactamente el cruce de su propio
`steady_state_spl`. Pasa `characteristic_impedance=rho_c` para añadir el término
$10\log_{10}(\rho c / 400)$ de Bies (unos +0,14 dB a 20 °C).

**Dónde se difumina la estadística.** La **frecuencia de Schroeder**
$f_\mathrm{s} = 2000\sqrt{T/V}$ ($V$ en m³, $T$ en s) marca aproximadamente la transición
modal-a-difuso, un cruce heurístico y no un corte abrupto: bastante por debajo
dominan los modos discretos y los supuestos difusos de $R$ y $r_\mathrm{c}$ pierden
fiabilidad, bastante por encima los modos se solapan y esta imagen estadística
se cumple. En salas límite conviene comprobar banda a banda.

La constante 2000 está a un solo razonamiento del material que esta página ya
lleva. El amortiguamiento da a cada modo una anchura de banda a media potencia de
unos $2{,}2/T$ hercios, así que los modos de una sala que decae son resonancias
solapadas y no líneas; el número de ellos por hercio es la **densidad modal** que
se deriva en el §3, que crece con el cuadrado de la frecuencia, así que el
solapamiento se vuelve inevitable por encima de cierta frecuencia. Pide
aproximadamente tres modos dentro de una anchura de banda — impón
$3 \approx (2,2/T)\,(4\pi V f^2/c_0^3)$ — y despejar $f$ da
$f_\mathrm{s} \approx 2000\sqrt{T/V}$ con $c_0 \approx 343$ m/s. De ahí salen tres cosas.
La constante codifica una *elección* de cuánto solapamiento cuenta como difuso,
así que los autores más estrictos citan 4000 para la misma física. Una sala grande
alcanza la transición a una frecuencia más baja simplemente porque tiene más modos
a cualquier frecuencia. Y la transición es suave, así que una banda que quede a
caballo de $f_\mathrm{s}$ debe comprobarse posición a posición en lugar de darse por buena.
La figura de la escalera de modos del §3 muestra el cruce directamente: su
densidad modal supera un modo por hercio justo alrededor de la frecuencia de
Schroeder marcada.

```python
from phonometry import room
print(round(float(room.schroeder_frequency(1.0, 200.0)), 0))   # 141 Hz
```

### Parámetros de `steady_state_field()`

| Parámetro | Tipo | Unidades | Rango / defecto | Notas |
| :--- | :--- | :--- | :--- | :--- |
| `sound_power_level` | float | dB re 1 pW | — | Nivel de potencia de la fuente `Lw` |
| `surface_area` | float | m² | > 0 | Área total de contorno `S` |
| `mean_absorption` | float | — | `(0, 1)` | Absorción media de Sabine `alpha_bar` |
| `distances` | array 1D, opcional | m | > 0 | Rejilla de distancias (defecto: `0.1 rc` a `10 rc`) |
| `directivity` | float | — | > 0, defecto 1 | Factor de directividad de la fuente `Q` |
| `characteristic_impedance` | float, opcional | Pa·s/m | > 0 | Añade el término `10 lg(rho c / 400)` |

Devuelve un `SteadyFieldResult` (`distances`, `direct`, `reverberant`, `total`,
`critical_distance`, `room_constant`) con `.plot()`. Las piezas `room_constant`,
`critical_distance`, `schroeder_frequency` y `steady_state_spl` también son
invocables directamente (cada una acepta arrays por banda).

## 3. Modos de una sala rectangular

Por debajo de la frecuencia de Schroeder la imagen estadística del apartado 2
deja de valer y la sala es un puñado de ondas estacionarias discretas. Para la
caja rectangular de paredes rígidas la ecuación de ondas se separa y las
frecuencias propias son exactas (Long, *Architectural Acoustics* 2.ª ed.,
ec. (8.43)):

$$
f_{n_x n_y n_z} = \frac{c_0}{2}
\sqrt{\left(\frac{n_x}{l_x}\right)^2 + \left(\frac{n_y}{l_y}\right)^2
      + \left(\frac{n_z}{l_z}\right)^2},
$$

con órdenes enteros no negativos que cuentan los planos nodales de cada eje.
Cuántos de los tres órdenes son distintos de cero da nombre a la familia:
**axial** (uno, una onda que rebota entre un par de paredes, la más intensa),
**tangencial** (dos, que roza cuatro paredes, unos 3 dB más débil) y **oblicuo**
(tres, que involucra las seis, aún más débil).

```python
from phonometry import room

modes = room.room_modes(
    (7.0, 5.0, 3.0),            # lx, ly, lz en metros
    max_frequency=100.0,
    speed_of_sound=344.0,
    reverberation_time=0.8,     # opcional: lleva la frecuencia de Schroeder
)
print(modes.orders[0], round(float(modes.frequencies[0]), 1))  # [1 0 0] 24.6 Hz
print(modes.count_by_kind())   # {'axial': 7, 'tangential': 10, 'oblique': 4}
print(round(modes.schroeder_frequency, 0))                     # 175 Hz
modes.plot()                    # escalera de modos por familia + densidad modal
```

Contar los puntos de la retícula dentro del octante positivo de una esfera de radio
$k = 2\pi f/c_0$, con las correcciones de medio y de cuarto peso para los
puntos situados en los planos y ejes coordenados, da el **recuento integrado de
modos** (ec. (8.45), tras Morse y Pierce) y su derivada, la **densidad modal**
(ec. (8.46)):

$$
N(f) = \frac{4\pi}{3} V \left(\frac{f}{c_0}\right)^3
     + \frac{\pi}{4} S \left(\frac{f}{c_0}\right)^2
     + \frac{L}{8} \frac{f}{c_0},
\qquad
\frac{dN}{df} = \frac{4\pi V f^2}{c_0^3} + \frac{\pi S f}{2 c_0^2}
              + \frac{L}{8 c_0},
$$

con el volumen $V$, el área total de paredes $S$ y la suma $L$ de las doce
aristas. Son estimaciones asintóticas: por debajo de unas pocas decenas de
modos la enumeración exacta de `room_modes` es la respuesta honesta, mientras
que en la zona alta son precisas y mucho más baratas.

```python
from phonometry import room

room_dims = (7.0, 5.0, 3.0)
print(round(float(room.room_mode_count(200.0, room_dims, speed_of_sound=344.0)), 1))
# 128,5, frente a los 128 modos realmente enumerados por debajo de 200 Hz
print(round(float(room.room_modal_density(1000.0, room_dims, speed_of_sound=344.0)), 1))
# 34,3 modos/Hz
```

*La sala de 7 x 5 x 3 m de la tabla 8.1 de Long hasta 200 Hz. Por debajo de
unos 60 Hz los modos axiales están aislados y cada uno es audible por separado;
hacia la frecuencia de Schroeder de 175 Hz ($T = 0{,}8$ s) la familia oblicua ya
ha rellenado el espectro y la densidad modal ha superado un modo por hercio, que
es donde toma el relevo el campo estadístico del apartado 2.*

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

```python

# `room` es el import del bloque de room_modes de arriba.

# Long, Architectural Acoustics 2.ª ed., tabla 8.1.
modes = room.room_modes((7.0, 5.0, 3.0), max_frequency=200.0,
                        speed_of_sound=344.0, reverberation_time=0.8)

# En una línea: la escalera de modos por familia con la densidad modal debajo.
modes.plot(language="es")
plt.show()

# A mano: dispersión de las frecuencias propias, una fila por familia.
kinds = np.asarray(modes.kinds)
rows = {"axial": 0, "tangential": 1, "oblique": 2}
fig, ax = plt.subplots()
for name, y in rows.items():
    sel = kinds == name
    ax.vlines(np.asarray(modes.frequencies)[sel], y, y + 0.8, label=name)
ax.axvline(modes.schroeder_frequency, ls=":", color="k",
           label=f"Schroeder {modes.schroeder_frequency:.0f} Hz")
ax.set_yticks([0.4, 1.4, 2.4], list(rows))
ax.set_xlabel("Frecuencia [Hz]")
ax.legend()
plt.show()
```

</details>

### Parámetros de `room_modes()`

| Parámetro | Tipo | Unidades | Rango / defecto | Notas |
| :--- | :--- | :--- | :--- | :--- |
| `dimensions` | tupla de 3 | m | > 0 | Dimensiones de la sala `(lx, ly, lz)` |
| `max_frequency` | float | Hz | > 0, defecto 200 | Modo más alto enumerado |
| `speed_of_sound` | float | m/s | > 0, defecto 343 | `c0` |
| `reverberation_time` | float, opcional | s | > 0 | Añade la frecuencia de Schroeder al resultado |

Devuelve un `RoomModesResult` (`orders`, `frequencies`, `kinds`, `dimensions`,
`speed_of_sound`, `schroeder_frequency`, más las propiedades `volume`,
`surface_area` y `edge_length` y el método `count_by_kind()`) con `.plot()`.
Las piezas `room_mode_frequency`, `room_mode_count` y `room_modal_density` son
invocables directamente.

**Cómo leer la escalera.** Dos cosas importan más que cualquier frecuencia
concreta. Los modos que coinciden colorean el sonido: si las dimensiones son
múltiplos enteros bajos entre sí, la energía se agolpa en unas pocas
frecuencias, y por eso una sala cúbica es la peor sala de escucha posible y
existen las tablas de proporciones de Bolt y otros. Y los modos se apiñan al
subir la frecuencia, hasta fundirse en el continuo que supone el modelo
estadístico del apartado 2.

La degeneración es algo que se cuenta, no una cuestión de gusto. Tres salas del
mismo volumen de 105 m³, enumeradas hasta 200 Hz, contienen aproximadamente el
mismo *número* de modos y un número de *frecuencias* completamente distinto.

*El mismo volumen en tres formas. El cubo de 4,72 m enumera 132 modos en solo
**26 frecuencias distintas** — un amontonamiento de cinco a uno — con un hueco de
15,0 Hz en la escalera; la sala 2:1:1 logra 36 frecuencias distintas de 129 y un
hueco aún mayor, de 22,9 Hz; la sala de proporciones de Bolt 1 : 1,4 : 1,9 da
**121 frecuencias distintas de 126** y su mayor hueco es de 9,5 Hz. Las
frecuencias amontonadas se oyen como coloración en esas notas, y los huecos entre
ellas como notas que la sala se traga. Esto es lo que compra la proporción, y en
fase de proyecto no cuesta nada.*

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

```python

# `room` es el import del bloque de room_modes de arriba.

volume = 105.0
half = (volume / 2.0) ** (1 / 3)
bolt = (volume / (1.0 * 1.4 * 1.9)) ** (1 / 3)
shapes = {
    "cubo": (volume ** (1 / 3),) * 3,
    "2 : 1 : 1": (2 * half, half, half),
    "Bolt 1 : 1,4 : 1,9": (bolt, 1.4 * bolt, 1.9 * bolt),
}
fig, axes = plt.subplots(len(shapes), 1, sharex=True)
for ax, (name, dims) in zip(axes, shapes.items()):
    modes = room.room_modes(dims, max_frequency=200.0)
    freqs = np.asarray(modes.frequencies)
    ax.vlines(freqs, 0, 1)
    ax.set_ylabel(f"{name}\n{np.unique(np.round(freqs, 1)).size} distintas")
axes[-1].set_xlabel("Frecuencia [Hz]")
plt.show()
```

</details>

**Dónde está la presión.** La forma modal de $(n_x, n_y, n_z)$ en una caja rígida
es el producto de cosenos
$\cos(n_x\pi x/l_x)\cos(n_y\pi y/l_y)\cos(n_z\pi z/l_z)$, y dos consecuencias de
esa única fórmula valen más que toda la lista de frecuencias. Todos los modos
tienen un **antinodo de presión en cada esquina**, porque ahí todos los cosenos
valen $\pm 1$, que es la razón de que un subwoofer y una trampa de graves vayan
los dos en una esquina, y de que un micrófono situado en una esquina lea de más
en las bandas bajas. Y un eje cuyo orden sea impar tiene un **nodo en su punto medio**,
así que una posición de escucha situada exactamente a la mitad de una dimensión de
la sala queda en un nulo de todos los modos axiales impares de ese eje; las
posiciones de medición en baja frecuencia se apartan de los planos medios por la
misma razón. La fuente importa tanto como el receptor: una fuente situada en el
plano nodal de un modo no puede excitarlo en absoluto. Lo que el modelo de paredes
rígidas no puede decirte es con cuánta fuerza resuena cada resonancia, porque eso
lo fija el amortiguamiento que omite: para eso, malla la sala y ejecuta la
[simulación FDTD 2D](/phonometry/es/simulation/fdtd-simulation/).

## Validación

Las implementaciones se comprueban contra las formas cerradas y los anclajes
numéricos de los propios textos fuente (ver el
[informe de conformidad](/phonometry/es/reference/conformance/)):

- la amplitud del sonido directo $1/(4\pi r)$ y su retardo $r/c$ (geometría
  exacta), el recuento de imágenes audibles (Kuttruff 6.ª ed., ec. (9.23)) y
  la densidad de reflexiones (ec. (4.6));
- el tiempo de reverberación de Eyring recuperado del decaimiento de la RIR
  sintética en el límite casi cúbico (tolerancia documentada ≈ 10 %), y un
  [esquema FDTD 2D](/phonometry/es/simulation/fdtd-simulation/)
  independiente que reproduce el retardo del eco de pared rígida y el
  $T_{60}$ con amortiguamiento uniforme;
- la constante de sala, la distancia crítica como cruce exacto
  directo/reverberante, la frecuencia de Schroeder (el ejemplo de aula de
  Kuttruff, $V = 200$ m³, $T = 1$ s → 141 Hz) y el nivel estacionario
  (Bies 5.ª ed., ec. (6.43));
- los seis modos que Long imprime para su sala de 7 x 5 x 3 m (tabla 8.1:
  24,6, 34,5, 42,4, 49,2, 57,4 y 60,1 Hz, reproducidos dentro de una unidad
  del último dígito impreso con su $c_0 = 344$ m/s) y los 34 modos por hercio
  que da para esa misma sala a 1 kHz (ec. (8.46)), además del recuento de
  modos contrastado con la enumeración exacta y la degeneración de una sala
  cúbica.

## Qué cubre esta guía

El libro *Room Acoustics* de Kuttruff (la construcción de fuentes imagen del
apartado 4.1, la fórmula de reverberación de Eyring usada en la comprobación
casi cúbica y la frecuencia de Schroeder del apartado 3.6), *Auralization* de
Vorländer (el modelo de fuentes espejo del capítulo 11, sus expresiones de
factor de reflexión y retardo) y la descomposición por orden de reflexión de
Allen y Berkley, todo implementado por `room.image_source_rir`; y el campo
estacionario de sala de Bies, Hansen y Howard del apartado 6.4 (constante de
sala, directividad $Q$, distancia crítica) implementado por
`room.steady_state_field`, `room.room_constant`, `room.critical_distance`,
`room.steady_state_spl` y `room.schroeder_frequency`; y el capítulo 8 de
*Architectural Acoustics* de Long (las frecuencias propias de la sala
rectangular de la ec. (8.43) con su clasificación axial/tangencial/oblicua, y
el recuento de modos y la densidad modal de Morse y Pierce de las ecs. (8.45)
y (8.46)) implementado por `room.room_modes`, `room.room_mode_frequency`,
`room.room_mode_count` y `room.room_modal_density`.

El modelo de fuentes imagen solo capta reflexiones especulares: sin difracción
y sin dispersión difusa, de modo que el decaimiento real de una sala alargada
es más lento que la estimación de Eyring de campo difuso frente a la que se
comprueba (la anisotropía que los modelos de Fitzroy y Arau-Puchades de la
[guía de predicción del tiempo de
reverberación](/phonometry/es/buildings/rooms/reverberation-prediction/) se
diseñaron para corregir). La distancia de reverberación alternativa de
Kuttruff (que usa el área de absorción de Sabine en lugar de la constante de
sala) se cita como comparación pero no está implementada: `steady_state_field`
y `critical_distance` usan siempre la formulación de Bies con la constante de
sala. El cálculo de modos supone paredes rígidas y planta rectangular: da las
*frecuencias* propias, no la amplitud de presión en un punto de escucha, y no
dice nada del amortiguamiento, la forma modal ni una geometría que no sea una
caja. Para eso, malla la sala y ejecuta el [esquema FDTD
2D](/phonometry/es/simulation/fdtd-simulation/). Las proporciones preferentes
de Bolt se comentan pero no se tabulan.

## Véase también

- [Acústica de salas](/phonometry/es/buildings/rooms/room-acoustics/): la respuesta al
  impulso *medida* (ISO 18233) y los parámetros de ISO 3382 que alimenta la RIR
  sintética.
- [Predicción del tiempo de reverberación (Sabine, Arau)](/phonometry/es/buildings/rooms/reverberation-prediction/):
  la tasa de decaimiento estadística que reproduce el modelo de fuentes imagen y
  los modelos de anisotropía más allá de ella.
- [Absorción acústica en recintos (EN 12354-6)](/phonometry/es/buildings/rooms/enclosed-space-absorption/):
  el área de absorción equivalente tras la absorción media `alpha_bar`.
- [Potencia acústica](/phonometry/es/devices/emission/sound-power/): el `Lw` que impulsa el
  nivel estacionario.
- [Simulación de ondas FDTD 2D](/phonometry/es/simulation/fdtd-simulation/): el
  esquema de ondas independiente usado para contrastar el eco de pared rígida y
  el decaimiento.
- [Teoría: Salas y edificación](/phonometry/es/reference/theory/rooms-buildings/):
  las derivaciones de la red de imágenes y del campo estacionario.
- [Informe de conformidad](https://github.com/jmrplens/phonometry/blob/main/docs/CONFORMANCE.md):
  las formas cerradas y anclas resueltas contra las que se validan estas
  implementaciones.
- Referencia de la API: [`room.image_source`](/phonometry/es/reference/api/rooms/image-source/)
  y [`room.steady_field`](/phonometry/es/reference/api/rooms/steady-field/).
- Teoría: [Respuesta al impulso y parámetros de acústica de salas](/phonometry/es/reference/theory/rooms-buildings/#respuesta-al-impulso-y-parámetros-de-acústica-de-salas-iso-18233-iso-3382-1-2-3): el modelo geométrico que hay detrás del método de las imágenes y su relación con el estadístico.
