---
title: "Referencia de la API"
description: "Todas las funciones y clases públicas de phonometry."
---

Toda la funcionalidad principal puede importarse directamente del paquete
`phonometry`.

| Nombre | Tipo | Descripción (entradas) | Uso (salidas) |
| :--- | :--- | :--- | :--- |
| `octave_filter` | `función` | **Análisis de alto nivel.**<br>• `x`: array de señal<br>• `fs`: frecuencia de muestreo [Hz]<br>• `fraction`: 1, 3, etc. (def.: 1)<br>• `order`: orden del filtro (def.: 6)<br>• `limits`: [f_min, f_max] (def.: [12, 20000])<br>• `filter_type`: 'butter', 'cheby1', 'cheby2', 'ellip', 'bessel' (def.: 'butter')<br>• `sigbands`: devolver señales por banda (def.: False)<br>• `detrend`: eliminar offset DC (def.: True)<br>• `calibration_factor`: multiplicador de sensibilidad (def.: 1.0)<br>• `dbfs`: salida en dBFS en lugar de dB SPL (def.: False)<br>• `mode`: 'rms' o 'peak' (def.: 'rms')<br>• `nominal`: etiquetas nominales IEC 61260-1 (def.: False)<br>• `show` / `plot_file`: gráfica de respuesta<br>• `ripple`: rizado de banda de paso [dB] (cheby1/ellip)<br>• `attenuation`: atenuación de banda atenuada [dB] (def.: 72; cheby2/ellip — cheby2 requiere >= 70 dB para clase 1) | `spl, freq = octave_filter(x, fs, ...)`<br>• `spl`: niveles [dB]<br>• `freq`: frecuencias [Hz]<br><br>**Con `sigbands=True`:**<br>`spl, freq, xb = octave_filter(x, fs, sigbands=True)`<br>• `xb`: lista de señales filtradas (una por banda)<br><br>**Uso calibrado:**<br>`spl, f = octave_filter(x, fs, calibration_factor=0.05)` |
| `OctaveFilterBank` | `clase` | **Banco eficiente reutilizable.**<br>• `fs`: frecuencia de muestreo [Hz]<br>• `fraction`: 1, 3, etc.<br>• `order`: orden del filtro<br>• `limits`: [f_min, f_max] (def.: [12, 20000])<br>• `filter_type`: arquitectura<br>• `show` / `plot_file`: gráfica de respuesta<br>• `calibration_factor`: multiplicador de sensibilidad<br>• `dbfs`: usar dBFS (def.: False)<br>• `stateful`: conservar estado entre llamadas (def.: False)<br>• `steady_ic`: condiciones iniciales de régimen permanente (def.: False)<br>• `resample`: diezmado multitasa (def.: True)<br>• `ripple` / `attenuation`: parámetros de diseño [dB] (`attenuation` def.: 72; cheby2 requiere >= 70 dB para clase 1) | `bank = OctaveFilterBank(fs=48000, fraction=3, order=6, filter_type='butter')`<br>`spl, f = bank.filter(x, sigbands=False, mode='rms', detrend=True, zero_phase=False)`<br><br>• `bank.freq` / `bank.freq_d` / `bank.freq_u` / `bank.sos`: propiedades calculadas |
| `OctaveFilterBank.spectrogram` | `método` | **Niveles por banda vs tiempo.**<br>• `x`: array de señal (1D o 2D)<br>• `window_time`: longitud de ventana [s] (def.: 0.125)<br>• `overlap`: fracción en [0, 1) (def.: 0.5)<br>• `mode`: 'rms' o 'peak'<br>• `zero_phase`: ventanas sin retardo de grupo (def.: False) | `levels, freq, times = bank.spectrogram(x)`<br><br>• `levels`: (bandas, ventanas) o (canales, bandas, ventanas)<br>• `times`: centros de ventana [s] |
| `weighting_filter` | `función` | **Ponderación acústica.**<br>• `x`: array de señal<br>• `fs`: frecuencia de muestreo [Hz]<br>• `curve`: 'A', 'C', 'G' (infrasonido ISO 7196) o 'Z' (def.: 'A')<br>• `high_accuracy`: precisión clase 1 en HF por sobremuestreo interno (def.: True) | `y = weighting_filter(x, fs, curve='A')`<br><br>• `y`: señal ponderada |
| `WeightingFilter` | `clase` | **Filtro de ponderación reutilizable.**<br>• `fs`: frecuencia de muestreo [Hz]<br>• `curve`: 'A', 'C', 'G' o 'Z'<br>• `stateful`: procesado por bloques (def.: False)<br>• `steady_ic`: condiciones iniciales de régimen permanente (def.: False)<br>• `high_accuracy`: True por defecto salvo en stateful | `wf = WeightingFilter(fs, 'A')`<br>`y = wf.filter(x)` |
| `time_weighting` | `función` | **Captura de energía.**<br>• `x`: señal cruda (se eleva al cuadrado internamente; el tiempo es el último eje)<br>• `fs`: frecuencia de muestreo [Hz]<br>• `mode`: 'fast', 'slow' o 'impulse'<br>• `initial_state`: None, 'zero', 'first', escalar o array (def.: None) | `env = time_weighting(x, fs, mode='fast')`<br><br>• `env`: envolvente de energía (valor cuadrático medio), misma forma que `x` |
| `TimeWeighting` | `clase` | **Ponderación temporal con estado.**<br>• `fs`: frecuencia de muestreo [Hz]<br>• `mode`: 'fast', 'slow', 'impulse' (def.: 'fast') | `tw = TimeWeighting(fs, mode='fast')`<br>`env = tw.process(block)` por bloque<br>`tw.reset()` para reiniciar |
| `leq` | `función` | **Nivel equivalente (Leq).**<br>• `x`: array de señal (1D o 2D)<br>• `calibration_factor`: multiplicador de sensibilidad (def.: 1.0)<br>• `dbfs`: salida en dBFS (def.: False) | `level = leq(x, calibration_factor=s)`<br><br>• `level`: escalar (1D) o array por canal (2D) |
| `laeq` | `función` | **Leq ponderado A (LAeq).**<br>• `x`: array de señal (1D o 2D)<br>• `fs`: frecuencia de muestreo [Hz]<br>• `calibration_factor` / `dbfs`: como `leq` | `level = laeq(x, fs, calibration_factor=s)`<br><br>• `level`: escalar (1D) o array por canal (2D) |
| `ln_levels` | `función` | **Niveles estadísticos (LN).**<br>• `x`: array de señal (1D o 2D)<br>• `fs`: frecuencia de muestreo [Hz]<br>• `n`: percentiles de excedencia (def.: (10, 50, 90))<br>• `mode`: 'fast', 'slow', 'impulse' (def.: 'fast')<br>• `weighting`: 'A', 'C', 'G', 'Z' o None (def.: None)<br>• `calibration_factor` / `dbfs`: como `leq` | `stats = ln_levels(x, fs, n=(10, 50, 90), weighting='A')`<br><br>• `stats`: dict `{10: L10, 50: L50, 90: L90}` |
| `lc_peak` | `función` | **Pico ponderado C (LCpeak).**<br>• `x`: array de señal (1D o 2D)<br>• `fs`: frecuencia de muestreo [Hz]<br>• `calibration_factor`: como `leq`<br>• `dbfs`: 0 dBFS = *pico* a fondo de escala (amplitud 1,0), a diferencia de la referencia RMS de `leq`<br>• `oversample`: recupera picos inter-muestra en HF (def.: 8; 1 = en rejilla, subestima hasta ~1,15 dB a 48 kHz) | `peak = lc_peak(x, fs)`<br><br>• IEC 61672-1 §5.13; verificado contra la Tabla 5 |
| `sel` | `función` | **Nivel de exposición sonora (SEL/LAE).**<br>• `x`: señal del evento completo (1D o 2D)<br>• `fs`: frecuencia de muestreo [Hz]<br>• `weighting`: 'A', 'C', 'G', 'Z' o None (def.: None)<br>• `calibration_factor` / `dbfs`: como `leq` | `lae = sel(x, fs, weighting='A')`<br><br>• Nivel del evento normalizado a 1 s |
| `sound_exposure` | `función` | **Exposición sonora E (IEC 61252).**<br>• `x`: señal (1D o 2D)<br>• `fs`: frecuencia de muestreo [Hz]<br>• `duration_hours`: periodo de exposición representado (def.: duración de la grabación)<br>• `calibration_factor` | `E = sound_exposure(x, fs, duration_hours=8)`<br><br>• `E`: Pa²·h |
| `lex_8h` | `función` | **Exposición diaria LEX,8h / LEP,d.**<br>• Mismos parámetros que `sound_exposure` | `lex = lex_8h(x, fs, duration_hours=4)`<br><br>• Nivel normalizado a 8 h [dB] |
| `loudness_zwicker` | `función` | **Sonoridad de Zwicker (ISO 532-1:2017).**<br>• `x`: señal calibrada en Pa (1D)<br>• `fs`: frecuencia de muestreo [Hz]<br>• `field`: 'free' o 'diffuse' (def.: 'free')<br>• `stationary`: método estacionario del apartado 5 (def.: False)<br>• `calibration_factor`: unidades digitales a Pa (def.: 1.0) | `res = loudness_zwicker(x, fs)`<br><br>• `ZwickerLoudness`; los análisis variables en el tiempo añaden N5/N10 y la traza N(t) a 500 Hz |
| `loudness_zwicker_from_spectrum` | `función` | **Sonoridad estacionaria desde niveles de banda.**<br>• `levels`: 28 niveles de tercio de octava, 25 Hz–12,5 kHz [dB SPL]<br>• `field`: 'free' o 'diffuse' (def.: 'free') | `res = loudness_zwicker_from_spectrum(levels)`<br><br>• `res.loudness` [sonos], `res.loudness_level` [fonios] |
| `ZwickerLoudness` | `dataclass` | **Resultado de sonoridad.**<br>• `loudness`: N [sonos]<br>• `loudness_level`: LN [fonios]<br>• `specific`: N′(z), 240 bins de 0,1 Bark<br>• `n5` / `n10`: sonoridad percentil (solo variable en el tiempo)<br>• `time` / `loudness_vs_time`: traza a 500 Hz | `res.loudness, res.n5`<br><br>• Los campos temporales son `None` en resultados estacionarios |
| `sharpness_din` | `función` | **Sharpness en acum (DIN 45692).**<br>• `x`: señal (1D)<br>• `fs`: frecuencia de muestreo [Hz]<br>• `field`: 'free' o 'diffuse' (def.: 'free')<br>• `method`: 'din', 'aures' o 'bismarck' (def.: 'din')<br>• `calibration_factor`: unidades digitales a Pa (def.: 1.0) | `s = sharpness_din(x, fs)`<br><br>• `s`: sharpness [acum] |
| `sharpness_din_from_specific` | `función` | **Sharpness desde un patrón de sonoridad específica.**<br>• `specific`: N′(z), 240 valores a 0,1 Bark (p. ej. `ZwickerLoudness.specific`)<br>• `method`: 'din', 'aures' o 'bismarck' (def.: 'din') | `s = sharpness_din_from_specific(res.specific)`<br><br>• `s`: sharpness [acum] |
| `loudness_moore_glasberg` | `función` | **Sonoridad de Moore-Glasberg (ISO 532-2:2017).**<br>• `x`: señal calibrada en Pa (1D)<br>• `fs`: frecuencia de muestreo [Hz]<br>• `field`: 'free', 'diffuse' o 'eardrum' (def.: 'free')<br>• `presentation`: 'binaural'/'diotic' o 'monaural' (def.: 'binaural') | `res = loudness_moore_glasberg(x, fs)`<br><br>• `MooreGlasbergLoudness` (patrón de excitación roex) |
| `loudness_moore_glasberg_from_spectrum` | `función` | **Sonoridad exacta desde componentes sinusoidales (ISO 532-2 §5.2/5.4).**<br>• `components`: secuencia de pares (frecuencia [Hz], nivel [dB SPL])<br>• `field`: 'free'/'diffuse'/'eardrum' (def.: 'free')<br>• `presentation`: (def.: 'binaural') | `res = loudness_moore_glasberg_from_spectrum([(1000.0, 40.0)])`<br><br>• 1 kHz/40 dB → 1.000 sono |
| `loudness_moore_glasberg_from_third_octave` | `función` | **Sonoridad desde 29 niveles de tercio de octava (ISO 532-2 §5.5).**<br>• `band_levels`: 29 niveles, 25 Hz–16 kHz [dB SPL]<br>• `field` / `presentation`: como arriba | `res = loudness_moore_glasberg_from_third_octave(levels)`<br><br>• `MooreGlasbergLoudness` |
| `MooreGlasbergLoudness` | `dataclass` | **Resultado de sonoridad de Moore-Glasberg.**<br>• `loudness`: N [sonos]<br>• `loudness_level`: LN [fonios]<br>• `specific`: N′(i), 372 bins de 0,1 Cam<br>• `erb_number` / `centre_frequencies`: ejes Cam / Hz<br>• `field` / `presentation`<br>• `.plot()`: sonoridad específica N′(i) sobre Cam | `res.loudness, res.loudness_level` |
| `loudness_moore_glasberg_time` | `función` | **Sonoridad variable en el tiempo (ISO 532-3:2023).**<br>• `signal`: Pa calibrada; 1D (diótica) o (n, 2) oídos<br>• `fs`: frecuencia de muestreo [Hz]<br>• `field`: 'free'/'diffuse'/'eardrum' (def.: 'free')<br>• `presentation`: (def.: 'binaural')<br>• `percentiles`: % de excedencia (def.: (1,5,10,50,90,95)) | `res = loudness_moore_glasberg_time(x, fs)`<br><br>• `MooreGlasbergTimeVaryingLoudness` |
| `MooreGlasbergTimeVaryingLoudness` | `dataclass` | **Resultado de sonoridad variable en el tiempo.**<br>• `time`: rejilla de 1 ms [s]<br>• `short_term_loudness` / `long_term_loudness`: S′(t)/S″(t) [sonos]<br>• `short_term_loudness_level` / `long_term_loudness_level` [fonios]<br>• `n_max` / `loudness_level_max`: sonoridad de largo plazo de pico<br>• `percentiles`: dict {porcentaje: sonos}<br>• `.plot()`: STL y LTL frente al tiempo | `res.n_max, res.percentiles[5.0]` |
| `loudness_ecma` | `función` | **Sonoridad del modelo de Sottek (ECMA-418-2:2025).**<br>• `signal_in`: señal calibrada en Pa (1D)<br>• `fs`: frecuencia de muestreo [Hz] (se remuestrea a 48 kHz)<br>• `field`: 'free' o 'diffuse' (def.: 'free') | `res = loudness_ecma(x, fs)`<br><br>• `EcmaLoudness`; 1 kHz/40 dB ≈ 1 sone_HMS |
| `EcmaLoudness` | `dataclass` | **Resultado de sonoridad de Sottek.**<br>• `loudness`: N [sone_HMS]<br>• `specific_loudness`: N′(z), 53 bandas Bark_HMS<br>• `bark` / `centre_frequencies`: ejes z / Hz<br>• `time` / `loudness_vs_time`: N(l) a 187,5 Hz<br>• `field`<br>• `.plot()`: N′(z) + N(l) | `res.loudness, res.specific_loudness` |
| `tonality_ecma` | `función` | **Tonalidad de Sottek (ECMA-418-2:2025).**<br>• `signal_in`: señal calibrada en Pa (1D)<br>• `fs`: frecuencia de muestreo [Hz] (se remuestrea a 48 kHz)<br>• `field`: 'free' o 'diffuse' (def.: 'free')<br>• `f_low` / `f_high`: banda de usuario opcional [Hz] (def.: None) | `res = tonality_ecma(x, fs)`<br><br>• `EcmaTonality`; 1 kHz/40 dB ≈ 1 tu_HMS |
| `EcmaTonality` | `dataclass` | **Resultado de tonalidad de Sottek.**<br>• `tonality`: T [tu_HMS]<br>• `specific_tonality`: T′(z), 53 bandas<br>• `tonal_frequencies`: f_ton,z por banda [Hz]<br>• `bark` / `centre_frequencies`<br>• `time` / `tonality_vs_time` / `tonal_frequency_vs_time`: T(l), f_ton(l)<br>• `field`<br>• `.plot()`: T′(z) + T(l) | `res.tonality, res.tonal_frequencies` |
| `roughness_ecma` | `función` | **Aspereza de Sottek (ECMA-418-2:2025), capacidad nueva.**<br>• `signal_in`: señal calibrada en Pa (1D)<br>• `fs`: frecuencia de muestreo [Hz] (se remuestrea a 48 kHz)<br>• `field`: 'free' o 'diffuse' (def.: 'free') | `res = roughness_ecma(x, fs)`<br><br>• `EcmaRoughness`; 1 kHz/70 Hz/100 %-AM/60 dB ≈ 1 asper |
| `EcmaRoughness` | `dataclass` | **Resultado de aspereza de Sottek.**<br>• `roughness`: R [asper] (percentil 90 de R(l50))<br>• `specific_roughness`: R′(z), 53 bandas<br>• `bark` / `centre_frequencies`<br>• `time` / `roughness_vs_time`: R(l50) a 50 Hz<br>• `specific_roughness_vs_time`: (n_times, 53)<br>• `field`<br>• `.plot()`: R(l50) + mapa de calor de aspereza específica | `res.roughness, res.specific_roughness` |
| `equal_loudness_contour` | `función` | **Isofónica ISO 226:2023.**<br>• `phon`: nivel de sonoridad, 20–90 fonios | `freqs, spl = equal_loudness_contour(40.0)`<br><br>• SPL en las 29 frecuencias preferentes |
| `loudness_level` | `función` | **Nivel de sonoridad de un tono puro (fonios).**<br>• `spl`: SPL del tono [dB]<br>• `frequency`: una de las 29 frecuencias de la Tabla 1 [Hz] | `phon = loudness_level(73.0, 63.0)` |
| `hearing_threshold` | `función` | **Umbral de audición (Tabla 1 de ISO 226).**<br>• (sin parámetros) | `freqs, tf = hearing_threshold()` |
| `tone_to_noise_ratio` | `función` | **Relación tono-ruido (ECMA-418-1 §11).**<br>• `x`: señal (1D)<br>• `fs`: frecuencia de muestreo [Hz]<br>• `tone_freq`: tono a evaluar [Hz] (def.: pico más alto)<br>• `resolution_hz`: resolución FFT (def.: 1.0) | `r = tone_to_noise_ratio(x, fs)`<br><br>• `ToneAssessment(frequency, ratio_db, criterion_db, prominent)` |
| `prominence_ratio` | `función` | **Relación de prominencia (ECMA-418-1 §12).**<br>• mismos parámetros que `tone_to_noise_ratio` | `r = prominence_ratio(x, fs, tone_freq=1000)`<br><br>• `ToneAssessment(...)` |
| `ToneAssessment` | `dataclass` | **Veredicto de prominencia tonal.**<br>• `frequency`: tono evaluado [Hz]<br>• `ratio_db`: TNR o PR [dB]<br>• `criterion_db`: límite de prominencia a esa frecuencia [dB]<br>• `prominent`: bool | `r = tone_to_noise_ratio(x, fs)`<br>`if r.prominent: ...` |
| `sti_from_impulse_response` | `función` | **STI completo, método indirecto (IEC 60268-16 Ed. 5).**<br>• `ir`: respuesta al impulso (1D)<br>• `fs`: frecuencia de muestreo [Hz] (>= 22500)<br>• `snr`: SNR [dB], escalar o 7 bandas (def.: None)<br>• `level`: 7 niveles de banda del habla [dB SPL]; activa enmascaramiento + umbral de recepción (def.: None)<br>• `ambient`: 7 niveles de banda de ruido [dB SPL]; requiere `level` | `res = sti_from_impulse_response(ir, fs, snr=25.0)`<br><br>• `STIResult` con `mtf` (7×14) |
| `stipa` | `función` | **Método directo STIPA (Anexo B).**<br>• `x`: señal STIPA grabada (1D), 15–25 s<br>• `fs`: frecuencia de muestreo [Hz] (>= 22500)<br>• `reference`: señal de la fuente medida en lugar del m = 0,55 nominal (def.: None)<br>• `level` / `ambient`: como `sti_from_impulse_response`<br>• avisa (`UserWarning`) si la grabación dura < 15 s (STI sesgado a la baja) | `res = stipa(recording, fs)`<br><br>• `STIResult` con `mtf` (7×2) |
| `stipa_signal` | `función` | **Generador de señal de prueba STIPA (A.4/A.6.1).**<br>• `fs`: frecuencia de muestreo [Hz] (>= 22500)<br>• `seconds`: duración [s] (def.: 18.0)<br>• `level_db`: nivel RMS [dB SPL] (def.: None → RMS 0.1)<br>• `seed`: semilla del ruido rosa (def.: None) | `sig = stipa_signal(48000, seconds=18.0)`<br><br>• Señal de prueba 1D, espectro masculino de la Ed. 5 |
| `STIResult` | `dataclass` | **Resultado del STI.**<br>• `sti`: 0 a 1<br>• `mti`: índices por banda (7,)<br>• `mtf`: valores m corregidos (7×14 o 7×2)<br>• `band_levels`: niveles usados o None<br>• `rating`: letra del Anexo F, 'A+'…'U' | `res = stipa(x, fs)`<br>`print(res.sti, res.rating)` |
| `sound_intensity` | `función` | **Intensidad sonora p-p (IEC 61043).**<br>• `p1`, `p2`: señales de los micrófonos [Pa], misma longitud<br>• `fs`: frecuencia de muestreo [Hz]<br>• `spacing`: separación entre micrófonos Δr [m]<br>• `rho`: densidad del aire (def.: 1.204)<br>• `c`: velocidad del sonido (def.: 343.0)<br>• `fraction`: None, 1 o 3 (def.: None)<br>• `limits`: [f_min, f_max] (def.: [12, 20000])<br>• `bias_correct`: corrige la subestimación por diferencias finitas de los totales de banda/banda ancha cerca de `max_valid_frequency` (def.: False) | `res = sound_intensity(p1, p2, fs, spacing=0.012, fraction=3)`<br><br>• `IntensityResult` |
| `IntensityResult` | `dataclass` | **Resultado de intensidad.**<br>• por banda (con `fraction`): `frequency`, `intensity` [W/m²], `intensity_level`, `pressure_level`, `pressure_intensity_index`, `direction` (±1), `bias_correction`<br>• banda ancha: equivalentes `total_*`<br>• `max_valid_frequency`: 0,1·c/Δr | `res.total_intensity_level`<br>`res.total_direction` |
| `field_indicators` | `función` | **Indicadores de campo del Anexo A de ISO 9614-1.**<br>• `pressure_levels`: Lpi por posición [dB]<br>• `normal_intensity`: Ini con signo por posición [W/m²] | `fi = field_indicators(lp, i_n)`<br><br>• `FieldIndicators(f2, f3, f4)` |
| `FieldIndicators` | `dataclass` | **Indicadores del Anexo A de ISO 9614-1.**<br>• `f2`: indicador presión-intensidad de superficie (Ec. A.3)<br>• `f3`: indicador de potencia parcial negativa (Ec. A.6)<br>• `f4`: indicador de no uniformidad de campo (Ec. A.8)<br>• f3 − f2 > 0 revela potencia parcial negativa | `fi.f2, fi.f3, fi.f4`<br><br>• Criterios: Ld > F2, N > C·F4² |
| `dynamic_capability_index` | `función` | **Capacidad dinámica Ld (ISO 9614-1 §3.12).**<br>• `pressure_residual_intensity_index`: δpI0 [dB]<br>• `bias_error_factor`: K [dB] (def.: 10.0) | `ld = dynamic_capability_index(18.0)`<br><br>• Adecuado cuando `Ld > F2` (criterio 1) |
| `CalibrationWarning` | `clase warning` | **Grabación de calibración poco fiable.**<br>La emite `sensitivity` — con `fs` presente y `validate=True` — cuando el tono es inestable (límite IEC 60942) o demasiado corto | `warnings.simplefilter("error", CalibrationWarning)` |
| `lden` | `función` | **Nivel día-tarde-noche (ISO 1996-1 §3.6.4).**<br>• `lday`/`levening`/`lnight`: LAeq por periodo [dB]<br>• `hours`: duración de periodos (def.: (12, 4, 8)) | `l = lden(63.2, 58.1, 51.4)` |
| `ldn` | `función` | **Nivel día-noche (ISO 1996-1 §3.6.5).**<br>• `lday`/`lnight`: LAeq por periodo [dB]<br>• `hours`: def. (15, 9) | `l = ldn(63.2, 51.4)` |
| `composite_rating_level` | `función` | **Evaluación compuesta de jornada (ISO 1996-1 §6.5).**<br>• `periods`: lista de (nivel_db, horas, ajuste_db) que suman 24 h | `r = composite_rating_level([(63, 12, 0), (58, 4, 5), (51, 8, 10)])` |
| `assess_tonal_audibility` | `función` | **Audibilidad y ajuste tonal (ISO 1996-2 Anexo C).**<br>• `tone_level` Lpt, `masking_noise_level` Lpn [dB]<br>• `centre_frequency` fc [Hz] | `res = assess_tonal_audibility(54.1, 45.2, 430.0)`<br><br>• `TonalAssessmentResult` (`.audibility`, `.adjustment`, `.plot()`) |
| `tonal_audibility` | `función` | **ΔLta = Lpt−Lpn+2+lg[1+(fc/502)²·⁵] (Fórmula C.3).**<br>• `tone_level`, `masking_noise_level` [dB], `centre_frequency` [Hz] | `d = tonal_audibility(54.1, 45.2, 430.0)  # 11,1 dB` |
| `tonal_adjustment` | `función` | **Kt(ΔLta) a tramos (Fórmulas C.4-C.6).**<br>• `audibility` ΔLta [dB] | `tonal_adjustment(7.0)  # 3,0 dB` |
| `tonal_adjustment_from_mean_audibility` | `función` | **Kt desde la audibilidad media ΔL (ISO 1996-2 Tabla J.1).**<br>• `mean_audibility` [dB], `coarse` (def.: False) | `tonal_adjustment_from_mean_audibility(5.0)  # 3` |
| `critical_bandwidth` | `función` | **Ancho de banda crítico (ISO 1996-2 Tabla C.1).**<br>• `centre_frequency` [Hz] (100 Hz ≤ 500 Hz, si no 20 %·fc) | `critical_bandwidth(4000.0)  # 800 Hz` |
| `tonal_seeking_survey` | `función` | **Cribado tonal en tercios de octava (ISO 1996-2 Anexo K).**<br>• `levels` [dB], `frequencies` [Hz] (regla 15/8/5 dB con vecinas) | `flags = tonal_seeking_survey(levels, freqs)` |
| `residual_sound_correction` | `función` | **Corrección de ruido residual L = 10 lg(10^(L'/10)−10^(Lres/10)) (Fórmula 16).**<br>• `measured_level` L', `residual_level` Lres [dB] | `res = residual_sound_correction(58.0, 50.0)`<br><br>• `ResidualCorrectionResult` (`.corrected_level`, `.reliable`) |
| `gaussian_residual_level` | `función` | **Leq residual desde percentiles (ISO 1996-2 Anexo I).**<br>• `l50` [dB]; exactamente uno de `l90` / `l95` | `gaussian_residual_level(50.0, l90=40.0)` |
| `combined_standard_uncertainty` | `función` | **u = √(Σ(cj·uj)²) (ISO 1996-2 Fórmula 2).**<br>• `contributions`: productos cj·uj o pares (uj, cj) | `u = combined_standard_uncertainty([0.59, 0.3, 2.0, 0.40, 0.38])  # 2,18` |
| `environmental_expanded_uncertainty` | `función` | **U = k·u (ISO 1996-2 §4).**<br>• `standard_uncertainty` [dB], `confidence` 0.95 (k=2) / 0.80 (k=1.3) | `environmental_expanded_uncertainty(2.18)  # 4,36` |
| `residual_correction_uncertainty` | `función` | **Incertidumbre del nivel corregido por residual (Fórmulas F.7-F.9).**<br>• `measured_level`, `residual_level`, `measured_uncertainty`, `residual_uncertainty` [dB] | `residual_correction_uncertainty(58, 50, 0.5, 2.0)` |
| `uncertainty_from_repeated_measurements` | `función` | **Media energética e incertidumbre de repeticiones (Fórmulas 17-20).**<br>• `levels` [dB] (≥ 2) | `res = uncertainty_from_repeated_measurements(levels)`<br><br>• `RepeatedMeasurementResult` |
| `TonalAssessmentResult` | `dataclass` | **Evaluación tonal (ISO 1996-2).**<br>• `audibility` ΔLta, `adjustment` Kt [dB]<br>• `centre_frequency`, `critical_bandwidth`; `.plot()` | `res.audibility, res.adjustment` |
| `ResidualCorrectionResult` | `dataclass` | **Nivel corregido por residual (ISO 1996-2).**<br>• `corrected_level` [dB], `margin` [dB], `reliable` (> 3 dB) | `res.corrected_level, res.reliable` |
| `RepeatedMeasurementResult` | `dataclass` | **Media e incertidumbre de repeticiones (ISO 1996-2).**<br>• `mean_level`, `standard_uncertainty` [dB], `n` | `res.mean_level, res.standard_uncertainty` |
| `linkwitz_riley` | `función` | **Crossover de audio.**<br>• `x`: array de señal<br>• `fs`: frecuencia de muestreo [Hz]<br>• `freq`: frecuencia de cruce [Hz]<br>• `order`: cualquier número par (def.: 4) | `lo, hi = linkwitz_riley(x, fs, freq=1000, order=4)`<br><br>• `lo`: señal paso-bajo<br>• `hi`: señal paso-alto |
| `sensitivity` | `función`| **Calibración SPL.**<br>• `ref_signal`: señal de calibración<br>• `target_spl`: nivel del calibrador (def.: 94.0)<br>• `ref_pressure`: presión de referencia (def.: 20e-6)<br>• `narrowband`: estimación coherente del tono (Goertzel) que rechaza zumbido/ruido de banda ancha (requiere `fs`; def.: False) | `s = sensitivity(ref_signal, target_spl=94.0)`<br><br>• `s`: float (multiplicador a presión) |
| `verify_filter_class` | `función` | **Verificación de clase IEC 61260.**<br>• `bank`: un `OctaveFilterBank`<br>• `num_points`: puntos de la malla de frecuencia por banda (def.: 32768)<br>• `edition`: `'2014'` (clases 1/2, por defecto) o `'1995'` (IEC 61260:1995 / ANSI S1.11-2004, añade la clase 0) | `result = verify_filter_class(bank, edition="1995")`<br><br>• `result["overall_class"]`: 1/2 o None (`'2014'`); 0/1/2 o None (`'1995'`)<br>• `result["bands"]`: clase por banda y `margin_class<c>_db` [dB] |
| `class_limits` | `función` | **Límites de aceptación de la Tabla 1 de IEC 61260.**<br>• `fraction`: denominador del designador de ancho de banda b (1, 3, ...)<br>• `filter_class`: 1 o 2 (`'2014'`); 0, 1 o 2 (`'1995'`)<br>• `omega`: frecuencias normalizadas f/fm<br>• `edition`: `'2014'` (por defecto) o `'1995'` | `lo, hi = class_limits(3, 0, omega, edition="1995")`<br><br>• `lo` / `hi`: atenuación relativa mín/máx [dB] (`hi` es `inf` fuera de la banda de paso) |
| `verify_weighting_class` | `función` | **Verificación de ponderación (Tabla 3 de IEC 61672-1:2013).**<br>• `wf`: un `WeightingFilter` (A, C o Z) | `result = verify_weighting_class(wf)`<br><br>• `result["overall_class"]`: 1, 2 o None<br>• `result["bands"]`: clase, desviación y márgenes por frecuencia [dB] |
| `weighting_class_limits` | `función` | **Límites de aceptación de la Tabla 3 de IEC 61672-1:2013.**<br>• `weighting_class`: 1 o 2 | `f, lo, hi = weighting_class_limits(1)`<br><br>• `f`: 34 frecuencias nominales [Hz]<br>• `lo` / `hi`: límites de desviación inferior/superior [dB] (`lo` es `-inf` donde es unilateral) |
| `nominal_frequencies` | `función` | **Generador de frecuencias ANSI.**<br>• `fraction`: 1, 3, etc. (obligatorio)<br>• `limits`: [f_min, f_max] (def.: [12, 20000]) | `f_cen, f_low, f_high, labels = nominal_frequencies(fraction=3)`<br><br>• `f_cen` / `f_low` / `f_high`: centros y bordes [Hz]<br>• `labels`: etiquetas nominales IEC |
| `normalized_frequencies` | `función` | **Frecuencias IEC estándar.**<br>• `fraction`: 1 o 3 | `freqs = normalized_frequencies(fraction=3)`<br><br>• `freqs`: lista de frecuencias centrales estándar [Hz] |
| `sweep_signal` | `función` | **Excitación ESS (ISO 18233 Anexo B).**<br>• `fs`: frecuencia de muestreo [Hz]<br>• `f1`: frecuencia inicial [Hz]<br>• `f2`: frecuencia final [Hz] (≤ fs/2)<br>• `seconds`: duración [s]<br>• `amplitude`: pico (def.: 1.0)<br>• `fade`: fracción de medio Hann (def.: 0.01) | `s = sweep_signal(48000, 20, 20000, 3.0)`<br><br>• barrido sinusoidal exponencial 1D |
| `inverse_filter` | `función` | **Filtro inverso de Farina para un ESS.**<br>• Mismos parámetros que `sweep_signal` | `inv = inverse_filter(48000, 20, 20000, 3.0)`<br><br>• barrido invertido en el tiempo y compensado a +6 dB/oct |
| `impulse_response` | `función` | **Deconvolución del barrido (ISO 18233 B.5).**<br>• `recorded`: respuesta grabada (1D)<br>• `reference`: barrido emitido (1D)<br>• `fs`: frecuencia de muestreo [Hz]<br>• `method`: 'spectral' (def.) o 'farina'<br>• `f_range`: (f1, f2) para 'farina'<br>• `regularization`: término de Tikhonov (def.: 1e-6)<br>• `length`: muestras causales (def.: len(recorded))<br>• `return_full`: conservar la cola de distorsión (def.: False) | `ir = impulse_response(rec, sweep, fs)`<br><br>• `ImpulseResponseResult` (tipo array; `.plot()`) |
| `mls_signal` | `función` | **Secuencia de longitud máxima (ISO 18233 Anexo A).**<br>• `order`: longitud del registro N, 2-20 | `mls = mls_signal(16)`<br><br>• secuencia bipolar, longitud 2**N − 1 |
| `mls_impulse_response` | `función` | **Respuesta al impulso a partir de una MLS periódica.**<br>• `recorded`: respuesta que abarca periodos completos de la MLS (1D)<br>• `mls`: secuencia de excitación<br>• `length`: muestras de la respuesta al impulso (def.: 2**N − 1)<br>• `fs`: frecuencia de muestreo opcional para el eje de tiempo del gráfico | `ir = mls_impulse_response(rec, mls)`<br><br>• `ImpulseResponseResult` (tipo array; `.plot()`) |
| `ImpulseResponseResult` | `dataclass` | **Respuesta al impulso recuperada con sus metadatos.**<br>• `ir`: muestras de la RI<br>• `fs` [Hz] o None (p. ej. una recuperación MLS sin él)<br>• `method`: 'spectral'/'farina'/'mls'<br>• tipo array: `np.asarray(res)`, la indexación, `len()` y `shape`/`dtype` remiten a `ir`<br>• `.plot()` | `ir = impulse_response(rec, sweep, fs)`<br>`room_parameters(ir, fs)  # array directo` |
| `ImpulseResponseWarning` | `clase warning` | **Respuesta al impulso recuperada sospechosa.**<br>Se emite p. ej. por aliasing MLS en la recuperación | `warnings.simplefilter('error', ImpulseResponseWarning)` |
| `plot_excitation` | `función` | **Grafica una señal de excitación.**<br>• `signal`: muestras del barrido o MLS (1D)<br>• `fs`: frecuencia de muestreo [Hz]<br>• `kind`: `'sweep'` (def.) o `'mls'` | `plot_excitation(sweep, fs, kind="sweep")`<br><br>• ejes de forma de onda + espectrograma / espectro |
| `decay_curve` | `función` | **Curva de decaimiento de Schroeder (ISO 3382-1 5.3.3).**<br>• `ir`: respuesta al impulso (1D)<br>• `fs`: frecuencia de muestreo [Hz]<br>• `band`: centro de banda [Hz] (def.: None → banda ancha)<br>• `fraction`: 1 o 3 (def.: 1)<br>• `zero_phase`: filtrado de banda hacia delante y atrás; reduce a la mitad el sesgo de T corto a 125 Hz (def.: False) | `dc = decay_curve(ir, fs)` → `DecayCurve`<br>`time, level = dc` sigue desempaquetando (`time` [s], `level` [dB], 0 dB en t=0)<br>`dc.plot()` dibuja el decaimiento + los ajustes EDT/T20/T30 |
| `DecayCurve` | `dataclass` | **Curva de decaimiento de Schroeder (ISO 3382-1 5.3.3).**<br>• `time`: desde el sonido directo [s]<br>• `level`: decaimiento [dB], 0 dB en t = 0, hasta el punto de truncamiento por ruido<br>• `band`: centro [Hz] o None (banda ancha)<br>• iterable: se desempaqueta como `time, level`<br>• `.plot()`: decaimiento + ajustes EDT/T20/T30 | `dc = decay_curve(ir, fs)`<br>`dc.time, dc.level, dc.band` |
| `room_parameters` | `función` | **Acústica de salas (ISO 3382-1/2).**<br>• `ir`: respuesta al impulso (1D)<br>• `fs`: frecuencia de muestreo [Hz]<br>• `limits`: (f_min, f_max) o None (def.: (125, 4000))<br>• `fraction`: 1 o 3 (def.: 1)<br>• `zero_phase`: filtrado de octava hacia delante y atrás; reduce a la mitad el sesgo de T30 corto a 125 Hz (def.: False) | `res = room_parameters(ir, fs)`<br><br>• `RoomAcousticsResult` por banda |
| `RoomAcousticsResult` | `dataclass` | **Parámetros de sala por banda.**<br>• `frequency` [Hz]<br>• `edt`, `t20`, `t30` [s]<br>• `c50`, `c80` [dB], `d50`, `ts` [s]<br>• `dynamic_range` [dB]<br>• `edt_valid`/`t20_valid`/`t30_valid`<br>• `curvature` [%] | `res.t30, res.c80, res.t30_valid`<br><br>• arrays con una entrada por banda |
| `open_plan_metrics` | `función` | **Métricas de oficinas diáfanas (ISO 3382-3).**<br>• `positions_m`: distancias a la fuente [m] (≥ 4)<br>• `spl_a_speech`: nivel de habla ponderado A por posición [dB]<br>• `sti_values`: STI por posición | `m = open_plan_metrics(r, lp, sti)`<br><br>• `OpenPlanResult` |
| `OpenPlanResult` | `dataclass` | **Números únicos de oficina diáfana.**<br>• `d2s`: tasa de decaimiento espacial [dB/duplicación]<br>• `lp_as_4m`: nivel de habla a 4 m [dB]<br>• `rd`: distancia de distracción [m]<br>• `rp`: distancia de privacidad [m] | `m.d2s, m.rd, m.rp`<br><br>• `nan` cuando no está definido |
| `airborne_insulation` | `función` | **Aislamiento a ruido aéreo en campo (ISO 16283-1).**<br>• `l1`/`l2`: niveles emisor/receptor [dB], 1D o (posiciones, bandas)<br>• `t2`: T de la sala receptora por banda [s]<br>• `area`: superficie del cerramiento S [m²] (para R')<br>• `volume`: V receptor [m³] (para R')<br>• `t0`: T0 de referencia [s] (def.: 0.5) | `ins = airborne_insulation(l1, l2, t2, area=10, volume=50)`<br><br>• `AirborneInsulationResult` |
| `weighted_rating` | `función` | **Índice ponderado + C/Ctr (ISO 717-1).**<br>• `values_by_band`: 16 tercios o 5 octavas [dB]<br>• `bands`: 'third-octave', 'octave' o None | `w = weighted_rating(R)`<br><br>• `WeightedRatingResult` (Rw, C, Ctr) |
| `energy_average_level` | `función` | **Nivel promediado en energía (ISO 16283-1 (9)).**<br>• `levels`: niveles [dB] a promediar<br>• `axis`: eje de promediado (def.: -1) | `L = energy_average_level([60, 66])`<br><br>• `10 lg( mean(10^(Li/10)) )` |
| `AirborneInsulationResult` | `dataclass` | **Aislamiento en campo por banda.**<br>• `d`: diferencia de niveles D [dB]<br>• `dnt`: DnT estandarizada [dB]<br>• `r_prime`: R' aparente [dB] o None | `res.d, res.dnt, res.r_prime` |
| `WeightedRatingResult` | `dataclass` | **Resultado del índice ponderado.**<br>• `rating`: Rw/DnT,w … [dB], int<br>• `c`: término espectral C, int<br>• `ctr`: término espectral Ctr, int<br>• `unfavourable_sum`: [dB]<br>• `band_centers`: centros de la curva medida [Hz] o None<br>• `measured`: valores medidos por banda [dB] o None<br>• `shifted_reference`: curva de referencia (Tabla 3) desplazada [dB] o None | `w.rating, w.c, w.ctr` |
| `impact_insulation` | `función` | **Aislamiento a impactos en campo (ISO 16283-2).**<br>• `li`: SPL de impactos [dB], 1D o (posiciones, bandas)<br>• `t2`: T de la sala receptora por banda [s]<br>• `volume`: V receptor [m³] (para L'n)<br>• `t0`: T0 de referencia [s] (def.: 0.5) | `imp = impact_insulation(li, t2, volume=50)`<br><br>• `ImpactInsulationResult` (`l_n_t`, `l_n`) |
| `weighted_impact_rating` | `función` | **Índice de impactos de un solo número + CI (ISO 717-2).**<br>• `values_by_band`: 16 tercios (100-3150 Hz) o 5 octavas (125-2000 Hz) [dB]<br>• `bands`: 'third-octave', 'octave' o None | `r = weighted_impact_rating(imp.l_n_t)`<br><br>• `ImpactRatingResult` (Ln,w, CI); el índice en octava lleva la regla de -5 dB |
| `weighted_impact_improvement` | `función` | **Mejora ponderada ΔLw (ISO 717-2 §5).**<br>• `delta_l`: 16 tercios de octava ΔL (100-3150 Hz) [dB]<br>Aplica el suelo de referencia de la Tabla 4: ΔLw = 78 − Ln,r,w | `weighted_impact_improvement(delta_l)`<br><br>• ΔLw [dB] (p. ej. 19) |
| `impact_improvement` | `función` | **Mejora ΔL de revestimientos de suelo (ISO 16251-1).**<br>• `bare`, `with_covering`: niveles de aceleración L0/L1 por banda [dB]<br>• `frequencies` [Hz]<br>• `background`: Lb opcional por banda [dB] (Fórmula 2) | `res = impact_improvement(l0, l1, f)`<br><br>• `FloorCoveringImprovementResult` |
| `acceleration_level` | `función` | **Nivel de aceleración La (ISO 16251-1 Fórmula 1).**<br>• `acceleration`: a RMS por banda [m/s²]<br>• `reference`: a0 (def.: 1e-6) | `acceleration_level(1e-3)  # 60 dB` |
| `background_corrected_level` | `función` | **Corrección de ruido de fondo (ISO 16251-1 Fórmula 2).**<br>• `signal_and_background`, `background` [dB] | `L, limited = background_corrected_level(lp, lb)`<br><br>• (corregido [dB], máscara de límite de medida) |
| `improvement_octave_bands` | `función` | **Tercios → octavas para ΔL (ISO 16251-1 Fórmula 5).**<br>• `improvement`, `frequencies` (tripletes de octava completos) | `f_oct, dl_oct = improvement_octave_bands(dl, f)` |
| `FloorCoveringImprovementResult` | `dataclass` | **Mejora de revestimientos de suelo (ISO 16251-1).**<br>• `improvement` ΔL [dB], `delta_lw` (o None)<br>• `limited`: máscara > ΔL; `.octave_bands()`, `.plot()` | `res.delta_lw, res.improvement` |
| `ImpactInsulationResult` | `dataclass` | **Aislamiento a impactos por banda.**<br>• `l_n_t`: L'nT estandarizado [dB]<br>• `l_n`: L'n normalizado [dB] o None | `imp.l_n_t, imp.l_n` |
| `ImpactRatingResult` | `dataclass` | **Índice de impactos ponderado.**<br>• `rating`: Ln,w/L'n,w/L'nT,w [dB], int<br>• `ci`: término espectral CI, int<br>• `unfavourable_sum`: [dB]<br>• `band_centers`: centros de la curva medida [Hz] o None<br>• `measured`: niveles de impacto medidos [dB] o None<br>• `shifted_reference`: curva de referencia de impactos desplazada [dB] o None | `r.rating, r.ci` |
| `facade_insulation` | `función` | **Aislamiento a ruido aéreo de fachadas en campo (ISO 16283-3).**<br>• `l1_2m`/`l2`: nivel 2 m enfrente / niveles receptores [dB], 1D o (posiciones, bandas)<br>• `t2`: T de la sala receptora por banda [s]<br>• `area`: S del elemento [m²], `volume`: V receptor [m³], `surface_level`: L1,s [dB] (los tres para R')<br>• `method`: 'loudspeaker' (−1,5 dB) / 'road_traffic' (−3 dB)<br>• `t0`: T0 de referencia [s] (def.: 0.5)<br>• `frequencies` [Hz] | `fac = facade_insulation(l1_2m, l2, t2, volume=50, area=11.5, surface_level=ls)`<br><br>• `FacadeInsulationResult` |
| `FacadeInsulationResult` | `dataclass` | **Aislamiento de fachadas por banda.**<br>• `d_2m`: diferencia de niveles D2m [dB]<br>• `d_2m_nt`: D2m,nT estandarizado [dB]<br>• `d_2m_n`: D2m,n normalizado [dB] o None<br>• `r_prime`: R'45°/R'tr,s aparente [dB] o None<br>• `frequencies` [Hz] o None<br>• `.plot()` | `fac.d_2m_nt, fac.r_prime` |
| `lab_airborne_insulation` | `función` | **Aislamiento a ruido aéreo en laboratorio (ISO 10140-2).**<br>• `l1`/`l2`: niveles emisor/receptor [dB], 1D o (posiciones, bandas)<br>• `t2`: T de la sala receptora por banda [s]<br>• `area`: S de la abertura de ensayo libre [m²]<br>• `volume`: V receptor [m³] | `lab = lab_airborne_insulation(l1, l2, t2, area=10, volume=50)`<br><br>• `LabAirborneInsulationResult` |
| `lab_impact_insulation` | `función` | **Aislamiento a impactos en laboratorio (ISO 10140-3).**<br>• `li`: SPL de impactos de la máquina de impactos [dB], 1D o (posiciones, bandas)<br>• `t2`: T de la sala receptora por banda [s]<br>• `volume`: V receptor [m³] | `imp = lab_impact_insulation(li, t2, volume=50)`<br><br>• `LabImpactInsulationResult` |
| `intensity_sound_reduction` | `función` | **Índice de reducción sonora por intensidad RI (ISO 15186-1 Fórmula (7)).**<br>• `lp1`: nivel de sala emisora [dB], 1D o (posiciones, bandas)<br>• `l_in`: nivel de intensidad normal sobre la superficie [dB]<br>• `measurement_area`: superficie Sm [m²], `area`: espécimen S [m²]<br>• `kc`: término de adaptación por banda [dB] para RI,M (def.: None) | `res = intensity_sound_reduction(lp1, l_in, measurement_area=12, area=10)`<br><br>• `IntensityReductionResult` (`r_i`, `r_i_modified`, `rating`, `rating_modified`) |
| `adaptation_term_kc` | `función` | **Término de adaptación Kc (ISO 15186-1 Anexo B).**<br>• `freq`: frecuencias centrales [Hz]<br>• `boundary_area`/`volume`: Sb2/V2 de la sala para la Fórmula (B.1); omite ambos para la aproximación 10 lg(1+61,4/f) (B.2) | `kc = adaptation_term_kc(freqs)`<br><br>• Kc por banda [dB] |
| `intensity_element_normalized_difference` | `función` | **Diferencia de niveles normalizada por elemento por intensidad DI,n,e (ISO 15186-1 Fórmula (8)).**<br>• `lp1`/`l_in`: nivel emisor / nivel de intensidad de superficie [dB]<br>• `measurement_area`: superficie Sm [m²]<br>• `n`: unidades de elemento N (def.: 1) | `d = intensity_element_normalized_difference(lp1, l_in, measurement_area=10)`<br><br>• `IntensityElementNormalizedResult` (`d_i_n_e`, `rating`) |
| `surface_pressure_intensity_indicator` / `combine_subareas` | `función` | **Indicador de superficie FpI y combinación de subáreas (ISO 15186-1 Fórmulas (10)-(12)).**<br>• `lp`/`l_in`: niveles de presión / intensidad de superficie [dB]<br>• `combine_subareas(l_in, measurement_area)`: niveles `(subáreas, bandas)` + áreas por subárea | `fpi = surface_pressure_intensity_indicator(lp, l_in)`<br><br>• array `FpI`; `(LIn, Sm)` |
| `reverberation_index` / `estimate_reverberation_index` | `función` | **Índice de reverberación k del control (ISO 10052:2021 Cláusula 3.3 / Tabla 4).**<br>• `reverberation_index(t)`: k = 10 lg(T/0.5) por banda<br>• `estimate_reverberation_index(volume, room)`: k de la Tabla 4 (`room`: `kitchen`/`bathroom`/`furnished`/`a`-`h`/`a+e`...); `weighted=True` para la columna A/C | `k = reverberation_index(t)`<br><br>• k por banda [dB] |
| `survey_airborne_insulation` | `función` | **Aislamiento aéreo por control (ISO 10052:2021 Cláusulas 3.2-3.6).**<br>• `l1`/`l2`: niveles emisor/receptor [dB]<br>• `reverberation_index`: k por banda [dB]<br>• `volume` (para Dn/R'), `area` (R', regla V/7,5) | `res = survey_airborne_insulation(l1, l2, k, volume=50, area=12)`<br><br>• `SurveyAirborneResult` (`d`, `d_nt`, `d_n`, `r_prime`, `rating`, `r_prime_rating`) |
| `survey_impact_insulation` / `survey_facade_insulation` | `función` | **Aislamiento a impactos y de fachada por control (ISO 10052:2021 Cláusulas 3.7-3.9 / 3.13-3.15).**<br>• `li` (impacto) o `l1_2m`/`l2` (fachada), `reverberation_index`, `volume` | `imp = survey_impact_insulation(li, k, volume=50)`<br><br>• `SurveyImpactResult` / `SurveyFacadeResult` |
| `survey_service_equipment_level` | `función` | **Ruido de equipos de servicio LXY (ISO 10052:2021 Cláusulas 3.16-3.18).**<br>• `measurements`: tres posiciones ponderadas A/C [dB]<br>• `reverberation_index`: k (escalar o por banda)<br>• `volume` (para LXY,n) | `se = survey_service_equipment_level([35, 30, 32], 3.0, volume=50)`<br><br>• `SurveyServiceEquipmentResult` (`l_xy`, `l_xy_nt`, `l_xy_n`) |
| `background_correction` | `función` | **Corrección por ruido de fondo (ISO 10140-4 §4.3).**<br>• `signal_and_background`: Lsb combinado por banda [dB]<br>• `background`: Lb por banda [dB]<br>• margen de 6–15 dB corregido, ≤6 dB saturado en 1,3 dB, ≥15 dB sin cambio | `L = background_correction(lsb, lb)`<br><br>• niveles corregidos [dB] (`LabInsulationWarning` en el límite de medición) |
| `LabAirborneInsulationResult` | `dataclass` | **Resultado a ruido aéreo en laboratorio.**<br>• `r`: índice de reducción sonora R [dB]<br>• `absorption`: A = 0.16 V/T [m²]<br>• `rating`: `WeightedRatingResult` o None<br>• `.plot()` (requiere el índice) | `lab.r, lab.rating.rating` |
| `LabImpactInsulationResult` | `dataclass` | **Resultado a impactos en laboratorio.**<br>• `l_n`: nivel de impactos normalizado Ln [dB]<br>• `absorption`: A [m²]<br>• `rating`: `ImpactRatingResult` o None<br>• `.plot()` (requiere el índice) | `imp.l_n, imp.rating.rating` |
| `LabInsulationWarning` | `clase warning` | **Condición de límite de medición (ISO 10140-4).**<br>Emitida por `background_correction` cuando el margen señal-fondo de una banda es ≤ 6 dB (se aplica la saturación fija de 1,3 dB) | `warnings.simplefilter('error', LabInsulationWarning)` |
| `predicted_airborne_insulation` | `función` | **R'w aparente a ruido aéreo predicho (EN 12354-1 Fórmula 26).**<br>• `r_direct`: Rs,w del elemento separador [dB]<br>• `flanking_paths`: secuencia de `FlankingPath` (def.: ())<br>• `delta_r_direct`: ΔRDd,w del trasdosado [dB] (def.: 0) | `res = predicted_airborne_insulation(r_direct=57, flanking_paths=paths)`<br><br>• `AirbornePredictionResult` |
| `predicted_impact_insulation` | `función` | **L'n,w aparente a impactos predicho (EN 12354-2 Fórmula 21).**<br>• `ln_w_eq`: equivalente de suelo desnudo Ln,w,eq [dB]<br>• `delta_l_w`: mejora del revestimiento ΔLw [dB] (def.: 0)<br>• `k_correction`: K por flancos [dB] (def.: 0) | `imp = predicted_impact_insulation(ln_w_eq=76.2, delta_l_w=33, k_correction=2)`<br><br>• `ImpactPredictionResult` |
| `junction_vibration_reduction` | `función` | **Índice de reducción vibracional Kij (EN 12354-1 Anexo E).**<br>• `junction_type`: 'rigid_cross'/'rigid_t'/'flexible_t'/'lightweight_facade'<br>• `path`: 'through' (K13) / 'corner' (K12=K23)<br>• `mass_ratio`: m'⊥,i/m'i<br>• `frequency` [Hz] (def.: 500), `f1` [Hz] (def.: 125) | `k = junction_vibration_reduction('rigid_cross', 'through', 1.61)`<br><br>• Kij [dB] |
| `junction_min_vibration_reduction` | `función` | **Kij,min mínimo (EN 12354-1 Fórmula 29).**<br>• `coupling_length`: lf [m]<br>• `s_i`, `s_j`: áreas de los elementos [m²] | `kmin = junction_min_vibration_reduction(4.5, 11.5, 11.5)`<br><br>• Kij,min [dB] |
| `flanking_path` | `función` | **Un camino de flanco Rij,w (EN 12354-1 Fórmula 28a).**<br>• `label`, `kind`: 'Ff'/'Df'/'Fd'<br>• `r_source`/`r_receive`: índices de los elementos [dB]<br>• `k_ij` [dB], `separating_area` Ss [m²], `coupling_length` lf [m]<br>• `delta_r` [dB] (def.: 0), saturación `kij_min` [dB] (def.: None) | `p = flanking_path(label='f', kind='Ff', r_source=49, r_receive=49, k_ij=12.4, separating_area=11.5, coupling_length=4.5)`<br><br>• `FlankingPath` |
| `flanking_element` | `función` | **Los tres caminos (Ff, Df, Fd) de un elemento de flanco.**<br>• `label`, `r_flanking`, `r_separating` [dB]<br>• `k_ff`/`k_fd`/`k_df` [dB]<br>• `separating_area` Ss [m²], `coupling_length` lf [m]<br>• `delta_r_ff`/`delta_r_fd`/`delta_r_df` [dB] (def.: 0) | `ff, df, fd = flanking_element(label='floor', r_flanking=49, r_separating=57, k_ff=12.4, k_fd=8.9, k_df=8.9, separating_area=11.5, coupling_length=4.5)` |
| `combine_linings` | `función` | **Combina dos mejoras de trasdosado (EN 12354-1 Fórmulas 30/31).**<br>• `delta_a`, `delta_b` [dB] (pasa 0 para un único trasdosado) | `dr = combine_linings(14.0, 14.0)`<br><br>• max(a,b) + min(a,b)/2 = 21,0 [dB] |
| `equivalent_impact_level` | `función` | **Equivalente de suelo desnudo Ln,w,eq (EN 12354-2 Anexo B).**<br>• `mass_per_area`: m' [kg/m²] | `lneq = equivalent_impact_level(322.0)`<br><br>• 164 − 35 lg(m') = 76,2 [dB] |
| `impact_flanking_correction` | `función` | **Corrección por flancos K (EN 12354-2 Tabla 1).**<br>• `separating_mass`, `flanking_mass` [kg/m²] (tabulado más cercano) | `k = impact_flanking_correction(322.0, 145.0)`<br><br>• K = 2 [dB], int |
| `standardized_impact_level` | `función` | **L'nT,w estandarizado (EN 12354-2 Fórmula 3).**<br>• `l_prime_n_w`: L'n,w [dB]<br>• `volume`: V receptor [m³], V0 = 30 m³ | `lnt = standardized_impact_level(45.2, 50.0)`<br><br>• L'nT,w = 43,0 [dB] |
| `facade_sound_reduction` | `función` | **Aislamiento de fachada D2m,nT predicho (EN 12354-3 Fórmula 10/13).**<br>• `elements`: secuencia de `FacadeElement`<br>• `area`: S de la fachada [m²], `volume`: V receptor [m³]<br>• `delta_l_fs`: ΔLfs [dB] (def.: 0), `bands`<br>• `frequencies`: centros de banda [Hz] (def.: None; la longitud debe igualar el nº de bandas) — se conservan en el resultado para las gráficas | `fac = facade_sound_reduction(elements, area=11.3, volume=50.0, bands="octave")`<br><br>• `FacadePredictionResult` |
| `radiated_sound_power` | `función` | **Potencia sonora radiada LW (EN 12354-4 Fórmula 2/3).**<br>• `elements`, `lp_in`: Lp,in interior [dB]<br>• `area`: S del segmento [m²]<br>• `c_d`: Cd [dB] (def.: -6), `r_prime_cap`: límite de R' [dB] (def.: 40), `octave_bands` | `seg = radiated_sound_power(elements, lp_in=lp, area=200.0, c_d=-5.0)`<br><br>• `RadiatedPowerResult` |
| `outdoor_attenuation` | `función` | **Atenuación de un lado radiante finito A'tot (EN 12354-4 Anexo E).**<br>• `width`, `height`: Dimensiones del lado [m]<br>• `distance`: d perpendicular [m] | `a = outdoor_attenuation(60.0, 10.0, 5.0)`<br><br>• A'tot = 26,3 [dB] |
| `outdoor_level` | `función` | **Nivel exterior Lp (EN 12354-4 Fórmula E.1).**<br>• `l_w`: LW radiada [dB], escalar o por lado<br>• `attenuation`: A'tot [dB], escalar o por lado | `lp = outdoor_level(62.9, 26.3)`<br><br>• Lp = 36,6 [dB] |
| `FacadeElement` | `dataclass` | **Un camino de transmisión de fachada (EN 12354-3/-4).**<br>• dar exactamente uno de `r`: elemento de área [dB] / `dn_e`: elemento pequeño [dB] / `insertion_loss`: hueco [dB]<br>• `area`: Sᵢ [m²] (para `r` / `insertion_loss`) | `FacadeElement("window", area=4.5, r=[23, 22, 30, 36, 37])` |
| `AirbornePredictionResult` | `dataclass` | **Aislamiento a ruido aéreo predicho.**<br>• `r_prime_w`: R'w aparente [dB]<br>• `r_direct_w`: RDd,w directo [dB]<br>• `paths`: tupla de `PathContribution`<br>• `dominant`: camino de mayor energía | `res.r_prime_w, res.dominant.label` |
| `ImpactPredictionResult` | `dataclass` | **Aislamiento a impactos predicho.**<br>• `l_prime_n_w`: L'n,w aparente [dB]<br>• `ln_w_eq`, `delta_l_w`, `k_correction` [dB] | `imp.l_prime_n_w` |
| `FlankingPath` | `dataclass` | **Un camino de transmisión por flancos.**<br>• `label`, `kind`: 'Ff'/'Df'/'Fd'<br>• `r_ij_w`: índice de flanco Rij,w [dB] | `p.r_ij_w` |
| `PathContribution` | `dataclass` | **Un camino con su fracción de energía.**<br>• `label`, `kind`: 'Dd'/'Ff'/'Df'/'Fd'<br>• `r_w`: índice del camino [dB]<br>• `fraction`: fracción de energía transmitida (0–1) | `c.r_w, c.fraction` |
| `vibration_reduction_index` | `función` | **Índice de reducción vibracional Kij medido (ISO 10848 Fórmula 13/14).**<br>• `velocity_level_difference`: D̄v,ij promediado en dirección [dB]<br>• `junction_length` lij [m], `area_i`/`area_j` [m²]<br>• `frequency` [Hz], `structural_reverberation_time_i`/`_j` [s] (ambos → Fórmula 13; si no, simplificada 14)<br>• `speed_of_sound` (def.: 343) | `res = vibration_reduction_index(dbar, 4.0, 12.0, 10.0, frequency=f, structural_reverberation_time_i=0.35, structural_reverberation_time_j=0.40)`<br><br>• `VibrationReductionResult` |
| `direction_averaged_level_difference` | `función` | **Promedio direccional D̄v,ij = ½(Dv,ij+Dv,ji) (ISO 10848 Fórmula 11).**<br>• `dv_ij`, `dv_ji` [dB] | `dbar = direction_averaged_level_difference(dv_ij, dv_ji)` |
| `velocity_level_difference` | `función` | **Diferencia de nivel de velocidad Dv,ij = Lv,i−Lv,j (ISO 10848 Fórmula 8).**<br>• `source_level`, `receive_level` [dB] | `dv = velocity_level_difference(lv_i, lv_j)` |
| `equivalent_absorption_length` | `función` | **Longitud de absorción equivalente aj (ISO 10848 Fórmula 12).**<br>• `area` Sj [m²], `structural_reverberation_time` Ts [s], `frequency` [Hz]<br>• `speed_of_sound` (def.: 343) | `a = equivalent_absorption_length(10.0, 0.5, f)` |
| `total_loss_factor` | `función` | **Factor de pérdidas total η = 2.2/(f·Ts) (ISO 10848 Cláusula 7.3.1).**<br>• `frequency` [Hz], `structural_reverberation_time` [s] | `eta = total_loss_factor(f, ts)` |
| `normalized_flanking_level_difference` | `función` | **Aéreo Dn,f = L1−L2−10 lg(A/A0) (ISO 10848 Fórmula 4).**<br>• `source_level` L1, `receive_level` L2 [dB]<br>• `absorption_area` A [m²]<br>• `reference_area` A0 (def.: 10) | `res = normalized_flanking_level_difference(l1, l2, a)`<br><br>• `FlankingLevelDifferenceResult` |
| `normalized_flanking_impact_level` | `función` | **Impacto Ln,f = L2+10 lg(A/A0) (ISO 10848 Fórmula 5).**<br>• `receive_level` L2 [dB], `absorption_area` A [m²]<br>• `reference_area` A0 (def.: 10) | `res = normalized_flanking_impact_level(l2, a)`<br><br>• `FlankingImpactLevelResult` |
| `vibration_reduction_index_from_flanking` | `función` | **Kij indirecto desde Dn,f (ISO 10848 Cláusula 4.3.1).**<br>• `normalized_flanking_level_difference` Dn,f, `reduction_index_i`/`_j` Ri/Rj [dB]<br>• `junction_length`, `area_i`/`area_j`, `absorption_length_i`/`_j` | `k = vibration_reduction_index_from_flanking(dnf, ri, rj, 2.0, 10.0, 12.0, ai, aj)`<br><br>• Kij [dB] |
| `critical_frequency` | `función` | **Frecuencia crítica de placa delgada fc = c0²/(1.8·cL·h·π) (ISO 10848 Fórmula 20).**<br>• `longitudinal_wave_speed` cL [m/s], `thickness` h [m]<br>• `speed_of_sound` (def.: 343) | `fc = critical_frequency(5500.0, 0.2)` |
| `strong_coupling_satisfied` | `función` | **Comprobación de validez por acoplamiento fuerte (ISO 10848 Fórmula 15).**<br>• `velocity_level_difference` D̄v,ij [dB]<br>• `mass_i`/`mass_j` [kg/m²], `critical_frequency_i`/`_j` [Hz] | `ok = strong_coupling_satisfied(dbar, 20, 20, 100, 100)`<br><br>• bool por banda |
| `modal_density` | `función` | **Densidad modal n = π·S·fc/c0² (ISO 10848-4 Fórmula 5).**<br>• `area` S [m²], `critical_frequency` fc [Hz]<br>• `speed_of_sound` (def.: 343) | `n = modal_density(10.0, 200.0)` |
| `modal_overlap_factor` | `función` | **Solapamiento modal M = 2.2·n/Ts (ISO 10848-4 Fórmula 6).**<br>• `area`, `critical_frequency`, `structural_reverberation_time` [s] | `m = modal_overlap_factor(10.0, 200.0, ts)  # M<0.25 → excluir` |
| `band_mode_count` | `función` | **Número de modos en banda N = 0.23·f·n (ISO 10848-4 Fórmula 4).**<br>• `frequency` [Hz], `area`, `critical_frequency` | `n5 = band_mode_count(f, 10.0, 200.0)  # N≥5 OK` |
| `VibrationReductionResult` | `dataclass` | **Kij medido (ISO 10848).**<br>• `frequencies` [Hz] (o None), `k_ij` [dB]<br>• `single_number`: K̄ij medio 200–1250 Hz (o None)<br>• `.octave_bands()`, `.plot()` | `res.k_ij, res.single_number` |
| `FlankingLevelDifferenceResult` | `dataclass` | **Diferencia de nivel de flanco normalizada Dn,f (ISO 10848).**<br>• `d_n_f` [dB], `rating`: Dn,f,w (o None)<br>• `.plot()` | `res.d_n_f, res.rating` |
| `FlankingImpactLevelResult` | `dataclass` | **Nivel de impacto de flanco normalizado Ln,f (ISO 10848).**<br>• `l_n_f` [dB], `rating`: Ln,f,w (o None)<br>• `.plot()` | `res.l_n_f, res.rating` |
| `band_uncertainty` | `función` | **Incertidumbre típica u en tercio de octava (ISO 12999-1 Tablas 2/4/6).**<br>• `measurand`: 'airborne'/'impact'/'impact_reduction'<br>• `situation`: 'A'/'B'/'C'<br>• `upper_limit`: σR95 (ruido aéreo A, Anexo D) (def.: False) | `u = band_uncertainty('airborne', 'B')`<br><br>• `BandUncertainty` |
| `single_number_uncertainty` | `función` | **Incertidumbre típica u de un solo número (ISO 12999-1 Tablas 3/5/7).**<br>• `quantity`: 'r_w'/'ln_w'/'delta_lw' (+ alias, variantes +c/+ctr)<br>• `situation`: 'A'/'B'/'C'<br>• `upper_limit` (def.: False) | `u = single_number_uncertainty('r_w', 'B')`<br><br>• u [dB] (0,9) |
| `single_number_uncertainty_uncorrelated` | `función` | **u de un solo número no correlacionada a partir de bandas (ISO 12999-1 Fórmula B.2).**<br>• `band_uncertainties`: u_i por banda [dB]<br>• `reference_differences`: L_i − R_i [dB] | `u = single_number_uncertainty_uncorrelated(u_i, d_i)`<br><br>• u en cuadratura ponderada en energía [dB] |
| `maximum_repeatability_standard_deviation` | `función` | **σx máxima de repetibilidad por banda (ISO 12999-1 Tabla 1).**<br>• (sin parámetros) | `b = maximum_repeatability_standard_deviation()`<br><br>• `BandUncertainty` (autoverificación de laboratorio) |
| `insulation_coverage_factor` | `función` | **Factor de cobertura k (ISO 12999-1 Tabla 8).**<br>• `confidence`: fracción (def.: 0.95)<br>• `one_sided` (def.: False) | `k = insulation_coverage_factor(0.95)`<br><br>• 1,96 (bilateral) / 1,65 (unilateral) |
| `insulation_expanded_uncertainty` | `función` | **Incertidumbre expandida U = k·u (ISO 12999-1 Fórmula 2).**<br>• `u` [dB]<br>• `coverage`: fracción (def.: 0.95)<br>• `one_sided` (def.: False); impone k ≥ 1 | `U = insulation_expanded_uncertainty(0.9)`<br><br>• 1,764 [dB] |
| `uncertain_value` | `función` | **Adjunta U a un índice (ISO 12999-1 apartado 8).**<br>• `value` [dB], `quantity`, `situation`<br>• `coverage` (def.: 0.95), `one_sided` (def.: False), `upper_limit` (def.: False) | `uv = uncertain_value(52.0, 'rprime_w', 'B')`<br><br>• `UncertainValue` (valor ± U) |
| `combine_uncertainties` | `función` | **Combinación en cuadratura (ISO 12999-1 Fórmula C.2).**<br>• `*components`: u_i no negativas [dB] | `uc = combine_uncertainties(1.0, 0.6)`<br><br>• sqrt(Σ u_i²) = 1,166 [dB] |
| `prediction_input_uncertainty` | `función` | **Incertidumbre de entrada de predicción (ISO 12999-1 Fórmula A.1).**<br>• `sigma_reproducibility`, `sigma_product` [dB]<br>• `n`: mediciones (≥ 1) | `u = prediction_input_uncertainty(1.8, 1.0, 3)`<br><br>• sqrt((σR²+σp²)/n + σp²) [dB] |
| `reduce_by_independent_measurements` | `función` | **Reduce u por m mediciones (ISO 12999-1 Fórmula A.7).**<br>• `u` [dB]<br>• `m`: mediciones independientes (≥ 1) | `ur = reduce_by_independent_measurements(1.0, 4)`<br><br>• u/√m = 0,5 [dB] |
| `satisfies_lower_requirement` | `función` | **Conformidad con un mínimo (ISO 12999-1 Fórmula 5).**<br>• `value`, `expanded_uncertainty_value`, `requirement` [dB] | `ok = satisfies_lower_requirement(52.0, 1.485, 50.0)`<br><br>• True cuando valor − U > requisito |
| `satisfies_upper_requirement` | `función` | **Conformidad con un máximo (ISO 12999-1 Fórmula 4).**<br>• `value`, `expanded_uncertainty_value`, `requirement` [dB] | `ok = satisfies_upper_requirement(45.0, 1.5, 50.0)`<br><br>• True cuando valor + U < requisito |
| `BandUncertainty` | `dataclass` | **Incertidumbre típica por banda (ISO 12999-1).**<br>• `measurand`, `situation`<br>• `frequencies` [Hz], `uncertainties` [dB]<br>• `upper_limit`: indicador σR95<br>• `.to_arrays()` | `b.frequencies, b.uncertainties` |
| `UncertainValue` | `dataclass` | **Un valor con su incertidumbre expandida.**<br>• `value`, `standard_uncertainty`, `expanded_uncertainty` [dB]<br>• `coverage_factor`, `confidence`, `one_sided`<br>• `.lower` = y − U, `.upper` = y + U | `uv.lower, uv.upper` |
| `COVERAGE_FACTORS` | `mapping` | **Factores de cobertura de la Tabla 8 (solo lectura).**<br>Indexado por `(confidence, one_sided)` → k | `COVERAGE_FACTORS[(0.95, False)]  # 1.96` |
| `sound_absorption_coefficient_uncertainty` | `función` | **Incertidumbre del coeficiente de absorción αs (ISO 12999-2 Tabla 1, Fórmula 1).**<br>• `alpha`, `frequencies` [Hz] (1/3-oct 63–5000)<br>• `condition`: 'reproducibility'/'repeatability'<br>• `confidence` (def.: 0.95) | `r = sound_absorption_coefficient_uncertainty(a_s, f)`<br><br>• `AbsorptionUncertaintyResult` |
| `equivalent_area_uncertainty` | `función` | **Incertidumbre del área equivalente AT (ISO 12999-2 Fórmula 2, S = 10 m²).**<br>• `area`, `frequencies` [Hz]<br>• `condition`, `confidence` (def.: 0.95) | `r = equivalent_area_uncertainty(a_t, f)`<br><br>• `AbsorptionUncertaintyResult` |
| `practical_coefficient_uncertainty` | `función` | **Incertidumbre del coeficiente práctico αp (ISO 12999-2 Tabla 2, Fórmula 4).**<br>• `alpha_p`, `frequencies` [Hz] (octava 250–4000)<br>• `condition`, `confidence` (def.: 0.95) | `r = practical_coefficient_uncertainty(a_p, f)`<br><br>• `AbsorptionUncertaintyResult` |
| `weighted_coefficient_uncertainty` | `función` | **Incertidumbre del coeficiente ponderado αw (ISO 12999-2 Fórmulas 6/7).**<br>• `alpha_w` (se arrastra para el intervalo)<br>• `condition`, `confidence` | `weighted_coefficient_uncertainty(0.70)`<br><br>• σR = 0,035 / σr = 0,020 |
| `single_number_rating_uncertainty` | `función` | **Incertidumbre de DLα,NRD (ISO 12999-2 Fórmulas 8/9, EN 1793-1).**<br>• `dl_alpha` [dB] (≥ 0)<br>• `condition`, `confidence` | `single_number_rating_uncertainty(8.1)`<br><br>• σR = 0,10·DLα / σr = 0,02·DLα |
| `absorption_coverage_factor` | `función` | **Factor de cobertura k (ISO 12999-2 Tabla 3, redondeado).**<br>• `confidence`: 0.68/0.80/0.90/0.95/0.99/0.999 | `absorption_coverage_factor(0.95)  # 2.0` |
| `AbsorptionUncertaintyResult` | `dataclass` | **Incertidumbre de absorción (ISO 12999-2).**<br>• `standard_uncertainty` u, `expanded_uncertainty` U = k·u<br>• `reported_expanded_uncertainty` (redondeo cláusula 8)<br>• `.lower`, `.upper`, `.plot()` | `r.reported_expanded_uncertainty` |
| `sound_power_pressure` | `función` | **Potencia sonora desde presión superficial (ISO 3744/3746).**<br>• `levels_positions`: (NM, NB) SPL [dB]<br>• `surface`: 'hemisphere' / 'box'<br>• `radius` [m] o `dimensions`+`distance` [m]<br>• `reflecting_planes`: 1/2/3 (def.: 1)<br>• `background_levels`: para K1<br>• `frequencies` [Hz]: para LWA<br>• `reverberation_time`+`volume` / `absorption_area` / `mean_absorption_coefficient`+`room_surface`: para K2<br>• `grade`: 'engineering' (def.) / 'survey'<br>• `omc_uncertainty` [dB] (def.: 0) | `res = sound_power_pressure(levels, 'hemisphere', radius=1.5, frequencies=f)`<br><br>• `SoundPowerResult` |
| `measurement_positions` | `función` | **Coordenadas de micrófono en semiesfera (ISO 3744 Anexo B).**<br>• `surface`: 'hemisphere'<br>• `radius` [m]<br>• `reflecting_planes`: 1/2/3<br>• `tones`: Tabla B.1 vs B.2 (def.: True)<br>• `grade`: 'engineering'/'survey' | `xyz = measurement_positions('hemisphere', radius=1.5)`<br><br>• (N, 3) coordenadas [m] |
| `background_noise_correction` | `función` | **Corrección por ruido de fondo K1 (ISO 3744 Ec. 16).**<br>• `source_levels` [dB]<br>• `background_levels` [dB]<br>• `grade`: 'engineering'/'survey' | `k1 = background_noise_correction(src, bg)`<br><br>• K1 por banda [dB] |
| `environmental_correction` | `función` | **Corrección ambiental K2 (ISO 3744 Ec. A.2).**<br>• `surface_area` S [m²]<br>• `absorption_area` A, o `reverberation_time`+`volume`, o `mean_absorption_coefficient`+`room_surface` | `k2 = environmental_correction(14.1, reverberation_time=0.6, volume=300)`<br><br>• K2 [dB] |
| `SoundPowerResult` | `dataclass` | **Potencia sonora por presión superficial.**<br>• `sound_power_level` [dB]<br>• `surface_pressure_level`, `mean_pressure_level` [dB]<br>• `background_correction`, `environmental_correction` [dB]<br>• `directivity_index` [dB] `(NM, NB)`<br>• `surface_area` [m²]<br>• `sound_power_level_a` [dB]<br>• `uncertainty` [dB]<br>• `grade` | `res.sound_power_level, res.sound_power_level_a` |
| `sound_power_reverberation` | `función` | **LW en sala reverberante, directo (ISO 3741).**<br>• `levels`: SPL medio de sala [dB] (1D o (NM, NB))<br>• `t60` [s]<br>• `volume` V [m³]<br>• `surface_area` S [m²]<br>• `frequencies` [Hz] (obligatorio)<br>• `background_levels`: para K1<br>• `temperature` [°C] (def.: 23)<br>• `static_pressure` [kPa] (def.: 101.325) | `rev = sound_power_reverberation(lp, t60, 200, 220, f)`<br><br>• `ReverberationSoundPowerResult` |
| `sound_power_comparison` | `función` | **LW en sala reverberante, comparación (ISO 3741).**<br>• `levels`, `levels_ref`: SPL de sala [dB]<br>• `lw_ref`: LW de la fuente de referencia [dB]<br>• `frequencies` [Hz]<br>• `background_levels`, `background_levels_ref`<br>• `temperature`, `static_pressure` | `cmp = sound_power_comparison(lp, lp_ref, lw_ref)`<br><br>• `ReverberationSoundPowerResult` (method='comparison') |
| `ReverberationSoundPowerResult` | `dataclass` | **Potencia sonora en sala reverberante.**<br>• `frequencies` [Hz] (o `None`)<br>• `sound_power_level` [dB]<br>• `mean_pressure_level` [dB]<br>• `absorption_area` [m²]<br>• `waterhouse_correction` [dB]<br>• `background_correction`, `c1`, `c2` [dB]<br>• `speed_of_sound` [m/s]<br>• `sound_power_level_a` [dB]<br>• `method` | `rev.sound_power_level, rev.waterhouse_correction` |
| `sound_power_intensity` | `función` | **Potencia sonora por barrido de intensidad (ISO 9614-2).**<br>• `normal_intensity`: (N_seg, N_bands) [W/m²]<br>• `areas`: Si del segmento [m²]<br>• `normal_intensity_2`: 2.º barrido (criterio 3)<br>• `pressure_levels`: para FpI<br>• `pressure_residual_index`: δpI0 [dB]<br>• `frequencies` [Hz]<br>• `band_type`: 'third' (def.)/'octave'<br>• `grade`: 'engineering'/'survey'<br>• `repeatability_limit`: sobrescribe s | `ir = sound_power_intensity(scan1, areas, frequencies=f, band_type='octave')`<br><br>• `SoundPowerIntensityResult` |
| `SoundPowerIntensityResult` | `dataclass` | **Potencia sonora por barrido.**<br>• `partial_power`, `partial_power_level`<br>• `sound_power`, `sound_power_level` [dB] (NaN donde `negative_band`)<br>• `negative_band`: bool por banda (True donde P ≤ 0)<br>• `surface_pressure_intensity_index` (FpI)<br>• `negative_partial_power_index` (F+/-)<br>• `repeatability`, `dynamic_capability_index` (Ld)<br>• `achieved_grade`<br>• `surface_area`, `sound_power_level_a`, `grade` | `ir.sound_power_level, ir.achieved_grade` |
| `absorption_area` | `función` | **Área de absorción equivalente (ISO 354 Ec. 5/7).**<br>• `t60`: T [s]<br>• `volume` V [m³]<br>• `temperature` [°C] (def.: 20)<br>• `speed_of_sound` [m/s] (sobrescribe temperatura)<br>• `m`: atenuación del aire [1/m] (def.: 0) | `A = absorption_area(t60, volume=200)`<br><br>• A [m²] |
| `absorption_coefficient` | `función` | **Coeficiente de absorción sonora (ISO 354 Ec. 9).**<br>• `t1`, `t2`: T vacía / con muestra [s]<br>• `volume` V [m³]<br>• `sample_area` S [m²]<br>• `temperature1`/`temperature2` [°C]<br>• `speed_of_sound1`/`2`, `m1`/`m2` | `a = absorption_coefficient(t1, t2, 200, 10.8)`<br><br>• α_s (sin saturar, puede superar 1) |
| `attenuation_from_alpha` | `función` | **α de ISO 9613-1 → m (ISO 354 8.1.2.1).**<br>• `alpha`: atenuación [dB/m] | `m = attenuation_from_alpha(0.01)`<br><br>• m = α/(10 lg e) [1/m] |
| `air_attenuation` | `función` | **Coeficiente de atenuación atmosférica α (ISO 9613-1 Ec. 5).**<br>• `frequencies` [Hz]<br>• `temperature` [°C] (def.: 20)<br>• `relative_humidity` [%] (def.: 50)<br>• `pressure` [kPa] (def.: 101.325)<br>• `exact_midband`: ajusta a los centros de la Tabla 1 (def.: False) | `a = air_attenuation([1000, 4000], 20, 50)`<br><br>• α [dB/m] (×1000 = dB/km); fuera de rango avisa |
| `air_attenuation_m` | `función` | **m de atenuación de potencia de la ISO 354 desde condiciones (ISO 9613-1 + ISO 354).**<br>• Mismos parámetros que `air_attenuation` | `m = air_attenuation_m([1000, 4000], 20, 50)`<br><br>• m = α/(10 lg e) [1/m] |
| `AtmosphericAbsorptionWarning` | `clase warning` | **Aviso de fuera de rango de ISO 9613-1.**<br>Se emite en `air_attenuation` cuando temperatura/humedad/frecuencia salen de los rangos tabulados o la presión supera 200 kPa; el resultado se devuelve igualmente | `warnings.simplefilter('error', AtmosphericAbsorptionWarning)` |
| `geometric_divergence` | `función` | **Divergencia geométrica Adiv (ISO 9613-2 Ec. 7).**<br>• `distance` d [m] | `a = geometric_divergence(100.0)`<br><br>• 20 lg(d/d₀) + 11 = 51 dB a 100 m |
| `atmospheric_absorption` | `función` | **Término de absorción atmosférica Aatm (ISO 9613-2 Ec. 8).**<br>• `distance` d [m]<br>• `frequencies` [Hz]<br>• `temperature`/`humidity`/`pressure` | `aatm = atmospheric_absorption(200, bands)`<br><br>• α·d por banda [dB] |
| `ground_attenuation` | `función` | **Efecto del suelo Agr, método general (ISO 9613-2 7.3.1, Ec. 9).**<br>• `distance` d, `source_height` hs, `receiver_height` hr [m]<br>• `frequencies` [Hz]<br>• `ground_source`/`ground_middle`/`ground_receiver` G ∈ [0,1]<br>• `projected_distance` dp [m] | `agr = ground_attenuation(200, 2, 2, bands, 1, 1, 1)`<br><br>• As+Ar+Am por banda [dB] (negativo = ganancia) |
| `ground_attenuation_alternative` | `función` | **Efecto del suelo Agr, método ponderado A (ISO 9613-2 7.3.2, Ec. 10).**<br>• `distance` d [m]<br>• `mean_height` hm [m] | `agr = ground_attenuation_alternative(200, 2)`<br><br>• 4.8 − (2hm/d)·(17+300/d) ≥ 0 [dB] |
| `directivity_omega` | `función` | **Índice de directividad de ángulo sólido DΩ (ISO 9613-2 Ec. 11).**<br>• `source_height` hs, `receiver_height` hr, `projected_distance` dp [m] | `dw = directivity_omega(1.5, 1.5, 200)`<br><br>• 0…~3 dB (súmalo a Dc en el método 7.3.2) |
| `Barrier` | `dataclass` | **Geometría de difracción de la barrera (ISO 9613-2 7.4).**<br>• `source_to_edge` dss, `edge_to_receiver` dsr [m]<br>• `parallel_distance` a [m] (def.: 0)<br>• `edge_separation` e [m] (def.: None → difracción simple)<br>• `ground_reflections_by_image` (def.: False → C₂=20)<br>• `lateral` (def.: False → borde superior) | `b = Barrier(source_to_edge=101, edge_to_receiver=101)`<br><br>• `.is_double` cuando se da e |
| `barrier_attenuation` | `función` | **Difracción por barrera Dz (ISO 9613-2 Ec. 14).**<br>• `barrier`: `Barrier`<br>• `distance` d [m]<br>• `frequencies` [Hz] | `dz = barrier_attenuation(b, 200, bands)`<br><br>• 10 lg[3+(C₂/λ)C₃ z Kmet], limitado 20/25 dB |
| `meteorological_correction` | `función` | **Corrección meteorológica Cmet (ISO 9613-2 Ec. 21/22).**<br>• `projected_distance` dp, `source_height` hs, `receiver_height` hr [m]<br>• `c0`: factor C₀ [dB] | `c = meteorological_correction(200, 1.5, 1.5, 2.0)`<br><br>• C₀[1 − 10(hs+hr)/dp] ≥ 0 [dB] |
| `outdoor_propagation_attenuation` | `función` | **Atenuación total por bandas de octava A (ISO 9613-2 Ec. 4).**<br>• `distance` d, `source_height` hs, `receiver_height` hr [m]<br>• `frequencies` [Hz]<br>• `ground_source`/`ground_middle`/`ground_receiver` G<br>• `barrier`: `Barrier` o None<br>• `temperature`/`humidity`/`pressure` (def.: 20 °C/70 %/101.325 kPa, una atmósfera de referencia de la Tabla 2)<br>• `projected_distance` dp [m] | `att = outdoor_propagation_attenuation(200, 2, 2, bands, 1, 1, 1)`<br><br>• Desglose de términos `OutdoorAttenuation` |
| `predicted_receiver_level` | `función` | **Nivel predicho en el receptor por bandas (ISO 9613-2 Ec. 3/6).**<br>• `sound_power_level` Lw [dB]<br>• mismos parámetros de geometría/suelo/barrera/atmósfera que `outdoor_propagation_attenuation`<br>• `directivity_index` Di, `d_omega` DΩ [dB]<br>• `c0`: resta Cmet (def.: None) | `lp = predicted_receiver_level(lw, 200, 2, 2, bands)`<br><br>• LfT(DW) = Lw + Dc − A por banda [dB] |
| `OutdoorAttenuation` | `dataclass` | **Desglose de la atenuación ISO 9613-2 por banda.**<br>• `frequencies` [Hz]<br>• `a_div`, `a_atm`, `a_gr`, `a_bar` [dB]<br>• `a_total` = Adiv+Aatm+Agr+Abar [dB]<br>• `d_omega` [dB] | `att.a_div, att.a_bar, att.a_total` |
| `DEFAULT_FREQUENCIES` | `tuple` | **Bandas de octava nominales de la ISO 9613-2.**<br>(sin parámetros) | `DEFAULT_FREQUENCIES  # (63, …, 8000)` |
| `task_based_exposure` | `función` | **Exposición diaria basada en tareas LEX,8h + U (ISO 9612 apartado 9).**<br>• `tasks`: secuencia de `Task`<br>• `instrument`: 'class1'/'class2'/'personal_exposimeter' (def.)<br>• `u3` [dB] (def.: 1.0)<br>• `include_duration_uncertainty` (def.: True)<br>• `warn` (def.: True) | `res = task_based_exposure(tasks)`<br><br>• `ExposureResult` con desglose por tarea |
| `job_based_exposure` | `función` | **Exposición diaria basada en la función LEX,8h + U (ISO 9612 apartado 10).**<br>• `samples` Lp,A,eqT [dB]<br>• `effective_duration_hours` Te [h]<br>• `instrument`, `u3`<br>• `n_workers`/`sample_duration_hours`: comprobación Tabla 1 | `res = job_based_exposure(samples, 7.5)`<br><br>• `ExposureResult` (presupuesto Ec C.9 / Tabla C.4) |
| `full_day_exposure` | `función` | **Exposición diaria de jornada completa LEX,8h + U (ISO 9612 apartado 11).**<br>• `samples` Lp,A,eqT de jornada completa [dB]<br>• `effective_duration_hours` Te [h]<br>• `instrument`, `u3`, `warn` | `res = full_day_exposure(samples, 9.25)`<br><br>• `ExposureResult`; 3 muestras con ≥3 dB avisan |
| `Task` | `dataclass` | **Una tarea de una medición basada en tareas (ISO 9612 apartado 9).**<br>• `samples` [dB], `duration_hours` [h]<br>• `duration_samples`/`duration_range` (para u1b)<br>• `label`, `instrument` | `Task(samples=(80.1, 82.2), duration_hours=5.0)` |
| `ExposureResult` | `dataclass` | **Exposición diaria e incertidumbre (ISO 9612).**<br>• `lex_8h` [dB]<br>• `combined_standard_uncertainty` u [dB]<br>• `expanded_uncertainty` U = 1.65 u [dB]<br>• `upper_limit` = LEX,8h + U [dB]<br>• `strategy`, `sampling_advisory`, `tasks` | `res.lex_8h, res.upper_limit` |
| `TaskContribution` | `dataclass` | **Desglose por tarea dentro de `ExposureResult.tasks` (ISO 9612, apartado 9).**<br>• `label`, `lp_aeqt` (Ec. 7), `duration_hours`<br>• `lex_8h_contribution` (Ec. 8) [dB]<br>• términos de incertidumbre `u1a`, `u1b`, `c1a`, `c1b`, `u2`, `u3` | `res.tasks[0].lex_8h_contribution` |
| `table_c4_contribution` | `función` | **Contribución de muestreo c₁u₁ [dB] de la Tabla C.4 (ISO 9612, función/jornada completa).**<br>• `n_samples`: N (limitado a [3, 30])<br>• `u1`: incertidumbre típica de muestreo [dB]<br>• interpolación bilineal, anclada en u₁ = 0 | `table_c4_contribution(6, 2.0)  # 1.4` |
| `minimum_cumulative_duration_hours` | `función` | **Duración acumulada mínima de medición [h] (ISO 9612, Tabla 1).**<br>• `n_workers`: tamaño del grupo n_G (> 40 → 17 h; la norma aconseja dividir el grupo) | `minimum_cumulative_duration_hours(18)  # 10.75` |
| `COVERAGE_FACTOR` | `float` | **Factor de cobertura de ISO 9612, k = 1.65 (apartado 14).**<br>Confianza unilateral del 95 %: U = 1.65 u, límite superior LEX,8h + U | `COVERAGE_FACTOR  # 1.65` |
| `INSTRUMENT_U2` | `mapping` | **Incertidumbre típica instrumental u2 [dB] (ISO 9612, Tabla C.5).**<br>Con claves `'class1'` (0.7), `'class2'` (1.5), `'personal_exposimeter'` (1.5) | `INSTRUMENT_U2['class1']  # 0.7` |
| `OccupationalExposureWarning` | `clase warning` | **Aviso de muestreo de ISO 9612.**<br>Se emite por la dispersión de 3 dB de la tarea (apartado 9.3), c₁u₁ > 3.5 dB (apartado 10.4) o una duración acumulada de la Tabla 1 corta | `warnings.simplefilter('error', OccupationalExposureWarning)` |
| `SoundPowerWarning` | `clase warning` | **Problema de cualificación ISO 3744/3746/3741/9614-2.**<br>Se emite cuando el margen de fondo está por debajo del criterio, K2 supera el límite de validez, la potencia de una banda es negativa, o la sala no supera la cualificación; los niveles son entonces cotas superiores | `warnings.simplefilter("error", SoundPowerWarning)` |
| `AbsorptionWarning` | `clase warning` | **Aviso de ISO 354.**<br>Se emite para una sala por debajo de 150 m³, un área de muestra fuera de 10-12 m², una temperatura fuera de rango, o un α_s ≤ 0 no físico; el resultado se devuelve igualmente | `warnings.simplefilter("error", AbsorptionWarning)` |
| `speech_intelligibility_index` | `función` | **Índice de inteligibilidad del habla (ANSI S3.5-1997, método de tercios de octava).**<br>• `speech_spectrum`: 18 niveles espectrales equivalentes de habla, 160 Hz–8 kHz [dB SPL], o un esfuerzo vocal 'normal'/'raised'/'loud'/'shout' (Tabla 3)<br>• `noise_spectrum`: niveles espectrales equivalentes de ruido [dB SPL] (def.: None → silencio, −80 dB)<br>• `threshold`: umbral de audición equivalente [dB HL] (def.: None → 0) | `res = speech_intelligibility_index("normal", noise_spectrum=[40.0]*18)`<br><br>• `SIIResult`; `res.sii` = 0.066 |
| `standard_speech_spectrum` | `función` | **Espectro de habla normalizado por esfuerzo vocal (ANSI S3.5-1997 Tabla 3).**<br>• `vocal_effort`: 'normal', 'raised', 'loud' o 'shout' (def.: 'normal') | `u = standard_speech_spectrum('raised')`<br><br>• 18 niveles de banda [dB SPL] |
| `SIIResult` | `dataclass` | **Resultado del SII.**<br>• `sii`: índice en [0, 1]<br>• `band_audibility`: Ai por banda (apartado 5.8)<br>• `band_importance`: Ii (Tabla 3)<br>• `frequencies` [Hz]<br>• `speech_spectrum` / `disturbance` / `masking`: Ei′ / Di / Zi por banda [dB]<br>• `.plot()` | `res.sii, res.band_audibility` |
| `noise_criterion` | `función` | **Calificación NC por el método de tangencia (ANSI/ASA S12.2-2019).**<br>• `levels`: SPL por banda de octava [dB] (las 10 bandas 16 Hz–8 kHz sin `frequencies`)<br>• `frequencies`: centros de banda opcionales [Hz] (se admite un subconjunto) | `nc = noise_criterion(levels)`<br><br>• `NCResult`; la curva NC más alta tocada |
| `room_criterion` | `función` | **Calificación RC Mark II (ANSI/ASA S12.2-2019 Anexo D).**<br>• `levels`: SPL por banda de octava [dB]<br>• `frequencies`: centros de banda opcionales [Hz] | `rc = room_criterion(levels)`<br><br>• `RCResult`; media LMF + etiqueta 'N'/'R'/'H'/'RH' |
| `nc_curve` | `función` | **Niveles de una curva NC (Tabla 1).**<br>• `index`: designación NC 15–70 (los valores intermedios se interpolan banda a banda) | `nc_curve(35)  # [82, 71, 60, ...]`<br><br>• 10 niveles de banda [dB], 16 Hz–8 kHz |
| `rc_curve` | `función` | **Curva RC Mark II (Tabla D.1).**<br>• `index`: designación RC (valor a 1000 Hz) | `rc_curve(35)`<br><br>• Recta de −5 dB/octava, 10 bandas [dB] |
| `NCResult` | `dataclass` | **Resultado de la calificación NC.**<br>• `rating`: valor NC<br>• `governing_frequency`: banda del contacto [Hz]<br>• `frequencies` [Hz], `levels` [dB]<br>• `.plot()` | `nc.rating, nc.governing_frequency` |
| `RCResult` | `dataclass` | **Resultado RC Mark II.**<br>• `rating`: LMF redondeado [dB], int<br>• `lmf`: media de 500/1000/2000 Hz [dB]<br>• `classification`: 'N'/'R'/'H'/'RH'<br>• `reference_curve` [dB], `frequencies` [Hz], `levels` [dB]<br>• `.plot()` | `rc.rating, rc.classification` |
| `age_threshold` | `función` | **Distribución del umbral de audición por edad (ISO 7029:2017).**<br>• `age`: años (≥ 18)<br>• `sex`: 'male'/'female' (def.: 'male')<br>• `fractile`: fractil poblacional en (0, 1) (def.: 0.5)<br>• `frequencies`: subconjunto de las 11 frecuencias audiométricas [Hz] (def.: None → 125–8000 Hz) | `at = age_threshold(60, 'male')`<br><br>• `AgeThresholdResult`; mediana a 4 kHz = 20,2 dB |
| `reference_threshold` | `función` | **Umbral de referencia de la audición, 0 dB HL (ISO 389-7:2006 Tabla 1).**<br>• `field`: 'free-field' o 'diffuse-field' (def.: 'free-field')<br>• `frequencies`: subconjunto opcional [Hz] | `t = reference_threshold()`<br><br>• dB SPL por frecuencia audiométrica (1 kHz → 2,4) |
| `AgeThresholdResult` | `dataclass` | **Distribución del umbral por edad.**<br>• `age`, `sex`, `fractile`<br>• `frequencies` [Hz]<br>• `median`: desviación respecto a los 18 años [dB]<br>• `spread_upper` / `spread_lower`: dispersiones semigaussianas su/sl [dB]<br>• `threshold`: valor en `fractile` [dB]<br>• `.plot()` | `at.median, at.threshold` |
| `nipts` | `función` | **Desplazamiento permanente del umbral inducido por ruido (ISO 1999:2013 apartado 6.3).**<br>• `l_ex`: LEX,8h [dB]<br>• `years`: duración de la exposición (10–40 establecida; 1–10 extrapolada por la Fórmula 3)<br>• `fractile`: (0, 1) (def.: 0.5)<br>• `frequencies`: subconjunto [Hz] (def.: None → 500–6000 Hz) | `n = nipts(95.0, 20.0)`<br><br>• `NiptsResult`; N50 a 4 kHz = 23,0 dB |
| `htlan` | `función` | **Umbral asociado a la edad y al ruido, H′ = H + N − HN/120 (ISO 1999 Fórmula 1).**<br>• `age`: años (≥ 18), `sex`: 'male'/'female'<br>• `l_ex`: LEX,8h [dB], `years`<br>• `fractile`: (0, 1) aplicado a ambas componentes (def.: 0.5)<br>• `frequencies` | `h = htlan(60, 'male', 95.0, 20.0)`<br><br>• `HtlanResult`; H′ a 4 kHz = 39,3 dB |
| `NiptsResult` | `dataclass` | **Distribución del NIPTS.**<br>• `l_ex`, `years`, `fractile`<br>• `frequencies` [Hz]<br>• `median`: N50 (Fórmula 2/3) [dB]<br>• `value`: NIPTS en `fractile` (Fórmula 4/5) [dB]<br>• `spread_upper` / `spread_lower`: du/dl [dB]<br>• `.plot()` | `n.median, n.value` |
| `HtlanResult` | `dataclass` | **Resultado HTLAN combinado.**<br>• `age`, `sex`, `l_ex`, `years`, `fractile`<br>• `frequencies` [Hz]<br>• `htla`: componente por edad H [dB]<br>• `nipts`: componente por ruido N [dB]<br>• `threshold`: H′ combinado [dB]<br>• `.plot()` | `h.htla, h.nipts, h.threshold` |
| `predicted_prominence` | `función` | **Prominencia prevista P de un impulso (NT ACOU 112 Fórmula 1).**<br>• `onset_rate`: pendiente del crecimiento del nivel A/F [dB/s] (> 0; califica por encima de 10 dB/s)<br>• `level_difference`: subida de nivel durante el crecimiento [dB] (> 0) | `predicted_prominence(50.0, 20.0)  # 7.7`<br><br>• P = 3 lg(tasa) + 2 lg(dif.) |
| `impulse_adjustment` | `función` | **Ajuste KI al LAeq (Fórmula 2).**<br>• `prominence`: P | `impulse_adjustment(7.7)  # 4.86`<br><br>• 1,8(P − 5) dB para P > 5, si no 0 |
| `impulse_prominence` | `función` | **Prominencia dominante y ajuste de un conjunto de impulsos (apartados 7–8).**<br>• `onset_rates` [dB/s]<br>• `level_differences` [dB] | `r = impulse_prominence([50, 120], [20, 15])`<br><br>• `ImpulseProminenceResult` (P = 8,59, KI = 6,46 dB) |
| `rating_level` | `función` | **Nivel de valoración LAr,T sobre un tiempo de referencia (apartado 8, Nota 1).**<br>• `laeq`: LAeq,N por subintervalo [dB]<br>• `adjustment`: KI,N por subintervalo [dB]<br>• `durations`, `reference_time`: misma unidad de tiempo | `rating_level([55, 60], [0, 4.9], [20, 10], 30)  # 60.9` |
| `ImpulseProminenceResult` | `dataclass` | **Veredicto de prominencia de impulsos.**<br>• `onset_rates` [dB/s], `level_differences` [dB]<br>• `per_impulse`: P de cada impulso<br>• `prominence`: P dominante (el más alto)<br>• `adjustment`: KI del impulso dominante [dB]<br>• `.plot()` | `r.prominence, r.adjustment` |
| `multiple_shock_assessment` | `función` | **Evaluación completa con choques múltiples desde la aceleración del asiento (ISO 2631-5:2018).**<br>• `acceleration`: az(t) vertical del asiento [m/s²], `fs` [Hz]<br>• `start_age`: años, `years`: años de exposición, `days_per_year`<br>• `exposure_time` / `measurement_time`: escalan Dz a dosis diaria (def.: None)<br>• `sex`: 'male'/'female' (def.: 'male')<br>• `mz`: MPa por m/s² (def.: específico del sexo) | `res = multiple_shock_assessment(az, fs, start_age=25, years=30, days_per_year=220)`<br><br>• `MultipleShockResult` |
| `seat_to_spine_transfer` | `función` | **Función de transferencia asiento-columna H(ω) (apartado 5.2, Fórmula 1).**<br>• `frequencies` [Hz] | `H = seat_to_spine_transfer(freqs)`<br><br>• Respuesta compleja; unidad a 0 Hz |
| `spinal_response` | `función` | **Respuesta espinal vertical Az(t) (Fórmula 2).**<br>• `acceleration`: az(t) del asiento [m/s²]<br>• `fs` [Hz] | `Az = spinal_response(az, fs)`<br><br>• Misma longitud que la entrada [m/s²] |
| `response_peaks` | `función` | **Picos positivos de la respuesta Az,i (apartado 5.3).**<br>• `response`: Az(t) | `peaks = response_peaks(Az)`<br><br>• Máximos entre cruces por cero [m/s²] |
| `dose_from_peaks` | `función` | **Dosis de aceleración Dz desde los picos (Fórmula 3).**<br>• `peaks`: Az,i [m/s²] | `dz = dose_from_peaks(peaks)`<br><br>• Dz = 1,07 (Σ Az,i⁶)^(1/6) [m/s²] |
| `acceleration_dose` | `función` | **Dosis de aceleración Dz desde un registro temporal (Fórmulas 2 + 3).**<br>• `acceleration`: az(t) del asiento [m/s²], `fs` [Hz] | `dz = acceleration_dose(az, fs)`<br><br>• Dz [m/s²] |
| `daily_dose` | `función` | **Dosis diaria Dzd (Fórmula 4).**<br>• `dose`: Dz [m/s²]<br>• `exposure_time` td / `measurement_time` tm: misma unidad | `daily_dose(4.0, 8.0, 2.0)  # 5.04`<br><br>• Dz (td/tm)^(1/6) [m/s²] |
| `daily_dose_multi` | `función` | **Dosis diaria de varias condiciones de exposición (Fórmula 5).**<br>• `doses`: Dz,j [m/s²]<br>• `exposure_times` / `measurement_times`: por condición | `dzd = daily_dose_multi(dz, td, tm)`<br><br>• [Σ Dz,j⁶ (td,j/tm,j)]^(1/6) [m/s²] |
| `compression_dose` | `función` | **Tensión compresiva diaria Sd (Anexo C, Fórmula C.1).**<br>• `daily_dose_value`: Dzd [m/s²]<br>• `mz`: MPa por m/s² (def.: 0.029, varón de 82 kg) | `compression_dose(5.0)  # 0.145`<br><br>• Sd = mz·Dzd [MPa] |
| `static_stress` | `función` | **Tensión compresiva estática Sstat = mz·9,81 (Anexo C).**<br>• `mz` (def.: 0.029) | `static_stress()  # 0.284`<br><br>• [MPa] |
| `ultimate_strength` | `función` | **Resistencia lumbar última Su a una edad (Fórmula C.4).**<br>• `age`: años<br>• `sex`: 'male'/'female' (def.: 'male') | `ultimate_strength(45.0)  # 4.41`<br><br>• 6,75 − Sage·edad [MPa] |
| `injury_risk` | `función` | **Variable de tensión acumulada de lesión R (Fórmula C.3).**<br>• `daily_compression`: Sd [MPa]<br>• `start_age`, `years`, `days_per_year`<br>• `sex`, `mz` | `R = injury_risk(0.5, start_age=25, years=30, days_per_year=220)  # 0.509` |
| `injury_probability` | `función` | **Probabilidad de lesión lumbar P(R) (Fórmula C.5, Weibull).**<br>• `risk`: R<br>• `sex` (def.: 'male') | `injury_probability(0.509)  # 0.0389`<br><br>• 1 − exp(−(R/α)^β) en 0–1 |
| `MultipleShockResult` | `dataclass` | **Evaluación de salud con choques múltiples.**<br>• `acceleration_dose` Dz, `daily_dose` Dzd [m/s²]<br>• `compression_dose` Sd [MPa]<br>• `risk` R, `probability` P(R)<br>• `sex`, `start_age`, `years`, `days_per_year`<br>• `peaks` [m/s²], `risk_thresholds`: R al 10/50/90 % (Tabla C.2)<br>• `.plot()` | `res.risk, res.probability` |
| `object_fraction` | `función` | **Fracción de objetos ψ de un recinto (EN 12354-6 Fórmula 3).**<br>• `object_volumes` [m³]<br>• `volume`: recinto vacío V [m³] | `object_fraction([12.0, 8.0], 500.0)  # 0.04` |
| `hard_object_absorption` | `función` | **Área de absorción equivalente de un objeto duro (Fórmula 4).**<br>• `object_volume`: Vobj [m³] | `hard_object_absorption(8.0)  # 4.0`<br><br>• Aobj = Vobj^(2/3) [m²] |
| `air_absorption_area` | `función` | **Área de absorción equivalente del aire (Fórmula 2).**<br>• `m`: coeficiente de atenuación de potencia del aire [Np/m]<br>• `volume` V [m³]<br>• `object_fraction` ψ (def.: 0.0) | `air_absorption_area(0.001, 500.0)  # 2.0`<br><br>• Aair = 4mV(1 − ψ) [m²] |
| `equivalent_absorption_area` | `función` | **Área de absorción sonora equivalente total (Fórmula 1).**<br>• `surfaces`: secuencia de pares (área, coeficiente de absorción) (coeficiente escalar o por banda)<br>• `objects`: áreas de objetos Aobj [m²] (def.: ())<br>• `air_area`: Aair [m²] (def.: 0.0) | `A = equivalent_absorption_area([(100.0, 0.03), (50.0, 0.6)], objects=[4.0], air_area=2.0)  # 39.0` |
| `reverberation_time` | `función` | **Tiempo de reverberación desde el área de absorción (Fórmula 5).**<br>• `absorption_area` A [m²]<br>• `volume` V [m³]<br>• `object_fraction` ψ (def.: 0.0)<br>• `speed_of_sound` c0 [m/s] (def.: 345.6 → factor 0,16) | `reverberation_time(39.0, 500.0)  # 2.05`<br><br>• T = 55,3/c0 · V(1 − ψ)/A [s] |
| `enclosed_space_reverberation` | `función` | **Predicción de A y T por banda de octava (EN 12354-6 apartado 4).**<br>• `surfaces`: pares (área, α por banda)<br>• `volume` V [m³]<br>• `objects` [m²], `object_fraction` ψ<br>• `air_condition`: clave de atenuación del aire, p. ej. '20C_50-70' (def.: None → sin aire)<br>• `frequencies` [Hz] (def.: octavas 125–8000 Hz)<br>• `speed_of_sound` [m/s] | `res = enclosed_space_reverberation(surfaces, 500.0, air_condition="20C_50-70")`<br><br>• `ReverberationResult` |
| `ReverberationResult` | `dataclass` | **Resultado de absorción del recinto.**<br>• `frequencies` [Hz]<br>• `absorption_area`: A por banda [m²]<br>• `reverberation_time`: T por banda [s]<br>• `volume` [m³], `object_fraction`<br>• `.plot()` | `res.absorption_area, res.reverberation_time` |
| `combine_uncertainty` | `función` | **Ley de propagación de la incertidumbre de la GUM (ISO/IEC Guía 98-3, apartado 5).**<br>• `model`: función de medición f(x1…xN)<br>• `quantities`: objetos `Quantity` de entrada, en orden de argumentos<br>• `correlation`: matriz N×N opcional r_ij (def.: None → sin correlación) | `u = combine_uncertainty(lambda a, b: a*b, [Quantity(10.0, 0.1), Quantity(5.0, 0.2)])`<br><br>• `UncertaintyResult`; uc = 2,062 |
| `monte_carlo` | `función` | **Propagación por Monte Carlo (Guía 98-3-1, Suplemento 1).**<br>• `model`: f(x1…xN) vectorizada<br>• `quantities`: objetos `Quantity` de entrada<br>• `trials`: M (def.: 1000000)<br>• `coverage`: probabilidad del intervalo (def.: 0.95)<br>• `seed`: reproducibilidad (def.: None) | `mc = monte_carlo(model, quantities, seed=1)`<br><br>• `MonteCarloResult` (media, u, intervalo de cobertura) |
| `rectangular` | `función` | **Magnitud de Tipo B, PDF rectangular (GUM 4.3.7).**<br>• `value`, `half_width` a, `name` | `rectangular(20.0, 0.5)`<br><br>• `Quantity` con u = a/√3 = 0,289 |
| `triangular` | `función` | **Magnitud de Tipo B, PDF triangular (GUM 4.3.9).**<br>• `value`, `half_width` a, `name` | `triangular(20.0, 0.5)`<br><br>• `Quantity` con u = a/√6 |
| `u_shaped` | `función` | **Magnitud de Tipo B, PDF en U (arcoseno).**<br>• `value`, `half_width` a, `name` | `u_shaped(20.0, 0.5)`<br><br>• `Quantity` con u = a/√2 |
| `Quantity` | `dataclass` | **Magnitud de entrada de un modelo de medición (GUM apartado 4).**<br>• `value`: estimación xi<br>• `uncertainty`: u(xi) ≥ 0<br>• `distribution`: 'gaussian'/'rectangular'/'triangular'/'u-shaped' (def.: 'gaussian')<br>• `dof`: grados de libertad (def.: inf)<br>• `name`: etiqueta del balance | `Quantity(94.0, 0.3, name="calibrator")` |
| `UncertaintyResult` | `dataclass` | **Resultado de la propagación GUM.**<br>• `value`: y = f(x1…xN)<br>• `combined_uncertainty`: uc(y)<br>• `sensitivities`: ci = ∂f/∂xi<br>• `contributions`: \|ci\|·u(xi)<br>• `effective_dof`: Welch–Satterthwaite<br>• `names`<br>• `.plot()`: balance de incertidumbre | `u.combined_uncertainty, u.contributions` |
| `MonteCarloResult` | `dataclass` | **Resultado de Monte Carlo.**<br>• `value`: media muestral<br>• `standard_uncertainty`: desviación típica muestral<br>• `interval`: intervalo de cobertura (bajo, alto) (apartado 7.7)<br>• `coverage`, `trials` | `mc.value, mc.interval` |
| `sound_power_anechoic` | `función` | **Potencia sonora de precisión en sala (semi)anecoica (ISO 3745:2012).**<br>• `levels_positions`: niveles por posición (NM, NB) [dB]<br>• `surface`: 'sphere'/'hemisphere'<br>• `radius` r [m]<br>• `background_levels` + `frequencies`: para K1i<br>• `areas`: áreas parciales Si (Ec. 13) (def.: áreas iguales, Ec. 12)<br>• `temperature` [°C] (def.: 23), `static_pressure` [kPa] (def.: 101.325)<br>• `air_absorption_coefficient`: α(f) [dB/m] para C3<br>• `sigma_omc` [dB] (def.: 0), `coverage_factor` k (def.: 2.0) | `res = sound_power_anechoic(levels, 'hemisphere', radius=2.0, frequencies=f)`<br><br>• `PrecisionSoundPowerResult` |
| `PrecisionSoundPowerResult` | `dataclass` | **Resultado de potencia sonora ISO 3745.**<br>• `sound_power_level` [dB], `sound_power_level_a` [dB]<br>• `surface_pressure_level`, `mean_pressure_level` [dB]<br>• `background_correction`: K1i (NM, NB) [dB]<br>• `c1`, `c2`, `c3`: correcciones meteorológicas [dB]<br>• `directivity_index` DIi, `non_uniformity_index` VIr [dB]<br>• `surface_area` [m²], `surface`<br>• `uncertainty`, `uncertainty_bands`, `coverage_factor`<br>• `.plot()` | `res.sound_power_level, res.uncertainty` |
| `precision_positions` | `función` | **Coordenadas de micrófono de ISO 3745 (Anexos D/E).**<br>• `surface`: 'sphere' (Tabla D.1) / 'hemisphere' (Tablas E.1/E.2)<br>• `radius` r [m]<br>• `array`: 'general'/'broadband' (def.: 'general')<br>• `count`: 20 o 40 (def.: 40) | `xyz = precision_positions('hemisphere', radius=2.0)`<br><br>• Coordenadas (40, 3) [m] |
| `precision_background_correction` | `función` | **Corrección de fondo por posición K1i (ISO 3745 Ec. 11).**<br>• `source_levels` / `background_levels`: (NM, NB) [dB]<br>• `frequencies` [Hz]: criterio por banda (10 dB para 250–5000 Hz, 6 dB fuera) | `k1 = precision_background_correction(src, bg, f)`<br><br>• K1i [dB]; recortado + `SoundPowerWarning` por debajo del criterio |
| `meteorological_corrections` | `función` | **Correcciones C1, C2, C3 (bloque de la Ec. 14 de ISO 3745).**<br>• `temperature` θ [°C] (def.: 23), `static_pressure` ps [kPa] (def.: 101.325)<br>• `air_absorption_coefficient`: α(f) [dB/m] para C3 (def.: None → C3 = 0)<br>• `radius` r [m] (def.: 1.0) | `met = meteorological_corrections(23.0, 101.325)`<br><br>• `MeteorologicalCorrection`; C1 = −0,128 dB, C2 = 0 en condiciones de referencia |
| `MeteorologicalCorrection` | `dataclass` | **Correcciones C1/C2/C3.**<br>• `c1`: corrección de la magnitud de referencia [dB]<br>• `c2`: corrección de impedancia de radiación [dB]<br>• `c3`: corrección por absorción del aire [dB], escalar o por banda | `met.c1, met.c2, met.c3` |
| `precision_uncertainty` | `función` | **Incertidumbre expandida U = k·√(σR0² + σomc²) (ISO 3745 Ec. 24/25).**<br>• `sigma_r0`: reproducibilidad (Tablas 2/3) [dB]<br>• `sigma_omc` [dB] (def.: 0.0)<br>• `coverage_factor` k (def.: 2.0; 1.6 unilateral) | `precision_uncertainty(0.5)  # 1.0`<br><br>• U [dB], escalar o por banda |
| `sound_power_intensity_precision` | `función` | **Potencia sonora por barrido de intensidad, precisión (ISO 9614-3:2002).**<br>• `partial_intensity`: In,i con signo (N, NB) [W/m²]<br>• `areas`: áreas parciales Si [m²]<br>• `frequencies` [Hz]: para LWA<br>• `temperature` [°C] (def.: 23), `barometric_pressure` [Pa] (def.: 101325): para LW0 (Ec. 10) | `res = sound_power_intensity_precision(In, areas, frequencies=f)`<br><br>• `PrecisionIntensityResult` |
| `PrecisionIntensityResult` | `dataclass` | **Resultado de barrido ISO 9614-3.**<br>• `partial_power`: Pi = In,i·Si [W]<br>• `sound_power` P, `sound_power_level` LW [dB] (NaN donde P ≤ 0)<br>• `sound_power_level_normalized`: LW0 [dB]<br>• `not_applicable_band`: bool por banda<br>• `surface_area` [m²], `sound_power_level_a` [dB]<br>• `.plot()` | `res.sound_power_level, res.not_applicable_band` |
| `precision_field_indicators` | `función` | **Indicadores de campo del Anexo B de ISO 9614-3.**<br>• `segment_intensity`: In,j con signo (N, NB) [W/m²]<br>• `segment_pressure_levels`: Lpj (N, NB) [dB]<br>• `time_window_intensity`: (M, NB) para FT (def.: None) | `fi = precision_field_indicators(In, lp)`<br><br>• `PrecisionFieldIndicators` |
| `PrecisionFieldIndicators` | `dataclass` | **Indicadores del Anexo B (por banda).**<br>• `ft`: variabilidad temporal (= F1) o None<br>• `f_pi_unsigned`: F_pIn sin signo (= F2)<br>• `f_pi_signed`: F_pIn con signo (= F3), ≥ el de sin signo<br>• `fs`: no uniformidad de campo FS (= F4) | `fi.f_pi_signed, fi.fs` |
| `precision_qualification` | `función` | **Los cinco criterios de aceptación del Anexo C de ISO 9614-3.**<br>• `indicators`: `PrecisionFieldIndicators`<br>• `scan_intensity_level_1`/`_2`: LIn por barrido [dB] (criterio 1)<br>• `pressure_residual_index`: δpI0 [dB] (criterio 2, K = 10)<br>• `field_nonuniformity_1`/`_2`: FS por densidad de barrido (criterio 5)<br>• `frequencies` [Hz] o `repeatability_limit`: límite s de la Tabla 1 | `q = precision_qualification(fi, pressure_residual_index=18.0)`<br><br>• `PrecisionCriteria` |
| `PrecisionCriteria` | `dataclass` | **Criterios del Anexo C, pasa/no pasa por banda.**<br>• `criterion_1`…`criterion_5`: arrays booleanos o None si no evaluables<br>• `qualified`: conjunción de los criterios 1–4 o None | `q.qualified, q.criterion_2` |
| `plane_wave_frequency_range` | `función` | **Rango de trabajo de onda plana (f_l, f_u) (ISO 10534-2 apartados 4.2–4.5).**<br>• `spacing` s [m]<br>• `speed_of_sound` c0 [m/s]<br>• `diameter` d [m] (def.: None → solo el límite por separación)<br>• `shape`: 'circular'/'rectangular' (def.: 'circular') | `plane_wave_frequency_range(0.05, 343.2, diameter=0.1)  # (343.2, 1990.6)`<br><br>• [Hz] |
| `speed_of_sound_iso` | `función` | **Velocidad del sonido (ISO 10534-2 Ec. 5).**<br>• `temperature` T [K] | `speed_of_sound_iso(293.0)  # 343.2`<br><br>• c0 = 343,2 √(T/293) [m/s] |
| `air_density_iso` | `función` | **Densidad del aire (ISO 10534-2 Ec. 7).**<br>• `temperature` T [K]<br>• `atmospheric_pressure` [kPa] (def.: 101.325) | `air_density_iso(293.0)  # 1.186`<br><br>• ρ [kg/m³] |
| `speed_of_sound_astm` | `función` | **Velocidad del sonido (ASTM E2611-19 Ec. 4).**<br>• `temperature` T [°C] | `speed_of_sound_astm(20.0)  # 343.2`<br><br>• 20,047 √(273,15 + T) [m/s] |
| `air_density_astm` | `función` | **Densidad del aire (ASTM E2611-19 Ec. 5).**<br>• `temperature` T [°C]<br>• `atmospheric_pressure` P [kPa] (def.: 101.325) | `air_density_astm(20.0)  # 1.202`<br><br>• ρ [kg/m³] |
| `characteristic_impedance` | `función` | **Impedancia característica del aire ρc.**<br>• `density` ρ [kg/m³]<br>• `speed_of_sound` c [m/s] | `characteristic_impedance(1.186, 343.2)  # 407.0`<br><br>• [rayl] |
| `tube_attenuation_constant` | `función` | **Constante de atenuación del tubo k0″, cota inferior (ISO 10534-2 Ec. A.18).**<br>• `frequency` f [Hz]<br>• `speed_of_sound` c0 [m/s]<br>• `diameter` d [m] (hidráulico para tubo rectangular) | `tube_attenuation_constant(1000.0, 343.2, 0.1)  # 0.0179`<br><br>• [Np/m] |
| `tube_wavenumber` | `función` | **Número de onda complejo k0 = k0′ − j k0″ (ISO 10534-2 apartado 2.6).**<br>• `frequency` f [Hz]<br>• `speed_of_sound` c0 [m/s]<br>• `attenuation`: k0″ [Np/m] (def.: None → sin pérdidas) | `tube_wavenumber(1000.0, 343.2, attenuation=0.018)`<br><br>• 18,308 − 0,018j [1/m] |
| `mic_calibration_factor` | `función` | **Factor de calibración por desajuste de micrófonos Hc (ISO 10534-2 Ec. 10).**<br>• `h12_config1`: H12 en la configuración estándar<br>• `h12_config2`: H12 con los micrófonos intercambiados | `hc = mic_calibration_factor(h12_a, h12_b)`<br><br>• Hc = √(H12ᴵ/H12ᴵᴵ) (complejo) |
| `apply_mic_calibration` | `función` | **Aplica el factor de calibración (Ec. 13).**<br>• `h12_uncorrected`<br>• `calibration_factor`: Hc | `h12 = apply_mic_calibration(h12_raw, hc)`<br><br>• H12 = H12,raw/Hc |
| `reflection_factor` | `función` | **Factor de reflexión complejo en la superficie de la muestra (ISO 10534-2 Ec. 17).**<br>• `h12`: función de transferencia corregida<br>• `spacing` s [m]<br>• `x1`: distancia de la muestra al micrófono más lejano [m]<br>• `wavenumber`: k0 complejo | `r = reflection_factor(h12, spacing=0.05, x1=0.15, wavenumber=k0)`<br><br>• r = (H12 − HI)/(HR − H12)·e^(+2jk0x1) |
| `absorption_from_reflection` | `función` | **Coeficiente de absorción en incidencia normal (Ec. 18).**<br>• `reflection`: r complejo | `absorption_from_reflection(0.5)  # 0.75`<br><br>• α = 1 − \|r\|² |
| `surface_impedance` | `función` | **Impedancia superficial absoluta Z (Ec. 19).**<br>• `reflection`: r complejo<br>• `characteristic_impedance`: ρc0 [rayl] | `surface_impedance(0.5, 407.0)  # 1221`<br><br>• Z = ρc0(1 + r)/(1 − r) [rayl] |
| `normalized_surface_impedance` | `función` | **Impedancia superficial normalizada Z/(ρc0) (Ec. 19).**<br>• `reflection`: r complejo | `normalized_surface_impedance(0.5)  # 3.0` |
| `normalized_surface_admittance` | `función` | **Admitancia superficial normalizada Gρc0 (Ec. 20).**<br>• `reflection`: r complejo | `normalized_surface_admittance(0.5)  # 0.333`<br><br>• (1 − r)/(1 + r) |
| `two_microphone_impedance` | `función` | **Reducción completa de dos micrófonos (ISO 10534-2 apartado 7).**<br>• `h12`: función de transferencia corregida<br>• `frequency` f [Hz]<br>• `spacing` s [m], `x1` [m]<br>• `speed_of_sound` c0 [m/s], `characteristic_impedance` ρc0 [rayl]<br>• `attenuation`: k0″ [Np/m] (def.: None)<br>• `diameter` + `shape`: activan la comprobación del rango de onda plana | `res = two_microphone_impedance(h12, frequency=f, spacing=0.05, x1=0.15, speed_of_sound=343.2, characteristic_impedance=407.0)`<br><br>• `ImpedanceTubeResult` |
| `ImpedanceTubeResult` | `dataclass` | **Resultado de dos micrófonos por frecuencia.**<br>• `frequency` [Hz]<br>• `reflection`: r complejo (Ec. 17)<br>• `surface_impedance` [rayl], `normalized_impedance` (Ec. 19)<br>• `absorption`: α = 1 − \|r\|² (Ec. 18) | `res.absorption, res.normalized_impedance` |
| `ImpedanceTubeWarning` | `clase warning` | **Aviso de ISO 10534-2.**<br>Se emite en `two_microphone_impedance` para frecuencias fuera del rango de trabajo de onda plana (Ecs. 1–4); los resultados se devuelven igualmente | `warnings.simplefilter('error', ImpedanceTubeWarning)` |
| `standing_wave_ratio_from_level` | `función` | **Razón de onda estacionaria desde ΔL (ISO 10534-1 Ec. 15).**<br>• `level_difference`: Lmax − Lmin [dB] | `standing_wave_ratio_from_level(20.0)  # 10.0`<br><br>• s = 10^(ΔL/20) |
| `standing_wave_reflection_magnitude` | `función` | **Módulo de la reflexión desde la ROE (Ec. 14).**<br>• `swr`: s ≥ 1 | `standing_wave_reflection_magnitude(10.0)  # 0.818`<br><br>• \|r\| = (s − 1)/(s + 1) |
| `standing_wave_reflection` | `función` | **Factor de reflexión complejo desde la onda estacionaria (Ecs. 17–23).**<br>• `swr`: s<br>• `first_min_distance`: x_min1 [m]<br>• `wavelength`: λ0 [m] | `standing_wave_reflection(10.0, 0.05, 0.4)  # -0.818j`<br><br>• fase φ = π(4x_min1/λ0 − 1) |
| `standing_wave_absorption` | `función` | **Absorción desde la ROE (Ecs. 9 + 14).**<br>• `swr`: s ≥ 1 | `standing_wave_absorption(10.0)  # 0.331`<br><br>• α = 4s/(s + 1)² |
| `standing_wave_normalized_impedance` | `función` | **Impedancia normalizada desde la onda estacionaria (Ecs. 24–26).**<br>• `swr`, `first_min_distance` [m], `wavelength` [m] | `standing_wave_normalized_impedance(10.0, 0.05, 0.4)`<br><br>• 0,198 − 0,98j |
| `wave_decomposition` | `función` | **Descompone el campo en (A, B, C, D) (ASTM E2611-19 Ecs. 17–20).**<br>• `h1`…`h4`: funciones de transferencia de los micrófonos<br>• `l1`, `s1`, `l2`, `s2`: geometría [m]<br>• `wavenumber` k | `A, B, C, D = wave_decomposition(h1, h2, h3, h4, l1=0.2, s1=0.05, l2=0.2, s2=0.05, wavenumber=k)`<br><br>• Amplitudes directa/inversa, ambos lados |
| `face_quantities` | `función` | **Presiones y velocidades en las caras (Ec. 21).**<br>• `a`, `b`, `c`, `d`: amplitudes de onda<br>• `wavenumber` k, `thickness` d [m], `characteristic_impedance` ρc | `p0, pd, u0, ud = face_quantities(A, B, C, D, wavenumber=k, thickness=0.05, characteristic_impedance=407.0)` |
| `transfer_matrix_two_load` | `función` | **Matriz de transferencia con dos cargas (ASTM E2611-19 Ecs. 17–22).**<br>• `load_a`, `load_b`: (H1, H2, H3, H4) por terminación<br>• `l1`, `s1`, `l2`, `s2`, `thickness` [m]<br>• `wavenumber`, `characteristic_impedance` | `T = transfer_matrix_two_load(load_a, load_b, l1=0.2, s1=0.05, l2=0.2, s2=0.05, thickness=0.05, wavenumber=k, characteristic_impedance=407.0)`<br><br>• `TransferMatrix` |
| `transfer_matrix_one_load` | `función` | **Matriz de transferencia con una carga, muestra simétrica (Ecs. 23–24).**<br>• `load`: (H1, H2, H3, H4)<br>• Los mismos parámetros de geometría que `transfer_matrix_two_load` | `T = transfer_matrix_one_load(load, l1=0.2, s1=0.05, l2=0.2, s2=0.05, thickness=0.05, wavenumber=k, characteristic_impedance=407.0)`<br><br>• Requiere reciprocidad + simetría |
| `air_layer_transfer_matrix` | `función` | **Matriz analítica de una capa de aire sin pérdidas (referencia de validación).**<br>• `wavenumber` k<br>• `thickness` d [m]<br>• `characteristic_impedance` ρc [rayl] | `T = air_layer_transfer_matrix(k, 0.05, 407.0)`<br><br>• det(T) = 1, T11 = T22 |
| `TransferMatrix` | `dataclass` | **Matriz de transferencia acústica [[T11, T12], [T21, T22]] (ASTM E2611-19 Ec. 16).**<br>• `t11`, `t12`, `t21`, `t22`: complejos, escalares o por frecuencia | `T.t11, T.t12` |
| `airflow_resistance` | `función` | **Resistencia al flujo de aire R = Δp/qv (ISO 9053-1:2018 apartado 3.1).**<br>• `pressure_drop` Δp [Pa]<br>• `volume_flow_rate` qv [m³/s] | `airflow_resistance(2.0, 0.0005)  # 4000.0`<br><br>• [Pa·s/m³] |
| `specific_airflow_resistance` | `función` | **Resistencia específica al flujo de aire Rs (apartado 3.2).**<br>• `resistance` R + `area` A, **o** `pressure_drop` Δp + `velocity` u | `specific_airflow_resistance(4000.0, 0.01)  # 40.0`<br><br>• Rs = R·A = Δp/u [Pa·s/m] |
| `airflow_resistivity` | `función` | **Resistividad al flujo de aire σ = Rs/d (apartado 3.3).**<br>• `specific_resistance` Rs [Pa·s/m]<br>• `thickness` d [m] | `airflow_resistivity(40.0, 0.05)  # 800.0`<br><br>• [Pa·s/m²] |
| `linear_airflow_velocity` | `función` | **Velocidad lineal del flujo u = qv/A (apartado 3.4).**<br>• `volume_flow_rate` qv [m³/s]<br>• `area` A [m²] | `linear_airflow_velocity(5e-6, 0.01)  # 0.0005`<br><br>• [m/s] |
| `static_airflow_resistance` | `función` | **Determinación escalonada por el método estático (ISO 9053-1 apartado 7.5).**<br>• `velocities` u [m/s], `pressure_drops` Δp [Pa] (≥ 2 escalones)<br>• `area` A [m²]<br>• `thickness` d [m] (def.: None → sin σ)<br>• `evaluation_velocity` [m/s] (def.: 0.0005) | `res = static_airflow_resistance([0.0005, 0.001, 0.002], [0.02, 0.041, 0.086], 0.01, 0.05)`<br><br>• `StaticAirflowResult` (Rs = 40,0, σ = 800) |
| `StaticAirflowResult` | `dataclass` | **Resultado del método estático a la velocidad de evaluación.**<br>• `resistance` R [Pa·s/m³], `specific_resistance` Rs [Pa·s/m]<br>• `resistivity` σ [Pa·s/m²] o None<br>• `evaluation_velocity` [m/s], `pressure_drop` [Pa]<br>• `linear_coefficient` a (Rs a velocidad cero), `quadratic_coefficient` b | `res.specific_resistance, res.resistivity` |
| `piston_volume_flow_rate` | `función` | **Caudal eficaz del pistón qv = 2πf·h·AP (ISO 9053-2 apartado 6.2).**<br>• `frequency` f [Hz]<br>• `stroke_amplitude` h [m]<br>• `piston_area` AP [m²] | `piston_volume_flow_rate(2.0, 0.005, 0.01)  # 0.000628`<br><br>• [m³/s] |
| `alternating_airflow_resistance` | `función` | **Resistencia por el método alterno (ISO 9053-2:2020 Fórmula 2).**<br>• `level_specimen` Lps / `level_termination` Lpt [dB]<br>• `piston_stroke_specimen` hs / `piston_stroke_termination` ht [m]<br>• `frequency` f [Hz] (1–4 Hz), `cavity_volume` V [m³]<br>• `static_pressure` [Pa] (def.: 101325)<br>• `kappa_prime` κ′ (def.: 1.4; usa `effective_kappa` para conformidad con el Anexo A)<br>• `background_level` Lpb [dB] (def.: None) | `r = alternating_airflow_resistance(78.0, 60.0, piston_stroke_specimen=5e-3, piston_stroke_termination=5e-4, frequency=2.0, cavity_volume=7.854e-4)`<br><br>• R [Pa·s/m³]; `AirflowResistanceWarning` si fallan los criterios |
| `thermal_boundary_layer_thickness` | `función` | **Espesor de la capa límite térmica b (ISO 9053-2 Fórmulas A.4/A.5).**<br>• `frequency` f [Hz]<br>• Propiedades del aire (def.: valores del Anexo A.3) | `thermal_boundary_layer_thickness(2.0)  # 0.00183`<br><br>• [m] |
| `effective_kappa` | `función` | **Razón efectiva de calores específicos κ′ (Fórmula A.7).**<br>• `cavity_surface` S [m²], `cavity_volume` V [m³]<br>• `frequency` f [Hz]<br>• Propiedades del aire (def.: valores del Anexo A.3) | `effective_kappa(0.0471, 7.854e-4, 2.0)  # 1.37`<br><br>• El ejemplo resuelto del Anexo A.3 |
| `AirflowResistanceWarning` | `clase warning` | **Aviso de ISO 9053.**<br>Se emite por una velocidad por encima del límite estático de 15 mm/s, una frecuencia de pistón fuera de 1–4 Hz, o un criterio de validez de las Fórmulas 3/4 no satisfecho | `warnings.simplefilter('error', AirflowResistanceWarning)` |
| `practical_absorption_coefficient` | `función` | **Coeficientes prácticos αp (ISO 11654 apartado 4.1).**<br>• `third_octave_alpha_s`: los 15 αs en tercios de octava, 200–5000 Hz (secuencia o mapping por banda) | `ap = practical_absorption_coefficient(alpha_s)`<br><br>• 5 valores de octava (250–4000 Hz), pasos de 0,05, tope 1,00 |
| `weighted_absorption` | `función` | **Absorción ponderada αw + clase (ISO 11654 apartado 4.2).**<br>• `alpha_p`: los 5 coeficientes prácticos de octava | `w = weighted_absorption([0.25, 0.7, 0.95, 1.0, 0.85])`<br><br>• `AbsorptionRatingResult` (αw = 0,55, clase D, 'MH') |
| `absorption_class` | `función` | **Clase de absorción sonora (Tabla B.1).**<br>• `alpha_w`: múltiplo de 0,05 en [0, 1] | `absorption_class(0.7)  # 'C'`<br><br>• 'A'–'E' o 'Not classified' |
| `AbsorptionRatingResult` | `dataclass` | **Resultado de la valoración αw.**<br>• `alpha_w`: curva desplazada leída a 500 Hz<br>• `shape_indicator`: concatenación 'L'/'M'/'H' o ''<br>• `absorption_class`: 'A'–'E'/'Not classified'<br>• `shift`, `unfavourable_sum` (≤ 0,10)<br>• `band_centers` [Hz], `measured`, `shifted_reference`<br>• `.plot()` | `w.alpha_w, w.absorption_class` |
| `OCTAVE_BANDS` | `tuple` | **Bandas de octava de valoración de ISO 11654 [Hz].**<br>(250, 500, 1000, 2000, 4000) | `OCTAVE_BANDS  # (250, ..., 4000)` |
| `THIRD_OCTAVE_BANDS` | `tuple` | **Bandas de tercio de octava de entrada de ISO 11654 [Hz].**<br>200 Hz a 5000 Hz (15 bandas) | `THIRD_OCTAVE_BANDS[0]  # 200` |
| `REFERENCE_CURVE` | `mapping` | **Curva de referencia de la Figura 1 de ISO 11654 (solo lectura).**<br>Indexada por banda de octava [Hz] → coeficiente | `REFERENCE_CURVE[250]  # 0.8` |
| `speed_of_sound` | `función` | **Velocidad del sonido (ISO 17497-1 Ec. 2).**<br>• `temperature` t [°C] | `speed_of_sound(20.0)  # 343.2`<br><br>• 343,2 √((273,15 + t)/293,15) [m/s] |
| `air_attenuation_coefficient` | `función` | **Atenuación de energía m desde el α de ISO 9613-1 (ISO 17497-1 Ec. 3).**<br>• `pressure_attenuation_db_per_m`: α [dB/m] | `air_attenuation_coefficient(0.005)  # 0.00115`<br><br>• m ≈ α/4,343 [1/m] |
| `random_incidence_absorption` | `función` | **Absorción en incidencia aleatoria αs (ISO 17497-1 Ec. 1).**<br>• `volume` V [m³], `area` S [m²]<br>• `c1`/`T1`: placa base estática, sin muestra<br>• `c2`/`T2`: con la muestra de ensayo<br>• `m1`/`m2`: atenuación del aire [1/m] (def.: 0) | `a_s = random_incidence_absorption(200.0, 10.8, c1=343.0, T1=2.5, c2=343.2, T2=1.8)  # 0.463` |
| `specular_absorption_coefficient` | `función` | **Absorción especular αspec (Ec. 4).**<br>• `volume`, `area`<br>• `c3`/`T3`: placa base rotatoria, sin muestra<br>• `c4`/`T4`: muestra sobre la plataforma rotatoria<br>• `m3`/`m4` (def.: 0) | `a_spec = specular_absorption_coefficient(200.0, 10.8, c3=c3, T3=t3, c4=c4, T4=t4)`<br><br>• Incluye la energía perdida por dispersión |
| `scattering_coefficient` | `función` | **Coeficiente de dispersión en incidencia aleatoria s (Ec. 5).**<br>• `alpha_spec`, `alpha_s`<br>• `truncate_negative`: recorta s < 0 a 0 (def.: True); s > 1 se conserva | `scattering_coefficient(0.45, 0.30)  # 0.214`<br><br>• s = (αspec − αs)/(1 − αs) |
| `scattering_coefficient_spectrum` | `función` | **Espectro de dispersión s(f) (Ec. 5).**<br>• `frequencies`: centros de tercio de octava [Hz]<br>• `specular_absorption`, `random_absorption`: por banda<br>• `truncate_negative` (def.: True) | `res = scattering_coefficient_spectrum(f, a_spec, a_s)`<br><br>• `ScatteringResult` |
| `ScatteringResult` | `dataclass` | **Resultado del espectro de dispersión.**<br>• `frequencies` [Hz]<br>• `scattering`: s por banda<br>• `random_incidence`: αs, `specular`: αspec<br>• `.plot()` | `res.scattering` |
| `base_plate_scattering` | `función` | **Dispersión de la placa base sola (Ec. 6).**<br>• `volume`, `area`<br>• `c1`/`T1`: estática, `c3`/`T3`: rotatoria<br>• `m1`/`m3` (def.: 0) | `s_base = base_plate_scattering(200.0, 10.8, c1=c1, T1=t1, c3=c3, T3=t3)`<br><br>• Métrica de calidad frente a la Tabla 1 |
| `check_base_plate_scattering` | `función` | **Verifica la placa base contra la Tabla 1 (apartado 6.2).**<br>• `scattering`: mapping por banda [Hz] o 18 valores ordenados como `BASE_PLATE_BANDS` | `check_base_plate_scattering(s_base)  # ()`<br><br>• Bandas infractoras; `ScatteringDiffusionWarning` si hay alguna |
| `BASE_PLATE_BANDS` | `tuple` | **Bandas de comprobación de la placa base de ISO 17497-1 [Hz].**<br>100 Hz a 5000 Hz (18 tercios de octava) | `BASE_PLATE_BANDS[0]  # 100` |
| `BASE_PLATE_MAX_SCATTERING` | `mapping` | **Límites de dispersión de la placa base de la Tabla 1 (solo lectura).**<br>Indexado por banda [Hz] → s máximo | `BASE_PLATE_MAX_SCATTERING[500]  # 0.05` |
| `reverberation_time_uncertainty` | `función` | **Incertidumbre típica de un T medio (ISO 17497-1 Ec. A.1).**<br>• `times`: N ≥ 2 medidas promediadas espacialmente [s] | `reverberation_time_uncertainty([2.31, 2.28, 2.35])  # 0.0203`<br><br>• Error típico de la media [s] |
| `absorption_coefficient_uncertainty` | `función` | **Incertidumbre de un coeficiente de Sabine (Ecs. A.3/A.4).**<br>• `volume`, `area`<br>• `c` [m/s]<br>• `T_a`/`u_a`, `T_b`/`u_b`: las dos situaciones [s] | `u_alpha = absorption_coefficient_uncertainty(200.0, 10.8, c=343.2, T_a=2.5, u_a=0.02, T_b=1.8, u_b=0.02)` |
| `scattering_coefficient_uncertainty` | `función` | **Incertidumbre del coeficiente de dispersión (Ec. A.5).**<br>• `alpha_spec`, `alpha_s`<br>• `u_alpha_spec`, `u_alpha_s` | `u = scattering_coefficient_uncertainty(0.45, 0.30, 0.02, 0.02)`<br><br>• `ScatteringUncertainty` (U = 2u, 95 %) |
| `ScatteringUncertainty` | `dataclass` | **Resultado de incertidumbre de dispersión.**<br>• `u_scattering`: u_s típica combinada<br>• `expanded`: U = 2u_s | `u.u_scattering, u.expanded` |
| `directional_diffusion_coefficient` | `función` | **Coeficiente de difusión direccional d_θ (ISO 17497-2 Fórmulas 5/6).**<br>• `levels`: n ≥ 2 SPL reflejados [dB] (−inf = energía nula)<br>• `area_weights`: Ni (Fórmula 8) (def.: None → áreas iguales, Fórmula 5) | `directional_diffusion_coefficient([-10., -12., -15., -11., -13.])  # 0.854` |
| `directional_diffusion` | `función` | **Respuesta polar + su coeficiente.**<br>• `angles` [°], `levels` [dB]<br>• `weights`: Ni (def.: None) | `res = directional_diffusion(angles, levels)`<br><br>• `DiffusionResult` |
| `DiffusionResult` | `dataclass` | **Resultado de difusión polar.**<br>• `angles` [°], `levels` [dB]<br>• `coefficient`: d_θ (autocorrelación)<br>• `.plot()` | `res.coefficient` |
| `normalized_diffusion_coefficient` | `función` | **Coeficiente normalizado d_θ,n (Fórmula 7).**<br>• `d_theta`: superficie de ensayo<br>• `d_theta_reference`: referencia plana | `normalized_diffusion_coefficient(0.6, 0.2)  # 0.5`<br><br>• (d − d_r)/(1 − d_r) |
| `area_factors` | `función` | **Pesos de área por receptor Ni (apartado 8.3, Fórmula 8).**<br>• `elevations`: θ [°], 0–90<br>• `delta_theta` [°]<br>• `delta_phi` [°] (def.: None → `delta_theta`) | `n_i = area_factors([0, 15, 30, 45, 60, 75, 90], delta_theta=15.0)`<br><br>• Adimensionales, mínimo 1 |
| `random_incidence_diffusion` | `función` | **Coeficiente de difusión en incidencia aleatoria d (apartado 8.4).**<br>• `directional_coefficients`: d_θ por fuente<br>• `weights`: pesos de fuente (def.: None → iguales; 2-D usa `TWO_DIMENSIONAL_SOURCE_WEIGHTS`) | `d = random_incidence_diffusion(d_thetas, weights=TWO_DIMENSIONAL_SOURCE_WEIGHTS)` |
| `TWO_DIMENSIONAL_SOURCE_WEIGHTS` | `tuple` | **Pesos de fuente en un solo plano de ISO 17497-2.**<br>(1, 3, 3, 3, 3) para 0°, ±30°, ±60° | `TWO_DIMENSIONAL_SOURCE_WEIGHTS` |
| `ScatteringDiffusionWarning` | `clase warning` | **Aviso de ISO 17497.**<br>Se emite por condiciones de medida de dispersión/difusión fuera de rango (p. ej. una placa base sobre los límites de la Tabla 1) | `warnings.simplefilter('error', ScatteringDiffusionWarning)` |
| `adrienne_window` | `función` | **Ventana temporal de tipo Adrienne (ISO 13472-1 apartado 6.4).**<br>• `fs` [Hz]<br>• `flat_duration` [s] (def.: 0.005)<br>• `leading_duration` [s] (def.: 0.0005), `trailing_duration` [s] (def.: 0.005)<br>• `leading_edge`/`trailing_edge`: 'blackman-harris' o 'cosine-squared' | `w = adrienne_window(48000)`<br><br>• Flanco de subida + meseta + flanco de caída, pico 1,0 |
| `geometric_spreading_factor` | `función` | **Factor de divergencia geométrica Kr (apartado 4.1).**<br>• `source_height` ds [m] (def.: 1.25)<br>• `mic_height` dm [m] (def.: 0.25) | `geometric_spreading_factor()  # 0.6667`<br><br>• Kr = (ds − dm)/(ds + dm) |
| `geometric_spreading_factor_angle` | `función` | **Factor oblicuo Kr,θ (Anexo F).**<br>• `incidence_angle` θ [rad]<br>• `source_height`, `mic_height` | `geometric_spreading_factor_angle(np.pi/6)  # 0.764` |
| `reflected_path_delay` | `función` | **Retardo del camino reflejado Δτ = 2dm/c (Anexo C).**<br>• `mic_height` dm [m] (def.: 0.25)<br>• `speed_of_sound` c [m/s] (def.: 340.0) | `reflected_path_delay()  # 0.001471`<br><br>• [s] |
| `insitu_reflection_factor` | `función` | **Factor de reflexión complejo r(f) (ISO 13472-1 apartado 4.1).**<br>• `incident_ir` / `reflected_ir`: respuestas al impulso enventanadas<br>• `source_height`, `mic_height` [m]<br>• `incidence_angle` [rad] (def.: 0)<br>• `fs` + `delay`: deshacen el retardo del camino reflejado (def.: None)<br>• `n`: longitud de la FFT | `r = insitu_reflection_factor(hi, hr, fs=48000, delay=dtau)`<br><br>• (1/Kr)·Hr(f)/Hi(f) en los bins de la rfft |
| `insitu_absorption_from_reflection` | `función` | **α desde el factor de reflexión (apartado 4.1).**<br>• `reflection`: r complejo | `alpha = insitu_absorption_from_reflection(r)`<br><br>• α = 1 − \|r\|² |
| `power_reflection_coefficient` | `función` | **Factor de reflexión de potencia QW(f), ruta directa de energía.**<br>• `incident_ir`, `reflected_ir`<br>• `source_height`, `mic_height`, `incidence_angle`, `n` | `qw = power_reflection_coefficient(hi, hr)`<br><br>• (1/Kr²)\|Hr/Hi\|², independiente del desfase temporal |
| `insitu_absorption_coefficient` | `función` | **Absorción de banda estrecha α(f) (apartado 4.1).**<br>• Los mismos parámetros que `power_reflection_coefficient` | `alpha = insitu_absorption_coefficient(hi, hr)`<br><br>• α = 1 − QW(f) |
| `one_third_octave_absorption` | `función` | **Agrega α de banda estrecha en tercios de octava.**<br>• `frequency` [Hz], `absorption`<br>• `f_min` (def.: 250), `f_max` (def.: 4000; 1600 para la Parte 2) [Hz]<br>• `clip_negative` (def.: True) | `fc, ab = one_third_octave_absorption(f, alpha)`<br><br>• Centros de banda + α promediada linealmente (nan si vacía) |
| `insitu_absorption_spectrum` | `función` | **Espectro in situ de extremo a extremo (ISO 13472-1).**<br>• `incident_ir`, `reflected_ir`, `fs` [Hz]<br>• geometría + `incidence_angle`<br>• `f_min`/`f_max` [Hz], `clip_negative` | `res = insitu_absorption_spectrum(hi, hr, 48000)`<br><br>• `InsituAbsorptionResult` |
| `InsituAbsorptionResult` | `dataclass` | **Espectro de absorción in situ.**<br>• `frequencies`: centros de tercio de octava [Hz]<br>• `absorption`: α por banda (nan si vacía)<br>• `.plot()` | `res.absorption` |
| `absorption_reference_corrected` | `función` | **Absorción del pavimento corregida por referencia (Anexo B).**<br>• `road_reflection` / `reference_reflection`: Qp medidos (complejos, misma geometría) | `alpha = absorption_reference_corrected(q_road, q_ref)`<br><br>• 1 − \|Qp,road/Qp,ref\|²; elimina el error de la cadena y Kr |
| `max_sampled_area_radius` | `función` | **Radio del área máxima muestreada (Anexo A).**<br>• `window_width` Tw [s]<br>• `source_height`, `mic_height`, `speed_of_sound` | `max_sampled_area_radius(0.005)  # 1.34`<br><br>• [m], el ejemplo resuelto del Anexo A |
| `msa_major_axis` | `función` | **Eje mayor del elipsoide muestreado oblicuo (Anexo F).**<br>• `window_width` Tw [s]<br>• `projected_distance` dp [m]<br>• `source_height`, `mic_height`, `speed_of_sound` | `msa_major_axis(0.005, 0.0)  # 3.2`<br><br>• a = cTw + √((ds + dm)² + dp²) [m] |
| `spot_tube_upper_frequency` | `función` | **Frecuencia superior del tubo puntual (ISO 13472-2 apartado 5.4.1).**<br>• `diameter` d [m]<br>• `speed_of_sound` (def.: 340.0) | `spot_tube_upper_frequency(0.1)  # 1972`<br><br>• f_u = 0,58c0/d [Hz] |
| `spot_microphone_spacing_bounds` | `función` | **Límites de separación (s_min, s_max) (apartado 5.4.2).**<br>• `speed_of_sound` (def.: 340.0)<br>• `f_min` (def.: 220), `f_max` (def.: 1800) [Hz] | `spot_microphone_spacing_bounds()  # (0.0773, 0.085)`<br><br>• [m], acota los 81 mm nominales |
| `check_spot_frequency_range` | `función` | **Advierte fuera de 250–1600 Hz (ISO 13472-2, Objeto y campo de aplicación).**<br>• `frequency` [Hz] | `check_spot_frequency_range(f)`<br><br>• `RoadAbsorptionWarning` fuera de rango |
| `spot_internal_loss_correction` | `función` | **Corrección por pérdidas internas (sistema) (Anexo A).**<br>• `measured_absorption`, `system_absorption`: mismas bandas<br>• `clip_negative` (def.: True) | `spot_internal_loss_correction([0.12, 0.10], [0.02, 0.03])  # [0.1, 0.07]`<br><br>• Corrección sustractiva de la Parte 2 |
| `DEFAULT_SOURCE_HEIGHT` | `float` | **Altura de fuente obligatoria de ISO 13472-1 ds [m].**<br>1.25 | `DEFAULT_SOURCE_HEIGHT  # 1.25` |
| `DEFAULT_MIC_HEIGHT` | `float` | **Altura de micrófono obligatoria de ISO 13472-1 dm [m].**<br>0.25 | `DEFAULT_MIC_HEIGHT  # 0.25` |
| `DEFAULT_SPEED_OF_SOUND` | `float` | **Velocidad del sonido por defecto de los métodos de pavimento [m/s].**<br>340.0 | `DEFAULT_SPEED_OF_SOUND  # 340.0` |
| `PART1_FREQUENCY_RANGE` | `tuple` | **Rango de bandas válido de ISO 13472-1 [Hz].**<br>(250.0, 4000.0) | `PART1_FREQUENCY_RANGE` |
| `SPOT_FREQUENCY_RANGE` | `tuple` | **Rango de bandas válido de ISO 13472-2 [Hz].**<br>(250.0, 1600.0) | `SPOT_FREQUENCY_RANGE` |
| `SPOT_NARROW_BAND_RANGE` | `tuple` | **Rango de banda estrecha de ISO 13472-2 [Hz].**<br>(220.0, 1800.0) | `SPOT_NARROW_BAND_RANGE` |
| `RoadAbsorptionWarning` | `clase warning` | **Aviso de ISO 13472.**<br>Se emite para frecuencias fuera de los rangos válidos de absorción in situ de pavimentos; los resultados allí son orientativos | `warnings.simplefilter('error', RoadAbsorptionWarning)` |
| `frequency_weighting` | `función` | **Ponderación frecuencial de vibración H(f) (ISO 8041-1:2017 Fórmula 5).**<br>• `name`: una de `WEIGHTING_NAMES`<br>• `frequencies` [Hz] (> 0) | `wr = frequency_weighting('Wk', [1.0, 8.0, 63.0])`<br><br>• `WeightingResponse`; \|H\| = [0,482, 1,036, 0,186] |
| `weighting_factors` | `función` | **Factores de ponderación \|H(f)\| (los Wi de ISO 2631-1 Ec. 9).**<br>• `name`, `frequencies` [Hz] | `weighting_factors('Wh', [16.0])`<br><br>• Módulo por frecuencia |
| `apply_weighting` | `función` | **Aplica una ponderación a una señal temporal (dominio de la frecuencia, respuesta exacta).**<br>• `signal`: aceleración (1D) [m/s²]<br>• `fs` [Hz]<br>• `name`: una de `WEIGHTING_NAMES` | `aw_t = apply_weighting(a, fs, 'Wk')`<br><br>• Señal ponderada, misma longitud (filtrado FFT circular) |
| `WeightingResponse` | `dataclass` | **Respuesta de ponderación.**<br>• `name`<br>• `frequencies` [Hz]<br>• `response`: H compleja<br>• `magnitude`, `magnitude_db` [dB]<br>• `.plot()` | `wr.magnitude, wr.magnitude_db` |
| `WEIGHTING_NAMES` | `tuple` | **Nombres de ponderación de ISO 8041-1.**<br>('Wb', 'Wc', 'Wd', 'We', 'Wf', 'Wh', 'Wj', 'Wk', 'Wm') | `'Wk' in WEIGHTING_NAMES  # True` |
| `weighted_acceleration` | `función` | **Valor eficaz ponderado desde un espectro de bandas (ISO 2631-1 Ec. 9 / ISO 5349-1 Ec. A.1).**<br>• `band_accelerations`: ai por banda [m/s²]<br>• `frequencies`: centros de banda [Hz]<br>• `weighting`: nombre | `ws = weighted_acceleration([0.1, 0.3, 0.2], [4.0, 8.0, 16.0], 'Wk')`<br><br>• `WeightedSpectrum`; aw = 0,36 m/s² |
| `WeightedSpectrum` | `dataclass` | **Espectro de bandas ponderado.**<br>• `frequencies` [Hz], `band_accelerations` [m/s²]<br>• `weighting_name`, `weighting_factors`<br>• `weighted`: Wi·ai [m/s²]<br>• `overall`: aw [m/s²]<br>• `.plot()` | `ws.overall` |
| `running_rms` | `función` | **Valor eficaz móvil de una señal ponderada (ISO 2631-1 Ecs. 2/3).**<br>• `signal` [m/s²], `fs` [Hz]<br>• `integration_time` τ [s] (def.: 1.0)<br>• `method`: 'linear' (Ec. 2) o 'exponential' (Ec. 3) (def.: 'linear') | `env = running_rms(aw_t, fs)`<br><br>• aw(t0) por muestra [m/s²] |
| `mtvv` | `función` | **Valor máximo de vibración transitoria (Ec. 4).**<br>• `signal` [m/s²], `fs` [Hz]<br>• `integration_time` [s] (def.: 1.0) | `mtvv(aw_t, fs)`<br><br>• max aw(t0) [m/s²] |
| `vibration_dose_value` | `función` | **Valor de dosis de vibración VDV (Ec. 5).**<br>• `signal`: aceleración ponderada [m/s²]<br>• `fs` [Hz] | `vdv = vibration_dose_value(aw_t, fs)`<br><br>• (∫aw⁴dt)^(1/4) [m/s^1,75] |
| `motion_sickness_dose_value` | `función` | **Valor de dosis de mareo MSDV (ISO 2631-1 apartado 9).**<br>• `signal`: aceleración ponderada con Wf [m/s²]<br>• `fs` [Hz] | `msdv = motion_sickness_dose_value(aw_t, fs)`<br><br>• (∫aw²dt)^(1/2) [m/s^1,5] |
| `crest_factor` | `función` | **Factor de cresta de una señal ponderada (apartado 6.2.1).**<br>• `signal` [m/s²] | `crest_factor(aw_t)`<br><br>• pico/valor eficaz; `HumanVibrationWarning` por encima de 9 |
| `vibration_total_value` | `función` | **Valor total de vibración av/ahv (ISO 2631-1 Ec. 10).**<br>• `components`: valores eficaces ponderados por eje [m/s²]<br>• `k`: factores por eje (def.: None → 1, la suma vectorial de ISO 5349-1) | `vibration_total_value([0.3, 0.4, 0.5], k=[1.4, 1.4, 1.0])  # 0.86`<br><br>• √(Σ kj²awj²) [m/s²] |
| `daily_exposure` | `función` | **Exposición diaria A(8) de una operación (ISO 5349-1 Ec. 2).**<br>• `total_value`: ahv o av [m/s²]<br>• `duration_s`: T [s] | `daily_exposure(3.0, 4*3600)  # 2.12`<br><br>• ahv √(T/8h) [m/s²] |
| `partial_exposure` | `función` | **Exposición parcial Ai(8) de una operación (Ec. 2).**<br>• `total_value` [m/s²], `duration_s` [s] | `partial_exposure(3.0, 2*3600)  # 1.5` |
| `combine_partial_exposures` | `función` | **Combina exposiciones parciales (Ec. 3).**<br>• `partials`: Ai(8) [m/s²] | `combine_partial_exposures([1.5, 2.1])  # 2.58`<br><br>• √(Σ Ai(8)²) [m/s²] |
| `hav_daily_exposure` | `función` | **A(8) de varias operaciones (ISO 5349-1 Ec. 3).**<br>• `total_values`: ahvi [m/s²]<br>• `durations_s`: Ti [s] | `hav_daily_exposure([3.0, 5.0], [2*3600, 3600])  # 2.32` |
| `energy_equivalent_acceleration` | `función` | **Magnitud energéticamente equivalente aw,e (ISO 2631-1 Ec. B.3).**<br>• `magnitudes` [m/s²], `durations_s` [s] | `energy_equivalent_acceleration([0.5, 1.0], [3600, 1800])  # 0.707` |
| `hav_vwf_lifetime_years` | `función` | **Años hasta el 10 % de prevalencia de dedo blanco (ISO 5349-1 Ec. C.1).**<br>• `a8`: A(8) [m/s²] (> 0) | `hav_vwf_lifetime_years(2.5)  # 12.0`<br><br>• Dy = 31,8 A(8)^−1,06 [años] |
| `exposure_assessment` | `función` | **Evalúa una exposición diaria (Directiva 2002/44/CE, artículo 3).**<br>• `value`: A(8) [m/s²] o VDV [m/s^1,75]<br>• `kind`: 'hav'/'wbv'<br>• `metric`: 'a8' (def.) o 'vdv' (solo cuerpo completo) | `ea = exposure_assessment(3.0, kind='hav')`<br><br>• `ExposureAssessment` (zona 'action') |
| `ExposureAssessment` | `dataclass` | **Evaluación según la Directiva.**<br>• `value`, `kind`, `metric`<br>• `action_value` (EAV), `limit_value` (ELV)<br>• `exceeds_action`, `exceeds_limit`<br>• `zone`: 'below action'/'action'/'limit' | `ea.zone, ea.exceeds_limit` |
| `daily_vibration_exposure` | `función` | **A(8) de varias operaciones, evaluada (ISO 5349 + Directiva).**<br>• `total_values` [m/s²], `durations_s` [s]<br>• `kind`: 'hav'/'wbv'<br>• `labels` (def.: None → 'op 1', …) | `res = daily_vibration_exposure([3.0, 5.0], [2*3600, 3600], kind='hav')`<br><br>• `DailyVibrationExposure` (A(8) = 2,32) |
| `DailyVibrationExposure` | `dataclass` | **Exposición diaria evaluada.**<br>• `a8` [m/s²]<br>• `labels`, `total_values`, `durations_s`, `partials`<br>• `assessment`: `ExposureAssessment`<br>• `.plot()` | `res.a8, res.assessment.zone` |
| `HumanVibrationWarning` | `clase warning` | **Aviso de vibración en humanos.**<br>Se emite por un factor de cresta superior a 9 (ISO 2631-1 6.2.2) u otras condiciones de medida fuera de rango | `warnings.simplefilter('error', HumanVibrationWarning)` |
| `REFERENCE_ACCELERATION` | `float` | **Aceleración de referencia de vibración [m/s²].**<br>1e-6 (referencia de nivel de aceleración de ISO 1683) | `REFERENCE_ACCELERATION  # 1e-06` |
| `REFERENCE_DURATION_S` | `float` | **Duración de referencia de la exposición diaria T0 [s].**<br>28800 (8 h) | `REFERENCE_DURATION_S  # 28800.0` |
| `HAV_EAV_A8` | `float` | **Valor de acción de exposición mano-brazo [m/s²].**<br>2.5 (Directiva 2002/44/CE) | `HAV_EAV_A8  # 2.5` |
| `HAV_ELV_A8` | `float` | **Valor límite de exposición mano-brazo [m/s²].**<br>5.0 | `HAV_ELV_A8  # 5.0` |
| `WBV_EAV_A8` | `float` | **Valor de acción A(8) de cuerpo completo [m/s²].**<br>0.5 | `WBV_EAV_A8  # 0.5` |
| `WBV_ELV_A8` | `float` | **Valor límite A(8) de cuerpo completo [m/s²].**<br>1.15 | `WBV_ELV_A8  # 1.15` |
| `WBV_EAV_VDV` | `float` | **Valor de acción VDV de cuerpo completo [m/s^1,75].**<br>9.1 | `WBV_EAV_VDV  # 9.1` |
| `WBV_ELV_VDV` | `float` | **Valor límite VDV de cuerpo completo [m/s^1,75].**<br>21.0 | `WBV_ELV_VDV  # 21.0` |
| `PhonometryWarning` | `clase warning` | **Clase base de todos los avisos de phonometry.**<br>Captura o silencia todos los avisos de la biblioteca a la vez | `warnings.simplefilter('error', PhonometryWarning)` |
| `FilterBankWarning` | `clase warning` | **Aviso del banco de filtros fraccionales de octava.**<br>Se emite por escollos del procesado con bancos de filtros | `warnings.simplefilter('error', FilterBankWarning)` |
| `TonalityWarning` | `clase warning` | **Aviso de tonalidad.**<br>Se emite por estimaciones de tonalidad sesgadas (p. ej. resolución FFT gruesa) | `warnings.simplefilter('error', TonalityWarning)` |
| `STIWarning` | `clase warning` | **Aviso de STI/STIPA.**<br>Se emite por medidas o entradas de inteligibilidad del habla sospechosas | `warnings.simplefilter('error', STIWarning)` |
| `__version__` | `str` | **Cadena de versión del paquete.**<br>(sin parámetros) | `phonometry.__version__  # '3.0.0'` |
| `.plot()` | `método` | **Figura canónica en una línea sobre cada objeto de resultado (matplotlib como dependencia opcional).**<br>Disponible en `ZwickerLoudness`, `MooreGlasbergLoudness`, `MooreGlasbergTimeVaryingLoudness`, `EcmaLoudness`, `EcmaTonality`, `EcmaRoughness`, `STIResult`, `SIIResult`, `NCResult`, `RCResult`, `AgeThresholdResult`, `NiptsResult`, `HtlanResult`, `ImpulseProminenceResult`, `MultipleShockResult`, `ImpulseResponseResult`, `DecayCurve`, `RoomAcousticsResult`, `ReverberationResult`, `WeightedRatingResult`, `ImpactRatingResult`, `FacadeInsulationResult`, `LabAirborneInsulationResult`, `LabImpactInsulationResult`, `SoundPowerResult`, `ReverberationSoundPowerResult`, `SoundPowerIntensityResult`, `PrecisionSoundPowerResult`, `PrecisionIntensityResult`, `IntensityResult`, `UncertaintyResult`, `AbsorptionRatingResult`, `ScatteringResult`, `DiffusionResult`, `InsituAbsorptionResult`, `WeightingResponse`, `WeightedSpectrum` y `DailyVibrationExposure`.<br>• `ax`: Axes existente, o None para crear una figura nueva (def.: None)<br>• devuelve el `Axes` de Matplotlib (un array de Axes en las figuras multipanel); nunca llama a `plt.show()`<br>• requiere matplotlib (`pip install phonometry[plot]`) | `res.plot()`<br>`decay_curve(ir, fs).plot()` |

## Notas

- `zero_phase=True` (en `OctaveFilterBank.filter` y `spectrogram`) filtra hacia
  delante y hacia atrás (`sosfiltfilt`): sin retardo de grupo, atenuación
  efectiva doble, solo análisis offline. Incompatible con `stateful=True`. La
  banda de paso también se estrecha, reduciendo el nivel de banda ancha medido
  en ~0,2 a 0,3 dB por banda (un tono puro dentro de banda no se ve afectado);
  prefiere el filtrado hacia delante cuando el SPL absoluto de banda debe
  coincidir con el convenio de un solo paso, y reserva la fase cero para cuando
  importa la envolvente temporal (p. ej. decaimiento de reverberación).
- `mode='peak'` incluye el transitorio de arranque del filtro; un tono que
  empieza de forma abrupta puede sobrepasar ~1 dB. Consulta
  [Calibración y dBFS](/phonometry/es/guides/calibration/).
- `octave_filter()` cachea internamente los diseños del banco (32 entradas), así
  que las llamadas repetidas con los mismos parámetros se saltan la fase de
  diseño. Para control explícito usa `OctaveFilterBank`.
- Alias obsoletos (se mantienen un ciclo, avisan al usarse, se eliminan en
  4.0): `octavefilter` → `octave_filter`, `getansifrequencies` →
  `nominal_frequencies`, `normalizedfreq` → `normalized_frequencies`,
  `calculate_sensitivity` → `sensitivity`, `coverage_factor` →
  `insulation_coverage_factor`, `expanded_uncertainty` →
  `insulation_expanded_uncertainty`, además de los nombres renombrados
  `OCTAVE_BANDS_HZ` → `OCTAVE_BANDS`, `THIRD_OCTAVE_BANDS_HZ` →
  `THIRD_OCTAVE_BANDS`, `BASE_PLATE_BANDS_HZ` → `BASE_PLATE_BANDS` y
  `ExposureWarning` → `OccupationalExposureWarning`.
