Parámetros acústicos de salas (ISO 3382-1/2)
Normas aplicables: ISO 3382Referencias: Kuttruff 2016Schroeder 1965Hak et al. 2012
La acústica de salas parte de una única medición: la respuesta al impulso (RI) entre una fuente y un receptor. Fíltrala en bandas e intégrala, y da el tiempo de reverberación, la claridad y el tiempo central: todo lo que ISO 3382-1/2 pregunta sobre el campo sonoro dentro de un único recinto. Esta página convierte una RI medida en esos parámetros: la curva de decaimiento de Schroeder, las ventanas de evaluación, las marcas de validez y la ficha acreditada. Adquirir la propia RI (barridos, MLS, dónde medir) vive en Medición de la respuesta al impulso, y las métricas del habla de oficinas diáfanas de ISO 3382-3 en Acústica de oficinas diáfanas. Dos mediciones de decaimiento separadas en una cámara reverberante, una con la sala vacía y otra con la probeta instalada, dan la absorción acústica de un material; ese método (ISO 354) vive en Medida y clasificación de la absorción sonora. Para el aislamiento acústico entre recintos (la misma RI medida a ambos lados de un cerramiento) consulta la guía complementaria Medición del aislamiento en campo (ISO 16283).
Análisis del decaimiento y parámetros de sala (ISO 3382-1/2)
Sección titulada «Análisis del decaimiento y parámetros de sala (ISO 3382-1/2)»La RI se filtra en bandas de octava (o de tercio de octava) y cada banda se convierte en una curva de decaimiento mediante la integración inversa de Schroeder de la RI al cuadrado:
La integración inversa elimina la fluctuación que afecta a la RI al cuadrado en bruto y produce una curva suave cuya pendiente es la tasa de decaimiento. El ruido de fondo haría que se estabilizara, así que la integración se trunca donde la recta de decaimiento ajustada cruza el suelo de ruido y la cola que falta se compensa suponiendo un decaimiento exponencial.
Los tiempos de reverberación provienen de un ajuste lineal por mínimos cuadrados sobre un rango de evaluación, extrapolado a una caída completa de 60 dB, : EDT de 0 a −10 dB (reverberación percibida), T20 de −5 a −25 dB y T30 de −5 a −35 dB. Los repartos de energía en una frontera temprano/tardío dan la claridad y la definición,
con ms → C50 (habla) y ms → C80 (música), más el tiempo central . Cada parámetro tiene una diferencia apenas perceptible (ISO 3382-1 Tabla A.1: EDT 5 %, C80 1 dB, D50 0,05, Ts 10 ms) que fija con qué precisión merece la pena informarlo.
Dónde está . Las tres integrales de energía empiezan en la llegada del
sonido directo, no al principio del archivo. La ISO 3382-1, A.3.4, sitúa ese
punto donde la respuesta sube por primera vez de forma apreciable por encima del
fondo estando todavía más de 20 dB por debajo de su máximo, y room_parameters
aplica ese disparo banda a banda antes de integrar, de modo que cualquier retardo
de propagación y de sistema que arrastre la grabación se elimina automáticamente:
una RI medida no necesita recorte manual. Importa de forma asimétrica. Los tiempos
de reverberación usan solo la pendiente del decaimiento y les da igual dónde
empiece, pero C50, C80 y integran desde , así que un origen situado
un milisegundo tarde deja fuera parte del sonido directo y puede mover C50 y C80
varios decibelios y decenas de milisegundos, dejando T20 y T30 casi
intactos: el error es invisible en el número que todo el mundo comprueba. El
detector yerra deliberadamente por el lado temprano, que es la dirección
inofensiva. De ahí salen dos reglas de trabajo: no recortes nunca una RI a mano
para quitarle el retardo previo, y desconfía de los C50/C80 de una grabación
cuyo sonido directo sea débil o venga precedido de resonancias por un procesado
externo, porque entonces el disparo puede llegar tarde.
La energía de la cola de la respuesta al impulso al cuadrado se rellena desde el final mientras la integral inversa avanza hacia t = 0, y la curva de decaimiento de Schroeder emerge en un eje inferior, terminando con las rectas de regresión T20 y T30.
La energía de la cola de la respuesta al impulso al cuadrado se rellena desde el final mientras la integral inversa avanza hacia t = 0, y la curva de decaimiento de Schroeder emerge en un eje inferior, terminando con las rectas de regresión T20 y T30.


