Ir al contenido

Acústica de oficinas diáfanas (ISO 3382-3)

Normas aplicables: ISO 3382Referencias: Long 2014

Una oficina diáfana no es un problema de reverberación; es un problema de privacidad, y una sala que queda bien en los parámetros de sala cerrada puede suspenderlo igualmente. ISO 3382-3 caracteriza por ello la oficina con cuatro números únicos — , , y el ruido de fondo medio — medidos a lo largo de una línea de puestos de trabajo, alejándose de un hablante. Esta guía cubre esa cadena de medición — las magnitudes, la línea de medición a escala y la ficha acreditada — y después le da la vuelta a la pregunta: en fase de proyecto, antes de que exista ninguna oficina ni ningún restaurante, el modelo de Long de ruido autogenerado por los ocupantes predice el fondo que genera una sala ocupada a partir de sus propios ocupantes, y convierte una relación habla-ruido objetivo en un área de absorción por mesa. Primero la medición, después el diseño; las dos mitades no comparten más que la sala. Las respuestas al impulso y los niveles que la sustentan se adquieren como en Medición de la respuesta al impulso; el STI por posición sale de la guía del Índice de transmisión del habla; los parámetros de decaimiento de sala cerrada viven en Acústica de salas.

Privacidad del habla a lo largo de una línea de puestos

Sección titulada «Privacidad del habla a lo largo de una línea de puestos»

La acústica de oficinas diáfanas trata de la privacidad del habla: con qué rapidez el habla de un hablante se desvanece hasta la ininteligibilidad a medida que uno se aleja. Los niveles y el STI se miden a lo largo de una fila de puestos de trabajo (al menos 4 posiciones, preferiblemente 6–10), y cuatro magnitudes de un solo número resumen la sala: la distancia de distracción , la tasa de decaimiento espacial , el nivel de habla a 4 m y el ruido de fondo medio ponderado A (apartado 6.4). La distancia de privacidad y el STI en el puesto más cercano son añadidos opcionales; open_plan_metrics devuelve , , y . La tasa de decaimiento espacial del habla ponderada A es la pendiente del nivel frente a , escalada a una cifra por duplicación usando solo las posiciones de 2–16 m,

con leído en la misma recta a 4 m. La distancia de distracción (STI = 0,50) y la distancia de privacidad (STI = 0,20) provienen de una regresión lineal del STI frente a la distancia.

Las dos distancias se leen sobre la recta ajustada, y el apartado 6.3 permite que la lectura caiga fuera del tramo medido: la Figura 3 b) dibuja la recta prolongada hasta el cruce. Así que un que cae dentro de la línea es una medición, mientras que un bastante más allá de la última posición es una extrapolación cuya confianza decae con la distancia: decláralo con el tramo medido al lado (« = 17 m, extrapolado desde posiciones hasta 16 m»). La norma también prevé oficinas en las que el STI nunca baja a 0,20 — «puede resultar imposible determinar la distancia de privacidad si el STI > 0,20 en todas las posiciones» — y eso es lo que significa aquí un nan, no un fallo. Un STI no decreciente a lo largo de la línea suele indicar que la última posición quedó cerca de una superficie reflectante, donde suben tanto el nivel como el STI; el apartado 6.2 dice que se descarte esa posición de los ajustes de y en lugar de darle vueltas.

El Anexo A de la ISO 3382-3 es informativo, pero fija los dos extremos de la escala:

MagnitudOficina mala típicaObjetivo bueno
< 5 dB≥ 7 dB
> 50 dB≤ 48 dB
> 10 m≤ 5 m

Esos intervalos son informativos, y las guías nacionales o el pliego del cliente prevalecen sobre ellos. Lee y como una pareja: la tasa de decaimiento es una pendiente y el nivel a 4 m es su ordenada, así que citar cualquiera de los dos por separado favorece o condena la sala.

es la cuarta magnitud exigida y no es un adorno: el ruido de fondo se mide en bandas de octava en todas las posiciones con la misma integración de s, se pondera A y se promedia sobre la línea, y esa media es el enmascarador frente al que se calcula el STI de cada posición. Promediarlo espacialmente es lo que deja y sin ambigüedad. Es también la razón de que el diseño de una oficina diáfana tenga dos palancas y no una — atenuación (mamparas, techo absorbente, distribución: suben y bajan ) y enmascaramiento (subir el fondo para que el habla pierda antes la inteligibilidad) — y de que la oficina se mida amueblada, desocupada y con las instalaciones en marcha. Una oficina medida con la ventilación o el sistema de enmascaramiento bajados devuelve un STI mayor en todas las posiciones y desplaza las dos distancias metros hacia fuera sin que nada haya cambiado en la sala.

