Toda magnitud de acústica de salas de este sitio parte de la misma medición: la respuesta al impulso (RI) entre una fuente y un receptor. Hazla bien y todo lo que viene después (tiempo de reverberación, claridad, aislamiento, métricas del habla) es cuestión de aritmética; hazla mal y ningún procesamiento posterior recupera lo que la excitación o la posición del micrófono tiraron. Esta guía cubre la propia adquisición, según ISO 18233: el barrido sinusoidal exponencial y su deconvolución, el método de correlación con MLS, y dónde colocar fuentes y micrófonos para que el resultado promediado signifique algo. Convertir la RI medida en parámetros de sala vive en Acústica de salas; la misma RI medida a ambos lados de un cerramiento se convierte en aislamiento acústico en Medición del aislamiento en campo (ISO 16283).
Dos excitaciones deterministas (ISO 18233)
Sección titulada «Dos excitaciones deterministas (ISO 18233)»Una sala se comporta, con buena aproximación, como un sistema lineal e invariante en el tiempo, así que todo sobre ella está contenido en su RI. Podrías disparar una pistola y grabar la cola, pero una excitación determinista reproducida por un altavoz y deconvolucionada recupera la misma RI con 20–30 dB más de relación señal-ruido efectiva (ISO 18233, apartado 6.2.3). Se proporcionan dos excitaciones.
La misma sala, el mismo ruido de fondo, tres excitaciones. La pistola recupera 46 dB de rango; un barrido deconvolucionado de 1 s recupera 75 dB, los 29 dB que predice el apartado 6.2.3. Dos duplicaciones más del barrido añaden 8 dB: el B.6 da unos 3 dB por duplicación como cifra normal, y el exceso de aquí es la propia cola de ruido de la deconvolución (B.5) desvaneciéndose con el barrido más largo. El número indicado es la distancia de pico a suelo, con el suelo leído como el valor eficaz de la ventana acotada, mucho después de que la sala se haya detenido.
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom scipy.signal import fftconvolvefrom phonometry import room
fs, n = 48000, 96000rng = np.random.default_rng(2026)t = np.arange(n) / fssystem = rng.standard_normal(n) * np.exp(-6.9077 * t / 0.7) * 0.02system[80] += 1.0; system[1500] += 0.45; system[3200] += 0.28noise = 10.0 ** (-46.0 / 20.0) # el fondo propio de la salawin = slice(int(1.0 * fs), int(1.6 * fs))
def peak_to_floor(h): mag = np.abs(np.asarray(h, dtype=float)) return 20 * np.log10(mag.max() / np.sqrt(np.mean(mag[win] ** 2)))
shot = system + rng.standard_normal(n) * noiseprint(round(peak_to_floor(shot))) # 46
for seconds in (1.0, 4.0): sweep = room.sweep_signal(fs, 20.0, 20000.0, seconds) played = fftconvolve(sweep, system) played = played + rng.standard_normal(played.size) * noise ir = room.impulse_response(played, sweep, fs, length=n) print(seconds, round(peak_to_floor(ir))) # 1.0 75 / 4.0 83 plt.plot(t, 20 * np.log10(np.abs(np.asarray(ir)) / np.max(np.abs(np.asarray(ir)))))plt.show()Barrido sinusoidal exponencial (ESS, Anexo B). La frecuencia instantánea crece exponencialmente,
de modo que el tiempo invertido por octava es constante y la excitación imita al ruido rosa (energía constante por banda de fracción de octava). La RI se recupera mediante división espectral lineal (con relleno de ceros, no circular),
con un pequeño término de Tikhonov que protege los extremos de banda donde el barrido tiene poca energía.
La deconvolución divide por el espectro de referencia, así que allí donde el
barrido no puso energía no hay nada por lo que dividir, y el término de Tikhonov
es lo único que impide que el cociente explote. Por eso el barrido empieza por
debajo de la banda más baja que se vaya a analizar y termina por encima de
la más alta: típicamente de 20 Hz a 20 kHz para una sala analizada de 125 Hz a
4 kHz, ya que los filtros de análisis necesitan energía tanto en sus faldas como
en sus centros. El síntoma de hacerlo mal es reconocible: un retumbo lento antes
del sonido directo, o una cola de alta frecuencia que resuena, y cualquiera de los
dos levanta el suelo de ruido aparente de las bandas extremas y acorta sus tiempos
de decaimiento ajustados. La regla es ensanchar antes el barrido y subir
regularization solo cuando el altavoz de verdad no pueda reproducir la banda, y
registrar el valor empleado, porque cambia el resultado.
Como un barrido de grave a agudo sitúa la distorsión armónica en tiempos de llegada negativos, la distorsión se separa limpiamente de la RI lineal y se descarta conservando solo la parte causal. El mecanismo cabe en una frase: la frecuencia instantánea de un barrido exponencial avanza un número fijo de octavas por segundo, así que el armónico -ésimo recorre el mismo camino en frecuencia un tiempo fijo antes, y tras la deconvolución la distorsión se concentra en paquetes discretos a retardos negativos separados por
De ahí se siguen tres consecuencias prácticas. La separación es proporcional a la
longitud del barrido, así que un barrido largo empuja los paquetes lejos de
mientras que uno muy corto deja que el paquete de segundo orden se
apelotone contra la respuesta lineal. Los paquetes son la materia prima del
análisis de distorsión por barrido sinusoidal, que es la razón de que exista
return_full=True. Y esta separación es la razón de que un barrido tolere un
altavoz llevado cerca de su límite, mientras que la MLS reparte esa misma
distorsión por toda la RI en forma de ruido.
return_full=True sobre ese mismo barrido de 3 s de 20 Hz a 20 kHz, con una no
linealidad sin memoria suave en la cadena. Los grupos H2, H3 y H4 caen en
, y el retorno por defecto sencillamente se queda con la mitad
sombreada.
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom scipy.signal import fftconvolve# `room` es el import del fragmento principal de abajo.
fs, f1, f2, seconds = 48000, 20.0, 20000.0, 3.0sweep = room.sweep_signal(fs, f1, f2, seconds)system = np.zeros(int(0.4 * fs))system[80], system[1400], system[3100] = 1.0, 0.5, 0.32
played = fftconvolve(sweep, system)played = played + 0.08 * played ** 2 + 0.04 * played ** 3 + 0.02 * played ** 4full = np.asarray(room.impulse_response(played, sweep, fs, return_full=True))
for order in (2, 3, 4): print(order, round(seconds * np.log(order) / np.log(f2 / f1), 2))# 2 0.3 / 3 0.48 / 4 0.6 -- los adelantos previstos, en segundos
half = full.size // 2plt.plot((np.arange(full.size) - half) / fs, 20 * np.log10(np.abs(np.roll(full, half)) / np.max(np.abs(full))))plt.xlim(-0.78, 0.42); plt.ylim(-95, 18)plt.show()El método "farina" llega al mismo resultado convolucionando la
grabación con el filtro inverso analítico; supone que el barrido de
referencia se generó con la amplitud y el fundido por defecto, así
que usa el método espectral con un barrido de amplitud distinta de la unidad
o con fundido personalizado.
Secuencia de longitud máxima (MLS, Anexo A). Una secuencia binaria de orden y longitud cuya autocorrelación circular es una delta casi perfecta; la RI se obtiene de la correlación cruzada circular del periodo grabado con la secuencia. La MLS excita con amplitud constante y es rápida de promediar, pero es más sensible a la varianza temporal (corrientes de aire, deriva de temperatura) y no admite tanta potencia como un barrido. Prefiere el barrido para salas y cerramientos; recurre a la MLS cuando la excitación deba ser periódica o el hardware favorezca una señal de dos niveles.
Dimensionar la excitación
Sección titulada «Dimensionar la excitación»Las dos excitaciones se dimensionan frente a un único número que el lector ya tiene: el tiempo de reverberación de la sala. Dimensiona mal y nada parece ir mal: el resultado sencillamente se queda corto.
El barrido y su silencio. Empieza el barrido por debajo de la banda de análisis más baja y termínalo por encima de la más alta. El apartado B.3.1 llama práctica segura con ruido de fondo moderado a una longitud de dos a cuatro veces el más largo esperado, seguida de un hueco de silencio de aproximadamente un ; el apartado 6.2.2.3 hace normativo el hueco — la excitación «debe ir seguida de un periodo de silencio» — y el decaimiento debe registrarse a lo largo de al menos la mitad de . Mantén la grabación en marcha hasta que todas las bandas de interés estén al menos 30 dB por debajo. Después, según el B.6, cada duplicación del barrido compra unos 3 dB de relación señal-ruido efectiva, y es preferible un barrido más largo a más promedios: promediar respuestas aumenta la sensibilidad a los cambios del entorno, y un único barrido largo no.
El periodo de la MLS. Una excitación periódica es distinta, y el apartado 6.2.2.2 es normativo al respecto (ec. (10)): el periodo de repetición no debe ser más corto que , de modo que caigan al menos dos líneas espectrales dentro del ancho de banda de cualquier modo de la sala. Como el periodo de una secuencia de orden es , eso fija el orden:
A 48 kHz, el orden 16 da 1,37 s y el orden 18 da 5,46 s, y una sala con s necesita el orden 17. Baja de ahí y la cola de un periodo se pliega sobre la cabeza del siguiente: el decaimiento queda solapado en el tiempo, el suelo de nivel sube y sale corto, sin ningún síntoma visible. Descarta el primer periodo como calentamiento, que es lo que hace el patrón de abajo de reproducir cuatro periodos y conservar tres.
import numpy as np# `room` es el import del bloque de la figura de arriba.
def excitation_budget(reverberation, fs=48000, factor=3.0): """Longitud de barrido, silencio y orden de MLS que necesita una sala con esta T.""" sweep_seconds = factor * reverberation # B.3.1: 2-4 x T silence = reverberation # B.3.1: aprox. T order = int(np.ceil(np.log2(reverberation * fs + 1.0))) # 6.2.2.2 ec. (10) period = (2 ** order - 1) / fs return round(sweep_seconds, 2), round(silence, 2), order, round(period, 2)
print(excitation_budget(1.2)) # (3.6, 1.2, 16, 1.37)print(excitation_budget(1.5)) # (4.5, 1.5, 17, 2.73)Lo que cuesta ser «más sensible a la varianza temporal». Un calentamiento lento de unos 0,3 K a lo largo de la toma — un remuestreo de 500 partes por millón, que es lo que una velocidad del sonido decreciente hace con los tiempos de llegada — deja intacta la recuperación por barrido y destruye la de MLS, porque la correlación promedia periodos que ya no encajan. El B.7.3.1 de la ISO 18233 enuncia el mismo resultado de forma cualitativa; la ec. (A.8) del A.4.3.1 da el límite orientativo °C para una medición de tiempo de reverberación.
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom scipy.signal import fftconvolve# `room` es el import del fragmento principal de abajo.
fs, n = 48000, 24000rng = np.random.default_rng(2026)t = np.arange(n) / fssystem = rng.standard_normal(n) * np.exp(-6.9077 * t / 0.4) * 0.02system[80] += 1.0; system[1500] += 0.45; system[3200] += 0.28
def drift(x, ppm): # la sala calentándose durante la toma i = np.arange(x.size, dtype=float) return np.interp(i, i * (1.0 + ppm * 1e-6 * i / x.size), x, left=0.0, right=0.0)
sweep = room.sweep_signal(fs, 20.0, 20000.0, 1.4)mls = room.mls_signal(16)for ppm in (0.0, 500.0): played = drift(fftconvolve(sweep, system), ppm) plt.plot(20 * np.log10(np.abs(np.asarray( room.impulse_response(played, sweep, fs, length=n))))) # Cuatro periodos reproducidos, el primero descartado como calentamiento. El # caso con deriva dispara el aviso de solapamiento circular de la biblioteca: # ese aviso ES el resultado. rec = drift(fftconvolve(np.tile(mls, 4), system)[mls.size: 4 * mls.size], ppm) plt.plot(20 * np.log10(np.abs(np.asarray( room.mls_impulse_response(rec, mls, length=n)))))plt.show()import numpy as npfrom scipy.signal import fftconvolvefrom phonometry import room
fs = 48000# Un barrido de 3 s, 20 Hz - 20 kHz es una buena excitación de sala de banda ancha# sweep: excitación que reproduces por el altavozsweep = room.sweep_signal(fs, 20.0, 20000.0, 3.0)
# Deconvoluciona la respuesta grabada para recuperar la respuesta al impulsosystem = np.zeros(fs); system[100] = 1.0; system[2000] = 0.4 # directo + reflexión# recorded: captura de micrófono del barrido reproducido (aquí simulada por convolución con una sala sintética)recorded = fftconvolve(sweep, system)ir = room.impulse_response(recorded, sweep, fs, method="spectral")print(int(np.argmax(np.abs(ir)))) # 100: sonido directo recuperadoir.plot() # forma de onda + envolvente de Schroeder (figura de abajo)
# Variante de filtro inverso de Farina (necesita la banda del barrido)ir_f = room.impulse_response(recorded, sweep, fs, method="farina", f_range=(20.0, 20000.0))
# MLS periódica: excita con >= 2 periodos, promedia, correlacionamls = room.mls_signal(16) # longitud 2**16 - 1 = 65535rec = fftconvolve(np.tile(mls, 2), system)[: 2 * mls.size]ir_m = room.mls_impulse_response(rec, mls)print(int(np.argmax(np.abs(ir_m)))) # 100sweep_signal/mls_signal devuelven arrays simples, listos para escribir en
un WAV y reproducir. impulse_response/mls_impulse_response devuelven ahora
un ImpulseResponseResult, un sustituto directo del array de la RI
(np.asarray(ir), la indexación y ir.size siguen funcionando, de modo que
room_parameters(ir, fs) no cambia) que además guarda la frecuencia de
muestreo y el método y añade un .plot().
Dos excitaciones más de la literatura de medición de funciones de
transferencia — los pares complementarios de Golay, cuya deconvolución es exacta
y libre de ruido, y los barridos conformados a un espectro objetivo
arbitrario — viven en la
guía de medición de sistemas y
devuelven los mismos tipos de resultado.
Las dos excitaciones. El barrido exponencial desplaza su energía hacia frecuencias altas a lo largo de toda la señal, mientras que la MLS es una secuencia de dos niveles con espectro plano, visible como la magnitud casi constante de la derecha.