La RI al cuadrado dentada (gris) se integra hasta la curva suave de Schroeder (azul); las ventanas EDT, T20 y T30 se ajustan sobre esa curva y cada una se extrapola a un decaimiento de 60 dB.
import numpy as npfrom phonometry import room
fs = 48000# Decaimiento de pendiente única con T = 1 s: p^2 = exp(-13.8155 t) (60/ln(10)/13.8155 = 1)t = np.arange(fs) / fs# ir: respuesta al impulso de sala medida; aquí la sustituye un decaimiento sintético de pendiente única.ir = np.concatenate([np.zeros(10), np.exp(-13.8155 * t / 2.0)])
time, level = room.decay_curve(ir, fs) # curva de Schroeder (0 dB en t = 0)
res = room.room_parameters(ir, fs, limits=None) # banda única de banda anchaprint(round(float(res.t30[0]), 2)) # 1.0 sprint(round(float(res.c80[0]), 2)) # 3.05 dBprint(round(float(res.d50[0]), 3)) # 0.499print(round(float(res.ts[0]) * 1000, 0)) # 72 ms
# Bandas de octava 125 Hz - 4 kHz (por defecto en ISO 3382-1); usa fraction=3 para terciosoctaves = room.room_parameters(ir, fs)print(octaves.frequency) # ~[126, 251, 501, 1000, 1995, 3981]print(octaves.t30_valid) # indicadores de rango dinámico por banda
octaves.plot() # barras EDT/T20/T30 + C50/C80 por banda (requiere matplotlib)room.decay_curve(ir, fs).plot() # curva de Schroeder con los ajustes EDT/T20/T30Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import room
fs = 48000# Decaimiento de pendiente única con T = 1 s: p^2 = exp(-13.8155 t) (60/ln(10)/13.8155 = 1)t = np.arange(fs) / fs# ir: respuesta al impulso de sala medida; aquí la sustituye un decaimiento sintético de pendiente única.ir = np.concatenate([np.zeros(10), np.exp(-13.8155 * t / 2.0)])time, level = room.decay_curve(ir, fs) # curva de Schroeder (0 dB en t = 0)
# En una línea — la curva de Schroeder con los ajustes rectos EDT/T20/T30:decay = room.decay_curve(ir, fs) # un DecayCurve (se sigue desempaquetando como time, level)decay.plot(language="es")plt.show()
# A mano, el decaimiento es solo la curva de Schroeder; marca los niveles de evaluación:fig, ax = plt.subplots()ax.plot(time, level, color="#1f77b4", label="Curva de Schroeder")for db in (-5.0, -25.0, -35.0): # bordes de la ventana de evaluación T20 / T30 ax.axhline(db, ls=":", alpha=0.4)ax.set_xlabel("Tiempo [s]")ax.set_ylabel("Nivel re estado estacionario [dB]")ax.set_ylim(top=3.0)ax.legend()plt.show()Para este decaimiento de pendiente única, EDT, T20 y T30 devuelven todos ≈ 1,0 s, y los parámetros de energía coinciden con sus formas cerradas (C80 = 3,05 dB, D50 = 0,499, Ts = 72 ms). Una sala real tiene una pendiente inicial más pronunciada, así que EDT < T30.
Qué significan los parámetros de energía. C50 y D50 son la misma medida en dos unidades, ligadas por — la pareja impresa arriba la cumple, ya que = 0,499 da = −0,02 dB —, así que un espacio para el habla que apunte a está apuntando a dB, y no tiene sentido citar los dos como si fueran pruebas independientes. Para música, el C80 de salas de conciertos y polivalentes desocupadas de hasta 25 000 m³ suele ir entre −5 dB y +5 dB (la columna de «intervalo típico» de la Tabla A.1 de la ISO 3382-1), donde los valores negativos se leen como sala mezclada o reverberante y los superiores a unos +3 dB como seca; el de esas mismas salas va entre 60 ms y 260 ms y se mueve en sentido inverso a la claridad, y el entre 0,3 y 0,7. Con esos intervalos van dos cautelas. Son valores de una sola posición en salas desocupadas, y el público acorta el decaimiento y sube la claridad, así que una sala ocupada no queda descrita por ellos. Y a diferencia del T30, los parámetros de energía son magnitudes de energía temprana que varían mucho de butaca en butaca, así que un valor de una sola posición dice poco: declara la media espacial con su dispersión (más abajo). La columna de DAP fija la resolución de declaración en el otro sentido: una diferencia de 0,5 dB de C80 entre dos diseños no es ninguna diferencia.
Sobre un decaimiento real, dependiente de la frecuencia, el .plot() por
bandas es el resumen de trabajo de toda la medición: los tiempos de caída
como barras agrupadas por octava (bandas no válidas rayadas) sobre un
segundo panel con C50 y C80.
Una sala cuyo tiempo de reverberación cae de 1,4 s a 125 Hz a 0,7 s a 4 kHz, la firma típica de una sala amueblada cuya absorción crece con la frecuencia; la claridad sube a medida que el decaimiento se acorta.
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom scipy import signalfrom phonometry import room
# Una RIR sintética con decaimiento dependiente de la frecuencia: portadoras# de ruido por banda de octava cuyo T60 cae de 1,4 s a 125 Hz a 0,7 s a 4 kHz.fs = 48000rng = np.random.default_rng(3382)t = np.arange(int(1.6 * fs)) / fsir = np.zeros_like(t)for fc, t60 in [(125.0, 1.4), (250.0, 1.25), (500.0, 1.1), (1000.0, 1.0), (2000.0, 0.85), (4000.0, 0.7)]: sos = signal.butter(4, [fc / np.sqrt(2), fc * np.sqrt(2)], btype="bandpass", fs=fs, output="sos") carrier = signal.sosfilt(sos, rng.standard_normal(t.size)) ir += carrier * np.exp(-3.0 * np.log(10.0) / t60 * t)
# Una línea: barras EDT/T20/T30 por banda + C50/C80 (requiere matplotlib).octaves = room.room_parameters(ir, fs)octaves.plot(language="es")plt.show()
# A mano: el espectro de T30 desde los campos del resultado.fig, ax = plt.subplots()ax.bar(np.arange(octaves.t30.size), octaves.t30)ax.set_xticks(np.arange(octaves.t30.size))ax.set_xticklabels([f"{f:g}" for f in octaves.frequency])ax.set_xlabel("Frecuencia central de banda de octava [Hz]")ax.set_ylabel("T30 [s]")plt.show()Leer EDT, T20 y T30 unos frente a otros
Sección titulada «Leer EDT, T20 y T30 unos frente a otros»Los tres tiempos extrapolan el mismo decaimiento de 60 dB desde ventanas distintas, así que su desacuerdo lleva información:
- T20 ≈ T30 (curvatura por debajo del 10 %): el decaimiento se acerca a una única pendiente recta en ambas ventanas de evaluación, algo compatible con un campo difuso (aunque no lo demuestra), y cualquiera de los dos tiempos puede representar «el» tiempo de reverberación de la banda.
- T30 > T20 (curvatura por encima del 10 %): el decaimiento se comba, con la energía tardía decayendo más despacio que la temprana. Las causas habituales son volúmenes acoplados (una puerta abierta a un pasillo o a una escalera, un anfiteatro profundo o una caja escénica devolviendo energía) y una absorción muy desigual que deja reverberante un eje de la sala. Ningún número único describe ese decaimiento: informa de ambas ventanas junto con la curvatura, y trata con recelo las predicciones estadísticas, porque su hipótesis de campo difuso ha fallado a la vista.
- EDT lejos de T20/T30: el EDT se ajusta donde aún dominan el sonido directo y las primeras reflexiones, así que varía de butaca en butaca mientras el T30 apenas se mueve. Un EDT por debajo del T30 dice que la posición recibe mucha energía temprana (cerca de la fuente, bajo un reflector): la sala suena allí más seca de lo que sugiere su T30, porque la reverberación percibida sigue al EDT. Un EDT por encima del T30 en una butaca apunta a un eco o a una superficie focalizante que concentra allí energía tardía.
Los tres casos son tres formas, y merece la pena verlas una al lado de la otra antes de tener que diagnosticar alguna.
Tres decaimientos, un mismo eje, todos leídos por room_parameters. A la
izquierda, una única exponencial con = 1,0 s: EDT, T20 y T30 devuelven todos
1,00 s y la curvatura es del −0,1 %. En el centro, un volumen acoplado — el 98 %
de la energía decayendo a 0,6 s sobre una cola de 2,5 s — que pone un codo visible
en la curva de Schroeder y devuelve EDT 0,72 s, T20 1,78 s, T30 2,18 s y una
curvatura del 23 %: ningún número único lo describe. A la derecha, la misma
cola de 1,0 s precedida de un racimo de reflexiones tempranas fuertes en los
primeros 25 ms: T20 y T30 quedan intactos en 0,99 s y 1,00 s, la curvatura se
queda en el 0,5 % y el EDT se desploma a 0,58 s — la butaca suena más seca de
lo que dice su tiempo de reverberación, y solo el EDT lo sabe.
Mostrar el código de esta figura
import matplotlib.pyplot as plt# `np`, `fs` y `room` son las importaciones del bloque de decaimiento de arriba.
rng = np.random.default_rng(3382)span = np.arange(int(4.0 * fs)) / fs
def energy(t60): # la envolvente de p^2 de un decaimiento T60 = t60 return np.exp(-6.0 * np.log(10.0) / t60 * span)
noise = rng.standard_normal(span.size)tail = noise * np.sqrt(energy(1.0))
early = tail.copy() # un racimo de reflexiones tempranas fuertesamplitude = np.sqrt(6.0 * float(np.sum(tail ** 2)) / 8.0)for k, i in enumerate(np.linspace(0, int(0.025 * fs), 8).astype(int)): early[i] += amplitude * 0.85 ** k * (1.0 if k % 2 == 0 else -1.0)
cases = { "pendiente única": tail, "volumen acoplado": noise * np.sqrt(0.98 * energy(0.6) + 0.02 * energy(2.5)), "energía temprana fuerte": early,}fig, axes = plt.subplots(1, 3, sharey=True, figsize=(13.0, 4.4))for ax, (name, signal) in zip(axes, cases.items()): res = room.room_parameters(signal, fs, limits=None) room.decay_curve(signal, fs).plot(ax=ax, language="es") ax.set_title(f"{name}\nEDT {res.edt[0]:.2f} T20 {res.t20[0]:.2f} " f"T30 {res.t30[0]:.2f} C {res.curvature[0]:.0f} %")plt.show()Cuánto rango de decaimiento permite el suelo de ruido
Sección titulada «Cuánto rango de decaimiento permite el suelo de ruido»Una ventana de ajuste
vale lo que el rango de decaimiento que tiene debajo. La relación
impulso-ruido (INR) es la distancia de nivel entre el pico de la RI
filtrada en banda y su suelo de ruido; la ventana de ajuste más un margen
de seguridad debe caber dentro de ella, que es el requisito ISO 3382 de al
menos 35 dB de rango útil de decaimiento para T20 y 45 dB para T30. Un
rango escaso sesga el tiempo ajustado hacia arriba, hacia la cola plana que
el suelo de ruido impone a la curva de decaimiento, y el sesgo crece en
silencio antes de que el ajuste falle a la vista (Hak, Wenmaekers y van
Luxemburg, 2012). room_parameters declara esa INR por banda como
dynamic_range y endurece los límites de aceptación a 46 dB (T20) y 54 dB (T30)
antes de
marcar un valor como válido, de modo que el sesgo residual de truncado y
compensación de un tiempo marcado válido quede dentro del 5 %: la DAP relativa
que la Tabla A.1 tabula para el EDT y el valor que por costumbre se aplica a T20
y T30, para los que la tabla no da ninguna.
Cuando una banda no supera su indicador, el orden de remedios es: usa T20
en lugar de T30 (su ventana necesita 10 dB menos de rango según los mínimos
ISO, 8 dB con los límites endurecidos); sube la INR en la
adquisición, porque duplicar la longitud del barrido o el número de
promedios síncronos gana 3 dB cada vez; y solo entonces recurre al EDT,
nunca a un ajuste estirado dentro del ruido.
De dónde sale el suelo de ruido, y cómo perderlo. El nivel de fondo se estima
a partir de la última décima parte de la respuesta recortada por el origen,
así que la grabación tiene que contener de verdad el fondo estacionario de la sala
después de que el decaimiento haya terminado: medio segundo o más. Un archivo
recortado al decaimiento audible, o un length= fijado solo al decaimiento, hace
que el analizador mida señal decayendo como si fuera ruido: el suelo estimado
queda demasiado alto, el punto de truncado se adelanta, la cola compensada se
calcula desde el cruce equivocado y las marcas de validez por banda se aplican a
un rango dinámico ficticio, todo ello sin error ni aviso. Graba silencio después
de la excitación (el mismo silencio que pide la ISO 18233, 6.2.2.3), consérvalo en
el archivo y deja que room_parameters encuentre el cruce en lugar de recortar a
ojo. El diagnóstico de este fallo: un dynamic_range inverosímilmente grande en
una banda que debería ser ruidosa, junto con una curvatura cercana a cero, es la
firma de una cola de ruido ausente.
Todo el balance cabe en un dibujo, y el sesgo que controla también.
El balance de niveles de una banda. La INR es todo el espacio vertical del que dispones; la ventana de evaluación más el margen de 15 dB del apartado 5.3.3 de la ISO 3382-1 tiene que caber dentro, que es de donde salen los 35 dB (T20) y los 45 dB (T30). La integración se detiene donde la recta ajustada cruza la estimación de fondo, y la cola posterior se sustituye por la continuación exponencial del ajuste: una compensación cuyo sesgo residual es positivo, y por eso phonometry añade otros 11 dB y 9 dB de holgura antes de dar una banda por válida.
Un decaimiento sintético de = 1,0 s con su suelo de ruido barrido, medido con
room_parameters. El sesgo es siempre positivo — la cola plana de ruido solo
puede hacer que el decaimiento ajustado parezca más largo — y crece al reducirse
el rango: +0,4 % con 70 dB, +1,3 % (T30) con 61 dB, +3,1 % con 55 dB, +6,6 % con
46 dB y +8,8 % para el T20 con 37 dB, justo por encima del mínimo ISO. Ese es todo
el argumento a favor de los indicadores endurecidos: con los propios mínimos de la
ISO de 35 dB y 45 dB el sesgo que sobrevive ya queda fuera de la DAP del 5 %, y
solo con 46 dB y 54 dB cae dentro. Por debajo de unos 34 dB el ajuste ni siquiera
converge y los parámetros devuelven NaN, que es el fallo visible al que el sesgo
se va acercando.
Mostrar el código de esta figura
import matplotlib.pyplot as plt# `np`, `fs` y `room` son las importaciones del bloque de decaimiento de arriba.
rng = np.random.default_rng(3382)grid = np.arange(int(3.0 * fs)) / fsclean = rng.standard_normal(grid.size) * np.exp(-3.0 * np.log(10.0) * grid)noise = rng.standard_normal(grid.size)peak = float(np.max(np.abs(clean)))
ranges, bias20, bias30 = [], [], []for inr in range(25, 81, 3): res = room.room_parameters(clean + noise * peak * 10 ** (-inr / 20.0), fs, limits=None) ranges.append(float(res.dynamic_range[0])) bias20.append(100.0 * (float(res.t20[0]) - 1.0)) bias30.append(100.0 * (float(res.t30[0]) - 1.0))
fig, ax = plt.subplots()ax.plot(ranges, bias20, "-o", label="T20")ax.plot(ranges, bias30, "-s", label="T30")ax.axhspan(-5.0, 5.0, alpha=0.15)for limit, name in ((35.0, "ISO T20"), (45.0, "ISO T30"), (46.0, "indicador T20"), (54.0, "indicador T30")): ax.axvline(limit, ls=":", alpha=0.6)ax.set_xlabel("dynamic_range (INR) [dB]")ax.set_ylabel("Error del tiempo de decaimiento ajustado [%]")ax.legend()plt.show()Por debajo de la frecuencia de Schroeder: modos, no decaimiento
Sección titulada «Por debajo de la frecuencia de Schroeder: modos, no decaimiento»Por debajo de la frecuencia de Schroeder ( en m³, en s) estas estadísticas de caída dejan de contar toda la historia: el campo lo gobiernan modos propios discretos. La constante no es una constante física. Cada modo amortiguado hasta un tiempo de reverberación tiene una anchura de banda a media potencia de unos hercios, la densidad modal crece como , y exigir aproximadamente tres modos dentro de una anchura de banda da : una elección de cuánto solapamiento cuenta como difuso, que es la razón de que los textos más estrictos citen 4000 para la misma física. 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, y la escalera de modos de la guía de fuentes imagen enumera lo que hay ahí abajo de verdad. La simulación siguiente excita la misma sala rígida de 5 m por 3,5 m en su modo (2,1) y después entre dos modos; en resonancia un patrón de onda estacionaria con líneas nodales fijas crece hasta dominar el mapa de presión RMS, fuera de resonancia la sala sigue respondiendo, pero el campo forzado se mantiene débil y nunca se organiza en ese patrón nodal (2,1).
Simulación FDTD 2D de una sala rígida de 5 por 3,5 metros excitada en el modo (2,1) de 84 Hz y en una frecuencia fuera de modo, lado a lado. En resonancia un patrón de onda estacionaria con líneas nodales fijas crece hasta dominar el mapa de presión RMS; fuera de resonancia la respuesta forzada se mantiene débil y nunca se organiza en esa estructura nodal.
Simulación FDTD 2D de una sala rígida de 5 por 3,5 metros excitada en el modo (2,1) de 84 Hz y en una frecuencia fuera de modo, lado a lado. En resonancia un patrón de onda estacionaria con líneas nodales fijas crece hasta dominar el mapa de presión RMS; fuera de resonancia la respuesta forzada se mantiene débil y nunca se organiza en esa estructura nodal.
Parámetros de room_parameters()
Sección titulada «Parámetros de room_parameters()»| Parámetro | Tipo | Unidades | Rango / valor por defecto | Notas |
|---|---|---|---|---|
ir | array 1D | cualquiera | no silencioso | Respuesta al impulso medida |
fs | int | Hz | > 0 | Frecuencia de muestreo |
limits | (float, float) o None | Hz | por defecto (125.0, 4000.0) | Límites de centros de banda; None = banda única de banda ancha |
fraction | int | — | 1 (octava, por defecto) / 3 (tercio) | Fracción de ancho de banda |
zero_phase | bool | — | defecto False | Filtrado de octava hacia delante y atrás (NOTA de ISO 3382-2, 7.3, que relaja a ); elimina el retardo de grupo del filtro antes de la integración inversa y reduce aproximadamente a la mitad el sesgo de T30 corto a 125 Hz (~+4,9 % → +2,4 % con = 0,2 s). decay_curve también lo acepta |
es el producto anchura de banda por tiempo: la anchura de banda de la banda de análisis en hercios y el tiempo de reverberación en esa banda, en segundos. Los dos símbolos de esa celda no son el mismo que el del filtro: « = 0,2 s» se refiere al tiempo de reverberación. La octava de 125 Hz mide unos 88 Hz de ancho, así que un decaimiento de 0,2 s da y apenas supera el umbral de 16 del apartado 7.3 de la ISO 3382-2; reduce el decaimiento a la mitad o pasa a tercios de octava y ya no lo supera, que es el régimen para el que existe la relajación de la NOTA.
Devuelve un RoomAcousticsResult: frequency (centros de banda, o None en
banda ancha), edt/t20/t30 (s), c50/c80 (dB), d50, ts (s),
dynamic_range (dB, la INR por banda: pico filtrado en banda menos suelo de
ruido), los indicadores edt_valid/t20_valid/t30_valid
(ISO 3382-1, 5.3.3: ruido ≥ 25 dB por debajo del pico para EDT, endurecido a
46 dB para T20 y 54 dB para T30 para que el sesgo de compensación de cola de un
valor marcado como válido quede dentro de la DAP del 5 %) y curvature
% (valores por encima del 10 % señalan un
decaimiento no recto). decay_curve(ir, fs, band=None, fraction=1, zero_phase=False)
devuelve solo la curva (time, level) para una banda o la respuesta de banda ancha.
Promediar sobre posiciones
Sección titulada «Promediar sobre posiciones»Todo lo anterior analiza una única respuesta al impulso; un parámetro de sala
declarado nunca es una única respuesta al impulso. El apartado 8 de la ISO 3382-2
da dos procedimientos admisibles, y el que implementa esta API es el primero: la
media aritmética de los tiempos de reverberación individuales sobre todas las
combinaciones fuente-micrófono independientes (la alternativa, promediar el
conjunto de curvas de decaimiento con sus inicios sincronizados, es otra operación
y no es lo que hace promediar t30). Con ella viajan cuatro reglas. La desviación
típica entre posiciones forma parte de la respuesta, no es un añadido de
diagnóstico, y debe declararse siempre que supere la DAP del parámetro.
, el descriptor de sala de número único habitual, es la media de las
octavas de 500 Hz y 1 kHz. Los parámetros de energía varían entre butacas mucho
más que el T30, así que su dispersión es el número interesante y no una molestia.
Y una banda que no supera su marca de validez en algunas posiciones no debe
colarse en la media sin más: enmascárala y di cuántas posiciones sobrevivieron.
# `np`, `fs` y `room` son las importaciones del bloque de decaimiento de arriba.
# medida: una respuesta al impulso por combinación fuente-micrófono. Tres# decaimientos sintéticos de 0,95, 1,00 y 1,08 s hacen de tres posiciones.rng = np.random.default_rng(3382)grid = np.arange(int(3.0 * fs)) / fsresponses = [rng.standard_normal(grid.size) * np.exp(-3.0 * np.log(10.0) / t60 * grid) for t60 in (0.95, 1.00, 1.08)]
results = [room.room_parameters(each, fs) for each in responses]t30 = np.array([res.t30 for res in results])valid = np.array([res.t30_valid for res in results])
mean = np.nanmean(np.where(valid, t30, np.nan), axis=0)spread = np.nanstd(np.where(valid, t30, np.nan), axis=0)print(np.round(mean, 2)) # [0.99 1. 1.02 1.02 1.03 1.01] sprint(np.round(100.0 * spread / mean, 1)) # [4. 4.7 4.8 5.1 4.9 4.8] %print(int(valid.sum(axis=0).min())) # 3 posiciones superaron la marcaAquí la dispersión va del 4 al 5 %, justo en la DAP, así que le corresponde ir en
el informe junto a la media: tres posiciones que coinciden dentro de un 5 % son
tres posiciones que discrepan de forma audible. Fíjate también en para qué sirve
la máscara: np.nanmean sobre el array enmascarado es la media aritmética que
prescribe el apartado 8 a), pero solo sobre las combinaciones cuya banda haya
superado de verdad la marca, y el número de supervivientes forma parte del
resultado.
Informe ISO 3382 (.report())
Sección titulada «Informe ISO 3382 (.report())»RoomAcousticsResult.report(path) genera una ficha PDF de una página con el
formato de un informe de medición de acústica de salas (una sala de
espectáculos según la ISO 3382-1:2009 o una sala ordinaria según la
ISO 3382-2:2008, ambos evaluados por el método de la respuesta al impulso
integrada): una línea de base normativa, un bloque opcional de metadatos de
cabecera, la tabla de parámetros por bandas a ancho completo (,
, EDT, , , , ) sobre la gráfica de tiempos
de caída por banda del propio resultado (.plot()), el resultado enmarcado del
tiempo de reverberación de frecuencias medias (la media de los
de las octavas de 500 Hz y 1000 Hz, el descriptor habitual de la sala)
con el EDT de medias al lado, y un pie con el descargo de responsabilidad fijo.
La ISO 3382-1/-2 son normas de caracterización sin cumple/no cumple intrínseco,
por lo que solo aparece una fila de veredicto cuando se aporta un tiempo de
reverberación de medias objetivo mediante el campo requirement de los
metadatos (ReportMetadata(requirement=...), leído como el
máximo aceptable, la forma habitual de un límite de aula u oficina diáfana). Un
resultado de banda ancha no tiene octavas de 500 Hz / 1000 Hz que promediar, de
modo que su recuadro y su veredicto recurren al de banda ancha sin
afirmación de «500-1000 Hz». Usa el mismo contenedor ReportMetadata y el
mismo motor de
renderizado que la
ficha de absorción ISO
11654;
los campos específicos de sala room_volume, source_positions y
receiver_positions rellenan la cabecera (la ISO 3382 exige indicar el volumen
de la sala y el número de posiciones de fuente y de micrófono), junto con
test_room (el nombre de la sala), specimen (la descripción de la sala y su
estado de ocupación), area, instrumentation, temperature,
relative_humidity, pressure, measurement_standard, test_date,
laboratory, operator, report_id y notes. Al pasar metadata=None se
obtiene una ficha de caracterización mínima. El renderizado necesita reportlab
y, para la figura que incrusta la ficha, matplotlib (pip install "phonometry[report,plot]"); solo se admite engine="reportlab". La ficha se
genera en inglés por defecto; pasa language="es" para una ficha en español
(cadenas fijas traducidas y separador decimal de coma).
from phonometry import room, ReportMetadata
result = room.room_parameters(ir, fs) # bandas de octava 125 Hz - 4 kHzresult.report( "ficha_sala.pdf", metadata=ReportMetadata( # El estado de la sala que pide el apartado 9.2 e): amueblamiento y # número de personas presentes (el apartado 4.1 admite como mucho dos # para representar el estado desocupado). specimen="Auditorio pequeño, totalmente amueblado, desocupado (1 operador presente)", test_room="Auditorio A", room_volume=2830.0, area=340.0, source_positions=2, receiver_positions=8, # El apartado 9.2 i) exige declarar el grado de exactitud. measurement_standard="ISO 3382-2 (grado de ingeniería)", temperature=21.0, relative_humidity=45.0, laboratory="Laboratorio de referencia Phonometry", notes="16 combinaciones fuente-micrófono, 2 decaimientos cada una; " "posiciones y alturas en la planta acotada adjunta", requirement=1.3, # añade un veredicto frente a un T_mid objetivo ),) # T_mid + la tabla de parámetros por bandaTres de esas entradas están ahí porque el apartado 9.2 de la ISO 3382-2 las pide
y la ficha no tiene un campo propio para ninguna. El apartado 9.2 i) exige el
grado de exactitud — control, ingeniería o precisión —, así que le corresponde
ir en measurement_standard en lugar de quedar sobreentendido. El apartado 9.2 e)
exige el estado de la sala, el amueblamiento y el número de personas
presentes, y el apartado 4.1 fija lo que puede significar «desocupada»: sin
personas, o como mucho dos autorizadas a representar el estado desocupado salvo
que se especifique otra cosa; eso va en specimen. Y los apartados 9.2 c) e i)
juntos exigen una planta acotada con las posiciones de fuente y de micrófono y
sus alturas, que la ficha no dibuja: elabórala aparte y remite a ella, como hace
aquí notes. El apartado 9.2 f) añade la temperatura y la humedad relativa solo
para el método de precisión, que los campos de clima ya llevan.
La ficha de ejemplo se regenera con make reports y se mantiene renderizada en
el repositorio; pulsa la vista previa para abrir el PDF.