Línea de medición de oficina diáfana ISO 3382-3 desde la fuente a 1 m a lo largo de posiciones de 2 m a 16 m, que alimenta las cuatro magnitudes que devuelve open_plan_metrics, D2,S, Lp,A,S,4m, rD y rP, con una nota de que el apartado 4 exige además el ruido de fondo medio ponderado A Lp,A,BLínea de medición de oficina diáfana ISO 3382-3 desde la fuente a 1 m a lo largo de posiciones de 2 m a 16 m, que alimenta las cuatro magnitudes que devuelve open_plan_metrics, D2,S, Lp,A,S,4m, rD y rP, con una nota de que el apartado 4 exige además el ruido de fondo medio ponderado A Lp,A,B
import numpy as np
from phonometry import room
# Una línea de laboratorio: los niveles están construidos con 7 dB limpios por
# duplicación y el STI con una recta de -0,03 por metro, para que cada número
# impreso pueda comprobarse a mano. Una línea medida no es tan pulcra (ver abajo).
r = np.array([2.0, 4.0, 6.0, 8.0, 12.0, 16.0]) # distancias al hablante (m)
lp = 65.0 - 7.0 * np.log2(r) # nivel de habla ponderado A (dB)
sti = 0.70 - 0.03 * r # STI por posición
m = room.open_plan_metrics(r, lp, sti)
print(round(m.d2s, 1), round(m.lp_as_4m, 1)) # 7.0 dB, 51.0 dB
print(round(m.rd, 1), round(m.rp, 1)) # 6.7 m, 16.7 m
m.plot() # la regresión de decaimiento espacial de la figura de abajo

Leer esta oficina. = 7,0 dB es exactamente el umbral de oficina buena del Anexo A, pero = 51,0 dB queda por encima de la línea de 50 dB de oficina mala, y se queda aun así en 6,7 m. Es una buena tasa de decaimiento gastada desde un nivel de partida demasiado alto, así que la corrección es atenuar cerca del hablante — una mampara, una isla acústica sobre el puesto — y no ganar más decaimiento más lejos. Y una línea medida no se parece a esta: las posiciones se dispersan en torno a la recta ajustada, típicamente uno o dos decibelios, con las cercanas tiradas hacia arriba por el campo directo y las lejanas aplanadas por el suelo de ruido de fondo. Lo que se declara es la regresión, no ninguna posición suelta: se lee sobre la recta aunque no hubiera ningún micrófono a 4 m, que es también la razón de que se prefieran seis posiciones — cuatro apenas sujetan una pendiente en cuanto hay que descartar una de ellas.

Decaimiento espacial en oficina diáfana: nivel de habla ponderado A y STI frente a la distancia a la fuente en eje logarítmico, con la regresión D2,S, el marcador Lp,A,S,4m a 4 m y los cruces de distancia rD y rPDecaimiento espacial en oficina diáfana: nivel de habla ponderado A y STI frente a la distancia a la fuente en eje logarítmico, con la regresión D2,S, el marcador Lp,A,S,4m a 4 m y los cruces de distancia rD y rP
Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from phonometry import room
r = np.array([2.0, 4.0, 6.0, 8.0, 12.0, 16.0]) # distancias al hablante (m)
lp = 65.0 - 7.0 * np.log2(r) # nivel de habla ponderado A (dB)
sti = 0.70 - 0.03 * r # STI por posición
m = room.open_plan_metrics(r, lp, sti)
# En una línea: la regresión D2,S reconstruida con los campos del resultado,
# con los cruces rD / rP marcados (la figura superior añade además los puntos
# medidos y el eje de STI):
m.plot(language="es")
plt.show()
import matplotlib.pyplot as plt
import numpy as np
from phonometry import room
r = np.array([2.0, 4.0, 6.0, 8.0, 12.0, 16.0]) # distancias al hablante (m)
lp = 65.0 - 7.0 * np.log2(r) # nivel de habla ponderado A (dB)
sti = 0.70 - 0.03 * r # STI por posición
m = room.open_plan_metrics(r, lp, sti)
# Decaimiento espacial: Lp,A,S medido frente a la distancia en eje logarítmico,
# la regresión D2,S reconstruida con los campos del resultado, y el STI con los
# cruces rD / rP en un eje gemelo:
b = -m.d2s / np.log10(2.0) # pendiente de la regresión frente a lg(r)
a = m.lp_as_4m - b * np.log10(4.0) # ordenada desde el nivel a 4 m
rr = np.logspace(np.log10(2.0), np.log10(16.0), 100)
fig, ax = plt.subplots()
ax.semilogx(r, lp, "o", label="Lp,A,S medido")
ax.semilogx(rr, a + b * np.log10(rr), "--", label=f"D2,S = {m.d2s:.1f} dB")
ax.plot(4.0, m.lp_as_4m, "D", label=f"Lp,A,S,4m = {m.lp_as_4m:.0f} dB")
ax.set_xlabel("Distancia al hablante r [m]")
ax.set_ylabel("Nivel de habla ponderado A [dB]")
ax.set_xlim(1.8, 20.0)
twin = ax.twinx()
twin.semilogx(r, sti, "s-", color="#2ca02c", label="STI")
twin.axvline(m.rd, ls=":", color="#2ca02c")
twin.axvline(m.rp, ls=":", color="#9467bd")
twin.annotate(f"rD = {m.rd:.1f} m", (m.rd, 0.52))
twin.annotate(f"rP = {m.rp:.1f} m", (m.rp, 0.22))
twin.set_ylabel("STI")
twin.set_ylim(0.0, 1.0)
lines, labels = ax.get_legend_handles_labels()
tl, tlab = twin.get_legend_handles_labels()
ax.legend(lines + tl, labels + tlab, loc="best")
plt.show()

