Ir al contenido

Prominencia de sonidos impulsivos (NT ACOU 112)

Normas aplicables: NT ACOU 112ISO 1996ISO/PAS 1996

El ruido con impulsos prominentes (martilleo, remachado, hinca de pilotes) es más molesto que un sonido estacionario del mismo nivel equivalente. NT ACOU 112:2002 (un método Nordtest) cuantifica cuán prominente es un impulso y lo convierte en un ajuste graduado KI que se suma al LAeq medido. La prominencia se lee de dos propiedades del arranque de cada impulso en el historial de nivel ponderado A con ponderación temporal F: la rapidez con que crece (la tasa de crecimiento) y cuánto crece (la diferencia de nivel).

Flujo desde el historial de nivel ponderado A (un arranque es donde el gradiente supera 10 dB/s) hasta la tasa de crecimiento y la diferencia de nivel, la prominencia prevista P = 3 lg(OR) + 2 lg(LD), el ajuste KI = 1,8 (P - 5) para P mayor que 5, y el nivel de evaluación sobre el tiempo de referenciaFlujo desde el historial de nivel ponderado A (un arranque es donde el gradiente supera 10 dB/s) hasta la tasa de crecimiento y la diferencia de nivel, la prominencia prevista P = 3 lg(OR) + 2 lg(LD), el ajuste KI = 1,8 (P - 5) para P mayor que 5, y el nivel de evaluación sobre el tiempo de referencia

Para cada impulso candidato, la prominencia prevista P combina la tasa de crecimiento (en dB/s) y la diferencia de nivel (en dB) en escala logarítmica (Fórmula 1):

Los coeficientes se ajustaron a partir de ensayos de escucha y P está diseñada para alcanzar unos 15 en impulsos muy súbitos e intensos. El impulso con la P más alta en un periodo de 30 minutos es el determinante. Una subida de nivel solo cualifica como impulso cuando su tasa de subida supera 10 dB/s (apartado 4.5; el apartado 8 aplica el ajuste únicamente «para sonidos con tasas de subida mayores de 10 dB/s»): impulse_prominence marca los eventos no cualificados en su máscara qualifies, avisa de ellos y nunca les permite fijar la prominencia determinante ni un KI (el ajuste es 0 dB cuando ningún evento cualifica).

Una lupa recorre el historial de nivel ponderado A con ponderación temporal F L_AF; donde el nivel sube más deprisa de 10 dB/s se resalta el tramo de arranque, y las casillas de tasa de crecimiento (200 dB/s), diferencia de nivel (30 dB), prominencia P y ajuste KI se van iluminando por turnos.

Descargar la animación (WebM)

Una lupa recorre el historial de nivel ponderado A con ponderación temporal F L_AF; donde el nivel sube más deprisa de 10 dB/s se resalta el tramo de arranque, y las casillas de tasa de crecimiento (200 dB/s), diferencia de nivel (30 dB), prominencia P y ajuste KI se van iluminando por turnos.

Descargar la animación (WebM)

from phonometry import environmental
# Tres impulsos candidatos: (tasa de crecimiento dB/s, diferencia de nivel dB).
result = environmental.impulse_prominence([1200.0, 300.0, 60.0], [32.0, 18.0, 11.0])
print(result.per_impulse.round(2)) # [12.25 9.94 7.42]
print(round(result.prominence, 2)) # 12.25 (el impulso determinante)
print(round(result.adjustment, 2)) # 13.05 dB
result.plot() # la curva KI(P) de la sección 2 con estos impulsos marcados

Un solo impulso se evalúa directamente con predicted_prominence:

from phonometry import environmental
# P = 3*lg(1000) + 2*lg(30) = 9 + 2.95 = 11.95.
print(round(environmental.predicted_prominence(1000.0, 30.0), 4)) # 11.9542

Por debajo de una prominencia de 5 el impulso no es lo bastante audible como para importar; por encima, el ajuste crece linealmente (Fórmula 2):

from phonometry import environmental
print(float(environmental.impulse_adjustment(10.0))) # 9.0 dB
print(float(environmental.impulse_adjustment(5.0))) # 0.0 dB (en el umbral)

El ajuste se aplica al LAeq,30min del evento con la prominencia más alta. El nivel de evaluación sobre un tiempo de referencia mayor combina los niveles equivalentes ajustados por impulso de los subintervalos (cláusula 8, Nota 1):

