Ir al contenido

Fuentes imagen y campo estacionario de sala

Referencias: Kuttruff 2016Vorländer 2020Allen y Berkley 1979Bies et al. 2017Long 2014

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 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 con una predicción de nivel frente a distancia, uniendo la potencia acústica de una fuente con el nivel que produce en el interior.

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 () 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,

Cada imagen a distancia del receptor llega en con una amplitud formada por la divergencia esférica , el producto de los factores de reflexión de presión de pared cada uno elevado al número de reflexiones que esa imagen hizo en la pared , y la pérdida de presión del aire a lo largo del camino ( el coeficiente de atenuación de potencia (intensidad) en neperios por metro, de modo que la intensidad cae como y la presión como : el mismo que las guías de tiempo de reverberación y de EN 12354-6 entregan a sus términos ). Una caja de zapatos tiene exactamente imágenes audibles hasta el orden de reflexión (1560 en el orden 10), y la densidad de reflexiones crece como .

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.

Planta de una sala de 7 por 5 m en el centro de su retícula de tres por tres salas espejo a trazos: la fuente en (2, 1.6) y el receptor en (5.2, 3.4) unidos por el sonido directo de 10,7 ms, imágenes de primer orden rellenas en las cuatro salas adyacentes con sus tiempos de llegada de 17,3, 20,5 y 21,6 ms, imágenes de segundo orden huecas en las salas de esquina a 24,6 y 25,6 ms, y la primera reflexión en la pared lejana dibujada dos veces, como camino real quebrado en la pared y como línea recta a trazos desde la imagen hasta el receptorPlanta de una sala de 7 por 5 m en el centro de su retícula de tres por tres salas espejo a trazos: la fuente en (2, 1.6) y el receptor en (5.2, 3.4) unidos por el sonido directo de 10,7 ms, imágenes de primer orden rellenas en las cuatro salas adyacentes con sus tiempos de llegada de 17,3, 20,5 y 21,6 ms, imágenes de segundo orden huecas en las salas de esquina a 24,6 y 25,6 ms, y la primera reflexión en la pared lejana dibujada dos veces, como camino real quebrado en la pared y como línea recta a trazos desde la imagen hasta el receptor
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,
# 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 del receptor y aporta una única llegada en , 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 , la retícula tiene una imagen por cada volumen de sala , y el recuento de las que ha barrido tiene que seguir por tanto , cuya derivada es la densidad de reflexiones que se cita más abajo. El clip hace ese barrido:

A la izquierda, la sala de 7 por 5 metros ocupa el centro de su retícula de salas espejo a trazos, con la fuente como estrella y el receptor como triángulo. Un círculo se expande desde el receptor a la velocidad del sonido; según alcanza cada fuente imagen, esa imagen se enciende con el color de su orden de reflexión y traza una línea recta de vuelta al receptor. A la derecha, el reflectograma se rellena en el mismo instante: cada imagen que el círculo alcanza escribe un vástago en su tiempo de llegada y en su nivel relativo al sonido directo, bajo la envolvente de divergencia uno partido por r a trazos. Debajo, un recuento de llegadas sube en paralelo a la ley analítica a trazos, y los dos se mantienen juntos mientras el recuento pasa por 44 a los 30 milisegundos, 108 a los 40, 202 a los 50 y 344 a los 60, donde la ley marca 348.

Descargar la animación (WebM)

El reflectograma es una retícula que se barre, no una señal que decae. Como la esfera que se expande gana volumen con el cubo del tiempo mientras las imágenes están espaciadas a una por volumen de sala, las llegadas se acumulan con el cubo del tiempo y su ritmo crece con su cuadrado: las reflexiones tempranas discretas y la cola difusa tardía son la misma construcción leída a dos densidades.