Frente a la escala del Anexo A, esa única oficina queda entre dos salas muy distintas:

Dos paneles apilados sobre un eje logarítmico de distancia común de 2 a 16 metros. Arriba, el nivel de habla ponderado A de una oficina tratada decayendo a 8 dB por duplicación y pasando por 47 dB a 4 metros, y el de una sin tratar a 4 dB por duplicación pasando por 52 dB, con las bandas del Anexo A sombreadas: por encima de 50 dB mala, en 48 dB o por debajo el objetivo bueno. Abajo, las dos regresiones de STI cruzando 0,50 a 4,5 y 11,0 metros, con la banda buena hasta 5 metros y la banda mala más allá de 10 metros sombreadas y la línea de privacidad STI = 0,20 marcadaDos paneles apilados sobre un eje logarítmico de distancia común de 2 a 16 metros. Arriba, el nivel de habla ponderado A de una oficina tratada decayendo a 8 dB por duplicación y pasando por 47 dB a 4 metros, y el de una sin tratar a 4 dB por duplicación pasando por 52 dB, con las bandas del Anexo A sombreadas: por encima de 50 dB mala, en 48 dB o por debajo el objetivo bueno. Abajo, las dos regresiones de STI cruzando 0,50 a 4,5 y 11,0 metros, con la banda buena hasta 5 metros y la banda mala más allá de 10 metros sombreadas y la línea de privacidad STI = 0,20 marcada

Los dos extremos del Anexo A sobre un mismo eje. La oficina tratada cumple los tres objetivos; la sin tratar incumple los tres, y su distancia de privacidad — 24 m leídos sobre una línea de 16 m — es exactamente la extrapolación de la que se advertía arriba.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
# `room` es el import del primer fragmento de arriba.
positions = np.array([2.0, 3.0, 4.0, 6.0, 8.0, 11.0, 16.0])
for d2s, lp_4m, sti_0, sti_slope in ((8.0, 47.0, 0.62, 0.0267),
(4.0, 52.0, 0.75, 0.0227)):
slope = -d2s / np.log10(2.0)
levels = (lp_4m - slope * np.log10(4.0)) + slope * np.log10(positions)
res = room.open_plan_metrics(positions, levels, sti_0 - sti_slope * positions)
print(round(res.d2s, 1), round(res.lp_as_4m, 1),
round(res.rd, 1), round(res.rp, 1))
# 8.0 47.0 4.5 15.7 / 4.0 52.0 11.0 24.2
plt.semilogx(positions, levels, "o--")
plt.show()

La propia línea merece una planta a escala. plot_open_plan_geometry dibuja la fuente, la línea de micrófonos entre los puestos de trabajo y las dos distancias sobre el eje, y un resultado que retuvo sus posiciones redibuja su propia línea con m.plot_geometry().

Planta a escala de la línea de medida en oficina diáfana: la estrella roja de la fuente en el origen, seis micrófonos azules de 2 m a 16 m sobre una línea punteada entre los bloques grises de los puestos de trabajo, la distancia de distracción rD = 6,5 m y la de privacidad rP = 13 m marcadas a trazos sobre la línea y los 16 m de recorrido acotadosPlanta a escala de la línea de medida en oficina diáfana: la estrella roja de la fuente en el origen, seis micrófonos azules de 2 m a 16 m sobre una línea punteada entre los bloques grises de los puestos de trabajo, la distancia de distracción rD = 6,5 m y la de privacidad rP = 13 m marcadas a trazos sobre la línea y los 16 m de recorrido acotados

Todas las magnitudes de ISO 3382-3 salen de esta única línea: seis micrófonos de 2 m a 16 m entre los puestos de trabajo, con y cayendo entre ellos.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
from phonometry import room
# La línea de 2-16 m del ejemplo, con las distancias de distracción y
# de privacidad marcadas sobre el eje.
room.plot_open_plan_geometry([2.0, 4.0, 6.0, 8.0, 12.0, 16.0],
rd=6.5, rp=13.0, language="es")
plt.show()
# Un resultado retiene sus posiciones, así que m.plot_geometry() dibuja
# su propia línea con los rD y rP de la regresión.

