Sonoridad
Normas aplicables: ISO 226ISO 532Referencias: Fastl y Zwicker 2007Fletcher y Munson 1933
Las métricas de nivel dicen cuánta presión acústica hay; la sonoridad dice cuán fuerte la percibe realmente quien escucha. Esta página cubre el método de referencia, la sonoridad en sonios de Zwicker (ISO 532-1), además de las líneas isofónicas de tonos puros (ISO 226); las familias de modelos más nuevas, Moore-Glasberg (ISO 532-2/-3) y la sonoridad del modelo de Sottek (ECMA-418-2), están en Sonoridad avanzada. La agudeza, la tonalidad y la aspereza están en Métricas de calidad sonora; las métricas de habla en el índice de transmisión del habla y el índice de inteligibilidad del habla.
¿Cómo calculo la sonoridad de Zwicker de ISO 532-1 con Python?
Sección titulada «¿Cómo calculo la sonoridad de Zwicker de ISO 532-1 con Python?»Llama a psychoacoustics.loudness_zwicker(x, fs, calibration_factor=sens)
sobre una grabación calibrada. Si solo tienes el espectro, usa
loudness_zwicker_from_spectrum(levels_28) con los 28 niveles de banda de
tercio de octava de 25 Hz a 12,5 kHz. Cualquiera de los dos resultados lleva
loudness_level en fonios y loudness en sonios — el estacionario único
con stationary=True, y si no el máximo de la traza de
sonoridad — más los percentiles de informe n5 y n10 cuando el análisis es
variable en el tiempo.
Sonoridad en sonios (ISO 532-1, Zwicker)
Sección titulada «Sonoridad en sonios (ISO 532-1, Zwicker)»Los decibelios comprimen la percepción: 10 dB más se leen como el doble de sonoro, y dos sonidos con el mismo dB(A) pueden diferir audiblemente según cómo se reparta su energía entre las bandas críticas del oído. El método de Zwicker modela explícitamente la cadena auditiva (transmisión del oído externo/medio, análisis en bandas críticas sobre la escala de 24 Bark, pendientes de enmascaramiento dependientes del nivel) y produce la sonoridad en sonios, una escala de razón: 4 sonios es el doble de sonoro que 2 sonios. Por definición, un tono de 1 kHz a 40 dB SPL es 1 sonio, y cada +10 fonios duplica el valor en sonios.
La animación de abajo muestra esa integración en acción: al subir el nivel de banda de un sonido de banda estrecha de 1 kHz, el patrón de sonoridad específica crece a lo largo del eje de Bark y el área bajo él es la sonoridad total en sonios.
El patrón de sonoridad específica de una banda estrecha de 1 kHz se construye sobre el eje de Bark mientras el nivel de banda sube de 45 a 85 dB, y el área bajo el patrón se integra en la sonoridad total en sonios.
El patrón de sonoridad específica de una banda estrecha de 1 kHz se construye sobre el eje de Bark mientras el nivel de banda sube de 45 a 85 dB, y el área bajo el patrón se integra en la sonoridad total en sonios.
Medir la entrada (apartado 4)
Sección titulada «Medir la entrada (apartado 4)»La sonoridad es una magnitud de nivel absoluto: en ella no se cancela nada, así que una grabación sin calibrar o ponderada A produce un número verosímil que sencillamente está mal, y el resultado no lleva ninguna señal de ello. Por eso ISO 532-1 especifica la entrada antes de especificar el modelo.
La cadena. Un micrófono, un preamplificador y un amplificador que cumplan
la clase 1 de IEC 61672-1:2013, y una calibración de campo que convierta las
unidades digitales en pascales: ese factor es lo que espera
calibration_factor, y sale de la
calibración. El apartado 4
fija la frecuencia de muestreo de la implementación de referencia en 48 kHz;
las demás se remuestrean a ella, cosa que la biblioteca hace internamente. Para
la entrada por niveles de banda, los 28 niveles de tercio de octava deben salir
de filtros conformes con la clase 1 de IEC 61260-1:2014, con frecuencias
centrales de 25 Hz a 12,5 kHz.
Dos reglas sobre las propias muestras. Ninguna ponderación frecuencial de
ningún tipo: la Nota 1 de la definición 3.2 establece que las ponderaciones
como la A no deben usarse para el cálculo de sonoridad, porque el modelo aplica
internamente la ponderación propia del oído y una entrada ponderada A la
pondera dos veces. Y presión acústica verdadera, no datos normalizados ni
escalados a pico (apartado 4, «valores correctos de presión acústica, sin datos
normalizados»). El sens = 1.0 de los fragmentos de abajo es un marcador de
posición que mantiene ejecutable esta página, no un valor por defecto que
merezca conservarse: equivócate en 10 dB al calibrar y la sonoridad que se
informa se duplica o se reduce a la mitad (13,1 sonios pasan a 26,6 o a 6,5 en
la señal de ejemplo), lo que empequeñece cualquier diferencia entre los modelos
de la página siguiente.
Dónde va el micrófono. La Nota 2 de la definición 3.19 lo sitúa en el punto donde estaría el centro de la cabeza de quien escucha, con esa persona ausente; eso es lo que hace que la sonoridad calculada sea la de una presentación diótica, el mismo sonido en ambos oídos. La geometría dibujada abajo es la posición de observador de ECMA-74 — 1,00 m desde la caja de referencia, 1,50 m sobre el plano reflectante — porque ISO 532-1 no prescribe distancia propia y la toma de la norma de emisión que corresponda.
Las tres vías hacia una entrada válida. El panel A da y el panel B ; el tipo de campo forma parte del resultado, no es una preferencia.
Qué campo, y por qué hay que declararlo. field="free" aplica la función
de transferencia de campo libre frontal de la cabeza y el oído externo y encaja
con un campo directo — cámara anecoica, cerca de una fuente, al aire libre;
field="diffuse" aplica la de incidencia aleatoria y encaja con una sala
reverberante o con una medición in situ. La corrección es una forma espectral
fija que se aplica a los niveles de banda antes de la etapa de bandas críticas,
máxima por encima de 1 kHz, donde más difieren la difracción en la cabeza y la
resonancia del canal auditivo: sobre un espectro plano de 60 dB el resultado en
campo difuso es de 33,9 sonios frente a 31,9 sonios en campo libre, un 6 % —
poco al lado de un error de calibración, bastante cuando se están comparando
dos productos. El apartado 4 exige especificar el tipo de campo y el apartado 7
lo mete en el informe, así que «N = 13,1 sonios» está incompleto: escribe
o , o pon «campo libre» al lado del número.
Grabaciones con cabeza artificial. El Anexo D gobierna la vía del simulador de cabeza y torso: la grabación debe llevar ya una ecualización acorde con el entorno de medida — de campo libre solo para una única fuente frontal a más de 1,5 m, de campo difuso en entornos reflectantes, ecualización ID en vehículos — y cada canal de oído se analiza por separado, informando de los dos y citando el máximo o la media como valor único.
Qué tiene que contener el informe (apartado 7): el sonido evaluado, una
referencia a ISO 532-1, qué método se usó (el estacionario del apartado 5 o el
variable en el tiempo del apartado 6), el campo sonoro F o D, el tipo de datos
de entrada (niveles de banda o señal temporal), la sonoridad en sonios y — en
un análisis variable en el tiempo — la función temporal de sonoridad, con
y cuando se requieran. ZwickerLoudness.report() imprime
la mitad acústica de esa lista; el resto llega por ReportMetadata.
import numpy as npfrom phonometry import psychoacoustics
# Una grabación en bruto y su calibración para que la guía funcione por sí solafs = 48000x = 0.2 * np.sin(2 * np.pi * 1000 * np.arange(fs) / fs) # cualquier grabación (unidades digitales)sens = 1.0 # calibration_factor a pascaleslevels_28 = np.full(28, 60.0) # 28 niveles de tercio de octava (dB)
# Desde una grabación sin calibrar: calibration_factor convierte unidades digitales en Pares = psychoacoustics.loudness_zwicker(x, fs, field="free", calibration_factor=sens)print(f"N = {res.loudness:.1f} sonios ({res.loudness_level:.0f} fonios)") # 13.1 sonios (77 fonios)
# Señales variables en el tiempo: la sonoridad percentil N5 es el# estándar para informes.# Un tren de 4,4 s de ráfagas tonales de 1 kHz que suben de 45 a 85 dB,# la más sonora breve.segments = []for level, seconds in [(45.0, 0.6), (55.0, 0.6), (65.0, 0.6), (75.0, 0.6), (85.0, 0.25)]: n = int(seconds * fs) k = np.arange(n) env = np.minimum(1.0, np.minimum(k, n - 1 - k) / (0.02 * fs)) # rampas de 20 ms p = np.sqrt(2) * 2e-5 * 10 ** (level / 20) # amplitud de pico (Pa) segments += [p * np.sin(2 * np.pi * 1000 * k / fs) * env, np.zeros(int(0.35 * fs))]bursts = np.concatenate(segments)
tv = psychoacoustics.loudness_zwicker(bursts, fs) # stationary=False (por defecto)print(f"{tv.n5:.1f} {tv.n10:.1f} {tv.loudness:.1f}") # 14.5 11.4 22.5 — N5, N10, Nmax
# Desde 28 niveles de tercio de octava (25 Hz .. 12.5 kHz)res = psychoacoustics.loudness_zwicker_from_spectrum(levels_28, field="diffuse")
res.plot() # N'(z) sobre la escala Bark — el patrón de sonoridad específica (requiere matplotlib)Mismo nivel de banda, sonoridad muy distinta: la energía repartida entre muchas bandas críticas (rojo) suma muchos más sonios que el mismo nivel concentrado en una sola banda (azul). El área bajo es la sonoridad total.
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import psychoacoustics
levels_28 = np.full(28, 60.0) # 28 niveles de tercio de octava (dB)# Desde 28 niveles de tercio de octava (25 Hz .. 12.5 kHz)res = psychoacoustics.loudness_zwicker_from_spectrum(levels_28, field="diffuse")
# En una línea — el patrón de sonoridad específica N'(z) desde el resultado:res.plot(language="es")plt.show()
# O reproduce la figura a mano — dos patrones con el mismo nivel de banda (60 dB),# la energía repartida entre muchas bandas críticas frente a la banda de 1 kHz:narrow = psychoacoustics.loudness_zwicker_from_spectrum(np.r_[np.full(16, -60.0), 60.0, np.full(11, -60.0)])broad = psychoacoustics.loudness_zwicker_from_spectrum(np.full(28, 60.0))z = np.arange(1, narrow.specific.size + 1) * 0.1 # eje Barkfig, ax = plt.subplots()for r, color, label in [ (broad, "#d62728", f"Banda ancha plana a 60 dB - N = {broad.loudness:.1f} sonios"), (narrow, "#1f77b4", f"Banda estrecha de 1 kHz - N = {narrow.loudness:.1f} sonios"),]: ax.fill_between(z, r.specific, color=color, alpha=0.3) ax.plot(z, r.specific, color=color, label=label)ax.set_xlabel("Razón de banda crítica z [Bark]")ax.set_ylabel("Sonoridad específica N' [sonios/Bark]")ax.legend()plt.show()La implementación es un port de sala limpia del programa de referencia normativo de la norma (Anexo A.4): las doce tablas de datos son exactas dígito a dígito y el conjunto completo de validación del Anexo B se ejecuta en CI: el caso de prueba estacionario reproduce el valor publicado hasta el último dígito impreso, y las trazas de los pulsos de tono se mantienen dentro de la banda de tolerancia del 5 % por muestra que fija la norma.
Parámetros de loudness_zwicker()
Sección titulada «Parámetros de loudness_zwicker()»| Parámetro | Tipo | Unidades | Rango / valor por defecto | Notas |
|---|---|---|---|---|
x | array 1D | Pa (tras calibración) | ≥ 8 ms a 48 kHz | Se remuestrea internamente a 48 kHz si es necesario |
fs | int | Hz | > 0 | |
field | str | — | 'free' (por defecto) / 'diffuse' | Corrección de campo sonoro (Tabla A.5) |
stationary | bool | — | por defecto False | True: un único a partir del espectro promediado |
calibration_factor | float | Pa por unidad digital | por defecto 1.0 | De sensitivity() |
Devuelve un dataclass ZwickerLoudness: loudness_level (fonios), specific
(, 240 bins de 0,1 Bark) y, para los análisis variables en el tiempo,
n5, n10, time y loudness_vs_time (traza a 500 Hz). loudness (,
sonios) cambia de significado con stationary: con stationary=True es el
estacionario único del apartado 5, y con el valor por defecto
stationary=False es el máximo de la traza de sonoridad frente
al tiempo del apartado 6, que es la razón de que el primer fragmento de arriba,
ejecutado sobre un tono estable, ya informe de un máximo.
Leer un resultado variable en el tiempo (apartado 6.4)
Sección titulada «Leer un resultado variable en el tiempo (apartado 6.4)»Un sonido fluctuante no tiene una sonoridad única, así que el apartado 6.4 de
ISO 532-1 informa de un percentil: , la sonoridad superada el 5 % del
tiempo de análisis, porque la media aritmética de queda
sistemáticamente por debajo de lo que juzga quien escucha; en el tren de
ráfagas de arriba la media es de 4,1 sonios frente a . es
el compañero más benévolo para sonidos con picos breves, y res.loudness es
: la magnitud correcta para buscar el peor instante, y la
equivocada para citarla como «la sonoridad».
Qué es un percentil de una traza de sonoridad. La ráfaga breve de 85 dB fija
y casi nada más: ocupa menos del 6 % del registro, así que
queda 8 sonios por debajo. El mismo registro analizado con stationary=True
devuelve 10,0 sonios, otra magnitud más, la quinta.
Mostrar el código de esta figura
import matplotlib.pyplot as plt
# `bursts` y `tv` vienen del fragmento de arriba.plt.plot(tv.time, tv.loudness_vs_time, label="N(t)")for value, label in [(tv.loudness, "Nmax"), (tv.n5, "N5"), (tv.n10, "N10")]: plt.axhline(value, linestyle="--", label=f"{label} = {value:.1f} sonios")plt.xlabel("Tiempo [s]")plt.ylabel("Sonoridad N [sonios]")plt.legend()plt.show()Como es un porcentaje de la ventana de análisis, alargar o acortar el
registro lo mueve. Cita el tiempo de medición junto a , mantenlo idéntico
entre los sonidos que se comparan (el apartado 6.4 lo exige) y no uses
para impulsos aislados, que es exactamente el caso que caricaturiza la traza de
arriba. loudness_vs_time y time llevan la traza, así que un registro se
puede recortar al estado de funcionamiento de interés antes de leer el
percentil, y el intervalo de medición va en ReportMetadata, ya que la ficha
imprime sin él.
Informe de ISO 532-1 (.report())
Sección titulada «Informe de ISO 532-1 (.report())»ZwickerLoudness.report(path) renderiza una ficha PDF de una página con el
formato de un informe de sonoridad acreditado: la línea de base normativa, un
bloque opcional de metadatos de cabecera, una tabla compacta de métricas
(sonoridad total , nivel de sonoridad y los percentiles
/ para un resultado variable en el tiempo) junto
al patrón de sonoridad específica (el propio .plot() del resultado),
el número único () en caja, una
fila opcional de
veredicto y un pie con el descargo fijo. Usa el mismo contenedor
ReportMetadata y el mismo motor de renderizado que la
ficha de aislamiento de ISO
717;
un requirement aportado se lee como la sonoridad máxima admisible en sonios
(una sonoridad menor cumple). El renderizado necesita reportlab y, para la
figura que incrusta la ficha, matplotlib (pip install "phonometry[report,plot]"); solo se admite engine="reportlab". La ficha se
genera en inglés por defecto; pasa language="es" para una ficha en español
(cadenas fijas traducidas y coma como separador decimal), p. ej.
res.report("loudness_fiche_es.pdf", language="es").
from phonometry import psychoacoustics, ReportMetadata
res = psychoacoustics.loudness_zwicker_from_spectrum(levels_28, field="free")res.report( "ficha_sonoridad.pdf", metadata=ReportMetadata( specimen="Electrodoméstico, ruido de funcionamiento estable", measurement_standard="ISO 532-1 método 1", laboratory="Laboratorio de referencia Phonometry", requirement=12.0, # sonoridad máxima admisible (sonios) ),) # N (sonios) y LN (fonios)La ficha de ejemplo se regenera con make reports y se conserva renderizada en
el repositorio; pulsa la vista previa para abrir el PDF.

Ficha de sonoridad de una página: una cabecera de metadatos, una tabla de métricas con la sonoridad total N y el nivel de sonoridad LN, el patrón de sonoridad específica sobre la razón de banda crítica, el resultado de un solo número N = 8,2 sonios (LN = 70,4 fonios) en caja y una fila de veredicto CUMPLE frente a un límite de 12 sonios.
Nivel de sonoridad de tonos puros (ISO 226:2023)
Sección titulada «Nivel de sonoridad de tonos puros (ISO 226:2023)»Las líneas isofónicas normales relacionan el SPL de un tono puro con su nivel
de sonoridad percibido en fonios (el SPL de un tono de 1 kHz igual de sonoro).
equal_loudness_contour(phon) evalúa la Fórmula (1) de ISO 226:2023 en las 29
frecuencias preferentes de tercio de octava de la Tabla 1,
loudness_level(spl, frequency) es la inversa exacta (Fórmula 2) y
hearing_threshold() devuelve la columna del umbral de audición.
equal_loudness_contours(phons) agrupa toda una familia de curvas con el
umbral en un resultado EqualLoudnessContours representable:
from phonometry import psychoacoustics
freqs, spl = psychoacoustics.equal_loudness_contour(40.0) # la clásica isofónica de 40 foniosphon = psychoacoustics.loudness_level(73.0, 63.0) # 73 dB @ 63 Hz -> 40 fonios
# Toda la familia (20-90 fonios por defecto) más el umbral de audición:res = psychoacoustics.equal_loudness_contours()res.plot() # el clásico gráfico de ISO 226 (necesita matplotlib)ISO 226:2023 define las curvas de 20 a 90 fonios; por encima de 80 fonios la fórmula solo es válida hasta 4 kHz, por lo que la curva de 90 fonios se detiene ahí y no se define ninguna curva superior.
Mostrar el código de esta figura
import matplotlib.pyplot as pltfrom phonometry import psychoacoustics
# Una línea — la familia de curvas directamente desde el resultado:res = psychoacoustics.equal_loudness_contours()res.plot(language="es")plt.show()
# O reproduce la figura a mano — Fórmula (1) de ISO 226:2023 en las 29# frecuencias preferentes de la Tabla 1, una curva por nivel de sonoridad:fig, ax = plt.subplots()for phon in [20, 40, 60, 80, 90]: freqs, spl = psychoacoustics.equal_loudness_contour(float(phon)) ax.semilogx(freqs, spl, color="C0") ax.annotate(f"{phon} fonios", xy=(1000, phon + 1), fontsize=9)ft, tf = psychoacoustics.hearing_threshold()ax.semilogx(ft, tf, "--", color="C1", label="Umbral de audición $T_f$")ax.set(xlabel="Frecuencia [Hz]", ylabel="Nivel de presión acústica [dB re 20 µPa]")ax.grid(True, which="both", alpha=0.3)ax.legend()plt.show()Validez según el apartado 4.1: 20–90 fonios (80 fonios por encima de 4 kHz); la implementación se verifica en CI contra las tablas del Anexo B. Ojo: esto es la sonoridad de tonos puros; la sonoridad de señales arbitrarias en sonios es lo que calculan los modelos ISO 532, el método de Zwicker de arriba y las familias más nuevas de Sonoridad avanzada.
Zwicker es el modelo de referencia, no el único. La sonoridad de Moore-Glasberg de ISO 532-2, su extensión variable en el tiempo de ISO 532-3 y la sonoridad del modelo de Sottek de ECMA-418-2, junto con la tabla de elección de modelo que dice cuándo preferir cada uno, están en Sonoridad avanzada.
Qué cubre esta guía
Sección titulada «Qué cubre esta guía»Cubierto
ISO 532-1:2017 (método de Zwicker): los requisitos de entrada e instrumentación del apartado 4, el método estacionario del apartado 5 y el método variable en el tiempo del apartado 6 con las reglas de percentiles del apartado 6.4, portado del programa de referencia normativo del Anexo A.4 y validado frente al Anexo B, con los percentiles
n5/n10, medianteloudness_zwicker()yloudness_zwicker_from_spectrum(); la lista de contenidos del informe del apartado 7 y las indicaciones del Anexo D para grabaciones con cabeza y torso. ISO 226:2023: la Fórmula (1), la Fórmula (2) y los parámetros de curva de la Tabla 1, medianteequal_loudness_contour(),loudness_level(),hearing_threshold()yequal_loudness_contours().No cubierto
La sonoridad de Moore-Glasberg de ISO 532-2, el método variable en el tiempo de ISO 532-3 y la sonoridad del modelo de Sottek de ECMA-418-2 se han mudado a Sonoridad avanzada. Las curvas de ISO 226:2023 describen solo tonos puros, y la norma no define interpolación entre las 29 frecuencias tabuladas, así que
loudness_level()espera una de las frecuencias de la Tabla 1.
Véase también
Sección titulada «Véase también»- Sonoridad avanzada (ISO 532-2/-3, ECMA-418-2): los modelos de sonoridad de Moore-Glasberg y Sottek y la tabla de elección de modelo.
- Métricas de calidad sonora: agudeza, tonalidad y aspereza, la otra mitad de la calidad sonora.
- Molestia psicoacústica e intensidad de fluctuación: el modelo de Zwicker y Fastl que consume la sonoridad percentil .
- Teoría: las ecuaciones que sustentan los modelos de sonoridad.
- Referencia de la API:
psychoacoustics.loudness.zwickerypsychoacoustics.loudness.contours. - Teoría: Sonoridad de Zwicker (ISO 532-1): la integral de sonoridad específica de ISO 532-1 y el patrón de excitación sobre el que se calcula.
Respuestas rápidas
Sección titulada «Respuestas rápidas»¿Cuál es la diferencia entre la sonoridad en sonios y el nivel de sonoridad en fonios?
Sección titulada «¿Cuál es la diferencia entre la sonoridad en sonios y el nivel de sonoridad en fonios?»La sonoridad en sonios (ISO 532-1) es una escala de razón de la sonoridad percibida: 4 sonios es el doble de sonoro que 2 sonios y, por definición, un tono de 1 kHz a 40 dB SPL es 1 sonio. El nivel de sonoridad en fonios (ISO 226) es el SPL de un tono puro de 1 kHz igual de sonoro, y cada +10 fonios duplica el valor en sonios.
¿En qué rango son válidas las líneas isofónicas de ISO 226:2023?
Sección titulada «¿En qué rango son válidas las líneas isofónicas de ISO 226:2023?»El apartado 4.1 de ISO 226:2023 define las líneas isofónicas normales de 20 a 90 fonios, evaluadas en las 29 frecuencias preferentes de tercio de octava de la Tabla 1; por encima de 80 fonios la fórmula solo es válida hasta 4 kHz, por lo que la curva de 90 fonios se detiene ahí y no se define ninguna curva superior. Las curvas describen tonos puros, no señales arbitrarias.
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 psicoacústica de bandas críticas y enmascaramiento que sustenta el modelo de Zwicker.
- Fletcher, H. y Munson, W. A. (1933). Loudness, its definition, measurement and calculation. The Journal of the Acoustical Society of America, 5(2), 82-108. https://doi.org/10.1121/1.1915637Las mediciones originales de igual sonoridad que sustentan el concepto de nivel de sonoridad de la sección de tonos puros.
- International Organization for Standardization. (2017). Acoustics — Methods for calculating loudness — Part 1: Zwicker method (ISO 532-1:2017). Sonoridad estacionaria y variable en el tiempo en sonios a partir del programa de referencia normativo del Anexo A.4, con la sonoridad percentil N5/N10, validada frente al conjunto del Anexo B.
- International Organization for Standardization. (2023). Acoustics — Normal equal-loudness-level contours (ISO 226:2023). El modelo de líneas isofónicas y los parámetros de la Tabla 1 que sustentan los niveles de sonoridad de tonos puros: las líneas isofónicas (Fórmula 1), el nivel de sonoridad de tonos puros (Fórmula 2) y el umbral de audición.