A la izquierda, la sala de 7 por 5 metros ocupa el centro de su retícula de salas espejo a trazos, con la fuente como estrella y el receptor como triángulo. Un círculo se expande desde el receptor a la velocidad del sonido; según alcanza cada fuente imagen, esa imagen se enciende con el color de su orden de reflexión y traza una línea recta de vuelta al receptor. A la derecha, el reflectograma se rellena en el mismo instante: cada imagen que el círculo alcanza escribe un vástago en su tiempo de llegada y en su nivel relativo al sonido directo, bajo la envolvente de divergencia uno partido por r a trazos. Debajo, un recuento de llegadas sube en paralelo a la ley analítica a trazos, y los dos se mantienen juntos mientras el recuento pasa por 44 a los 30 milisegundos, 108 a los 40, 202 a los 50 y 344 a los 60, donde la ley marca 348.

Descargar la animación (WebM)

El reflectograma es una retícula que se barre, no una señal que decae. Como la esfera que se expande gana volumen con el cubo del tiempo mientras las imágenes están espaciadas a una por volumen de sala, las llegadas se acumulan con el cubo del tiempo y su ritmo crece con su cuadrado: las reflexiones tempranas discretas y la cola difusa tardía son la misma construcción leída a dos densidades.

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

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 tiempoReflectograma 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
Mostrar el código de esta figura
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(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()

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.

Vista en planta de la retícula de fuentes imagen de una sala de 7 por 5 metros perfilada en el centro, con la fuente como estrella roja en (2, 1.6), el receptor como triángulo azul en (5.2, 3.4), y las fuentes imagen en el plano de la fuente coloreadas por orden de reflexión, primer orden naranja, segundo orden verde y tercer orden morado, extendiéndose en una retícula regular de salas espejo hasta unos 26 metrosVista en planta de la retícula de fuentes imagen de una sala de 7 por 5 metros perfilada en el centro, con la fuente como estrella roja en (2, 1.6), el receptor como triángulo azul en (5.2, 3.4), y las fuentes imagen en el plano de la fuente coloreadas por orden de reflexión, primer orden naranja, segundo orden verde y tercer orden morado, extendiéndose en una retícula regular de salas espejo hasta unos 26 metros

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 de esa reflexión.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
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()

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.

import numpy as np
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
Curvas de decaimiento de Schroeder de las cinco bandas de octava de una sala de 7 por 5 por 3 metros, cada banda dibujada dos veces: continua sin atenuación del aire y a trazos con el coeficiente m a 20 grados Celsius y 50 por ciento de humedad relativa. Las bandas se abren en abanico desde un decaimiento de 1,06 segundos a 250 hercios hasta 0,25 segundos a 4 kilohercios, y cada curva a trazos queda solo ligeramente por debajo de su pareja continua, con una diferencia que se ensancha al subir la frecuenciaCurvas de decaimiento de Schroeder de las cinco bandas de octava de una sala de 7 por 5 por 3 metros, cada banda dibujada dos veces: continua sin atenuación del aire y a trazos con el coeficiente m a 20 grados Celsius y 50 por ciento de humedad relativa. Las bandas se abren en abanico desde un decaimiento de 1,06 segundos a 250 hercios hasta 0,25 segundos a 4 kilohercios, y cada curva a trazos queda solo ligeramente por debajo de su pareja continua, con una diferencia que se ensancha al subir la frecuencia

La rama por bandas de image_source_rir para la sala propia de esta página, cada banda dibujada sin aire (continua) y con 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 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.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
# `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()

Reproducir el decaimiento estadístico. La tasa de decaimiento inicial de la RIR sintética reproduce el tiempo de reverberación de Eyring , porque la tasa media de reflexiones es igual a . 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 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.

Tiempo de decaimiento inicial especular frente al alargamiento de la sala a volumen constante y absorción media constante: la predicción de Eyring baja despacio a medida que se estira la sala mientras el decaimiento especular sube, de modo que la razón entre ambos crece de 1,05 en un cubo a unos 2,5 en un pasillo de seis a uno, y deja la banda sombreada de más menos 10 por ciento alrededor de Eyring con un alargamiento de aproximadamente 1,5 a 1Tiempo de decaimiento inicial especular frente al alargamiento de la sala a volumen constante y absorción media constante: la predicción de Eyring baja despacio a medida que se estira la sala mientras el decaimiento especular sube, de modo que la razón entre ambos crece de 1,05 en un cubo a unos 2,5 en un pasillo de seis a uno, y deja la banda sombreada de más menos 10 por ciento alrededor de Eyring con un alargamiento de aproximadamente 1,5 a 1

Los mismos 105 m³ y la misma = 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.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
# `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()
ParámetroTipoUnidadesRango / defectoNotas
dimensions(float, float, float)mtodas > 0Longitudes de sala (Lx, Ly, Lz)
source / receiver(float, float, float)mestrictamente dentro de la salaPosiciones (x, y, z)
absorptionescalar / (6,) / (n,) / (6, n)[0, 1]Uniforme, por pared, por banda o por pared y banda
fsintHz> 0Frecuencia de muestreo
max_orderint≥ 0, defecto 20Corte de orden de reflexión
speed_of_soundfloatm/s> 0, defecto 343Velocidad del sonido c
air_attenuationfloat o (n,)1/m≥ 0, defecto 0Coeficiente de intensidad del aire m
durationfloat, opcionals> 0Longitud de la RIR (defecto: última llegada)
frequencies(n,), opcionalHzCentros 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 .

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 segundos de decaimiento exige

Un ajuste de T30 abarca 35 dB, unos de decaimiento. La sala de 7 × 5 × 3 m de arriba tiene m y un tiempo de Eyring cercano a 0,93 s, así que necesita . Por debajo de eso la cola sencillamente falta, y el T30 ajustado sale corto:

max_orderimágenes audiblesT30 ajustadotiempo de ejecución
122 6240,28 s< 0,1 s
20 (por defecto)11 5200,43 s< 0,1 s
3037 8800,60 s< 0,1 s
4088 6400,75 s0,1 s
60295 3601,06 s0,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 y EDT ajustados de la sala de 7 por 5 por 3 metros frente al corte de orden de reflexión, de 8 a 60: ambos suben de forma pronunciada y casi lineal con el orden, y el T30 cruza la línea de Eyring de 0,93 segundos y su banda sombreada de más menos 10 por ciento hacia el orden 51 y sigue subiendo, mientras un segundo eje muestra el recuento de imágenes audibles creciendo de unas 800 a 295 milT30 y EDT ajustados de la sala de 7 por 5 por 3 metros frente al corte de orden de reflexión, de 8 a 60: ambos suben de forma pronunciada y casi lineal con el orden, y el T30 cruza la línea de Eyring de 0,93 segundos y su banda sombreada de más menos 10 por ciento hacia el orden 51 y sigue subiendo, mientras un segundo eje muestra el recuento de imágenes audibles creciendo de unas 800 a 295 mil

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.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
# `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()

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 , 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 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.

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 mide cuánto campo reverberante levanta una potencia dada, y el nivel estacionario es

con el factor de directividad de la fuente (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 : más cerca que 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 del denominador de 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 entre ; 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 de las fórmulas de reverberación. Eso le da a su lectura: es el área de ventana abierta que retiraría potencia al mismo ritmo, así que una sala con = 25 m² se comporta, en lo que respecta a un oyente lejano, como una sala con 25 m² de ventana abierta. Por tanto siempre supera al área de Sabine , y la diferencia se desvanece cuando , que es la razón de que el módulo prefiera y de que el de Kuttruff coincida con él en una sala viva.

Dónde se monta una fuente no es un detalle, porque mueve como : 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.

Cuatro celdas isométricas en fila que muestran la misma fuente compacta radiando hacia un ángulo sólido sombreado: en campo libre sobre un soporte hacia 4 pi estereorradianes con Q igual a 1, sobre la solera hacia 2 pi con Q igual a 2, contra una pared sobre la solera hacia pi con Q igual a 4, y en una esquina triedra hacia pi entre 2 con Q igual a 8; cada celda imprime la distancia crítica que da ese montaje en un taller con una constante de sala de 62 metros cuadrados: 1,11, 1,57, 2,22 y 3,14 metrosCuatro celdas isométricas en fila que muestran la misma fuente compacta radiando hacia un ángulo sólido sombreado: en campo libre sobre un soporte hacia 4 pi estereorradianes con Q igual a 1, sobre la solera hacia 2 pi con Q igual a 2, contra una pared sobre la solera hacia pi con Q igual a 4, y en una esquina triedra hacia pi entre 2 con Q igual a 8; cada celda imprime la distancia crítica que da ese montaje en un taller con una constante de sala de 62 metros cuadrados: 1,11, 1,57, 2,22 y 3,14 metros

Los cuatro valores de 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 ( = 62 m²). 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.

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, = 352 m², = 0,15, así que = 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 cerca de la fuente y se aplana en la meseta reverberante más allá de = 1,11 m.

Campo estacionario de sala de una fuente de 90 dB en un taller con constante de sala de 62 metros cuadrados: el nivel de presión acústica total sigue el campo directo de 6 dB por duplicación cerca de la fuente, cruza la meseta reverberante constante en la distancia crítica de 1,11 m y se aplana sobre ella más alláCampo estacionario de sala de una fuente de 90 dB en un taller con constante de sala de 62 metros cuadrados: el nivel de presión acústica total sigue el campo directo de 6 dB por duplicación cerca de la fuente, cruza la meseta reverberante constante en la distancia crítica de 1,11 m y se aplana sobre ella más allá

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

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
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()
Panel izquierdo, el nivel estacionario total frente a la distancia en un taller de 12 por 8 por 4 metros para factores de directividad de fuente de 1, 2, 4 y 8: las cuatro curvas comparten una misma meseta reverberante lejos de la fuente y se separan cerca de ella, con la distancia crítica marcada desplazándose de 1,11 a 3,14 metros como la raíz cuadrada de Q. Panel derecho, la misma sala con Q fijo en 2 y la absorción media escalonada en 0,05, 0,15 y 0,35: la meseta baja con la absorción mientras que la asíntota de campo directo cerca de la fuente no se muevePanel izquierdo, el nivel estacionario total frente a la distancia en un taller de 12 por 8 por 4 metros para factores de directividad de fuente de 1, 2, 4 y 8: las cuatro curvas comparten una misma meseta reverberante lejos de la fuente y se separan cerca de ella, con la distancia crítica marcada desplazándose de 1,11 a 3,14 metros como la raíz cuadrada de Q. Panel derecho, la misma sala con Q fijo en 2 y la absorción media escalonada en 0,05, 0,15 y 0,35: la meseta baja con la absorción mientras que la asíntota de campo directo cerca de la fuente no se mueve

Izquierda: mueve el cruce, no la meseta. Duplicar sube el campo directo 3 dB y empuja hacia fuera un factor , pero el nivel reverberante lejos de la fuente es idéntico en las cuatro curvas, porque nunca entra en el término . Derecha: la absorción hace lo contrario. Escalonar 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 — mientras que la asíntota de campo cercano no se mueve. Ese es el contenido preciso de «más allá de solo la absorción, y no la distancia, baja el nivel», y son siete veces más absorción para 10 dB.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
# `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()

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

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

entra dos veces, y la segunda es una decisión de modelado. Siempre concentra el campo directo en . 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 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 , de modo que una esquina añade = 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 , la cota inferior teórica.

# `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 , añadir absorción la cambia en : 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 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 ( para ) usa el área de absorción de Sabine en lugar de la constante de sala ; ambas coinciden para pequeño, y este módulo usa de modo que es exactamente el cruce de su propio steady_state_spl. Pasa characteristic_impedance=rho_c para añadir el término de Bies (unos +0,14 dB a 20 °C).

Dónde se difumina la estadística. La frecuencia de Schroeder ( en m³, 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 y 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 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 — y despejar da con 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 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.

from phonometry import room
print(round(float(room.schroeder_frequency(1.0, 200.0)), 0)) # 141 Hz
ParámetroTipoUnidadesRango / defectoNotas
sound_power_levelfloatdB re 1 pWNivel de potencia de la fuente Lw
surface_areafloat> 0Área total de contorno S
mean_absorptionfloat(0, 1)Absorción media de Sabine alpha_bar
distancesarray 1D, opcionalm> 0Rejilla de distancias (defecto: 0.1 rc a 10 rc)
directivityfloat> 0, defecto 1Factor de directividad de la fuente Q
characteristic_impedancefloat, opcionalPa·s/m> 0Añ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).

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)):

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

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 , 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)):