Los apartados 5.1 y 5.2 fijan todo lo que el dibujo de arriba deja implícito.

La fuente (5.1.1). Un altavoz omnidireccional radiando ruido rosa, que cumpla los requisitos de omnidireccionalidad de la ISO 3382-1 — la norma es explícita sobre el porqué: quien trabaja en una oficina diáfana no habla de forma continua en ninguna dirección fija. Una señal determinista de espectro rosa (una MLS o un barrido, adquiridos como en la guía de la respuesta al impulso) es un sustituto admitido, y los resultados se obtienen de la respuesta al impulso. Su potencia acústica se verifica como en la ISO 3382-1, con la fuente a 1,2 m, y el apartado 6.2 fija el nivel: suficiente en cada banda de octava para que el ruido rosa supere al fondo en 6 dB en la posición más lejana.

La cadena de recepción (5.1.2). Un sonómetro que cumpla la clase 1 de la IEC 61672-1, un micrófono omnidireccional (incluido todo lo que se le acople) y filtros de octava conformes a la IEC 61260. Si la señal se graba para procesarla después, toda la cadena tiene que cumplir.

El estado de la sala (5.2.1). Se mide amueblada, sin nadie presente salvo los operadores, y con la climatización y cualquier sistema de enmascaramiento funcionando a la potencia de un día de trabajo normal. La norma enuncia el fallo directamente: si las fuentes funcionan a potencia reducida, los valores de STI salen demasiado altos, lo que sobrestima tanto como . Y como no hay personas, el enmascaramiento que aporta la conversación real tampoco está en la medición, así que las distancias reales en uso son más cortas que las medidas.

La línea (5.2.2). Cruza los puestos de trabajo y no tiene por qué ser recta. Se prefieren de 6 a 10 posiciones sucesivas y el mínimo es 4, con la primera en el puesto más cercano. La fuente y el micrófono se sitúan ambos a la altura de la cabeza en un puesto, 1,2 m sobre el suelo — los puestos de trabajo de pie quedan fuera de alcance —, y al menos a 0,5 m de las mesas y a 2,0 m de las paredes y demás superficies reflectantes. Se usan al menos dos posiciones de fuente; si solo cabe una línea, se mide con dos fuentes emitiendo en sentidos opuestos. Allí donde cambian el techo o el mobiliario, la oficina se trata como zonas distintas, cada una con su propio juego de números únicos.

Qué se registra en cada punto (5.2.3). Cuatro cosas: el nivel de ruido rosa por bandas de octava, el STI, el nivel de fondo por bandas de octava y la distancia a la fuente — de 125 Hz a 8 kHz, con un tiempo de integración de al menos 10 s (más largo con un fondo no estacionario, como el tráfico).

Dos paneles. El panel a es una planta de una oficina diáfana de 30 por 12 metros dividida en una zona con islas absorbentes y otra de yeso a secas, con una franja de exclusión de 2,0 metros a lo largo de todas las paredes, grupos de mesas con mamparas de 1,2 metros, la fuente S1 en la posición de cabeza de un puesto y la fuente S2 en el extremo opuesto emitiendo de vuelta, ocho posiciones de medición sobre un recorrido no recto con P1 en el puesto más cercano, una acotación de holgura de 0,5 metros junto a una mesa y la ventana de regresión de 2 a 16 metros acotada. El panel b es una sección que fija el centro acústico del altavoz y el micrófono a 1,2 metros junto a un ocupante sentado, con la lista de apartados de la fuente, la cadena de recepción, el estado de la sala y la líneaDos paneles. El panel a es una planta de una oficina diáfana de 30 por 12 metros dividida en una zona con islas absorbentes y otra de yeso a secas, con una franja de exclusión de 2,0 metros a lo largo de todas las paredes, grupos de mesas con mamparas de 1,2 metros, la fuente S1 en la posición de cabeza de un puesto y la fuente S2 en el extremo opuesto emitiendo de vuelta, ocho posiciones de medición sobre un recorrido no recto con P1 en el puesto más cercano, una acotación de holgura de 0,5 metros junto a una mesa y la ventana de regresión de 2 a 16 metros acotada. El panel b es una sección que fija el centro acústico del altavoz y el micrófono a 1,2 metros junto a un ocupante sentado, con la lista de apartados de la fuente, la cadena de recepción, el estado de la sala y la línea

Por qué la ventana se detiene en 2 m y en 16 m. El apartado 6.2 solo admite en la regresión de las posiciones entre 2 m y 16 m, y los dos extremos tienen su razón. Más cerca de 2 m el receptor está en el campo directo del hablante, cuyos 6 dB por duplicación son una propiedad del campo libre y no de la oficina; más allá de 16 m el nivel de habla ha alcanzado normalmente el fondo, de modo que la regresión estaría ajustando ruido. Una línea de seis posiciones de 2 m a 16 m mantiene así al menos cuatro puntos dentro del ajuste aunque haya que descartar el último por estar cerca de una pared.

