Electroacústica: distorsión y respuesta en frecuencia
Normas aplicables: IEC 60268AES17Recomendación UIT-R BS.468IEC 60263Referencias: Beranek y Mellow 2012Bendat y Piersol 2010
Dos pilares de la caracterización de equipos de audio, a partir de una señal
capturada: cuánto distorsiona un amplificador o un transductor un tono de
prueba, y qué respuesta en frecuencia revela una medición de entrada/salida.
Esta página cubre el conjunto de distorsión de la IEC 60268-3: distorsión
armónica total y de orden n, THD+N y SINAD a través del ancho de banda de
medición AES17, la intermodulación por órdenes de modulación y por frecuencia
diferencia, la intermodulación dinámica (DIM) y la THD ponderada ITU-R 468, y
los estimadores de respuesta en frecuencia H1/H2 de Bendat y
Piersol con la coherencia ordinaria γ². Toda magnitud tiene un oráculo
analítico exacto (señales sintéticas con amplitudes armónicas y de
intermodulación conocidas, un oráculo de Fourier de seno recortado, una
síntesis completa de la señal de ensayo DIM y un camino LTI conocido), así que
los valores son verificables y no ajustados. Las secciones finales cubren las
convenciones de sensibilidad de IEC 60268-4 (micrófonos) e IEC 60268-5
(altavoces), donde fallan la mayoría de las comparaciones entre hojas de
datos, el modelo de radiación del pistón con pantalla que hay detrás de la
directividad de los altavoces, y los informes de características nominales de
altavoz (IEC 60268-5) y micrófono (IEC 60268-4) que componen las hojas de
datos de las normas a partir de una respuesta medida.
1. Distorsión armónica (IEC 60268-3 14.12.2–5)
Sección titulada «1. Distorsión armónica (IEC 60268-3 14.12.2–5)»Un dispositivo no lineal alimentado con un seno puro en f₁ devuelve el
fundamental más armónicos en 2f₁, 3f₁, …. La distorsión armónica total
combina las amplitudes armónicas aₙ, ya sea respecto al fundamental
(kind='F') o respecto al RMS total (kind='R'):
dₙ es la distorsión armónica de orden n (el armónico n respecto al total). Los
tonos deben caer en las líneas de la FFT: usa muestreo coherente (un número
entero de periodos) o una ventana de baja fuga para leer las amplitudes sin
fuga espectral.
from phonometry import electroacoustics
thd_f = electroacoustics.thd(signal, fs, 1000.0, kind="F") # respecto al fundamentalthd_r = electroacoustics.thd(signal, fs, 1000.0, kind="R") # respecto al RMS totald2 = electroacoustics.harmonic_distortion(signal, fs, 1000.0, 2) # armónico de 2º ordenharmonic_analysis agrupa el fundamental, las amplitudes armónicas y la THD
(ambas convenciones), THD+N y SINAD en un único resultado representable:
from phonometry import electroacoustics
res = electroacoustics.harmonic_analysis(signal, fs, 1000.0)print(res.thd_f, res.thd_r, res.thd_plus_noise, res.sinad_db)res.plot() # espectro armónico anotado (necesita matplotlib)Ver el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import electroacoustics
fs = 48000n = fs # 1 s -> líneas de 1 Hz; los armónicos caen en líneast = np.arange(n) / fsf0 = 1000.0amps = {1: 1.0, 2: 0.02, 3: 0.012, 4: 0.006, 5: 0.003}sig = sum(a * np.sin(2 * np.pi * k * f0 * t) for k, a in amps.items())sig = sig + np.random.default_rng(2026).standard_normal(n) * 1.2e-2
res = electroacoustics.harmonic_analysis(sig, fs, f0, n_harmonics=len(amps))res.plot(language="es")plt.show()2. THD+N y SINAD (AES17-2015 6.3)
Sección titulada «2. THD+N y SINAD (AES17-2015 6.3)»Mientras que la THD cuenta solo los armónicos, la THD+N compara todo salvo
el fundamental (armónicos y ruido) con la señal total. AES17 elimina el
fundamental con un filtro de muesca normalizado (1,2 ≤ Q ≤ 3, validado sobre
la respuesta aplicada de fase cero según la cláusula 5.2.8) y toma la razón
entre el residuo y el RMS total; el SINAD es su recíproco en dB:
Ambas tensiones se miden a través del ancho de banda de medición AES17 (un paso
alto de 20 Hz más el paso bajo normalizado en 20 kHz, cláusulas 5.2.5 y 6.3.1)
de modo que un offset de continua o el ruido ultrasónico a frecuencias de
muestreo altas no cuentan como “ruido”. El borde de banda es configurable, y
bandwidth=None desactiva la cadena y mide toda la banda de Nyquist.
from phonometry import electroacoustics
ratio = electroacoustics.thd_plus_noise(signal, fs, 1000.0) # razón (0..)db = electroacoustics.thd_plus_noise(signal, fs, 1000.0, as_db=True) # 20·lg(razón) dBsinad_db = electroacoustics.sinad(signal, fs, 1000.0) # = -dbwide = electroacoustics.thd_plus_noise(signal, fs, 1000.0, bandwidth=None) # Nyquist completaComo la THD+N incluye el suelo de ruido en banda, es igual o mayor que la THD de
solo armónicos; el SINAD es el correspondiente margen señal-a-ruido-y-distorsión
en dB (una magnitud derivada de la THD+N de AES17; la propia AES17 no define el
SINAD). La muesca descarta internamente un transitorio de arranque/parada, así
que la medición requiere una captura estacionaria y suficientemente larga.
2.1 THD ponderada (IEC 60268-3 14.12.11)
Sección titulada «2.1 THD ponderada (IEC 60268-3 14.12.11)»weighted_thd pondera en frecuencia el residuo tras la muesca antes de tomar la
razón, de modo que se tiene en cuenta el énfasis perceptual de los productos de
distorsión. La ponderación por defecto es la red que exige la cláusula: la
curva del Apéndice A de la IEC 60268-1, es decir la ITU-R BS.468-4, con su pico
de +12,2 dB cerca de 6,3 kHz (expuesta como itu_r_468_weighting); 'A' y
'C' se mantienen como opciones etiquetadas. Según la cláusula, la medición
ponderada solo es válida para frecuencias fundamentales entre 31,5 Hz y 400 Hz:
from phonometry import electroacoustics
print(electroacoustics.weighted_thd(signal, fs, 100.0)) # red ITU-R 468print(electroacoustics.weighted_thd(signal, fs, 100.0, weighting="A")) # variante ponderada Aprint(electroacoustics.itu_r_468_weighting([6300.0])) # [+12.2] dB2.2 Rango dinámico y ruido de canal en reposo (AES17-2015 6.4)
Sección titulada «2.2 Rango dinámico y ruido de canal en reposo (AES17-2015 6.4)»Las dos cifras de catálogo de cualquier conversor comparten la ponderación
AES17 CCIR-RMS (5.2.7): la curva ITU-R BS.468-4 desplazada un valor plano de
-5,63 dB para que sea unidad a 2 kHz. El rango dinámico (6.4.1) excita el
dispositivo con un seno de 997 Hz 60 dB por debajo de plena escala, elimina la
fundamental con la muesca normalizada (5.2.8) y pondera el residuo de
ruido-más-distorsión, y luego informa de la razón del seno de plena escala a ese
residuo ponderado (también conocida como relación señal-ruido). El ruido de
canal en reposo (6.4.2) es el mismo nivel ponderado medido con el dispositivo
excitado por cero digital, referido a plena escala:
from phonometry import electroacoustics
# Rango dinámico: captura la salida del ensayo de 997 Hz a -60 dBFS, escalada# de modo que 1.0 sea plena escala digital.dr = electroacoustics.dynamic_range(output, fs, 997.0) # dB CCIR-RMS# Ruido de canal en reposo: captura la salida con entrada de cero digital.idle = electroacoustics.idle_channel_noise(idle_output, fs) # dBFS CCIR-RMSAmbas reutilizan la muesca y la curva ITU-R 468 de la cadena de THD+N, y ambas
se miden a través de la banda AES17 (un paso alto de 20 Hz más el paso bajo
normalizado en bandwidth). Como el filtro CCIR-RMS marca -5,63 dB a 1 kHz, un
tono de 1 kHz mide su propio dBFS menos 5,63 dB, lo que fija la ponderación con
exactitud.
3. Distorsión por intermodulación (IEC 60268-3 14.12.7–10)
Sección titulada «3. Distorsión por intermodulación (IEC 60268-3 14.12.7–10)»Cuando dos tonos atraviesan una no linealidad, laten entre sí y producen productos de suma y diferencia. La IEC 60268-3 normaliza tres ensayos, cada uno con su definición por órdenes:
- Distorsión de modulación (14.12.7): un tono grave grande
f_lowy un tono agudo pequeñof_high(preferiblemente 4:1). Los valores por orden son sumas aritméticas de las amplitudes de las bandas laterales respecto a la salida enf_high:d_m,2 = (a_{f₂+f₁} + a_{f₂−f₁})/a_{f₂}yd_m,3 = (a_{f₂+2f₁} + a_{f₂−2f₁})/a_{f₂}. El resultado también lleva el valorsmptede RMS combinado que reportan los analizadores tipo SMPTE (no es una magnitud IEC). - Distorsión por frecuencia diferencia (14.12.8): dos tonos agudos iguales
f₁ < f₂, referida aU_{2,ref} = 2·U_{2,f₂}(la suma de las amplitudes de ambos tonos):d_d,2 = a_{f₂−f₁}/(a_{f₁}+a_{f₂})y la suma aritméticad_d,3 = (a_{2f₂−f₁} + a_{2f₁−f₂})/(a_{f₁}+a_{f₂}). - Distorsión total por frecuencia diferencia (14.12.10): un ensayo de dos
tonos específico (
f₁ = 2f₀,f₂ = 3f₀ − δ; los tonos normalizados de 8 kHz y 11,95 kHz son los valores por defecto) donde solo cuentan los dos productos en banda enf₀ ∓ δ:d_TDFD = √(a²_{f₂−f₁} + a²_{2f₁−f₂}) / (a_{f₁} + a_{f₂}). - Intermodulación dinámica (DIM, 14.12.9): un seno de 15 kHz más una onda
cuadrada de 3,15 kHz filtrada en paso bajo (1:4 pico a pico). La DIM es el
RMS de los productos de intermodulación
|k·f_square ± f_sine|que caen por debajo def_sine(Tabla 2 de la IEC 60268-3), respecto a la amplitud del seno de 15 kHz (la definición de 14.12.9.1; el denominador impreso en 14.12.9.2 f) es un defecto editorial, véase la fe de erratas).
from phonometry import electroacoustics
md = electroacoustics.modulation_distortion(signal, fs, 60.0, 7000.0)print(md.d2, md.d3, md.smpte) # 14.12.7md.plot() # portadora y bandas laterales de modulación, d2/d3 anotadas (necesita matplotlib)dfd2 = electroacoustics.difference_frequency_distortion(signal, fs, 13e3, 14e3, order=2)tdfd = electroacoustics.total_difference_frequency_distortion(signal, fs) # 8/11,95 kHzdim = electroacoustics.dynamic_intermodulation_distortion(signal, fs) # DIM (15k/3,15k)El ModulationDistortionResult se puede dibujar: .plot() traza la amplitud
de salida en la portadora f₂ (la referencia de 0 dB) y las cuatro bandas
laterales de modulación en f₂ ± f₁ y f₂ ± 2f₁, la contraparte de
modulación del espectro armónico de la sección 1. La relación asimétrica entre
los pares n = 2 y n = 3 lee de un vistazo el equilibrio entre los términos
cuadrático y cúbico de la no linealidad:
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import electroacoustics
fs = 48000t = np.arange(fs) / fs # 1 s -> los tonos caen en bins de la FFTx = np.sin(2 * np.pi * 60.0 * t) + 0.25 * np.sin(2 * np.pi * 7000.0 * t)signal = x + 0.04 * x**2 + 0.012 * x**3 # salida de un dispositivo débilmente no lineal
md = electroacoustics.modulation_distortion(signal, fs, 60.0, 7000.0)md.plot(language="es")plt.show()4. Respuesta en frecuencia y coherencia (Bendat y Piersol)
Sección titulada «4. Respuesta en frecuencia y coherencia (Bendat y Piersol)»Dada una entrada x y la salida y de un dispositivo, la respuesta en
frecuencia H(f) se estima a partir de los autoespectros y el espectro cruzado
promediados con Welch. Bendat y Piersol (Random Data, 4ª ed.) dan dos
estimadores, que difieren en qué canal soporta el ruido, más la coherencia
ordinaria γ², la fracción de la potencia de salida explicada linealmente por
la entrada:
H1 es insesgado cuando el ruido está en la salida, y H2 cuando está en la
entrada; para un camino lineal sin ruido ambos recuperan la respuesta verdadera y
γ² = 1. El ruido aditivo a la salida sesga H2 al alza y baja la coherencia
hasta SNR/(1+SNR).
from phonometry import electroacoustics
res = electroacoustics.transfer_function(x, y, fs, estimator="H1")print(res.magnitude_db, res.phase, res.coherence)res.plot() # magnitud/fase de Bode + coherencia (necesita matplotlib)
freqs, gamma2 = electroacoustics.coherence(x, y, fs)La coherencia necesita promediarse sobre varios segmentos de Welch para ser
significativa; un único segmento da γ² ≡ 1 por construcción.
Ver el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom scipy import signal as spfrom phonometry import electroacoustics
fs = 48000n = 400000rng = np.random.default_rng(7)x = rng.standard_normal(n)b, a = sp.butter(2, [400.0, 4000.0], btype="band", fs=fs) # dispositivo bajo ensayoy = sp.lfilter(b, a, x)y = y + rng.standard_normal(n) * np.sqrt(np.mean(y ** 2)) * 0.05 # ruido de salida
res = electroacoustics.transfer_function(x, y, fs, estimator="H1")res.plot(language="es")plt.show()5. Convenciones de sensibilidad (IEC 60268-4 / IEC 60268-5)
Sección titulada «5. Convenciones de sensibilidad (IEC 60268-4 / IEC 60268-5)»Las cifras de distorsión y de respuesta solo son comparables entre dispositivos cuando coinciden las convenciones de sensibilidad que hay detrás, y dos convenciones hacen tropezar constantemente: el nivel de referencia del micrófono y la normalización de potencia y distancia del altavoz.
Micrófonos (IEC 60268-4, cláusula 11). La sensibilidad M es la tensión
de salida por unidad de presión acústica, expresada en mV/Pa; el nivel de
sensibilidad es LM = 20 lg(M / 1 V/Pa) dB, negativo para todo micrófono real
(un condensador de estudio de 50 mV/Pa queda en −26 dB re 1 V/Pa). El tropiezo
clásico es la referencia: −26 dB re 1 V/Pa y +34 dB re 1 mV/Pa son el mismo
micrófono, a 60 dB de distancia sobre el papel, así que un nivel de
sensibilidad sin su referencia no significa nada. La norma también distingue
sensibilidad de campo libre, de campo difuso y de presión; para la misma
cápsula divergen en alta frecuencia, de modo que el tipo declarado importa
tanto como el número.
Altavoces (IEC 60268-5, cláusula 20.3). La sensibilidad característica es la presión acústica producida a 1 m sobre el eje de referencia, en campo libre, referida a una entrada de 1 W en la impedancia nominal; expresada como nivel re 20 µPa (cláusula 20.4) es el familiar «dB @ 1 W/1 m». En esa frase se esconden dos normalizaciones:
- La eléctrica. La tensión de ensayo es
Up = √(R · 1 W), numéricamente√R: 2,83 V en una impedancia nominal de 8 Ω. Una hoja de datos que anuncia «dB @ 2,83 V/1 m» para un altavoz de 4 Ω le está entregando 2 W, lo que infla la cifra en 3 dB frente a una calificación verdadera de 1 W/1 m; comprueba la impedancia nominal antes de comparar. - La geométrica. 1 m es una distancia de referencia, no necesariamente
la de medición. La norma manda medir en campo lejano (a 0,5 m o a un número
entero de metros, cláusula 7.1) y referir el resultado con la ley de la
distancia inversa,
Lp(1 m) = Lp(r) + 20 lg(r / 1 m). Ese escalado solo vale donde el nivel cae de verdad 6 dB por duplicación de distancia, de ahí el campo libre del diagrama; a 1 m de una caja multivía grande puede que el campo cercano aún no haya terminado, y la cifra «a 1 m» es entonces una magnitud referida, no lo que leería un micrófono colocado a 1 m.
6. Pistón radiante: impedancia de radiación y directividad
Sección titulada «6. Pistón radiante: impedancia de radiación y directividad»El pistón circular rígido en pantalla infinita es el radiador canónico tras un cono de altavoz, el extremo abierto de un conducto y la eficiencia de radiación de cualquier superficie vibrante finita (Beranek y Mellow §4.19, §13.7). Su impedancia mecánica de radiación es con y las funciones adimensionales de resistencia y reactancia (Ecs. (13.117), (13.118))
donde es la función de Bessel y la de Struve de orden uno. A baja frecuencia y la reactancia es de tipo másico con la masa de radiación (Ec. (4.151)); a alta frecuencia , y el pistón radia como en un tubo infinito. El campo lejano sigue la directividad , cuyo primer nulo está en .
import numpy as npfrom phonometry import radiating_piston
res = radiating_piston(radius=0.1, frequencies=np.geomspace(20, 20000, 200), angles=np.linspace(0.0, np.pi / 2, 91))print(round(res.radiation_mass, 4)) # 8 rho a^3 / 3, kgprint(round(float(res.directivity_index[0]), 2)) # 3.01 dB, límite de semiespaciores.plot() # R1 y X1 vs kaEl .plot() del resultado es la figura clásica de impedancia de Beranek y
Mellow calculada para este pistón: por debajo de ka ≈ 1 la carga es casi
puramente de tipo masa (X₁ domina y R₁ ∝ (ka)², el régimen en el que la
salida de un altavoz está limitada por rigidez y masa), y por encima la
resistencia se asienta en ρcS con rizados de interferencia mientras la
reactancia se desvanece.
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import radiating_piston
res = radiating_piston(radius=0.075, frequencies=np.geomspace(20, 20000, 400))res.plot(language="es") # R1 y X1 normalizadas frente a kaplt.show()radiating_piston devuelve un RadiatingPistonResult con la resistance y
reactance normalizadas, la radiation_resistance/radiation_reactance
mecánicas, la radiation_mass, el directivity_index, el patrón de campo lejano
directivity (cuando se dan angles) y .plot(). Los bloques
piston_resistance, piston_reactance y piston_directivity también son
invocables directamente. El pistón es el modelo de radiador complementario de los
silenciadores de control de ruido industrial.
El patrón de directividad es, por sí mismo, un resultado representable:
piston_directivity_pattern(ka) muestrea para uno o varios valores
de y devuelve un PistonDirectivity (la malla de ángulos polares, la
directivity lineal y su forma en dB directivity_db, y los valores de ka),
cuyo .plot() dibuja el diagrama de haz clásico. Varios se muestran como
una familia sobre los mismos ejes polares, de modo que el estrechamiento del
lóbulo principal y la aparición de los lóbulos secundarios se leen de un vistazo:
from phonometry import piston_directivity_pattern
pattern = piston_directivity_pattern([3.0, 8.0, 16.0])print(pattern.directivity_db.shape) # (3, 361): una fila por kapattern.plot() # diagrama de haz polar en dB (necesita matplotlib)Mostrar el código de esta figura
import matplotlib.pyplot as pltfrom phonometry import piston_directivity_pattern
piston_directivity_pattern([3.0, 8.0, 16.0]).plot(language="es")plt.show()7. Informe de características del altavoz (IEC 60268-5)
Sección titulada «7. Informe de características del altavoz (IEC 60268-5)»Las características nominales que IEC 60268-5 define en torno a una respuesta en el eje medida se reúnen en un único resultado de características del altavoz que representa la ficha de características nominales de la norma. Dos de los números se calculan a partir de la respuesta en lugar de solo repetirse:
- Nivel de sensibilidad característica (20.3/20.4). El nivel en el eje promediado en una banda declarada, referido a 1 W en la impedancia nominal a 1 m: con . La excitación por defecto es ese (2,83 V en 8 Ω), de modo que con una respuesta a 1 m el nivel de sensibilidad es la media de banda.
- Rango de frecuencias efectivo (21.2). La banda en la que la respuesta se mantiene dentro de 10 dB del nivel promediado en la banda de una octava en la región de máxima sensibilidad; los valles más estrechos que 1/9 de octava se desprecian.
import numpy as npfrom phonometry import loudspeaker_characteristics, radiating_piston, ReportMetadata
freqs = np.geomspace(30, 24000, 320)spl = 87.0 + 1.2 * np.sin(2 * np.log2(freqs / 900.0))spl -= 10 * np.log10(1 + (50.0 / freqs) ** 6) # caída en baja frecuenciaspl -= 10 * np.log10(1 + (freqs / 16000.0) ** 7) # caída en alta frecuencia
result = loudspeaker_characteristics( freqs, spl, rated_impedance=8.0, sensitivity_band=(200.0, 4000.0), impedance=(np.geomspace(20, 20000, 260), 6.6 + 24 * np.exp(-(np.log2(np.geomspace(20, 20000, 260) / 52.0) ** 2) / 0.12)), distortion=(np.geomspace(50, 5000, 140), 0.3 + 2.6 * np.exp(-(np.log2(np.geomspace(50, 5000, 140) / 70.0) ** 2) / 0.45)), directivity=radiating_piston(0.075, np.array([1000.0, 2000.0, 4000.0]), angles=np.radians(np.linspace(0, 90, 46))), polar_frequency=2000.0,)print(round(result.sensitivity_level_db, 1)) # dB, 1 W / 1 mprint(tuple(round(x) for x in result.effective_range)) # Hz
result.report("altavoz.pdf", metadata=ReportMetadata(measurement_standard="IEC 60268-5"), language="es")loudspeaker_characteristics devuelve un LoudspeakerCharacteristics con el
sensitivity_level_db, el effective_range, el reference_level_db, la
characteristic_sensitivity_pa y la minimum_impedance calculados, y un
.report() que escribe la ficha. La respuesta en el eje se dibuja con su banda
de tolerancia y los marcadores del rango efectivo según la proporción de
IEC 60263 (una década de frecuencia igual a 25 dB), y la directividad polar
sobre el círculo de referencia de 25 dB de IEC 60263. El módulo de impedancia
(con la línea del 80 % de la nominal), la curva de distorsión armónica total y
la directividad alimentan los paneles secundarios, reutilizando la directividad
del pistón radiante
de la sección 6 y un resultado de
distorsión con barrido sinusoidal
para la curva de distorsión.
Las características nominales también están disponibles de forma interactiva
mediante .plot(), que dibuja un concepto por figura con el mismo código de
paneles que compone el informe, seleccionado con quantity. Al pasar unos ejes
se dibuja sobre ellos:
result.plot() # respuesta en el eje (por defecto)result.plot(quantity="impedance") # módulo |Z| con las líneas nominal / 80 %result.plot(quantity="thd") # distorsión armónica total vs frecuenciaresult.plot(quantity="directivity") # respuesta polar sobre el círculo de 25 dBVer el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import loudspeaker_characteristics
freqs = np.geomspace(30, 24000, 320)spl = 87.0 + 1.2 * np.sin(2 * np.log2(freqs / 900.0))spl -= 10 * np.log10(1 + (50.0 / freqs) ** 6) # caída en baja frecuenciaspl -= 10 * np.log10(1 + (freqs / 16000.0) ** 7) # caída en alta frecuencia
result = loudspeaker_characteristics(freqs, spl, rated_impedance=8.0, sensitivity_band=(200.0, 4000.0))result.plot(language="es") # quantity="response" (por defecto)plt.show()Ver el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import loudspeaker_characteristics
freqs = np.geomspace(30, 24000, 320)spl = 87.0 - 10 * np.log10(1 + (50.0 / freqs) ** 6)fz = np.geomspace(20, 20000, 260)
result = loudspeaker_characteristics( freqs, spl, rated_impedance=8.0, sensitivity_band=(200.0, 4000.0), impedance=(fz, 6.6 + 24 * np.exp(-(np.log2(fz / 52.0) ** 2) / 0.12)),)result.plot(quantity="impedance", language="es")plt.show()Ver el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import loudspeaker_characteristics
freqs = np.geomspace(30, 24000, 320)spl = 87.0 - 10 * np.log10(1 + (50.0 / freqs) ** 6)thd_f = np.geomspace(50, 5000, 140)
result = loudspeaker_characteristics( freqs, spl, rated_impedance=8.0, sensitivity_band=(200.0, 4000.0), distortion=(thd_f, 0.3 + 2.6 * np.exp(-(np.log2(thd_f / 70.0) ** 2) / 0.45)),)result.plot(quantity="thd", language="es")plt.show()Ver el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import loudspeaker_characteristics, radiating_piston
freqs = np.geomspace(30, 24000, 320)spl = 87.0 - 10 * np.log10(1 + (50.0 / freqs) ** 6)
result = loudspeaker_characteristics( freqs, spl, rated_impedance=8.0, sensitivity_band=(200.0, 4000.0), directivity=radiating_piston(0.075, np.array([1000.0, 2000.0, 4000.0]), angles=np.radians(np.linspace(0, 90, 46))), polar_frequency=2000.0,)result.plot(quantity="directivity", language="es")plt.show()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 características nominales del altavoz IEC 60268-5 de una página: una cabecera con el fabricante y el modelo, la tabla de características nominales (impedancia nominal, sensibilidad característica, rangos de frecuencia efectivo y nominal, frecuencia de resonancia, potencias nominales, impedancia mínima e índice de directividad) junto a la respuesta en frecuencia en el eje con su banda de tolerancia y los marcadores del rango efectivo, y los paneles de impedancia, distorsión armónica total y directividad polar, todos trazados según las convenciones de escala de IEC 60263.
8. Informe de características del micrófono (IEC 60268-4)
Sección titulada «8. Informe de características del micrófono (IEC 60268-4)»El compañero de micrófono de la sección 7: las características nominales que IEC 60268-4 define en torno a una respuesta en frecuencia de campo libre medida se reúnen en un único resultado de características del micrófono que representa la ficha de características nominales de la norma. Cuatro de los números se calculan a partir de las propias definiciones de la norma en lugar de solo repetirse:
- Nivel de sensibilidad (11.1). La sensibilidad nominal en campo libre (mV/Pa, a la frecuencia de referencia de 1 kHz de 11.3) como nivel, : 12,5 mV/Pa son dB re 1 V/Pa.
- Rango de frecuencias efectivo (12.2). La banda en la que la respuesta, normalizada a 0 dB en la frecuencia de referencia, se mantiene dentro de la tolerancia declarada; los bordes son los cruces interpolados con la tolerancia.
- Índice de directividad (13.2.2). con la sensibilidad de campo difuso de la integral de 11.2.2 a) sobre un diagrama con simetría de revolución; el cardioide ideal devuelve dB.
- Nivel de ruido equivalente (17.2). La tensión de ruido inherente ponderada sobre la sensibilidad nominal como nivel de presión acústica, , con la relación señal-ruido re 1 Pa (94 dB SPL) derivada de él. El nivel de presión acústica de sobrecarga (15.2) se lee de una curva de distorsión frente a nivel en el límite de THD declarado.
import numpy as npfrom phonometry import microphone_characteristics, ReportMetadata
freqs = np.geomspace(20, 20000, 400)response = -10 * np.log10(1 + (30.0 / freqs) ** 4) # caída en baja frecuenciaresponse -= 10 * np.log10(1 + (freqs / 19000.0) ** 8) # caída en alta frecuenciaresponse += 2.0 * np.exp(-(np.log2(freqs / 9000.0) ** 2) / 0.3) # región de presencia
angles = np.linspace(0, 179, 359)cardioid = 20 * np.log10((1 + np.cos(np.radians(angles))) / 2)
result = microphone_characteristics( freqs, response, 12.5, tolerance_db=3.0, # 12,5 mV/Pa a 1 kHz rated_impedance=150.0, minimum_load_impedance=1000.0, noise_voltage=1.25e-6, # ponderada A, V max_spl_thd_percent=0.5, distortion=(np.linspace(100, 140, 81), 0.5 * 10 ** ((np.linspace(100, 140, 81) - 130.0) * 0.08)), polar=(angles, cardioid), polar_frequency=1000.0, powering="Phantom P48 (IEC 61938)", supply_current_ma=3.1,)print(round(result.sensitivity_level_db, 1)) # -38,1 dB re 1 V/Paprint(tuple(round(x) for x in result.effective_range)) # Hzprint(round(result.directivity_index_db, 1)) # 4,8 dB (cardioide)print(round(result.equivalent_noise_level_db, 1)) # dB(A)
result.report("microfono.pdf", metadata=ReportMetadata(measurement_standard="IEC 60268-4"), language="es")microphone_characteristics devuelve un MicrophoneCharacteristics con el
sensitivity_level_db, el effective_range, el directivity_index_db, el
equivalent_noise_level_db, el max_spl_db, la signal_to_noise_ratio_db y
el diffuse_field_sensitivity_level_db calculados, y un .report() que
escribe la ficha. La respuesta de campo libre se dibuja con su banda de
tolerancia, el marcador de la frecuencia de referencia y los marcadores del
rango efectivo según la proporción de IEC 60263 (una década de frecuencia igual
a 25 dB), y el diagrama direccional sobre el círculo de referencia de 25 dB de
IEC 60263; el espectro de ruido inherente y la curva de distorsión frente a
nivel (con el límite de THD y el nivel de sobrecarga marcados) alimentan los
paneles secundarios. Un requirement en los metadatos se comprueba como nivel
de ruido equivalente máximo permitido.
Las características nominales también están disponibles de forma interactiva
mediante .plot(), que dibuja un concepto por figura con el mismo código de
paneles que compone el informe, seleccionado con quantity. Al pasar unos ejes
se dibuja sobre ellos:
result.plot() # respuesta de campo libre (por defecto)result.plot(quantity="directivity") # diagrama polar sobre el círculo de 25 dBresult.plot(quantity="noise") # espectro de banda del ruido inherenteresult.plot(quantity="distortion") # THD frente al nivel de presión acústicaVer el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import microphone_characteristics
freqs = np.geomspace(20, 20000, 400)response = -10 * np.log10(1 + (30.0 / freqs) ** 4) # caída en baja frecuenciaresponse -= 10 * np.log10(1 + (freqs / 19000.0) ** 8) # caída en alta frecuenciaresponse += 2.0 * np.exp(-(np.log2(freqs / 9000.0) ** 2) / 0.3) # región de presencia
result = microphone_characteristics(freqs, response, 12.5, tolerance_db=3.0)result.plot(language="es") # quantity="response" (por defecto)plt.show()Ver el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import microphone_characteristics
freqs = np.geomspace(20, 20000, 400)response = -10 * np.log10(1 + (30.0 / freqs) ** 4)angles = np.linspace(0, 179, 359)cardioid = 20 * np.log10((1 + np.cos(np.radians(angles))) / 2)
result = microphone_characteristics( freqs, response, 12.5, tolerance_db=3.0, polar=(angles, cardioid), polar_frequency=1000.0,)result.plot(quantity="directivity", language="es")plt.show()Ver el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import microphone_characteristics
freqs = np.geomspace(20, 20000, 400)response = -10 * np.log10(1 + (30.0 / freqs) ** 4)noise_f = np.geomspace(20, 20000, 31)
result = microphone_characteristics( freqs, response, 12.5, tolerance_db=3.0, noise_voltage=1.25e-6, noise_spectrum=(noise_f, 6.0 + 12.0 * np.log10(1000.0 / noise_f)),)result.plot(quantity="noise", language="es")plt.show()Ver el código de esta figura
import matplotlib.pyplot as pltimport numpy as npfrom phonometry import microphone_characteristics
freqs = np.geomspace(20, 20000, 400)response = -10 * np.log10(1 + (30.0 / freqs) ** 4)spl_axis = np.linspace(100, 140, 81)
result = microphone_characteristics( freqs, response, 12.5, tolerance_db=3.0, max_spl_thd_percent=0.5, distortion=(spl_axis, 0.5 * 10 ** ((spl_axis - 130.0) * 0.08)),)result.plot(quantity="distortion", language="es")plt.show()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 características nominales del micrófono IEC 60268-4 de una página: una cabecera con el fabricante y el modelo, la tabla de características nominales (sensibilidad en campo libre en mV/Pa y su nivel re 1 V/Pa, rango de frecuencias efectivo, impedancias nominal y de carga mínima, nivel de ruido equivalente, relación señal-ruido, SPL máximo en el límite de THD declarado, índice de directividad y alimentación phantom) junto a la respuesta en frecuencia de campo libre con su banda de tolerancia y los marcadores del rango efectivo, y los paneles de diagrama direccional, espectro de ruido inherente y distorsión, todos trazados según las convenciones de escala de IEC 60263.
Qué cubre esta guía
Sección titulada «Qué cubre esta guía»Cubierto. El conjunto de distorsión de IEC 60268-3 (cláusulas
14.12.2-14.12.11): THD_F y THD_R (thd), la distorsión armónica de orden n
(harmonic_distortion), THD+N y SINAD a través del ancho de banda de
medición de AES17-2015 (harmonic_analysis, cláusulas 5.2.5/5.2.8/6.3.1 de
AES17), la intermodulación por modulación y por frecuencia diferencia, la
intermodulación dinámica (DIM) y la THD ponderada ITU-R BS.468-4, además del
margen dinámico y el ruido de canal en reposo de AES17-2015. Los
estimadores de respuesta en frecuencia H1/H2 de Bendat y Piersol y la
coherencia ordinaria. Las características nominales de micrófono de la
IEC 60268-4:2014 (sensibilidad, respuesta y rango de frecuencias, índice de
directividad, nivel de sobrecarga, nivel de ruido equivalente, impedancias y
alimentación) mediante microphone_characteristics y su .report(). Las
características nominales de altavoz de la IEC 60268-5:2003+A1:2007
(sensibilidad, rango de frecuencias, índice de directividad, THD frente a
frecuencia) mediante loudspeaker_characteristics y su .report(), ambas
trazadas según las convenciones de escala de la IEC 60263. El modelo de
radiación de pistón con bafle (radiating_piston, Beranek y Mellow
§4.19/§13.7).
No cubierto. Otras partes de la serie IEC 60268 quedan fuera de esta página: la Parte 16 (inteligibilidad objetiva del habla, el índice de transmisión del habla) no está implementada. Las ediciones implementadas están fijadas en IEC 60268-4:2014, IEC 60268-5:2003+A1:2007 y AES17-2015; las revisiones sucesoras IEC 60268-4:2018 y AES17-2020 no son las comprobadas.
Véase también
Sección titulada «Véase también»- Control de ruido industrial: silenciadores reactivos, métodos HVAC de conducto y cerramientos de máquina, que comparten el pistón radiante como radiador canónico.
- Distorsión con barrido sinusoidal: la separación armónica de Farina/Novak cuya THD(f) alimenta el panel de distorsión del altavoz.
- Referencia de la API:
electroacoustics.distortion,electroacoustics.frequency_response,electroacoustics.piston,electroacoustics.loudspeakeryelectroacoustics.microphone.
Referencias
Sección titulada «Referencias»- Audio Engineering Society. (2015). AES standard method for digital audio engineering — Measurement of digital audio equipment (AES17-2015). Cláusulas 5.2.5, 5.2.8 y 6.3.1: la razón THD+N mediante el filtro de muesca normalizado y el ancho de banda de medición normalizado; el SINAD se deriva de ella. Revisada después como AES17-2020 (misma página de catálogo); la edición de 2015 es la implementada.
- Bendat, J. S. y Piersol, A. G. (2010). Random data: Analysis and measurement procedures (4.ª ed.). Wiley. https://doi.org/10.1002/9781118032428ISBN 978-0-470-24877-5. Los estimadores de respuesta en frecuencia H1 y H2 y la coherencia ordinaria γ² de la sección 4.
- Beranek, L. L. y Mellow, T. J. (2012). Acoustics: Sound fields and transducers. Academic Press. https://doi.org/10.1016/C2011-0-05897-0ISBN 978-0-12-391421-7. La física de transductores que sustenta la sección 5: radiación del altavoz, presión en el eje y la transición de campo cercano a campo lejano.
- International Electrotechnical Commission. (1982). Scales and sizes for plotting frequency characteristics and polar diagrams (IEC 60263:1982). Las proporciones de escala de las gráficas características de la sección 7: una década de frecuencia igual a 25 dB en la ordenada (cláusula 2) y el diagrama polar trazado sobre un radio de círculo de referencia de 25 dB (cláusula 3).
- International Electrotechnical Commission. (2003). Sound system equipment – Part 5: Loudspeakers (IEC 60268-5:2003+A1:2007). Las características nominales de altavoz de la sección 7: la impedancia nominal (16), el rango de frecuencias nominal (19.1), la sensibilidad característica y su nivel referido a 1 W a 1 m (20.3/20.4), el rango de frecuencias efectivo frente a la banda de -10 dB (21.2), el índice de directividad (23.3) y la distorsión armónica total frente a la frecuencia (24.1).
- International Electrotechnical Commission. (2013). Sound system equipment – Part 3: Amplifiers (IEC 60268-3:2013). Cláusulas 14.12.2-14.12.11: distorsión armónica total THD_F/THD_R (la fórmula de 14.12.3.2 define la forma R), distorsión armónica de orden n d_n, la intermodulación por órdenes de modulación (d_m,n) y por frecuencia diferencia (d_d,n), distorsión total por frecuencia diferencia, intermodulación dinámica (DIM) y la THD ponderada ITU-R BS.468-4 / IEC 60268-1.
- International Electrotechnical Commission. (2014). Sound system equipment – Part 4: Microphones (IEC 60268-4:2014). Las características nominales de micrófono de las secciones 5 y 8: la sensibilidad en campo libre y su nivel re 1 V/Pa (11.1/11.3), la respuesta en frecuencia y el rango de frecuencias efectivo (12.1/12.2), el diagrama direccional y el índice de directividad mediante la integral de campo difuso de 11.2.2 a) (13.1/13.2), el nivel de presión acústica de sobrecarga (15.2), el nivel de presión acústica equivalente debido al ruido inherente (17) y las impedancias nominales y la alimentación (9/10). Revisada después como IEC 60268-4:2018 (misma página de catálogo); la edición implementada es la de 2014.
- International Telecommunication Union. (1986). Measurement of audio-frequency noise voltage level in sound broadcasting (Recomendación UIT-R BS.468-4). La respuesta nominal de la red de ponderación detrás de la THD ponderada (la curva del Apéndice A de IEC 60268-1).