Ficha de acústica de salas de una página: una cabecera de metadatos (cliente, sala, descripción, volumen de la sala, superficie del suelo, posiciones de fuente y de micrófono, instrumentación, temperatura, humedad y presión), la tabla de parámetros por bandas de octava (T20, T30, EDT, C50, C80, D50 y Ts de 125 Hz a 4 kHz) sobre la gráfica de barras de tiempos de caída por banda, el tiempo de reverberación de medias enmarcado T_mid = 1,15 s con el EDT de medias al lado, y un veredicto CUMPLE frente al objetivo de 1,3 s.
Con los parámetros en la mano, los dos eslabones vecinos de la cadena son la adquisición que produjo la respuesta al impulso (Medición de la respuesta al impulso) y, para una planta diáfana en lugar de una sala cerrada, la línea de puestos de trabajo de la ISO 3382-3 (Acústica de oficinas diáfanas).
Qué cubre esta guía
Sección titulada «Qué cubre esta guía»Cubierto
La ISO 3382-1:2009 (apartado 5.3.3 de integración inversa y las fórmulas de parámetros del anexo A) y la ISO 3382-2:2008 (apartado 6 y el criterio de rango dinámico del apartado 5.3.3), calculados por
room.room_parameters/room.decay_curve: EDT, T20, T30, C50, C80, D50, Ts y las marcas de validez y curvatura por banda, con el filtrado de fase cero opcional de la NOTA del apartado 7.3 de ISO 3382-2, y la ficha ISO 3382 de una página con.report().No cubierto
El anexo A de la ISO 3382-1 también define la fuerza acústica y los parámetros binaurales LF/LFC e IACC; phonometry implementa solo la familia de reverberancia y claridad citada arriba (EDT, T20, T30, C50, C80, D50, Ts). La adquisición de la respuesta al impulso (ISO 18233) y las magnitudes de oficina diáfana (ISO 3382-3) tienen guías propias, Medición de la respuesta al impulso y Acústica de oficinas diáfanas. La absorción en cámara reverberante de ISO 354 que consume el par / medido vive en Medida y clasificación de la absorción sonora.
Véase también
Sección titulada «Véase también»- Medición de la respuesta al impulso: la adquisición ISO 18233 de la RI que esta página analiza.
- Acústica de oficinas diáfanas (ISO 3382-3): las magnitudes de privacidad del habla de las oficinas diáfanas.
- Medida y clasificación de la absorción sonora:
la medición de absorción en cámara reverberante de ISO 354 que consume los
tiempos de reverberación que devuelve
room_parameters, y su valoración ISO 11654. - Aislamiento acústico en campo, en laboratorio y de predicción: el aislamiento acústico entre recintos en campo, laboratorio y predicción, y su incertidumbre de medición.
- Potencia acústica: los métodos de que consumen el área de absorción de ISO 354 (el de ISO 3744 y el término de absorción de ISO 3741).
- Sonoridad y Métricas de calidad sonora: la sonoridad, la agudeza y las demás métricas de percepción de lo que entrega la sala.
- Bancos de filtros: los filtros de fracción de octava IEC 61260 usados para las curvas de decaimiento por banda y los espectros de aislamiento.
- Teoría: la integración de Schroeder, las ventanas de regresión y la derivación de la curva de referencia.
- Informe de conformidad: los decaimientos en forma cerrada y las definiciones de parámetros frente a los que se validan las implementaciones de ISO 3382.
- Referencia de la API:
room.acoustics. - Teoría: Respuesta al impulso y parámetros de acústica de salas: el modelo de decaimiento que hay detrás de T20, T30 y EDT y las relaciones de energía con las que se construyen los parámetros de claridad y definición.
Respuestas rápidas
Sección titulada «Respuestas rápidas»¿Cómo se definen EDT, T20 y T30?
Sección titulada «¿Cómo se definen EDT, T20 y T30?»Cada banda de la respuesta al impulso se convierte en una curva de decaimiento mediante la integración inversa de Schroeder de la RI al cuadrado, y una recta ajustada por mínimos cuadrados sobre un rango de evaluación se extrapola a una caída completa de 60 dB, (ISO 3382-1/2): EDT de 0 a −10 dB (reverberación percibida), T20 de −5 a −25 dB y T30 de −5 a −35 dB.
¿Cuánto rango de decaimiento necesito para un T20 o T30 válido?
Sección titulada «¿Cuánto rango de decaimiento necesito para un T20 o T30 válido?»La ventana de ajuste más un margen de seguridad debe caber dentro de la relación impulso-ruido (res.dynamic_range), la distancia de nivel entre el pico de la RI filtrada en banda y su suelo de ruido: la ISO 3382 exige al menos 35 dB de rango útil de decaimiento para T20 y 45 dB para T30. Un rango escaso sesga el tiempo ajustado hacia arriba, así que room_parameters endurece sus indicadores de validez a 46 dB y 54 dB, manteniendo el sesgo dentro de la DAP del 5 %. El suelo de ruido se estima a partir de la última décima parte de la respuesta, así que la grabación debe contener silencio después del decaimiento.
Referencias
Sección titulada «Referencias»- Hak, C. C. J. M., Wenmaekers, R. H. C. y van Luxemburg, L. C. J. (2012). Measuring room impulse responses: Impact of the decay range on derived room acoustic parameters. Acta Acustica united with Acustica, 98(6), 907-915. https://doi.org/10.3813/aaa.918574El análisis de la INR que sustenta la discusión del rango dinámico y los indicadores de validez endurecidos de esta página.
- International Organization for Standardization. (2008). Acoustics — Measurement of room acoustic parameters — Part 2: Reverberation time in ordinary rooms (ISO 3382-2:2008). Los grados de exactitud y el criterio de rango dinámico tras el análisis del decaimiento; sus reglas de posiciones se aplican en la guía de medición de la respuesta al impulso.
- International Organization for Standardization. (2009). Acoustics — Measurement of room acoustic parameters — Part 1: Performance spaces (ISO 3382-1:2009). Las definiciones de parámetros y las diferencias apenas perceptibles tras el análisis del decaimiento.
- Kuttruff, H. (2016). Room acoustics (6.ª ed.). CRC Press. https://doi.org/10.1201/9781315372150La monografía de referencia que sustenta esta página: la teoría estadística de los campos sonoros en decaimiento, la frecuencia de Schroeder y los parámetros perceptivos de sala de esta página.
- Schroeder, M. R. (1965). New method of measuring reverberation time. The Journal of the Acoustical Society of America, 37(3), 409-412. https://doi.org/10.1121/1.1909343El método de integración inversa que convierte la respuesta al impulso al cuadrado en la curva suave de decaimiento de esta página.