Un altavoz no es un hablante, así que ISO 3382-3 no usa nunca su nivel directamente. El apartado 6.2 mide la sala con ruido rosa y después vuelve a vestir el resultado con el espectro de una voz real. De cada posición no se guarda su nivel absoluto, sino la atenuación banda a banda respecto a la fuente a 1 m (Ec. 1-2), de modo que el nivel de salida del altavoz se cancela y solo tiene que quedar lo bastante por encima del fondo:

Esa atenuación se aplica después al espectro de habla de esfuerzo normal (Ec. 3), se pondera A y se suma en energía sobre las siete bandas de octava (Ec. 4):

La Tabla 1 aporta el espectro omnidireccional de esfuerzo normal y las ponderaciones A:

Banda [Hz] [dB] [dB]
112549,9−16,1
225054,3−8,6
350058,0−3,2
4100052,00,0
5200044,8+1,2
6400038,8+1,0
7800033,5−1,1

cuyo total ponderado A es 57,4 dB: una voz que habla con normalidad a 1 m.

La lectura ponderada A del ruido rosa en el sonómetro no es la entrada que espera open_plan_metrics. Meterla da un nivel absoluto que es el del altavoz, no el de un hablante, así que sale directamente mal y queda sesgada por la diferencia espectral entre el ruido rosa y el habla. Ejecuta antes la cadena de cuatro pasos:

import numpy as np
# `room` es el import del bloque de open_plan_metrics de arriba.
# Tabla 1 de ISO 3382-3: habla unisex de esfuerzo normal a 1 m, omnidireccional,
# y la ponderación A, bandas de octava de 125 Hz a 8 kHz.
speech_1m = np.array([49.9, 54.3, 58.0, 52.0, 44.8, 38.8, 33.5])
a_weight = np.array([-16.1, -8.6, -3.2, 0.0, 1.2, 1.0, -1.1])
# Niveles de ruido rosa medidos por banda de octava, una fila por posición de medición.
pink = np.array([
[72.0, 71.0, 70.0, 69.0, 67.0, 64.0, 60.0],
[67.0, 66.0, 64.5, 63.0, 60.5, 57.0, 52.5],
[63.5, 62.0, 60.0, 58.0, 55.0, 51.0, 46.0],
[60.0, 58.5, 56.0, 53.5, 50.0, 45.5, 40.0],
])
source_1m = np.full(7, 90.0) - 11.0 # Ec. (1): Lp,Ls,1m = Lw,Ls - 11 dB
d_n = source_1m - pink # Ec. (2): atenuación por banda
speech_n = speech_1m - d_n # Ec. (3): revestida de habla
lp_a_s = 10 * np.log10(np.sum(10 ** ((speech_n + a_weight) / 10), axis=1))
print(np.round(lp_a_s, 1)) # [48. 42.4 37.8 33.8] Ec. (4)
dist = np.array([2.0, 4.0, 8.0, 16.0])
chain = room.open_plan_metrics(dist, lp_a_s, 0.70 - 0.03 * dist)
print(round(chain.d2s, 1), round(chain.lp_as_4m, 1)) # 4.7 42.9

La aritmética de bandas en sí — ponderación A y suma en energía — es la misma que en Niveles.

ParámetroTipoUnidadesRango / valor por defectoNotas
positions_marray 1Dm≥ 4 posiciones, todas > 0Distancias fuente-receptor
spl_a_speecharray 1DdBmisma longitudNivel de habla ponderado A por posición, procedente de la cadena de las Ec. (1)-(4) del apartado 6.2 — no los dB(A) de ruido rosa medidos
sti_valuesarray 1Dmisma longitudSTI por posición (método completo de IEC 60268-16)

Devuelve un OpenPlanResult con d2s, lp_as_4m, rd y rp; su .plot() redibuja la regresión de decaimiento espacial del apartado 6.2 a partir de esos cuatro campos y marca rd / rp. d2s/lp_as_4m son nan si menos de dos posiciones caen en 2–16 m; rd/rp son nan cuando el STI no decrece con la distancia. El STI por posición puede medirse a su vez con las herramientas STIPA de la guía del índice de transmisión del habla.

