Sonoridad
Normas aplicables: ISO 226ISO 532ECMA-418Referencias: 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 las tres familias de modelos de sonoridad que incluye phonometry: el método de Zwicker (ISO 532-1), los métodos de Moore-Glasberg (ISO 532-2/3) y la sonoridad del modelo de Sottek (ECMA-418-2), además de las curvas isofónicas de tonos puros (ISO 226). El sharpness, 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 en sonos, loudness_level en fonios y, para señales variables en el
tiempo, los percentiles n5 y n10.
Sonoridad en sonos (ISO 532-1, Zwicker)
Sección titulada «Sonoridad en sonos (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 N en sonos, una escala de razón: 4 sonos es el doble de sonoro que 2 sonos. Por definición, un tono de 1 kHz a 40 dB SPL es 1 sono, y cada +10 fonios duplica el valor en sonos.
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 N’(z) crece a lo largo del eje de Bark y el área bajo él es la sonoridad total en sonos.
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.
import numpy as npfrom phonometry import psychoacoustics
# Una grabación cruda 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} sone ({res.loudness_level:.0f} phon)") # 13.1 sone (77 phon)
# Señales variables en el tiempo: la sonoridad percentil N5 es el# estándar para informesres = psychoacoustics.loudness_zwicker(x, fs) # stationary=False (por defecto)print(f"{res.n5:.1f} {res.n10:.1f} {res.loudness:.1f}") # 13.1 13.1 13.1 — 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 sonos que el mismo nivel concentrado en una sola banda (azul). El área bajo N’(z) 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, "#ff7f0e", f"Banda ancha N = {broad.loudness:.1f} sone"), (narrow, "#1f77b4", f"Banda estrecha 1 kHz N = {narrow.loudness:.1f} sone"),]: ax.fill_between(z, r.specific, color=color, alpha=0.3) ax.plot(z, r.specific, color=color, label=label)ax.set_xlabel("Tasa de banda crítica z [Bark]")ax.set_ylabel("Sonoridad específica N' [sone/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 N(t) 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 N a partir del espectro promediado |
calibration_factor | float | Pa por unidad digital | por defecto 1.0 | De sensitivity() |
Devuelve un dataclass ZwickerLoudness: loudness (N, sonos),
loudness_level (fonios), specific (N′(z), 240 bins de 0,1 Bark) y, para los
análisis variables en el tiempo, n5, n10, time, loudness_vs_time
(traza a 500 Hz).
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 N, nivel de sonoridad LN y los percentiles
N5/N10 para un resultado variable en el tiempo) junto
al patrón de sonoridad específica N′(z) (el propio .plot() del resultado),
el número único N = X sono (LN = Y fonio) 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 sonos
(una sonoridad menor cumple). El renderizado necesita reportlab
(pip install phonometry[report]); 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 (sonos) ),) # N (sonos) 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 tasa de banda crítica, el resultado de un solo número N = 8,2 sonos (LN = 70,4 fonios) en caja y una fila de veredicto CUMPLE frente a un límite de 12 sonos.
Nivel de sonoridad de tonos puros (ISO 226:2023)
Sección titulada «Nivel de sonoridad de tonos puros (ISO 226:2023)»Las curvas 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 fuerte).
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 sonos es lo que calculan los modelos ISO 532 de esta página.
Modelos avanzados de sonoridad
Sección titulada «Modelos avanzados de sonoridad»La ISO 532-1 de arriba es una de las tres familias de modelos de sonoridad que incluye phonometry (cuatro métodos en la tabla de abajo). Esta sección añade la sonoridad de Moore-Glasberg de ISO 532-2/532-3 y la sonoridad del modelo de Sottek de ECMA-418-2:2025, cuyo front-end auditivo compartido también impulsa la tonalidad y la aspereza de Métricas de calidad sonora.
Elegir un modelo de sonoridad
Sección titulada «Elegir un modelo de sonoridad»| Modelo | Norma | Estacionario / variable en el tiempo | Salida | Cuándo usarlo |
|---|---|---|---|---|
| Zwicker | ISO 532-1:2017 | ambos | sonos | Método de referencia; entrada en tercios de octava; rápido y muy citado |
| Moore-Glasberg | ISO 532-2:2017 | estacionario | sonos | Patrón de excitación roex; mejor para tonos y con suma binaural explícita |
| Moore-Glasberg-Schlittenlacher | ISO 532-3:2023 | variable en el tiempo | sonos (STL/LTL) | Sonoridad variable en el tiempo con trazas de corto/largo plazo y el pico N_max |
| Sottek (modelo auditivo) | ECMA-418-2:2025 | variable en el tiempo | sone_HMS | Comparte un único front-end auditivo con las métricas de tonalidad y aspereza de ECMA |
Los cuatro métodos están anclados de modo que un tono de 1 kHz a 40 dB SPL es ≈ 1 sono; los valores no son intercambiables dígito a dígito porque los modelos difieren en sus filtros auditivos y en su suma de sonoridad.
Los tres modelos coinciden en el ancla de 1 sono / 40 dB y divergen con el nivel: Zwicker duplica el valor en sonos cada +10 fonios, mientras que el modelo de Sottek crece más lentamente (alrededor de 1,65× por cada 10 dB), una diferencia intrínseca entre las sumas auditivas, no un error de calibración.
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import psychoacoustics
# Tono de 1 kHz, 20..80 dB SPL: los tres modelos pasan por 1 sono a 40 dBfs = 48000t = np.arange(fs) / fslevels = np.arange(20.0, 81.0, 10.0)zw, mg, ec = [], [], []for spl in levels: x = np.sqrt(2) * 2e-5 * 10 ** (spl / 20) * np.sin(2 * np.pi * 1000 * t) zw.append(psychoacoustics.loudness_zwicker(x, fs, stationary=True).loudness) mg.append( psychoacoustics.loudness_moore_glasberg_from_spectrum([(1000.0, float(spl))]).loudness ) ec.append(psychoacoustics.loudness_ecma(x, fs).loudness)
fig, ax = plt.subplots()ax.plot(levels, zw, "o-", label="Zwicker (ISO 532-1)")ax.plot(levels, mg, "s--", label="Moore-Glasberg (ISO 532-2)")ax.plot(levels, ec, "^-.", label="Sottek (ECMA-418-2)")ax.plot(40.0, 1.0, "o", color="k", markerfacecolor="none", markersize=10) # el ancla compartidaax.set(xlabel="Nivel de presión acústica [dB SPL]", ylabel="Sonoridad total N [sonos]")ax.legend()plt.show()Sonoridad de Moore-Glasberg (ISO 532-2)
Sección titulada «Sonoridad de Moore-Glasberg (ISO 532-2)»Donde Zwicker usa bandas críticas fijas sobre la escala Bark, Moore-Glasberg construye un patrón de excitación con filtros auditivos exponenciales redondeados (roex) dependientes del nivel sobre la escala del número ERB (“Cam”), y luego aplica una transformación compresiva de excitación → sonoridad específica con C = 0,0617 sonos/Cam (ISO 532-2:2017, Fórmula 7) y una etapa de inhibición binaural. Reproduce los casos de tono y de banda ancha del Anexo B con un uno o dos por ciento de error y, a diferencia de ISO 532-1, modela la suma binaural explícitamente.
import numpy as npfrom phonometry import psychoacoustics
# El ancla definitoria: una componente sinusoidal de 1 kHz a 40 dB SPL,# campo libre, binaural -> 1 sono / 40 fonios por construcción del sono.res = psychoacoustics.loudness_moore_glasberg_from_spectrum([(1000.0, 40.0)], field="free")print(f"N = {res.loudness:.3f} sone ({res.loudness_level:.1f} phon)") # 1.000 sono (40.0 fonios)
# Desde una grabación calibrada: se forma el espectro de líneas de banda# estrecha (FFT, normalización que preserva la potencia) y se alimenta al# método exacto de componentes sinusoidales (ISO 532-2 apartados 5.2/5.4).fs = 48000x = np.sqrt(2) * 2e-5 * 10 ** (40 / 20) * np.sin(2 * np.pi * 1000 * np.arange(fs) / fs)res = psychoacoustics.loudness_moore_glasberg(x, fs, field="free", presentation="binaural")
res.plot() # sonoridad específica N'(i) sobre la escala del número ERB (Cam)El patrón de ISO 532-2 del ancla definitoria de 1 sonio. El pico no es una línea espectral sino la excitación que producen los filtros roex alrededor del tono, así que su anchura es la del filtro auditivo, no la de la resolución de análisis.
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import psychoacoustics
# Desde una grabación calibrada: se forma el espectro de líneas de banda# estrecha (FFT, normalización que preserva la potencia) y se alimenta al# método exacto de componentes sinusoidales (ISO 532-2 apartados 5.2/5.4).fs = 48000x = np.sqrt(2) * 2e-5 * 10 ** (40 / 20) * np.sin(2 * np.pi * 1000 * np.arange(fs) / fs)res = psychoacoustics.loudness_moore_glasberg(x, fs, field="free", presentation="binaural")
# En una línea — el patrón de sonoridad específica N'(i) directo del resultado:res.plot(language="es")plt.show()
# O dibújalo a mano desde la rejilla del número ERB que ya lleva el resultado:fig, ax = plt.subplots()ax.fill_between(res.erb_number, res.specific, alpha=0.3)ax.plot(res.erb_number, res.specific)ax.set_xlabel("Número ERB [Cam]")ax.set_ylabel("Sonoridad específica N' [sone/Cam]")plt.show()Parámetros de loudness_moore_glasberg()
Sección titulada «Parámetros de loudness_moore_glasberg()»| Parámetro | Tipo | Unidades | Rango / valor por defecto | Notas |
|---|---|---|---|---|
x | array 1D | Pa | no vacío | Señal de presión calibrada (envoltorio de señal) |
components | lista de (f, L) | Hz, dB SPL | — | _from_spectrum: componentes sinusoidales discretas |
band_levels | vector de 29 | dB SPL | 25 Hz .. 16 kHz | Entrada de _from_third_octave (bandas IEC 61260-1) |
fs | int | Hz | > 0 | Solo en el envoltorio de señal |
field | str | — | 'free' (por defecto) / 'diffuse' / 'eardrum' | Transferencia del oído externo |
presentation | str | — | 'binaural' (por defecto) / 'diotic' / 'monaural' | Suma binaural |
Devuelve un MooreGlasbergLoudness: loudness (N, sonos), loudness_level
(fonios), specific (N′(i), 372 bins de 0,1 Cam), erb_number,
centre_frequencies, field, presentation.
Sonoridad variable en el tiempo (ISO 532-3)
Sección titulada «Sonoridad variable en el tiempo (ISO 532-3)»ISO 532-3 envuelve el mismo modelo de excitación / sonoridad específica en un análisis espectral multirresolución deslizante (seis FFT paralelas, actualizadas cada 1 ms) y dos integradores temporales en cascada: la sonoridad de corto plazo S′(t), rápida, y la sonoridad de largo plazo S″(t), más lenta. La sonoridad de largo plazo de pico N_max predice la sonoridad de sonidos de hasta unos 5 s.
import numpy as npfrom phonometry import psychoacoustics
fs = 32000t = np.arange(int(1.3 * fs)) / fsx = np.sqrt(2) * 2e-5 * 10 ** (40 / 20) * np.sin(2 * np.pi * 1000 * t)
res = psychoacoustics.loudness_moore_glasberg_time(x, fs, field="free")print(f"N_max = {res.n_max:.3f} sone ({res.loudness_level_max:.0f} phon)") # 1.000 sono (40 fonios)print(f"sonoridad de largo plazo superada el 5% del tiempo: {res.percentiles[5.0]:.3f} sone") # 0.999 sone
res.plot() # sonoridad de corto plazo S'(t) y de largo plazo S''(t) frente al tiempoMostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import psychoacoustics
fs = 32000t = np.arange(int(1.3 * fs)) / fsx = np.sqrt(2) * 2e-5 * 10 ** (40 / 20) * np.sin(2 * np.pi * 1000 * t)res = psychoacoustics.loudness_moore_glasberg_time(x, fs, field="free")
# El resultado lleva ambas trazas sobre un eje temporal de 1 ms:res.plot(language="es")plt.show()
# O dibújalas directamente para ver la STL rápida frente a la LTL lenta:fig, ax = plt.subplots()ax.plot(res.time, res.short_term_loudness, label="Corto plazo S'(t)")ax.plot(res.time, res.long_term_loudness, label="Largo plazo S''(t)")ax.set_xlabel("Tiempo [s]")ax.set_ylabel("Sonoridad [sone]")ax.legend()plt.show()Parámetros de loudness_moore_glasberg_time()
Sección titulada «Parámetros de loudness_moore_glasberg_time()»| Parámetro | Tipo | Unidades | Rango / valor por defecto | Notas |
|---|---|---|---|---|
signal | array 1D o (n, 2) | Pa | no vacío | Mono = diótico; dos columnas = oídos izquierdo/derecho |
fs | int | Hz | > 0 | |
field | str | — | 'free' (por defecto) / 'diffuse' / 'eardrum' | Transferencia del oído externo |
presentation | str | — | 'binaural' (por defecto) / 'diotic' / 'monaural' | Suma binaural |
percentiles | secuencia | porcentaje | por defecto (1, 5, 10, 50, 90, 95) | Niveles de sonoridad de largo plazo excedidos |
Devuelve un MooreGlasbergTimeVaryingLoudness: time (rejilla de 1 ms),
short_term_loudness / long_term_loudness (sonos), sus _level en fonios,
n_max, loudness_level_max, un dict percentiles, field, presentation.
Sonoridad del modelo de Sottek (ECMA-418-2)
Sección titulada «Sonoridad del modelo de Sottek (ECMA-418-2)»ECMA-418-2:2025 especifica un único front-end auditivo (filtrado del oído externo/medio, un banco de 53 filtros de tipo gammatone sobre la escala Bark_HMS con z = 0,5 .. 26,5, rectificación de media onda, RMS de bloque y una no linealidad compresiva, Fórmula 23) que comparten sus métricas de sonoridad, tonalidad y aspereza. La sonoridad N se expresa en sone_HMS, y el mismo ancla de 1 kHz/40 dB calibra el front-end (nuestro valor de sala limpia 0,984, con el promediado completo de bandas de la cláusula 6.2.3; el origen del residuo está documentado en el docstring del módulo).
import numpy as npfrom phonometry import psychoacoustics
fs = 48000t = np.arange(int(1.2 * fs)) / fsx = np.sqrt(2) * 2e-5 * 10 ** (40 / 20) * np.sin(2 * np.pi * 1000 * t)
res = psychoacoustics.loudness_ecma(x, fs, field="free")print(f"N = {res.loudness:.3f} sone_HMS") # 0.984 sone_HMSprint(res.specific_loudness.shape) # (53,) sonoridad específica media N'(z)
res.plot() # sonoridad específica media N'(z) + N(l) dependiente del tiempo a 187.5 HzMostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import psychoacoustics
fs = 48000t = np.arange(int(1.2 * fs)) / fsx = np.sqrt(2) * 2e-5 * 10 ** (40 / 20) * np.sin(2 * np.pi * 1000 * t)res = psychoacoustics.loudness_ecma(x, fs, field="free")
# El resultado lleva la sonoridad específica media sobre las 53 bandas Bark_HMS:res.plot(language="es")plt.show()
# O dibuja N'(z) a mano frente a la escala de tasa de banda crítica:fig, ax = plt.subplots()ax.fill_between(res.bark, res.specific_loudness, alpha=0.3)ax.plot(res.bark, res.specific_loudness)ax.set_xlabel("Tasa de banda crítica z [Bark_HMS]")ax.set_ylabel("Sonoridad específica N' [sone_HMS/Bark_HMS]")plt.show()Parámetros de loudness_ecma()
Sección titulada «Parámetros de loudness_ecma()»| Parámetro | Tipo | Unidades | Rango / valor por defecto | Notas |
|---|---|---|---|---|
signal_in | array 1D | Pa | no vacío | Señal de presión calibrada |
fs | float | Hz | > 0 | Se remuestrea a 48 kHz internamente si es necesario (apartado 5.1.1) |
field | str | — | 'free' (por defecto) / 'diffuse' | Filtro del oído externo/medio (apartado 5.1.3) |
Devuelve un EcmaLoudness: loudness (N, sone_HMS), specific_loudness
(N′(z), 53 bandas), bark, centre_frequencies, time, loudness_vs_time
(N(l) a 187,5 Hz), field.
Qué cubre esta guía
Sección titulada «Qué cubre esta guía»Cubierto. ISO 532-1:2017 (método de Zwicker): el método estacionario del
apartado 5 y el método variable en el tiempo del apartado 6, portado del
programa de referencia normativo del Anexo A.4 y validado frente al Anexo B,
con los percentiles n5/n10, mediante loudness_zwicker() y
loudness_zwicker_from_spectrum(). ISO 532-2:2017 (Moore-Glasberg): el
patrón de excitación roex del apartado 7 y la inhibición binaural del
apartado 8, mediante loudness_moore_glasberg() y sus variantes
_from_spectrum/_from_third_octave. ISO 532-3:2023
(Moore-Glasberg-Schlittenlacher): la sonoridad de corto plazo del apartado
7.8, la de largo plazo del apartado 7.9 y su pico N_max, mediante
loudness_moore_glasberg_time(). ECMA-418-2:2025 (modelo de Sottek): el
ensamblaje de sonoridad del apartado 8, mediante loudness_ecma(). ISO
226:2023: la Fórmula (1), la Fórmula (2) y los parámetros de curva de la
Tabla 1, mediante equal_loudness_contour(), loudness_level(),
hearing_threshold() y equal_loudness_contours().
No cubierto. La combinación binaural de ECMA-418-2 (Fórmula 118, apartado
8.1.5) no está implementada: loudness_ecma() es monaural, así que analiza
cada canal por separado. El apartado 5 de ISO 532-3 exige remuestrear la
entrada a 32 kHz antes del análisis FFT deslizante. Esta implementación
procesa en cambio a la frecuencia de muestreo nativa, una desviación
documentada que se mantiene dentro de la incertidumbre expandida de la norma.
Remuestrea a 32 kHz primero si te importa la conformidad estricta apartado a
apartado.
Véase también
Sección titulada «Véase también»- Métricas de calidad sonora: sharpness, 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 N5.
- Teoría: las ecuaciones que sustentan los modelos de sonoridad.
- Referencia de la API:
psychoacoustics.loudness_zwicker,psychoacoustics.loudness_moore_glasbergypsychoacoustics.loudness_contours.
Respuestas rápidas
Sección titulada «Respuestas rápidas»¿Cuál es la diferencia entre la sonoridad en sonos y el nivel de sonoridad en fonios?
Sección titulada «¿Cuál es la diferencia entre la sonoridad en sonos y el nivel de sonoridad en fonios?»La sonoridad N en sonos (ISO 532-1) es una escala de razón de la sonoridad percibida: 4 sonos es el doble de sonoro que 2 sonos y, por definición, un tono de 1 kHz a 40 dB SPL es 1 sono. El nivel de sonoridad en fonios (ISO 226) es el SPL de un tono puro de 1 kHz igual de fuerte, y cada +10 fonios duplica el valor en sonos.
¿Qué modelo de sonoridad elijo: Zwicker, Moore-Glasberg o Sottek?
Sección titulada «¿Qué modelo de sonoridad elijo: Zwicker, Moore-Glasberg o Sottek?»El método de Zwicker (ISO 532-1:2017) es el de referencia: estacionario y variable en el tiempo, entrada en tercios de octava, rápido y muy citado. Moore-Glasberg (ISO 532-2:2017) es estacionario, construye patrones de excitación roex y modela la suma binaural explícitamente; ISO 532-3:2023 añade la sonoridad variable en el tiempo de corto y largo plazo con el pico N_max. El modelo de Sottek (ECMA-418-2:2025) se expresa en sone_HMS y comparte su front-end auditivo con las métricas de tonalidad y aspereza de ECMA.
¿En qué rango son válidas las curvas isofónicas de ISO 226:2023?
Sección titulada «¿En qué rango son válidas las curvas isofónicas de ISO 226:2023?»El apartado 4.1 de ISO 226:2023 define las curvas 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»- Ecma International. (2025). Psychoacoustic metrics for ITT equipment — Part 2 (methods for describing human perception based on the Sottek Hearing Model) (ECMA-418-2, 4.ª ed.). La sonoridad del modelo de Sottek (sone_HMS).
- 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 y la sensación de sonoridad que los modelos más nuevos refinan.
- 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 sonos 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. (2017). Acoustics — Methods for calculating loudness — Part 2: Moore-Glasberg method (ISO 532-2:2017). Sonoridad estacionaria a partir de patrones de excitación roex sobre la escala del número ERB, con suma binaural explícita.
- International Organization for Standardization. (2023). Acoustics — Methods for calculating loudness — Part 3: Moore-Glasberg-Schlittenlacher method (ISO 532-3:2023). Sonoridad variable en el tiempo de corto y largo plazo y el pico N_max.
- International Organization for Standardization. (2023). Acoustics — Normal equal-loudness-level contours (ISO 226:2023). El modelo de isófonas y los parámetros de la Tabla 1 que sustentan los niveles de sonoridad de tonos puros: las curvas isofónicas (Fórmula 1), el nivel de sonoridad de tonos puros (Fórmula 2) y el umbral de audición.