Mostrar el código de esta figura
from phonometry import roomfrom phonometry import plot_excitation
fs = 48000sweep = room.sweep_signal(fs, 50.0, 20000.0, 1.0) # excitación ESSmls = room.mls_signal(12).astype(float) # longitud 2**12 - 1
# Una línea: forma de onda + espectrograma (barrido), secuencia + espectro (MLS)plot_excitation(sweep, fs, kind="sweep")plot_excitation(mls, fs, kind="mls")
# A mano: el espectrograma del barrido y el espectro de magnitud de la MLSimport numpy as npimport matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))ax1.specgram(sweep, NFFT=1024, Fs=fs, noverlap=512)ax1.set(xlabel="Tiempo [s]", ylabel="Frecuencia [Hz]", title="Espectrograma del barrido")spec = np.abs(np.fft.rfft(mls))freqs = np.fft.rfftfreq(mls.size, d=1.0 / fs)ax2.semilogx(freqs[1:], 20 * np.log10(spec[1:] / np.median(spec[1:])))ax2.set(xlabel="Frecuencia [Hz]", ylabel="Magnitud [dB]", title="Espectro de la MLS (plano)")La respuesta al impulso recuperada
Sección titulada «La respuesta al impulso recuperada»Deconvolucionar la grabación da la RI
de banda ancha: el sonido directo, las reflexiones tempranas discretas y la
cola difusa que decae. Su .plot() muestra la forma de onda arriba y la
envolvente log-magnitud con la curva de decaimiento de energía de Schroeder
abajo: el decaimiento recto cuya pendiente se convierte en el tiempo de
reverberación en la
guía de acústica de salas.
Un barrido exponencial cruza una sala dibujada mientras se construye el espectrograma de la grabación, con las reflexiones discretas apareciendo como copias retardadas de la cresta principal; después el filtro inverso colapsa toda la grabación en la respuesta al impulso.
Un barrido exponencial cruza una sala dibujada mientras se construye el espectrograma de la grabación, con las reflexiones discretas apareciendo como copias retardadas de la cresta principal; después el filtro inverso colapsa toda la grabación en la respuesta al impulso.