OpenPlanResult.report(path) renderiza una ficha PDF de una página con el formato de un informe de medición de privacidad acústica en oficinas diáfanas: la línea de base normativa, un bloque de cabecera de metadatos opcional, una tabla compacta de las cuatro magnitudes que devuelve open_plan_metrics (, , la distancia de distracción y la distancia de privacidad ) apilada sobre la gráfica de decaimiento espacial a todo el ancho del resultado (.plot(), la regresión del apartado 6.2 en el eje logarítmico de distancia con la lectura a 4 m y los cruces / marcados, la curva al estilo de la Figura 3), el enmarcado con las demás magnitudes al lado, y un pie con el descargo fijo. La ISO 3382-3 caracteriza un espacio en lugar de definir un cumple/no cumple intrínseco, por lo que la fila de veredicto aparece solo cuando se suministra una tasa de decaimiento espacial objetivo a través del campo requirement de los metadatos (ReportMetadata(requirement=...), interpretada como el mínimo aceptable en dB, según los intervalos de calidad informativos del Anexo A donde un mayor decaimiento espacial es mejor; la sala cumple igualando o superando el objetivo). Usa el mismo contenedor ReportMetadata y el mismo motor de renderizado que la ficha de acústica de salas ISO 3382-1/-2; los campos propios de oficinas diáfanas area (superficie del suelo), source_positions y receiver_positions (el número de posiciones de medición) rellenan la cabecera, junto con client, test_room (la oficina o zona), specimen (la descripción y el estado de amueblamiento), 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 simple. La ficha incrusta la gráfica de decaimiento espacial, por lo que el renderizado necesita tanto reportlab como matplotlib (pip install "phonometry[report,plot]"); solo se admite engine="reportlab". La ficha se renderiza en inglés por defecto; pasa language="es" para una ficha en español (cadenas fijas traducidas y separador decimal de coma).

import numpy as np
from phonometry import room, ReportMetadata
r = np.array([2.0, 3.0, 4.0, 6.0, 8.0, 11.0, 16.0]) # distancias al hablante (m)
# Otra línea de laboratorio, construida con 7 dB limpios por duplicación como
# antes; una medida se dispersa un decibelio o dos en torno al ajuste.
lp = 62.0 - 7.0 * np.log2(r) # nivel de habla ponderado A (dB)
sti = 0.65 - 0.03 * r # STI por posición
result = room.open_plan_metrics(r, lp, sti)
result.report(
"ficha_oficina_diafana.pdf",
metadata=ReportMetadata(
test_room="Oficina diáfana B",
specimen="Amueblada, desocupada, con ruido de fondo",
area=420.0, source_positions=2, receiver_positions=7,
measurement_standard="ISO 3382-3",
temperature=22.0, relative_humidity=45.0,
laboratory="Laboratorio de referencia Phonometry",
requirement=7.0, # añade un veredicto frente a un D2,S objetivo
),
language="es",
) # D2,S + Lp,A,S,4m, rD, rP y la curva de decaimiento

La ficha de ejemplo se regenera con make reports y se mantiene renderizada en el repositorio; pulsa la vista previa para abrir el PDF.

Informe de ejemplo de acústica de oficinas diáfanas ISO 3382-3 (PDF)

Ficha de oficina diáfana de una página: una cabecera de metadatos (cliente, oficina/zona, descripción, superficie del suelo, posiciones de fuente y de medición, instrumentación, temperatura, humedad y presión), la tabla de las cuatro magnitudes de número único (D2,S = 7,0 dB por duplicación, Lp,A,S,4m = 48,0 dB, rD = 5,0 m, rP = 15,0 m) sobre la gráfica de decaimiento espacial en un eje logarítmico de distancia con la regresión de D2,S, la lectura a 4 m y los cruces rD y rP, el D2,S enmarcado, y un veredicto CUMPLE frente al objetivo de 7,0 dB.

Descargar el informe (PDF)

Ficha de acústica de oficinas diáfanas (OpenPlanResult.report): D2,S, Lp,A,S,4m, rD, rP y la curva de decaimiento espacial.

La ISO 3382-3 de arriba mide una oficina. La pregunta complementaria en fase de proyecto es una predicción: en una sala cuya única fuente de ruido son sus propios ocupantes, ¿cuánto sube el fondo y sigue funcionando la conversación? Long (Architectural Acoustics 2.ª ed., cap. 17, ecs. (17.50) a (17.54)) plantea los dos niveles que compiten en el oyente. La señal es el campo directo de la persona sentada enfrente,

y el ruido es el campo reverberante que levantan hablantes simultáneos,

con el nivel de potencia acústica de un hablante (unos 70 dB en conversación normal), la directividad frontal del hablante (unos 2), la distancia hablante-oyente y el área de absorción equivalente por mesa ocupada, de modo que es la absorción total de la sala.

from phonometry import room
# El restaurante duro de Long: unos 20 m² de absorción, un hablante con
# Lw = 70 dB y un oyente a 1,2 m al otro lado de la mesa.
print(round(room.speech_direct_level(1.2))) # campo directo de 60 dB
print(round(room.crowd_noise_level(1, 20.0))) # 63 dB con un hablante
print(round(room.crowd_noise_level(20, 20.0))) # 76 dB con 20 mesas
# Un techo de alfa 0,9 sobre la sala de 13,7 x 13,7 m añade 170 m² de absorción.
print(round(room.crowd_noise_level(20, 20.0 + 170.0))) # 66 dB

