---
title: "Fuentes imagen y campo estacionario de sala"
description: "La respuesta al impulso determinista por fuentes imagen de una sala rectangular (Kuttruff, Vorländer) y el nivel estacionario estadístico con la constante de sala, la distancia crítica y la frecuencia de Schroeder (Bies)."
references:
  - type: book
    authors: ["Kuttruff, H."]
    year: 2016
    title: "Room acoustics"
    edition: "6th ed."
    publisher: "CRC Press"
    doi: "10.1201/9781315372150"
    note: "La construcción por fuentes imagen (§4.1), la reverberación de Eyring y la distancia de reverberación (§5.5–5.6) y la frecuencia de Schroeder (§3.6) de esta página."
  - type: book
    authors: ["Vorländer, M."]
    year: 2020
    title: "Auralization: Fundamentals of acoustics, modelling, simulation, algorithms and acoustic virtual reality"
    edition: "2nd ed."
    publisher: "Springer"
    doi: "10.1007/978-3-030-51202-6"
    note: "El modelo de fuentes especulares del §1 (capítulo 11), con las expresiones de factor de reflexión y retardo."
  - type: article
    authors: ["Allen, J. B.", "Berkley, D. A."]
    year: 1979
    title: "Image method for efficiently simulating small-room acoustics"
    journal: "The Journal of the Acoustical Society of America"
    volume: 65
    issue: 4
    pages: "943-950"
    doi: "10.1121/1.382599"
    note: "La descomposición del recuento de reflexiones de la red de imágenes de la sala rectangular usada en §1."
  - type: book
    authors: ["Bies, D. A.", "Hansen, C. H.", "Howard, C. Q."]
    year: 2017
    title: "Engineering noise control"
    edition: "5th ed."
    publisher: "CRC Press"
    doi: "10.1201/9781351228152"
    note: "El campo estacionario de sala y la constante de sala del §2 (§6.4)."
---

import ThemeImage from '../../../../components/ThemeImage.astro';

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/guides/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/guides/reverberation-prediction/)
con una predicción de nivel frente a distancia, uniendo la
[potencia acústica](/phonometry/es/guides/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 red 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 intensidad, de modo que la intensidad cae como
$e^{-m r}$). 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$.

```python
import numpy as np
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,
    max_order=12,
)

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

# 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
# T30 crece hacia la estimación de Eyring al aumentar max_order (ver abajo); a
# orden bajo la cola especular se trunca, trátalo como un valor limitado por orden.
print(round(float(params.t30[0]), 2))        # tiempo de reverberación, s
```

`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 subenteros
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 buenas a precisión de máquina.

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.

<ThemeImage src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/image_source_reflectogram_es.webp" alt="Reflectograma por fuentes imagen de una sala de 7 por 5 por 3 metros: el sonido directo a 0 dB seguido de una nube de reflexiones coloreadas por orden de reflexión que decae bajo la envolvente de divergencia 1/r, más densa y débil con el tiempo" width="88%" />

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

```python
import matplotlib.pyplot as plt
import numpy as np
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()
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>

**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
import numpy as np
from phonometry import room

freqs = [250.0, 500.0, 1000.0, 2000.0]
alpha = np.array([[0.10, 0.15, 0.25, 0.40]] * 6)     # (6 paredes, 4 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=12, frequencies=freqs)
print(res.ir.shape)                                  # (4 bandas, n_muestras)
print(np.round(np.sum(res.ir ** 2, axis=1), 4))      # más absorción -> menos energía
```

**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)$. El acuerdo
solo es estrecho 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/guides/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.

### 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()` 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$.

## 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 \lg\!\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_c = \sqrt{Q R / 16\pi}$: más cerca que $r_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.

```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
```

El `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_c$. Los bloques se exponen por separado, de modo que una medición
de emisión fluye 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
```

La distancia de reverberación de Kuttruff ($r_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_c$ es exactamente el cruce de su propio
`steady_state_spl`. Pasa `characteristic_impedance=rho_c` para añadir el término
$10\lg(\rho c / 400)$ de Bies (unos +0,14 dB a 20 °C).

**Dónde se difumina la estadística.** La **frecuencia de Schroeder**
$f_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_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.

```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).

## Véase también

- [Acústica de salas](/phonometry/es/guides/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/guides/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 sonora en recintos (EN 12354-6)](/phonometry/es/guides/enclosed-space-absorption/):
  el área de absorción equivalente tras la absorción media `alpha_bar`.
- [Potencia acústica](/phonometry/es/guides/sound-power/): el `Lw` que impulsa el
  nivel estacionario.
- [Simulación de ondas FDTD 2D](/phonometry/es/guides/fdtd-simulation/): el
  solver 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/).