from phonometry import environmental
# Dos periodos de 30 min: uno impulsivo (KI = 7.6 dB), otro tranquilo.
print(round(environmental.rating_level([72.0, 66.0], [7.6, 0.0], [30.0, 30.0], 60.0), 2))
# 76.78 dB

El ImpulseProminenceResult lleva las prominencias per_impulse, la prominence determinante y su adjustment, y su .plot() dibuja la curva KI(P) con los impulsos marcados. El método es un complemento a la medida de ruido ambiental de ISO 1996-2.

Izquierda: la prominencia prevista P creciendo con la tasa de crecimiento (eje logarítmico) para diferencias de nivel de 5, 15 y 30 dB, llegando a unos 15 en un impulso súbito e intenso. Derecha: el ajuste KI, plano en cero hasta el umbral P = 5 y luego lineal, con tres impulsos marcados y el determinante en KI = 13 dBIzquierda: la prominencia prevista P creciendo con la tasa de crecimiento (eje logarítmico) para diferencias de nivel de 5, 15 y 30 dB, llegando a unos 15 en un impulso súbito e intenso. Derecha: el ajuste KI, plano en cero hasta el umbral P = 5 y luego lineal, con tres impulsos marcados y el determinante en KI = 13 dB
Mostrar el código de esta figura
import numpy as np
import matplotlib.pyplot as plt
from phonometry import environmental
# Una línea para la curva de ajuste con los impulsos marcados:
environmental.impulse_prominence([1200.0, 300.0, 60.0], [32.0, 18.0, 11.0]).plot(language="es")
plt.show()
# A mano, el panel izquierdo — P frente a la tasa de crecimiento para tres LD:
orate = np.logspace(1, 4, 200)
for ld in (5.0, 15.0, 30.0):
plt.plot(orate, environmental.predicted_prominence(orate, np.full_like(orate, ld)),
label=f"LD = {ld:g} dB")
plt.xscale("log"); plt.legend(); plt.show()

3. Medida objetiva a partir de una señal (ISO/PAS 1996-3)

Sección titulada «3. Medida objetiva a partir de una señal (ISO/PAS 1996-3)»

La NT ACOU 112 toma la tasa de crecimiento y la diferencia de nivel como entradas. La ISO/PAS 1996-3:2022 conserva las mismas fórmulas de prominencia y ajuste, pero añade la cadena de medida objetiva que lee esas magnitudes directamente de una grabación calibrada. impulsive_sound_adjustment pondera la señal en A, aplica la ponderación temporal F ( = 125 ms), muestrea el historial de nivel LpAF cada 10-25 ms, detecta cada arranque (el tramo contiguo cuyo gradiente supera 10 dB/s, fusionando eventos separados menos de 50 ms), mide su diferencia de nivel LD = Le − Ls y su tasa de crecimiento OR por mínimos cuadrados, y devuelve el ajuste determinante KI con la categoría de fuente de la cláusula 7: no impulsiva (KI = 0), impulsiva regular (0 < KI ≤ 5) o altamente impulsiva (KI > 5).

La detección de arranques puede ejecutarse directamente sobre un historial de nivel con detect_onsets, cómodo para sonómetros que ya registran LpAF:

import numpy as np
from phonometry import environmental
# Historial LpAF muestreado cada 20 ms: silencio, subida de 30 dB en 0,30 s, estable.
dt = 0.02
levels = np.concatenate([
np.full(10, 40.0),
40.0 + 30.0 * np.arange(1, 16) / 15, # arranque recto de 100 dB/s hasta 70 dB
np.full(15, 70.0),
])
onset = environmental.detect_onsets(levels, dt)[0]
print(round(onset.onset_rate), round(onset.level_difference)) # 100 30
print(round(onset.prominence, 2)) # 8.95

Desde una señal temporal calibrada (en pascales) la cadena completa se ejecuta de principio a fin:

result = environmental.impulsive_sound_adjustment(signal, fs)
print(result.category) # p. ej. 'highly impulsive'
print(round(result.adjustment, 1)) # KI en dB (de 0,0 a unos 9 dB en casos típicos)
print(round(result.adjusted_laeq, 1)) # LAeq + KI
result.plot() # la historia de LpAF con los inicios detectados (necesita matplotlib)
Historia de nivel con ponderación A y constante F de tres golpes de martillo sobre un fondo de 55 dB(A) a lo largo de seis segundos: cada golpe sube de unos 52 dB a 89 dB, se marcan los puntos de inicio y fin del crecimiento detectado con la recta de mínimos cuadrados, se anota la diferencia de nivel determinante de 36,8 dB y el título indica una prominencia de 11,34 con un ajuste de 11,42 dB, categoría altamente impulsivaHistoria de nivel con ponderación A y constante F de tres golpes de martillo sobre un fondo de 55 dB(A) a lo largo de seis segundos: cada golpe sube de unos 52 dB a 89 dB, se marcan los puntos de inicio y fin del crecimiento detectado con la recta de mínimos cuadrados, se anota la diferencia de nivel determinante de 36,8 dB y el título indica una prominencia de 11,34 con un ajuste de 11,42 dB, categoría altamente impulsiva
Mostrar el código de esta figura
import numpy as np
import matplotlib.pyplot as plt
from phonometry import environmental
# Tres golpes de martillo sobre un fondo de 55 dB(A), 6 s a 48 kHz.
fs = 48000
rng = np.random.default_rng(7)
t = np.arange(int(6.0 * fs)) / fs
background = rng.standard_normal(t.size)
background *= 2e-5 * 10 ** (55 / 20) / np.sqrt(np.mean(background ** 2))
signal = background.copy()
for onset_time in (1.0, 2.6, 4.2):
decay = np.exp(-(t - onset_time) / 0.08) * (t >= onset_time)
strike = decay * rng.standard_normal(t.size)
window = (t >= onset_time) & (t < onset_time + 0.1)
strike *= 2e-5 * 10 ** (95 / 20) / np.sqrt(np.mean(strike[window] ** 2))
signal += strike
res = environmental.impulsive_sound_adjustment(signal, fs)
print(res.category, round(res.prominence, 2), round(res.adjustment, 2))
# highly impulsive 11.34 11.42
# En una línea: la historia de nivel con los inicios, las rectas ajustadas y
# la diferencia de nivel determinante.
res.plot(language="es")
plt.show()

De la figura conviene leer dos cosas. Las rectas de inicio son ajustes por mínimos cuadrados sobre el crecimiento detectado, así que un ajuste tendido sobre un flanco visiblemente abrupto indica que la historia de nivel se registró con demasiada poca resolución. Y la diferencia de nivel se mide desde el nivel justo antes del inicio, no desde el fondo a largo plazo, por lo que un segundo golpe que llega sobre la cola del anterior puntúa un LD menor del que aparenta merecer.

Como la tasa de crecimiento y la diferencia de nivel son diferencias de nivel, el ajuste es insensible a la calibración absoluta del sonómetro (cláusula 8); solo el LAeq reportado y el LAeq ajustado dependen de ella. El alcance del documento indica que el ajuste suele quedar entre 0,0 dB y 9,0 dB; la propia fórmula no está acotada, así que un impulso muy súbito e intenso puede superar ese rango. ImpulsiveSoundResult.plot() dibuja el historial LpAF con los arranques detectados, las rectas de arranque por mínimos cuadrados y la diferencia de nivel determinante marcadas.

4. Dónde encaja el método entre las normas

Sección titulada «4. Dónde encaja el método entre las normas»

Las normas de evaluación tratan tradicionalmente la impulsividad por categorías, no por medición. La ISO 1996-1:2016 (Tabla A.1) suma 5 dB fijos cuando la fuente es impulsiva regular y 12 dB cuando es altamente impulsiva, y deja la elección de categoría al juicio del evaluador. La NT ACOU 112 sustituye ese juicio por una medida: la tasa de crecimiento y la diferencia de nivel de los impulsos reales producen un graduado que va de 0 dB para arranques apenas perceptibles a unos 18 dB para los más repentinos y ruidosos, cruzando por el camino las dos cifras convencionales. El enfoque resultó duradero: la misma prominencia basada en el arranque pasó después a la ISO/PAS 1996-3:2022, que la usa para decidir objetivamente si una fuente cuenta como impulsiva regular o altamente impulsiva en la evaluación de la ISO 1996-1.

Dos advertencias prácticas al aplicarlo. El arranque se lee de la historia de nivel ponderada A con ponderación temporal F, y la propia constante de tiempo de 125 ms de la ponderación F limita la velocidad a la que puede subir un nivel registrado: los impulsos muy cortos llegan ya suavizados, así que la historia de nivel debe registrarse a la cadencia máxima del sonómetro (no en intervalos gruesos); de lo contrario, la tasa de crecimiento, y con ella , se subestima. Y el método evalúa la prominencia de los impulsos, no su energía: se añade sobre el LAeq medido en el nivel de evaluación, nunca lo sustituye.