Restar ambos da la relación habla-ruido, y este es el resultado que merece la pena recordar:

No sobrevive ni ni . Una sala más llena no es intrínsecamente peor, porque cada mesa nueva aporta a la vez un hablante y su propia cuota de absorción. Lo que decide si un restaurante funciona es la absorción por mesa, no la absorción de la sala. Exigir dB para una comunicación adecuada a una separación a través de la mesa, y dB para que no se escuche a una mesa vecina situada a , se traduce en un par de cotas de diseño (ecs. (17.53) y (17.54)):

from phonometry import room
print(round(room.absorption_per_table(1.0, -6.0), 2)) # 6.31 m2 por mesa a 1 m
print(round(room.absorption_per_table(2.5, -9.0), 1)) # 19.8 m2 con paso de 2,5 m
# Una distribución real: 1,2 m a través de la mesa, 2,0 m hasta la siguiente.
print(round(room.absorption_per_table(1.2, -6.0), 2)) # 9.09 m2, cota inferior
print(round(room.absorption_per_table(2.0, -9.0), 2)) # 12.66 m2, cota superior
crowd = room.crowd_noise([20.0, 95.0, 190.0], distance=1.2)
crowd.plot() # ruido autogenerado vs ocupación, frente al límite de -6 dB

Las dos cotas son una ventana, y puede estar vacía. Exigir significa que la ventana solo existe cuando : junta las mesas más que eso y no hay absorción alguna que permita conversar a través de tu propia mesa sin que te oigan en la de al lado. La distribución de arriba pasa, con y 3,6 m² de margen entre las cotas.

Dos paneles. A la izquierda, la absorción por mesa ocupada frente a la separación, con la cota de comunicación 6,31 r al cuadrado por encima de la cota de privacidad 3,16 r al cuadrado, los dos puntos calculados a 1 metro y a 2,5 metros marcados, y la banda factible de 9,1 a 12,7 metros cuadrados sombreada para una distribución con 1,2 metros a través de la mesa y 2,0 metros entre mesas. A la derecha, la anchura de esa ventana factible frente a la razón entre el paso de mesas y la separación a través de la mesa, cruzando el cero en 1,41 y alcanzando 3,6 metros cuadrados en la razón 1,67 de esta distribuciónDos paneles. A la izquierda, la absorción por mesa ocupada frente a la separación, con la cota de comunicación 6,31 r al cuadrado por encima de la cota de privacidad 3,16 r al cuadrado, los dos puntos calculados a 1 metro y a 2,5 metros marcados, y la banda factible de 9,1 a 12,7 metros cuadrados sombreada para una distribución con 1,2 metros a través de la mesa y 2,0 metros entre mesas. A la derecha, la anchura de esa ventana factible frente a la razón entre el paso de mesas y la separación a través de la mesa, cruzando el cero en 1,41 y alcanzando 3,6 metros cuadrados en la razón 1,67 de esta distribución

Izquierda: para una distribución, las dos desigualdades dejan una banda de absorción por mesa factible. Derecha: cuánto mide esa banda a medida que las mesas se separan — por debajo de tiene anchura negativa, que es el enunciado geométrico de que conversación y privacidad se han vuelto incompatibles sea cual sea el material del techo.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
# `room` es el import del bloque de arriba.
span = np.linspace(0.6, 3.2, 200)
plt.plot(span, room.absorption_per_table(span, -6.0), label="comunicación")
plt.plot(span, room.absorption_per_table(span, -9.0), label="privacidad")
r_s, r_t = 1.2, 2.0
lower = float(room.absorption_per_table(r_s, -6.0))
upper = float(room.absorption_per_table(r_t, -9.0))
plt.axhspan(lower, upper, alpha=0.2)
print(round(upper - lower, 1), round(r_t / r_s, 2)) # 3.6 1.67
print(round(float(np.sqrt(6.31 / 3.16)), 2)) # 1.41: la razón de cierre
plt.legend(); plt.show()

De dónde sale el propio . Para una sala que ya existe, mide el tiempo de reverberación según la ISO 3382-2 e invierte Sabine, — la misma convención que define la ISO 354 —, con las guías de respuesta al impulso y Acústica de salas aportando . Para una sala en proyecto, mídela superficie a superficie como en Absorción acústica en recintos. En cualquiera de los dos casos , con el número de mesas ocupadas simultáneamente — no los comensales, y no las mesas instaladas. Eso es lo que hace que un restaurante a media entrada sea una sala distinta de uno lleno con la misma absorción, y es la razón de que añadir mesas con la absorción fija sea lo que empuja una sala más allá de su límite. Significa también que un T30 medido con la sala vacía basta para predecir cómo sonará llena.

