Molestia psicoacústica e intensidad de fluctuación
Referencias: Fastl y Zwicker 2007Osses Vecchi et al. 2016
Lo molesto que resulta un sonido depende de algo más que de su sonoridad. Fastl y Zwicker, Psychoacoustics: Facts and Models, combinan cuatro sensaciones psicoacústicas (sonoridad, agudeza, aspereza e intensidad de fluctuación) en una única molestia psicoacústica , un escalar que crece con la sonoridad y se eleva aún más cuando el sonido es agudo, áspero o fluctúa lentamente. Esta página cubre el modelo exacto de (Ecs. 16.2–16.4), la intensidad de fluctuación que consume, tanto la forma cerrada para ruido de banda ancha modulado en amplitud (Ec. 10.2) como el modelo de señal de Osses et al. (2016), y la utilidad que deriva las cuatro sensaciones a partir de una grabación.
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import psychoacoustics
n5 = np.linspace(4.0, 60.0, 200)profiles = [ ("Base neutra: S = 1.75 acum, F = R = 0", 1.75, 0.0, 0.0), ("Sonido agudo: S = 3.5 acum", 3.5, 0.0, 0.0), ("Áspero + fluctuante: F = 1.2 vacil, R = 0.7 asper", 2.0, 1.2, 0.7),]fig, ax = plt.subplots()for label, s, f, r in profiles: pa = [psychoacoustics.psychoacoustic_annoyance(v, s, f, r).annoyance for v in n5] ax.plot(n5, pa, label=label)
ex = psychoacoustics.psychoacoustic_annoyance(30.0, 2.0, 0.5, 0.3)ax.plot([30.0], [ex.annoyance], "o", label=f"Ejemplo resuelto (PA = {ex.annoyance:.2f})")ax.set_xlabel("Sonoridad percentil N5 [sonios]")ax.set_ylabel("Molestia psicoacústica PA")ax.legend()plt.show()1. Las cuatro sensaciones
Sección titulada «1. Las cuatro sensaciones»La molestia psicoacústica se apoya en cuatro sensaciones auditivas, cada una con su propio modelo y unidad en la biblioteca:
- Sonoridad: la sonoridad percentil (la sonoridad superada el 5 % del
tiempo), en sonios, del modelo de Zwicker variable en el tiempo de la ISO
532-1 (
loudness_zwicker, véase Sonoridad). - Agudeza , en acum: el balance espectral hacia las altas
frecuencias, DIN 45692 (
sharpness_din). - Aspereza , en asper: la dureza de la modulación de amplitud rápida
(~70 Hz), modelo de Sottek ECMA-418-2 (
roughness_ecma). - Intensidad de fluctuación , en vacil: la sensación de fluctuación lenta (~4 Hz) de la sonoridad (§3 más abajo).
2. Molestia psicoacústica (Ecs. 16.2–16.4)
Sección titulada «2. Molestia psicoacústica (Ecs. 16.2–16.4)»El modelo exacto (Fastl y Zwicker Ec. 16.2; origen Widmann 1992) escala por un factor que crece con la ponderación de agudeza y la ponderación combinada de aspereza/fluctuación :
es cero para (la agudeza solo añade molestia por encima de ese umbral); pondera la aspereza con más peso que la intensidad de fluctuación (0,6 frente a 0,4). Esas dos elecciones son todo el juicio de modelado que hay en la fórmula, y cuesta menos fiarse de ellas una vez vistas:
Un sonido tiene que ser más agudo que la referencia de 1,75 acum antes de que la agudeza cueste nada en absoluto, y el abanico por encima de ese punto es la dependencia de con la sonoridad. A la derecha, la misma magnitud de sensación compra alrededor de la mitad más de molestia cuando llega como aspereza que cuando llega como intensidad de fluctuación.
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as np
# `psychoacoustics` lo importa el fragmento de arriba.sharpness = np.linspace(1.0, 5.0, 200)for n5 in (10.0, 30.0, 60.0): w_s = [psychoacoustics.psychoacoustic_annoyance(n5, float(s), 0.0, 0.0).w_s for s in sharpness] plt.plot(sharpness, w_s, label=f"N5 = {n5:g} sonios")plt.axvline(1.75, linestyle="--")plt.xlabel("Agudeza S [acum]")plt.ylabel("Ponderación de agudeza wS")plt.legend()plt.show()
# La misma magnitud gastada en aspereza o en intensidad de fluctuación, con# N5 = 30 sonios y S = 2.0 acum fijos:rough = psychoacoustics.psychoacoustic_annoyance(30.0, 2.0, 0.0, 1.5).annoyancefluct = psychoacoustics.psychoacoustic_annoyance(30.0, 2.0, 1.5, 0.0).annoyanceprint(round(rough, 1), round(fluct, 1)) # 45.4 40.5psychoacoustic_annoyance toma las cuatro
magnitudes directamente y devuelve la molestia junto con las dos ponderaciones
intermedias:
from phonometry import psychoacoustics
res = psychoacoustics.psychoacoustic_annoyance(30.0, 2.0, 0.5, 0.3) # N5, S, F, Rprint(round(res.annoyance, 4)) # 37.0477print(round(res.w_s, 4), round(res.w_fr, 4)) # 0.1001 0.2125
res.plot() # PA junto a sus ponderaciones wS y wFR (necesita matplotlib)Qué significa ese número. no lleva unidad ni criterio. Está construido de modo que un sonido neutro — agudeza igual o menor que 1,75 acum, sin aspereza y sin fluctuación — tenga un igual a su en sonios, y toda cualidad aguda, áspera o fluctuante solo puede empujarlo por encima de ese suelo. Así que lee como «la sonoridad que vale este sonido una vez tenido en cuenta su carácter»: el 37,05 del ejemplo resuelto frente a un de 30 sonios dice que el carácter cuesta un 23 %. El objetivo es comparar — ordenar dos diseños del mismo producto, o cuantificar lo que ha comprado un arreglo — y no existe ningún límite contra el que citarlo.
La figura de arriba barre frente a para tres perfiles: una base neutra (, , de modo que ), un sonido agudo y un sonido áspero y fluctuante, ambos elevados sobre la base, con el ejemplo resuelto marcado.
El modelo es tan compacto que cabe entero en un dibujo: dos ponderaciones y una combinación. El diagrama recorre con él el ejemplo resuelto, sensación a sensación.
2.1 A partir de una señal (estimación de ingeniería)
Sección titulada «2.1 A partir de una señal (estimación de ingeniería)»psychoacoustic_annoyance_from_signal es una utilidad que deriva las cuatro
sensaciones a partir de una señal de presión calibrada y las combina: de
la sonoridad de Zwicker variable en el tiempo de la ISO 532-1, de la agudeza
DIN 45692, de la aspereza de Sottek ECMA-418-2 y del modelo de señal
de
intensidad de fluctuación.
La utilidad vale lo que valga el registro que se le dé, y ninguno de los dos
puntos de entrada de esta página admite un argumento de calibración, así que
x tiene que venir ya como presión calibrada en pascales; de dónde sale
ese factor está en
Medir la entrada,
en la página de sonoridad. Más allá de la calibración: sin ponderar; un único
estado de funcionamiento declarado, no una subida de régimen; lo bastante largo
como para que sea el percentil de algo y para que el análisis de
fluctuación de ~4 Hz tenga suficientes periodos de modulación, lo que en la
práctica significa varios segundos y la misma duración para todos los diseños
que se comparen; y un field= acorde con cómo se captó el sonido. Un fragmento
de dos segundos da un que es casi y una sesgada a la
baja. Una grabación binaural o con cabeza artificial se analiza un oído cada
vez, ya ecualizada a campo libre o a campo difuso, y lo habitual es informar
del canal más sonoro.
import numpy as npfrom phonometry import psychoacoustics
# Una grabación en bruto y su calibración para que la guía funcione por sí# sola. Aquí no hay argumento calibration_factor, así que x tiene que estar ya# en pascales.fs = 48000t = np.arange(int(5.0 * fs)) / fsx = (1.0 + 0.8 * np.sin(2 * np.pi * 4.0 * t)) * np.sin(2 * np.pi * 1000 * t)x *= 2e-5 * 10 ** (70 / 20) / np.sqrt(np.mean(x**2)) # calibrada a 70 dB SPL
res = psychoacoustics.psychoacoustic_annoyance_from_signal(x, fs, field="free")print(f"PA = {res.annoyance:.1f} (N5 = {res.n5:.1f} sonios, S = {res.sharpness:.2f} acum," f" R = {res.roughness:.2f} asper, F = {res.fluctuation_strength:.2f} vacil)")
res.plot() # la misma vista PA / wS / wFR, ahora con las cuatro sensaciones derivadasLas cuatro sensaciones tienen que salir del mismo registro y del mismo estado de funcionamiento: PA es una regla de combinación, no una medición por derecho propio, así que calcular sobre un minuto y sobre dos segundos de ese minuto mezcla en silencio dos sonidos distintos. Cita cada sensación con el modelo que la produjo.
3. Intensidad de fluctuación
Sección titulada «3. Intensidad de fluctuación»La intensidad de fluctuación (vacil) cuantifica la percepción de la fluctuación lenta de la sonoridad. Como la aspereza, es una sensación de paso de banda de la frecuencia de modulación, pero su máximo se sitúa aproximadamente un orden de magnitud más abajo, en en lugar del máximo de la aspereza en ~70 Hz. Por definición, un tono de 1 kHz a 60 dB, modulado en amplitud al 100 % a 4 Hz, produce 1 vacil. Esta página cubre dos de los tres modelos de intensidad de fluctuación de la biblioteca: la forma cerrada de Fastl y Zwicker para ruido de banda ancha modulado en amplitud (§3.1) y el modelo de señal de Osses et al. (2016) para señales arbitrarias (§3.2). La intensidad de fluctuación normativa del modelo de Sottek (apartado 9 de ECMA-418-2), en vacil_HMS, está en Métricas de calidad sonora: ojo con que la unidad de esta página es el vacil y la de aquella el vacil_HMS, así que las dos no son el mismo número para el mismo sonido.
Los dos modelos sobre el mismo estímulo, que es la comparación que el aviso de abajo convierte en regla. Los dos son pasos de banda centrados cerca de 4 Hz, pero sobre ruido de banda ancha AM el modelo de señal supera a la forma cerrada en alrededor de la mitad, porque acumula la modulación banda a banda a lo largo de todo el eje de Bark. Sobre el tono AM para el que se calibró, a la derecha, se porta bien.
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import psychoacoustics
# Panel izquierdo, los dos modelos sobre el mismo estímulo: ruido de banda# ancha AM a 60 dB, modulación 100 %.fmod = np.logspace(np.log10(0.5), np.log10(32.0), 240)f_bbn = [psychoacoustics.fluctuation_strength_am_noise(60.0, 1.0, fm) for fm in fmod]
rng = np.random.default_rng(3)tn = np.arange(int(4.0 * fs)) / fsnoise = rng.standard_normal(tn.size)fm_noise = [0.5, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0]f_noise = []for fm in fm_noise: am = (1.0 + np.sin(2 * np.pi * fm * tn)) * noise am = am / np.sqrt(np.mean(am ** 2)) * 2e-5 * 10 ** (60 / 20) f_noise.append(psychoacoustics.fluctuation_strength(am, float(fs)).fluctuation_strength)print(round(f_noise[3], 1), round(f_bbn[np.argmin(np.abs(fmod - 4.0))], 1)) # 5.5 3.7
fig, ax = plt.subplots()ax.semilogx(fmod, f_bbn, label="forma cerrada, Ec. 10.2")ax.semilogx(fm_noise, f_noise, "s--", label="modelo de señal de Osses 2016")ax.axvline(4.0, ls="--", color="0.4")ax.set_xlabel("Frecuencia de modulación f_mod [Hz]")ax.set_ylabel("Intensidad de fluctuación F [vacil]")ax.legend(loc="upper right")plt.show()3.1 Forma cerrada para ruido de banda ancha AM (Ec. 10.2)
Sección titulada «3.1 Forma cerrada para ruido de banda ancha AM (Ec. 10.2)»Para ruido de banda ancha modulado sinusoidalmente en amplitud, Fastl y Zwicker dan una forma cerrada (Ec. 10.2) en función del factor de modulación , el nivel y la frecuencia de modulación :
El denominador es el paso de banda a 4 Hz: alcanza su mínimo cerca de y crece a ambos lados. El resultado se limita a 0 (la sensación desaparece por debajo de ~20 dB o ). Esta forma exacta es el valor a citar para el ruido de banda ancha AM.
from phonometry import psychoacoustics
print(round(psychoacoustics.fluctuation_strength_am_noise(60.0, 1.0, 4.0), 4)) # 3.6943 vacil3.2 El modelo de señal de Osses 2016
Sección titulada «3.2 El modelo de señal de Osses 2016»fluctuation_strength implementa el modelo de señal de Osses et al. (2016):
construye un patrón de excitación sobre 47 filtros auditivos, extrae la
modulación de envolvente de ~4 Hz por banda, la pondera y la combina, y
devuelve
la global (vacil) junto con la intensidad de fluctuación específica sobre el
eje de Bark y la traza dependiente del tiempo.
from phonometry import psychoacoustics
res = psychoacoustics.fluctuation_strength(x, fs)print(round(res.fluctuation_strength, 2)) # 0.65 vacil para la señal de arribares.plot() # intensidad de fluctuación específica F′(z) sobre el eje de Bark (requiere matplotlib)Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import psychoacoustics
# El estímulo tipo referencia: un tono de 1 kHz a 70 dB SPL, modulado en# amplitud al 100 % a 4 Hz, donde la sensación es máxima.fs = 48000t = np.arange(int(2.0 * fs)) / fsam = (1.0 + np.sin(2 * np.pi * 4.0 * t)) * np.sin(2 * np.pi * 1000 * t)am = am / np.sqrt(np.mean(am ** 2)) * 2e-5 * 10 ** (70 / 20)res = psychoacoustics.fluctuation_strength(am, float(fs))print(round(res.fluctuation_strength, 2)) # 1.09 vacil
# En una línea: la intensidad de fluctuación específica sobre el eje de Bark.res.plot(language="es")plt.show()
# O dibuja f'(z) a mano con los arrays que ya lleva el resultado:fig, ax = plt.subplots()ax.fill_between(res.bark_axis, res.specific, alpha=0.3)ax.plot(res.bark_axis, res.specific)ax.set_xlabel("Razón de banda crítica z [Bark]")ax.set_ylabel("Intensidad de fluctuación específica [vacil/Bark]")plt.show()La sensación se queda donde está la energía modulada, en las bandas críticas en torno a la portadora, y por eso la forma cerrada de §3.1 y el modelo de señal divergen para ruido de banda ancha modulado: allí la modulación se reparte por todo el eje de Bark y el modelo banda a banda acumula más de la que admite la forma cerrada única.
Qué cubre esta guía
Sección titulada «Qué cubre esta guía»Cubierto
Fastl y Zwicker, en Psychoacoustics: Facts and Models, dan el modelo exacto de , Ecs. 16.2-16.4 (origen Widmann 1992), que ejecuta
psychoacoustic_annoyance. También dan la forma cerrada para ruido de banda ancha AM, Ec. 10.2, que ejecutafluctuation_strength_am_noise. El modelo de señal de Osses et al. (2016) para la intensidad de fluctuación se ejecuta comofluctuation_strength, contrastado con los valores de su Tabla 1 y con la referencia SQAT.psychoacoustic_annoyance_from_signalderiva las cuatro magnitudes a partir de una señal ( Zwicker de la ISO 532-1, de la DIN 45692, de ECMA-418-2) y las combina con el modelo exacto.No cubierto
La exactitud del modelo de Osses 2016 para tonos FM no se persigue explícitamente. Aquí solo se validan estímulos AM. El front-end también se aparta del planteamiento exacto del artículo (tramas de 2 s, solape del 90 %, umbral absoluto de audición). Como resultado, un tono estacionario de 1 kHz marca unos 0,09 vacil en vez de 0, y el ruido de banda ancha estacionario marca unos 0,15-0,19 vacil. Para el ruido de banda ancha AM, cita
fluctuation_strength_am_noise(§3.1) en vez defluctuation_strength, que sobreestima ese estímulo. La intensidad de fluctuación normativa del modelo de Sottek del apartado 9 de ECMA-418-2 no está implementada en esta página: está en Métricas de calidad sonora.
Véase también
Sección titulada «Véase también»- Sonoridad: la sonoridad percentil de ISO 532-1 que este modelo toma como primer argumento, y las reglas de captación que la grabación tiene que cumplir antes de que nada de esto sirva.
- Métricas de calidad sonora: la agudeza de DIN 45692, la aspereza de ECMA-418-2 y la intensidad de fluctuación normativa en vacil_HMS de la misma sensación que esta página modela en vacil.
- Sonoridad avanzada: los modelos de sonoridad alternativos, y por qué mezclar familias hace del compuesto una estimación de ingeniería.
- Niveles ambientales: la molestia de la comunidad, la otra cosa que significa la palabra, y los niveles de evaluación con los que se valora.
- Teoría: Modelos avanzados de sonoridad y calidad sonora: las métricas de sonoridad y de calidad sonora que combina el modelo de molestia, deducidas una a una.
- Referencia de la API:
psychoacoustics.quality.annoyanceypsychoacoustics.quality.fluctuation_strength.
Referencias
Sección titulada «Referencias»- Fastl, H. y Zwicker, E. (2007). Psychoacoustics: Facts and models (3.ª ed.). Springer. https://doi.org/10.1007/978-3-540-68888-4La fuente del modelo de molestia psicoacústica de la sección 2 (Ecs. 16.2-16.4, capítulo 16; origen Widmann 1992) y de la forma cerrada de la intensidad de fluctuación para ruido de banda ancha AM de la sección 3.1 (Ec. 10.2, capítulo 10).
- Felix Greco, G., Merino-Martínez, R., Osses, A. y Lotinga, M. J. B. (2025). SQAT: A sound quality analysis toolbox for MATLAB. GitHub. https://doi.org/10.5281/zenodo.7934709La referencia abierta en MATLAB (software de código abierto) usada como oráculo numérico de las comprobaciones de intensidad de fluctuación de esta página.
- Osses Vecchi, A., García León, R. y Kohlrausch, A. (2016). Modelling the sensation of fluctuation strength. Proceedings of Meetings on Acoustics, 28, 050005. https://doi.org/10.1121/2.0000410El modelo de señal de la intensidad de fluctuación implementado en la sección 3.2 (presentado en el ICA 2016; sala limpia, sin norma numérica, calibrado a 1 vacil en el tono AM de referencia), incluidos los valores de su Tabla 1 usados como contraste.