con el volumen , el área total de paredes y la suma 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.

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
Escalera de modos de una sala de 7 por 5 por 3 metros hasta 200 Hz, con una fila por familia (axial, tangencial, oblicuo) y la curva de densidad modal debajo, ambas marcadas con la frecuencia de Schroeder de 175 HzEscalera de modos de una sala de 7 por 5 por 3 metros hasta 200 Hz, con una fila por familia (axial, tangencial, oblicuo) y la curva de densidad modal debajo, ambas marcadas con la frecuencia de Schroeder de 175 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 ( 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.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
# `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()
ParámetroTipoUnidadesRango / defectoNotas
dimensionstupla de 3m> 0Dimensiones de la sala (lx, ly, lz)
max_frequencyfloatHz> 0, defecto 200Modo más alto enumerado
speed_of_soundfloatm/s> 0, defecto 343c0
reverberation_timefloat, opcionals> 0Añ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.

Tres filas apiladas de marcas de modos hasta 200 hercios para tres salas del mismo volumen de 105 metros cúbicos, coloreadas por familia: un cubo de 4,72 metros cuyas marcas se amontonan en unas pocas frecuencias separadas por huecos vacíos amplios, una sala de 7,49 por 3,74 por 3,74 metros algo mejor, y una sala de proporciones de Bolt de 3,40 por 4,77 por 6,47 metros cuyas marcas están repartidas casi uniformemente; un cuarto panel debajo representa la separación entre frecuencias distintas consecutivas de las tres salasTres filas apiladas de marcas de modos hasta 200 hercios para tres salas del mismo volumen de 105 metros cúbicos, coloreadas por familia: un cubo de 4,72 metros cuyas marcas se amontonan en unas pocas frecuencias separadas por huecos vacíos amplios, una sala de 7,49 por 3,74 por 3,74 metros algo mejor, y una sala de proporciones de Bolt de 3,40 por 4,77 por 6,47 metros cuyas marcas están repartidas casi uniformemente; un cuarto panel debajo representa la separación entre frecuencias distintas consecutivas de las tres salas

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.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
# `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()

Dónde está la presión. La forma modal de en una caja rígida es el producto de cosenos , 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 , 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.

Las implementaciones se comprueban contra las formas cerradas y los anclajes numéricos de los propios textos fuente (ver el informe de conformidad):

  • la amplitud del sonido directo y su retardo (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 independiente que reproduce el retardo del eco de pared rígida y el 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, m³, 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 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.
  • Cubierto

    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 , 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.

  • No cubierto

    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 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. Las proporciones preferentes de Bolt se comentan pero no se tabulan.

  • Allen, J. B. y Berkley, D. A. (1979). Image method for efficiently simulating small-room acoustics. The Journal of the Acoustical Society of America, 65(4), 943-950. https://doi.org/10.1121/1.382599La descomposición del recuento de reflexiones de la retícula de imágenes de la sala rectangular usada en §1.
  • Bies, D. A., Hansen, C. H. y Howard, C. Q. (2017). Engineering noise control (5.ª ed.). CRC Press. https://doi.org/10.1201/9781351228152El campo estacionario de sala y la constante de sala del §2 (§6.4).
  • Kuttruff, H. (2016). Room acoustics (6.ª ed.). CRC Press. https://doi.org/10.1201/9781315372150La 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.
  • Long, M. (2014). Architectural acoustics (2.ª ed.). Academic Press. https://doi.org/10.1016/C2012-0-03257-5Los modos de la sala rectangular del §3: las frecuencias propias de la ecuación (8.43), la sala de ejemplo de la tabla 8.1 y el recuento de modos y la densidad modal de Morse y Pierce de las ecuaciones (8.45) y (8.46).
  • Vorländer, M. (2020). Auralization: Fundamentals of acoustics, modelling, simulation, algorithms and acoustic virtual reality (2.ª ed.). Springer. https://doi.org/10.1007/978-3-030-51202-6El modelo de fuentes especulares del §1 (capítulo 11), con las expresiones de factor de reflexión y retardo.