Nivel de ruido autogenerado por el público frente al número de hablantes simultáneos para tres áreas de absorción de sala de 20, 95 y 190 m², con el nivel de habla directo de 60 dB a 1,2 m y el límite de comunicación de 66 dB dibujados como referencias horizontalesNivel de ruido autogenerado por el público frente al número de hablantes simultáneos para tres áreas de absorción de sala de 20, 95 y 190 m², con el nivel de habla directo de 60 dB a 1,2 m y el límite de comunicación de 66 dB dibujados como referencias horizontales

Los mismos 20 hablantes en tres salas. La sala dura (20 m² de absorción) cruza el límite de comunicación antes de que se ocupe la cuarta mesa; añadir el techo absorbente del ejemplo de Long (190 m² en total) mantiene las 20 mesas por debajo. Las curvas son paralelas porque la ocupación siempre cuesta : la única variable de diseño es el desplazamiento vertical, que es la absorción.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from phonometry import room
# Una línea: el barrido de ocupación directamente desde el resultado.
result = room.crowd_noise([20.0, 95.0, 190.0], distance=1.2)
result.plot()
plt.show()
# O dibujarlo a mano desde la ecuación (17.51):
n = np.arange(1, 21)
fig, ax = plt.subplots()
for area in (20.0, 95.0, 190.0):
ax.plot(n, room.crowd_noise_level(n, area), label=f"A = {area:.0f} m²")
signal = room.speech_direct_level(1.2)
ax.axhline(signal, ls="--", label="Habla a 1,2 m")
ax.axhline(signal + 6.0, ls=":", label="Límite de comunicación")
ax.set(xlabel="Hablantes simultáneos N",
ylabel="Nivel de ruido autogenerado [dB]")
ax.legend()
plt.show()
ParámetroTipoUnidadesRango / defectoNotas
absorption_areasfloat o array 1D> 0Áreas de absorción total de la sala a comparar
talkersarray 1D, opcional≥ 1, defecto 1..20Eje de ocupación
distancefloatm> 0, defecto 1,2Distancia hablante-oyente
sound_power_levelfloatdB re 1 pWdefecto 70 del hablante
directivityfloat> 0, defecto 2 del hablante

Devuelve un CrowdNoiseResult (talkers, absorption_areas, levels, signal_level, communication_level, speech_to_noise()) con .plot(). Las piezas speech_direct_level, crowd_noise_level, speech_to_noise_ratio y absorption_per_table son invocables directamente.

  • Cubierto

    Las magnitudes de oficina diáfana del apartado 4 y los apartados 6.2/6.3 de la ISO 3382-3:2012 (, , , ) de room.open_plan_metrics, con el dibujo a escala de la línea de medición (room.plot_open_plan_geometry y .plot_geometry()) y la ficha ISO 3382-3 de una página con .report(). Las condiciones de medición de los apartados 5.1 y 5.2 y los intervalos de calidad del Anexo A se citan aquí para planificar y para leer los resultados. El modelo de ruido autogenerado por los ocupantes del capítulo 17 de Architectural Acoustics 2.ª ed. de Long (ecs. (17.50) a (17.54)) mediante room.crowd_noise y sus piezas, con la ventana de diseño de las ecs. (17.53)-(17.54) y su condición de cierre.

  • No cubierto

    El STI por posición de la ISO 3382-3 se toma como entrada de open_plan_metrics en lugar de calcularse dentro de la función: mídelo con las herramientas STIPA de la guía del Índice de transmisión del habla. La cuarta magnitud de número único exigida, el ruido de fondo medio ponderado A , tampoco se calcula aquí: es la media energética ponderada A de los niveles de fondo por banda de octava de cada posición, y le corresponde ir en el informe junto a las tres que sí produce esta página. Tampoco se comprueba ninguna de las condiciones de medición de los apartados 5.1 y 5.2: la función consume distancias, niveles y valores de STI vengan de donde vengan, así que la directividad de la fuente, el estado amueblado y desocupado y la captura del ruido de fondo son responsabilidad del operador y no de la biblioteca. La edición implementada está fijada en la ISO 3382-3:2012; la revisión sucesora ISO 3382-3:2022 retira la distancia de privacidad , añade la distancia de confort y traslada el STI por posición al método indirecto de la IEC 60268-16, y no es la comprobada aquí. El modelo de ruido autogenerado es un cálculo de diseño y deliberadamente no modela el reflejo de Lombard: se cancela en mientras todo el mundo alce la voz por igual, de modo que el modelo explica por qué el nivel se dispara en una sala dura, no dónde se detiene. Supone además un campo reverberante difuso y una única cifra de absorción por mesa, así que no dice nada de las mamparas, la absorción local ni de dónde está cada mesa dentro de la sala.