ImpulseProminenceResult.report(path) genera una ficha PDF de una página con el formato de un informe de evaluación de sonidos impulsivos de un laboratorio de ruido ambiental, siguiendo la NT ACOU 112:2002 (recogida en la ISO/PAS 1996-3:2022): la línea de base normativa, un bloque de metadatos opcional (fuente/situación, cliente, posición de medición, instrumentación y fecha, con el periodo de evaluación de 30 minutos siempre visible), una tabla a todo ancho por impulso (tasa de inicio, diferencia de nivel, prominencia prevista P y si el inicio se califica como impulso) sobre el gráfico de la curva de ajuste KI(P) con los impulsos candidatos marcados, la prominencia rectora P enmarcada junto con el ajuste de LAeq derivado KI (Fórmula 2), una fila de veredicto APTO/NO APTO opcional y una nota de categoría de prominencia, y un pie con el descargo fijo.

Usa el mismo contenedor ReportMetadata y el mismo motor de renderizado que la ficha de sonoridad ISO 532-1; un requirement indicado se interpreta como la prominencia rectora P máxima admisible (un impulso menos destacado es apto). El renderizado necesita reportlab (pip install phonometry[report]); solo se admite engine="reportlab". La ficha se genera en inglés por defecto; pase language="es" para una ficha en español (cadenas fijas traducidas y separador decimal de coma), p. ej. res.report("impulse_fiche_es.pdf", language="es").

from phonometry import environmental, ReportMetadata
# El conjunto de tres impulsos de hincado del §1 (tasa de inicio dB/s, LD dB).
res = environmental.impulse_prominence([1200.0, 300.0, 60.0], [32.0, 18.0, 11.0])
res.report(
"impulse_fiche.pdf",
metadata=ReportMetadata(
specimen="Obra de hincado de pilotes, martilleo intermitente",
measurement_standard="ISO 1996-2",
laboratory="Laboratorio de referencia Phonometry",
requirement=10.0, # prominencia rectora P máxima admisible
),
language="es", # ficha en español (separador decimal de coma)
) # P rectora y el ajuste de LAeq KI (dB)

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

Informe de ejemplo de prominencia de sonidos impulsivos NT ACOU 112 (PDF)

Ficha de evaluación de sonidos impulsivos de una página: un encabezado de metadatos, una tabla por impulso con la tasa de inicio, la diferencia de nivel y la prominencia prevista P, el gráfico de la curva de ajuste KI(P) con los impulsos candidatos marcados, la prominencia rectora P = 12,25 enmarcada con el ajuste de LAeq KI = 13,0 dB (NT ACOU 112:2002 Fórmula 2) y un veredicto NO APTO frente a una prominencia rectora máxima de 10.

Descargar el informe (PDF)

Ficha de prominencia de sonidos impulsivos (ImpulseProminenceResult.report), prominencia rectora P con el ajuste de LAeq KI.

Cubierto. NT ACOU 112:2002: la definición de arranque (apartados 4.5 a 4.7), la prominencia prevista P (apartado 7, Fórmula 1), el ajuste graduado KI (apartado 8, Fórmula 2) y el nivel de evaluación sobre un tiempo de referencia (apartado 8, Nota 1), a través de impulse_prominence, predicted_prominence, impulse_adjustment y rating_level. La ISO/PAS 1996-3:2022 está cubierta en la cadena de medida objetiva construida sobre la misma fórmula de prominencia: el muestreo de LpAF, la detección y fusión de arranques, y la tasa de crecimiento y diferencia de nivel por mínimos cuadrados, a través de impulsive_sound_adjustment y detect_onsets.

No cubierto. La Nota 4 (apartado 7) de la NT ACOU 112 recoge una directriz nórdica anterior: un ajuste plano de 5 dB basado en el juicio subjetivo, recomendado cuando KI > 3 para ruido característico de operaciones de trabajo, ofrecido como alternativa cuando el método graduado no se puede aplicar. Solo está implementado el KI graduado de la Fórmula 2; la alternativa plana de 5 dB no lo está. Los ajustes por categoría de la Tabla A.1 de la ISO 1996-1 (5 dB regular, 12 dB altamente impulsiva) están cubiertos solo como la base de juicio del evaluador que sustituye esta medición, no como una función propia.