Mostrar el código de esta figura
import numpy as npfrom scipy.signal import fftconvolve# `room` es el import del fragmento principal de arriba.
fs = 48000sweep = room.sweep_signal(fs, 20.0, 20000.0, 1.5)# Una sala sintética: sonido directo + dos reflexiones + cola difusa que decaesystem = np.zeros(int(0.7 * fs))system[80], system[1400], system[3100] = 1.0, 0.5, 0.32ir = room.impulse_response(fftconvolve(sweep, system), sweep, fs, length=system.size)
# Una línea: forma de onda + log-magnitud / decaimiento de Schroederir.plot(language="es")
# A mano: la envolvente log-magnitud normalizada en dBimport matplotlib.pyplot as plth = np.asarray(ir)t = np.arange(h.size) / fsplt.plot(t, 20 * np.log10(np.abs(h) / np.max(np.abs(h))))plt.ylim(-80, 5)plt.xlabel("Tiempo [s]"); plt.ylabel("Nivel re pico [dB]")Una cosa que esta respuesta no es: la respuesta al impulso de la sala. Lo que devuelve la deconvolución es la respuesta de altavoz, sala y micrófono en serie — el apartado A.1 de la ISO 18233 lo dice para la cadena de MLS, y el barrido no es distinto. Para el tiempo de reverberación eso es inofensivo, porque un filtro lineal fijo cambia la forma de la parte temprana pero no la pendiente del decaimiento de la banda, que es la razón de que los tiempos de reverberación sean transferibles entre sistemas de medición. Para los parámetros de energía no lo es: la caída de la fuente en baja frecuencia y su directividad en alta redistribuyen la energía temprana y desplazan C50, C80 y , así que esos no son transferibles. De ahí se siguen dos consecuencias. Declara la fuente empleada siempre que indiques claridad o tiempo central; y elimina la respuesta en campo libre de la cadena antes de auralizar la respuesta o de compararla entre sistemas. Es también la razón de que la norma especifique la directividad de la fuente y no su respuesta en frecuencia: la directividad varía entre posiciones y no puede ecualizarse.
Parámetros de sweep_signal() / inverse_filter()
Sección titulada «Parámetros de sweep_signal() / inverse_filter()»| Parámetro | Tipo | Unidades | Rango / valor por defecto | Notas |
|---|---|---|---|---|
fs | int | Hz | > 0 | Frecuencia de muestreo |
f1 | float | Hz | > 0, en/por debajo de la banda más baja | Frecuencia inicial del barrido |
f2 | float | Hz | f1 < f2 <= fs/2 | Frecuencia final del barrido |
seconds | float | s | 2–4 × la T más larga esperada | Duración del barrido; ver «Dimensionar la excitación» más arriba |
amplitude | float | — | por defecto 1.0 | Amplitud de pico |
fade | float | — | [0, 0.5), por defecto 0.01 | Fracción de fundido (medio Hann; elimina transitorios de inicio/fin) |
inverse_filter(fs, f1, f2, seconds, amplitude=..., fade=...) toma exactamente
los mismos argumentos que sweep_signal, porque el filtro se deriva del barrido
que tiene que invertir: es el barrido invertido en el tiempo con una envolvente de
+6 dB/octava, que blanquea el espectro de −3 dB/octava del ESS de modo que
convolucionar barrido con filtro dé un impulso (ISO 18233, B.5). Solo lo invocas
tú mismo para inspeccionar el filtro o para convolucionar una grabación a mano:
impulse_response(..., method="farina") lo construye internamente a partir de
f_range.
Parámetros de impulse_response()
Sección titulada «Parámetros de impulse_response()»| Parámetro | Tipo | Unidades | Rango / valor por defecto | Notas |
|---|---|---|---|---|
recorded | array 1D | cualquiera | no vacío | Respuesta del sistema grabada |
reference | array 1D | cualquiera | no vacío | El barrido emitido |
fs | int | Hz | > 0 | Frecuencia de muestreo |
method | str | — | 'spectral' (por defecto) / 'farina' | 'farina' requiere f_range |
f_range | (float, float) | Hz | por defecto None | (f1, f2) del barrido (solo Farina) |
regularization | float | — | por defecto 1e-6 | Término de Tikhonov como fracción de la energía espectral de pico |
length | int, opcional | muestras | por defecto len(recorded) | Muestras de RI causal a devolver |
return_full | bool | — | por defecto False | Devuelve la secuencia completa (distorsión en la cola) |
mls_signal(order) toma un entero order en 2–20 (longitud de secuencia
); mls_impulse_response(recorded, mls, length=None)
necesita que recorded abarque un número entero de periodos de MLS.
La cadena de medición
Sección titulada «La cadena de medición»Un barrido deconvolucionado nunca vale más que lo que lo radió, y el apartado 4.2 de la ISO 3382-1 es concreto sobre las tres partes de la cadena.
La fuente (4.2.1). «Debe ser lo más omnidireccional posible», y la Tabla 1 fija cuánto, como la desviación máxima de la omnidireccionalidad promediada sobre arcos deslizantes de 30° en campo libre, medida con al menos 1,5 m entre fuente y micrófono:
| Frecuencia [Hz] | 125 | 250 | 500 | 1000 | 2000 | 4000 |
|---|---|---|---|---|---|---|
| Desviación máxima [dB] | ± 1 | ± 1 | ± 1 | ± 3 | ± 5 | ± 6 |
Por eso el trabajo en salas usa un dodecaedro y por eso la salida de
sweep_signal no puede reproducirse sin más por un monitor de estudio: un monitor
de una vía es directivo bastante antes de 1 kHz, y la desviación que mostraría a
2 y 4 kHz es de decenas de decibelios, no de 5 o 6.
El nivel (4.2.1). Sin promediado síncrono, la fuente debe dar un nivel al menos 45 dB por encima del fondo en la banda de frecuencia correspondiente si se va a medir T30, y al menos 35 dB si solo hace falta T20. Los 20–30 dB de ganancia de proceso medidos al principio de esta página son lo que permite a una fuente modesta cumplirlo, pero no pueden crear rango en una banda en la que la sala suene más que la fuente. Nada de la cadena puede saturar (4.2.2.5).
La cadena de recepción (4.2.2.2). El equipo debe cumplir los requisitos de un sonómetro de tipo 1 (clase 1) según la IEC 61672-1, con filtros de octava o de tercio de octava conformes a la IEC 61260. El micrófono debe ser omnidireccional y conviene que sea lo más pequeño posible, preferiblemente con un diafragma no mayor de 13 mm; se admiten hasta 26 mm para una cápsula de respuesta de presión, o para una cápsula de campo libre provista de un corrector de incidencia aleatoria.
Las alturas (4.3). El centro acústico de la fuente debería estar a 1,5 m sobre el suelo, en posiciones donde estarían las fuentes naturales de la sala, y con al menos dos posiciones de fuente. Los micrófonos se sitúan a 1,2 m, la altura de oído sentado, al menos a un cuarto de longitud de onda — «normalmente en torno a 1 m» — de la superficie reflectante más cercana, incluido el suelo.
Esos mismos 45 dB son lo que comprueba aguas abajo la marca de validez de T30: la guía de acústica de salas rechaza una banda cuyo rango de decaimiento no supere la ventana de evaluación en 15 dB, y ese rechazo suele ser un problema de nivel de fuente, no de procesado.
Dónde medir
Sección titulada «Dónde medir»Una RI caracteriza un único par fuente–receptor; un parámetro de sala se obtiene promediando sobre varios. ISO 3382-1 (salas de espectáculos) pide al menos dos posiciones de fuente y micrófonos separados m entre sí, m de cualquier superficie, a m (altura de oído sentado); ISO 3382-2 fija el número mínimo de posiciones de fuente, de micrófono y de combinaciones fuente–micrófono según el grado de exactitud (control / ingeniería / precisión) y pide posiciones de micrófono que eviten las colocaciones simétricas.
Promediar entre posiciones. El parámetro por banda que se informa es la media aritmética sobre todas las combinaciones fuente-micrófono, y la dispersión entre posiciones es parte de la respuesta, no ruido: indícala junto a la media siempre que supere la diferencia apenas perceptible (DAP) del parámetro (Tabla A.1 de ISO 3382-1), porque una sala puede cumplir un objetivo en promedio mientras butacas concretas quedan muy fuera de él.
Antes de los cuatro errores de abajo, algo que no es un error: una única reflexión del suelo que llega al micrófono junto al sonido directo filtra en peine la respuesta, y mover el micrófono mueve el peine con él. Ese es el mecanismo que hay detrás de los dos primeros errores.
El sonido directo y una reflexión del suelo llegan al micrófono; al cambiar la altura del micrófono varía el retardo entre los dos caminos y el filtro en peine de la respuesta en frecuencia se mueve con él, y por eso importa la posición de medición cerca de superficies reflectantes.
El sonido directo y una reflexión del suelo llegan al micrófono; al cambiar la altura del micrófono varía el retardo entre los dos caminos y el filtro en peine de la respuesta en frecuencia se mueve con él, y por eso importa la posición de medición cerca de superficies reflectantes.
Cuatro errores de colocación sesgan la propia media:
- Posiciones correlacionadas. Micrófonos a menos de 2 m entre sí muestrean casi el mismo campo sonoro dos veces, así que el promedio parece más estable de lo que es. El mínimo de 1 m a cualquier superficie evita, a su vez, el refuerzo de presión junto a un contorno (el filtro en peine del clip de arriba) que colorea todo lo que graba un micrófono demasiado cercano.
- Colocaciones simétricas. En una sala geométricamente simétrica, las posiciones especulares reciben patrones de reflexión especulares; promediarlas no añade información nueva. Por eso la ISO 3382-2 pide posiciones que no caigan sobre líneas de simetría.
- Demasiado cerca de la fuente. Dentro del campo directo el EDT se desploma y el C80 se satura hacia arriba haga lo que haga la sala. La ISO 3382-2 mantiene por ello cada micrófono al menos a de la fuente, con una estimación del tiempo de reverberación esperado (2,0 m para la sala de 10 × 6 × 3,5 m de los dibujos de arriba, V = 210 m³, con 0,6 s esperados).
- La lotería de baja frecuencia. Por debajo de la frecuencia de Schroeder (véase la guía de acústica de salas) cada banda contiene solo un puñado de modos propios, y un micrófono sobre un nodo de uno de ellos ve un decaimiento distinto que otro sobre un antinodo. La dispersión de las bandas de 63-125 Hz entre posiciones es estructuralmente mayor; el remedio son más posiciones, no una excitación más larga.
El tercer error es el que merece dibujarse, porque no parece un error en el resultado:
EDT, T30 y C80 de la sala de arriba frente a la distancia a la fuente, a partir de respuestas al impulso sintéticas. Dentro de , el EDT es corto por un factor de aproximadamente 2,5 y el C80 sale 7 dB alto — muchas veces la diferencia apenas perceptible del 5 % relativo y de 1 dB de la Tabla A.1 de la ISO 3382-1 — mientras que el T30 fluctúa 0,12 s a lo largo de todo el barrido sin tendencia en el extremo cercano. Esa asimetría es la trampa: un control que declare solo el T30 no notará que el micrófono estaba demasiado cerca, y todos los parámetros de energía que lo acompañan están mal.
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as np# `room` es el import del fragmento principal de arriba.
dims, alpha, source = (10.0, 6.0, 3.5), 0.32, (2.0, 3.0, 1.5)volume = float(np.prod(dims))print(round(2.0 * np.sqrt(volume / (343.0 * 0.6)), 1)) # 2.0 m: d_min
for dist in (0.6, 1.0, 2.0, 4.0, 7.0): band = [] for offset in (-0.7, -0.25, 0.25, 0.7): # un receptor especular dispersa res = room.image_source_rir( dims, source, (2.0 + dist, 3.0 + offset, 1.2), alpha, fs=48000, max_order=40, # c x 0.58 T / L_min, no el 20 por defecto ) par = room.room_parameters(res.ir, res.fs, limits=(125.0, 4000.0)) mid = (par.frequency > 400.0) & (par.frequency < 1200.0) band.append([np.mean(par.edt[mid]), np.mean(par.t30[mid]), np.mean(par.c80[mid])]) print(dist, np.round(np.mean(band, axis=0), 2))# 0.6 [ 0.18 0.54 17.48] ... 7.0 [ 0.44 0.66 10.65]plt.show()Y el cuarto merece contarse. La frecuencia de Schroeder es donde una sala deja de ser un puñado de resonancias y empieza a ser un campo estadístico, y el recuento es rotundo:
Por qué «más posiciones, no una excitación más larga». La octava de 4 kHz de esta sala contiene aproximadamente 1,75 millones de modos, así que el promedio en banda hace por ti el promediado espacial y todos los micrófonos declaran casi el mismo decaimiento. La octava de 63 Hz contiene 13: cuál de ellos toca un micrófono dado decide lo que mide, y solo más micrófonos pueden promediar eso. Un barrido más largo compra relación señal-ruido, que es otro problema.
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as np# `room` es el import del fragmento principal de arriba.
dims, reverberation = (7.0, 5.0, 3.0), 0.9bands = np.array([63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0])edge = np.sqrt(2.0)counts = [room.room_mode_count(f * edge, dims) - room.room_mode_count(f / edge, dims) for f in bands]print([round(c) for c in counts])# [13, 77, 514, 3735, 28412, 221512, 1749162]print(round(room.schroeder_frequency(reverberation, float(np.prod(dims))))) # 185
plt.bar(bands, counts, width=bands * 0.62)plt.xscale("log"); plt.yscale("log")plt.show()La sala mientras la mides. apartado 4.1 de la ISO 3382-2: las mediciones de tiempo de reverberación «deberían hacerse en una sala sin personas», aunque pueden estar presentes hasta dos personas y seguir representando el estado desocupado salvo que la especificación diga otra cosa. Si el resultado se va a usar para corregir una medición de nivel, congela la ocupación: tiene que haber el mismo número de personas en las dos. Para las mediciones de precisión debe medirse normalmente la temperatura y la humedad relativa de la sala, tanto porque lo exige la norma como porque fijan el término de absorción del aire que consumen las guías de predicción. La excepción también está enunciada: la absorción del aire es despreciable cuando es más corto que 1,5 s a 2 kHz y 0,8 s a 4 kHz, y entonces no hace falta registrar el clima.
El brazo giratorio. El apartado 4.3.1 admite un micrófono en movimiento en lugar de posiciones discretas, con tres condiciones: un radio de barrido de al menos 0,7 m, un plano de recorrido al menos 10° fuera de todos los planos de la sala (pared, suelo, techo) y un periodo de recorrido de al menos 15 s. Sustituye a las múltiples posiciones de micrófono solo donde lo permita el grado de la Tabla 1: para el método de ruido interrumpido, y donde el resultado sea un término de corrección.
Qué debe llevar el informe (apartado 9.2). Una declaración de conformidad con
la ISO 3382-2; lo suficiente para identificar la sala de forma unívoca; una
planta acotada; el volumen; el estado de la sala (mobiliario, personas
presentes); para el método de precisión, la temperatura y la humedad relativa; el
tipo de fuente y una descripción de la señal; el grado de exactitud — control,
ingeniería o precisión — con las posiciones de fuente y de micrófono,
preferiblemente representadas sobre esa planta junto con sus alturas; los aparatos
de medida y los micrófonos; el método de evaluación de las curvas de decaimiento;
cómo se promedió el resultado en cada posición y entre posiciones; la tabla de
resultados; y la fecha y la organización que midió. La ficha de la
guía de acústica de salas lleva
la mayoría de ellos como campos de ReportMetadata, pero la planta acotada con
las posiciones encima hay que aportarla aparte.
De la respuesta al impulso en adelante
Sección titulada «De la respuesta al impulso en adelante»La RI sale de esta página en varias direcciones. Filtrada en bandas y sometida a integración inversa de Schroeder se convierte en la curva de decaimiento cuya pendiente es el tiempo de reverberación: la guía de acústica de salas arranca exactamente ahí, y su hermana de oficinas diáfanas recorre la línea de puestos de trabajo de ISO 3382-3. Medidos a ambos lados de un cerramiento, los mismos barridos alimentan las diferencias de nivel del aislamiento acústico en campo. Y la distorsión armónica que el barrido exponencial empuja a tiempos de llegada negativos no siempre se descarta: leída a propósito, se convierte en el análisis de THD de la guía de distorsión por barrido sinusoidal.
Qué cubre esta guía
Sección titulada «Qué cubre esta guía»Cubierto
La adquisición determinista de la respuesta al impulso de sala de ISO 18233:2006: el barrido sinusoidal exponencial del Anexo B (
room.sweep_signal,room.inverse_filter) con deconvolución espectral lineal (regularizada con Tikhonov) y la variante de filtro inverso de Farina (room.impulse_response, métodos"spectral"y"farina"), y las secuencias de longitud máxima del Anexo A (room.mls_signal, órdenes 2-20,room.mls_impulse_responsepor correlación cruzada circular). Los resultados son objetosImpulseResponseResultque encajan sin cambios enroom.room_parameters. Las reglas de dimensionado de la ISO 18233 (longitud de barrido y silencio del apartado B.3.1, ec. (10) del apartado 6.2.2.2 para el periodo de la MLS), los requisitos de equipo del apartado 4.2 de la ISO 3382-1 y las reglas de colocación de ISO 3382-1/-2 (separación, distancia a superficies, la distancia mínima a la fuente, la alternativa del brazo giratorio y los grados de exactitud) se citan para la planificación, junto con la lista de comprobación del informe del apartado 9.2.No cubierto
La reproducción y la grabación en sí (la E/S de la tarjeta de sonido, la calibración de nivel de la cadena) quedan fuera de la biblioteca. Los diagnósticos de varianza temporal y de distorsión de ISO 18233 no están implementados: la guía explica cómo el barrido separa la distorsión, pero ninguna función auxiliar la cuantifica (esa lectura vive en la guía de distorsión por barrido sinusoidal). Las reglas de posiciones son prosa de orientación: nada comprueba cuántas posiciones se midieron ni dónde.
Véase también
Sección titulada «Véase también»- Acústica de salas: el análisis del decaimiento y los parámetros ISO 3382 calculados a partir de la RI que esta página adquiere.
- Acústica de oficinas diáfanas (ISO 3382-3): la línea de privacidad del habla medida con la misma adquisición.
- Medición de sistemas: pares de Golay complementarios y barridos con espectro conformado, que devuelven los mismos tipos de resultado.
- Distorsión y fase con barrido sinusoidal: la lectura de Farina de la distorsión que el barrido separa.
- Medición del aislamiento en campo (ISO 16283): la misma medición a ambos lados de un cerramiento.
- Fuentes imagen y campo estacionario: respuestas al impulso simuladas sobre las que ensayar la cadena de procesamiento.
- Teoría: la integración de Schroeder que el análisis del decaimiento aplica a esta RI.
- Referencia de la API:
room.impulse_response. - Teoría: Respuesta al impulso y parámetros de acústica de salas: la integración inversa de Schroeder y la deconvolución en la que se apoya el método del barrido.
Respuestas rápidas
Sección titulada «Respuestas rápidas»¿Mido la respuesta al impulso de la sala con un barrido sinusoidal o con una MLS?
Sección titulada «¿Mido la respuesta al impulso de la sala con un barrido sinusoidal o con una MLS?»Ambos son métodos de deconvolución de ISO 18233 que recuperan la respuesta al impulso con 20–30 dB más de relación señal-ruido efectiva que una fuente impulsiva. Prefiere el barrido sinusoidal exponencial (Anexo B): sitúa la distorsión armónica en tiempos de llegada negativos, donde se descarta. Usa la MLS (Anexo A) cuando la excitación deba ser periódica o el hardware favorezca una señal de dos niveles; es más sensible a la varianza temporal.
Referencias
Sección titulada «Referencias»- International Organization for Standardization. (2006). Acoustics — Application of new measurement methods in building and room acoustics (ISO 18233:2006). La adquisición por barrido sinusoidal y MLS que esta página implementa.
- 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, los recuentos de posiciones y la distancia mínima a la fuente tras la discusión sobre promediado de posiciones.
- International Organization for Standardization. (2009). Acoustics — Measurement of room acoustic parameters — Part 1: Performance spaces (ISO 3382-1:2009). Los requisitos de posiciones de fuente y micrófono citados en las reglas de dónde medir.