<!-- canonical: https://jmrplens.github.io/phonometry/es/devices/emission/intensity/ -->
Source: https://jmrplens.github.io/phonometry/es/devices/emission/intensity/

La *presión* acústica dice cuánto suena un punto; la **intensidad acústica** dice
hacia dónde *va* la energía. Es el flujo de potencia acústica (W/m²), una
magnitud vectorial con signo: por eso las sondas de intensidad pueden
localizar fuentes, separarlas del ruido de fondo y medir potencia acústica in
situ (ISO 9614) donde una medición de presión por sí sola no puede.

## El principio de dos micrófonos (IEC 61043)

Una sonda p-p sostiene dos micrófonos emparejados a una pequeña distancia
$\Delta r$. La
presión en el centro de la sonda es su media, y la velocidad de partícula
proviene del *gradiente* de presión (ecuación de Euler, en forma de
diferencias finitas):

$$
p = \frac{p_1 + p_2}{2}, \qquad
u = -\frac{1}{\rho_0\ \Delta r}\int (p_2 - p_1)\ dt, \qquad
I = \overline{p\ u}
$$

En la práctica, el estimador trabaja en el dominio de la frecuencia a través
del espectro cruzado de los dos canales (la forma equivalente de la norma):

$$
I(f) = -\ \frac{\mathrm{Im}\lbrace G_{12}(f)\rbrace}{2\pi f\ \rho_0\ \Delta r}
$$

Todo lo de esta página se lee después como nivel. El **nivel de intensidad
acústica** es $L_I = 10\log_{10}(\lvert I \rvert / I_0)$ con
$I_0 = 1\ \text{pW/m}^2$: el nivel es el del *módulo*, y el sentido va aparte,
que es lo que declara `total_direction` como $\pm 1$. Las dos referencias se
eligieron para que casen: en una onda plana progresiva, donde $I = p^2/(\rho c)$,
el nivel de presión y el de intensidad coinciden dentro de
$10\log_{10}(\rho c / 400) = 0{,}14$ dB en condiciones normales del aire
(apartado 5 de IEC 61043). Por eso el panel izquierdo de la figura de abajo
muestra dos curvas superpuestas, y por eso el índice presión-intensidad tiene un
suelo cercano a 0,14 dB y no a 0 — todo lo que una medición en campo enseñe por
encima de ese suelo es o bien un campo genuinamente reactivo o contaminado por
ruido, o bien el propio error de fase del instrumento.

La propia sonda es lo bastante pequeña para dibujarla a escala real.
`plot_pp_probe_geometry` coloca el clásico espaciador macizo de 12 mm entre
las dos cápsulas enfrentadas, y un `IntensityResult` calculado que retuvo su
`spacing` redibuja su propia sonda con `res.plot_geometry()`.

*La diferencia finita a escala real: dos cápsulas de media pulgada cara a
cara a través de 12 mm de espaciador macizo, y ese $\Delta r$ es a la vez la
sensibilidad de la estimación del gradiente y el origen del error en alta
frecuencia.*

<details>
<summary>Ver el código de esta figura</summary>

```python

from phonometry import emission

# El clásico espaciador macizo de 12 mm entre dos micrófonos de media pulgada.
emission.plot_pp_probe_geometry(language="es")
plt.show()

# Un IntensityResult calculado retiene su separación:
#   res = emission.sound_intensity(p1, p2, fs, spacing=0.012)
#   res.plot_geometry(language="es")
```

</details>

La medición en sí son dos canales síncronos: `p1` y `p2` son las presiones
calibradas de las dos cápsulas en pascales, `p1` la más cercana a la fuente,
adquiridas en el mismo analizador a la misma frecuencia de muestreo y con el
eje de la sonda normal a la superficie de medición.

```python

from phonometry import emission

fs = 48000
rng = np.random.default_rng(0)
# Las presiones de los dos micrófonos de la sonda en Pa, p1 el más cercano a la fuente.
#   En una medición real son tus dos grabaciones de sonda calibradas;
#   sintetizadas aquí (p2 = p1 retardada una muestra) para que la guía funcione.
p1 = 0.02 * rng.standard_normal(fs)
p2 = np.concatenate(([0.0], p1[:-1]))   # p2 = p1 retardada una muestra

res = emission.sound_intensity(p1, p2, fs, spacing=0.012, fraction=3,
                      limits=[100, 2500])
print(res.total_intensity_level, res.total_direction)      # LI [dB], ±1
print(res.frequency, res.intensity_level)                  # por banda
res.plot()   # Lp frente a LI por banda + el índice presión-intensidad (requiere matplotlib)
```

*Izquierda: en una onda plana progresiva toda la presión se transporta, así que
$L_I \approx L_p$. Derecha: una onda estacionaria no transporta (casi) energía
neta, así que la presión es alta pero la intensidad se desploma. La diferencia
$L_p - L_I$ es
el **índice presión-intensidad**, el indicador de calidad fundamental de toda
medición de intensidad.*

<details>
<summary>Ver el código de esta figura</summary>

```python

from scipy import signal
from phonometry import emission

fs, dr, c = 48000, 0.012, 343.0
n = int(fs * 4.0)

# Ruido de banda ancha, limitado a 80 Hz - 6 kHz y escalado a unos 70 dB SPL.
rng = np.random.default_rng(2026)
noise = signal.sosfilt(
    signal.butter(4, [80.0, 6000.0], btype="bandpass", fs=fs, output="sos"),
    rng.standard_normal(n),
)
noise *= 0.063 / np.std(noise)
spectrum = np.fft.rfft(noise)
freqs = np.fft.rfftfreq(n, 1 / fs)

# Izquierda: una onda plana progresiva. El micrófono 2 ve la onda dr/c = 35 us
# más tarde, aplicado como desfase y no como un número entero de muestras.
plane = emission.sound_intensity(
    noise, np.fft.irfft(spectrum * np.exp(-2j * np.pi * freqs * dr / c), n),
    fs, dr, fraction=3, limits=[100.0, 5000.0],
)

# Derecha: una onda estacionaria, dos ondas iguales contrapropagantes, con la
# sonda centrada en x0 = 0,30 m de la terminación rígida.
k, x0 = 2 * np.pi * freqs / c, 0.30
def at(pos):
    return np.fft.irfft(spectrum * 2.0 * np.cos(k * pos), n)
standing = emission.sound_intensity(at(x0 - dr / 2), at(x0 + dr / 2),
                                    fs, dr, fraction=3, limits=[100.0, 5000.0])

fig, (axl, axr) = plt.subplots(1, 2, figsize=(12, 5), sharey=True)
plane.plot(ax=axl, language="es")
standing.plot(ax=axr, language="es")
plt.show()
```

</details>

El mismo contraste se despliega de forma dinámica abajo: los fasores de
presión y velocidad de una onda progresiva y de una estacionaria, con la
intensidad instantánea promediando a un flujo neto en un caso y a cero en el
otro.

## Saber cuándo fiarse del número

Dos límites físicos acotan toda medición p-p, y el objeto de resultado incluye
ambos:

- **Alta frecuencia**: el gradiente por diferencias finitas subestima $I$ en el
  factor $\sin(k\Delta r)/(k\Delta r)$, verificado en CI contra la Tabla 3 de
  IEC 61043. `IntensityResult.bias_correction` proporciona el factor y
  `max_valid_frequency` ($\approx 0{,}1\,c/\Delta r$; 2,9 kHz para un
  espaciador de 12 mm) el
  techo práctico. Los espaciadores mayores alcanzan frecuencias más bajas; los
  menores, más altas.
- **Campos reactivos**: cuando `pressure_intensity_index` ($F_2$ en ISO 9614-1)
  se acerca al índice residual $\delta_{pI0}$ de la sonda, dominan los errores
  de fase.

De aquí en adelante se repiten tres símbolos, deducidos en *El margen sobre el
índice residual*, más abajo: $\delta_{pI0}$ es el índice presión-intensidad
**residual**, el suelo de error de fase de la cadena sonda-espaciador-analizador;
$K$ es el factor de sesgo que permite el grado (10 dB en ingeniería, 7 dB en
inspección); y $L_\mathrm{d} = \delta_{pI0} - K$ es la **capacidad dinámica**, el mayor
índice de campo que el instrumento puede permitirse con ese grado.

Antes que nada, ISO 9614-1 plantea una pregunta sobre el *campo* y no sobre
la superficie: ¿es lo bastante estacionario como para barrerlo? En el ensayo
inicial (apartado 8.2) se elige una posición «típica» sobre una superficie
inicial de medida y allí se muestrea la intensidad normal $M$ veces con un
tiempo de promediación corto (la nota 9 sugiere $M = 10$ y, para señales
periódicas, de 8 s a 12 s por muestra o cualquier número entero de ciclos).
**$F_1$**, el indicador de variabilidad temporal, es el coeficiente de
variación de esas muestras (ecuaciones (A.1)-(A.2)), de modo que vale cero
para un campo perfectamente estacionario y crece a medida que la intensidad
parásita fluctúa. La tabla B.3 pide el código de acción (e) cuando
$F_1$ supera 0,6: reducir la variabilidad, medir en periodos más tranquilos o
alargar el tiempo de promediación en cada posición. El Anexo B además exige
que se evalúe inmediatamente antes y después de la medida en cualquiera de las
superficies (B.1.4).

```python
from phonometry import emission

# Las M muestras de tiempo corto de la intensidad normal en una posición fija (W/m²).
samples = [1.20e-5, 0.94e-5, 1.51e-5, 1.08e-5, 1.33e-5,
           1.02e-5, 1.44e-5, 1.17e-5, 0.88e-5, 1.29e-5]

f1 = emission.temporal_variability_indicator(samples)
print(round(f1, 3))                          # 0.177, un campo estacionario

# O bien acompañando al resultado de superficie junto a F2/F3/F4, pasando las
# mismas muestras a field_indicators junto con el barrido por posiciones:
fi = emission.field_indicators([74.1, 73.8, 74.5, 73.2],
                               [1.2e-5, 1.0e-5, 1.4e-5, 0.9e-5],
                               temporal_intensity=samples)
print(fi.field_is_stationary())              # True (límite 0,6 de la tabla B.3)
```

Sobre una superficie de medición, los demás indicadores de campo del Anexo A
de ISO 9614-1 cualifican el propio barrido. **$F_2$**, el indicador
presión-intensidad de superficie, es el nivel de presión de superficie menos
el nivel de la *magnitud* media de la intensidad normal: cuanto mayor es,
más cerca está la medición del suelo de error de fase de la sonda. **$F_3$**, el
indicador de potencia parcial negativa, es la misma diferencia tomada con la
intensidad media *con signo*: $F_3 - F_2 > 0$ revela potencia que entra por
partes de la superficie. **$F_4$**, el indicador de no uniformidad del campo, es
la dispersión normalizada de las intensidades por posición: cuanto mayor es,
más posiciones de medición necesita la superficie.

$F_4$ es el que se convierte en un número de posiciones, mediante el criterio 2
del Anexo B, $N > C\,F_4^2$ (ecuación (B.2)). El factor $C$ no es una constante:
la tabla B.2 lo hace depender de la banda **y** del grado que se pretende — unos
11 en baja frecuencia y hasta 29 en la banda media para el grado de ingeniería,
y 19 subiendo hasta 57 para precisión, con 8 para el caso ponderado A de
inspección. Así que una misma no uniformidad del campo pide alrededor del doble
de posiciones en grado 1 que en grado 2. Con números: $F_4 = 0{,}5$ en la banda
de 1 kHz necesita $N > 29 \times 0{,}25$, es decir, al menos **8 posiciones** en
grado de ingeniería y al menos **15** en precisión; y cuando se usa un mismo
número de posiciones para todas las bandas, la norma aplica el criterio en la
banda con el mayor $C F_4^2$.

$F_4$ además se declara tal cual, que es lo que hace que merezca la pena
calcularlo aunque el número de posiciones ya esté fijado: el intervalo de
confianza del 95 % sobre el nivel de una banda es
$10\log_{10}(1 \pm 2 F_4/\sqrt{N})$ (ecuación (B.3)), así que $F_4 = 0{,}5$
sobre 10 posiciones lleva **+1,2 dB / −1,7 dB**. Una banda que falle el
criterio 2 puede registrarse igualmente, pero solo acompañada de ese intervalo.

Junto con el criterio de capacidad dinámica, los indicadores están disponibles
directamente:

```python

from phonometry import emission

# Mediciones por posición sobre la superficie de medición de ISO 9614-1
pressure_levels = np.array([74.1, 73.8, 74.5, 73.2])       # Lp por posición (dB)
normal_intensity = np.array([1.2e-5, 1.0e-5, 1.4e-5, 0.9e-5])  # In con signo por posición (W/m²)

fi = emission.field_indicators(pressure_levels, normal_intensity)
print(round(fi.f2, 2), round(fi.f3, 2), round(fi.f4, 3))   # 3.41 3.41 0.197
ld = emission.dynamic_capability_index(18.0)   # δpI0 = 18 dB → Ld = δpI0 − K
print(ld, ld > fi.f2)                                      # 8.0 True (criterio 1)
```

Con arrays 2D `(posiciones, bandas)` y las frecuencias centrales, los
indicadores vuelven **por banda** y el resultado se dibuja en una línea, la
forma en la que realmente se comprueban los criterios (cada banda aprueba o
falla por sí sola):

```python
fi = emission.field_indicators(lp_bands, in_bands, freqs)   # (posiciones, bandas)
fi.plot(dynamic_capability=ld)   # F2/F3 por banda frente a Ld, F4 en eje gemelo (requiere matplotlib)
```

*$F_2$ sube hacia baja frecuencia al volverse reactivo el campo y en 125 Hz
cruza la capacidad dinámica del instrumento $L_\mathrm{d} = \delta_{pI0} - K$: esa banda
falla el criterio 1, y ningún promediado lo arregla — pide un espaciador mayor,
otra superficie o una sala más silenciosa. Que $F_3$ suba por encima de $F_2$
en la misma banda revela intensidad parcial entrante (negativa), y las barras
de $F_4$ fijan el número de posiciones que necesita la superficie (criterio 2,
$N > C \cdot F_4^2$).*

<details>
<summary>Mostrar el código de esta figura</summary>

```python

from phonometry import emission

# Un barrido de 10 posiciones en puntos discretos sobre seis bandas de octava:
# la presión sobre la superficie es casi uniforme, y la intensidad normal por
# banda se fija para que el campo se vuelva reactivo hacia baja frecuencia,
# con dos posiciones de flujo entrante en la banda de 125 Hz (reescaladas para
# que la media de la banda conserve su objetivo).
freqs = np.array([125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0])
delta_pi = np.array([10.5, 8.5, 6.0, 4.5, 3.5, 3.0])   # objetivo Lp − L|In|
rng = np.random.default_rng(9614)
lp_bands = 78.0 + rng.normal(0.0, 0.4, (10, freqs.size))
i_mean = 10.0 ** ((78.0 - delta_pi) / 10.0) * 1.0e-12
in_bands = i_mean[None, :] * (1.0 + rng.normal(0.0, 0.18, (10, freqs.size)))
in_bands[:2, 0] = -0.35 * i_mean[0]
in_bands[2:, 0] *= (10.0 * i_mean[0] - in_bands[:2, 0].sum()) / in_bands[2:, 0].sum()

fi = emission.field_indicators(lp_bands, in_bands, freqs)
ld = emission.dynamic_capability_index(18.0)   # δpI0 = 18 dB, K = 10 dB

# Una línea — F2/F3 por banda frente a Ld, con F4 en un eje gemelo:
fi.plot(dynamic_capability=ld, language="es")
plt.show()

# A mano, con los campos por banda que lleva el resultado — reflejando lo que
# dibuja FieldIndicators.plot() (línea escalonada de Ld, leyenda combinada):
fig, ax = plt.subplots()
ax.plot(fi.frequency, fi.f2, "o-", label="F2 (presión-intensidad superficial)")
ax.plot(fi.frequency, fi.f3, "s--", label="F3 (potencia parcial negativa)")
ax.plot(fi.frequency, np.full(fi.frequency.size, ld), ":",
        drawstyle="steps-mid", label="Capacidad dinámica Ld")
ax.set_xlabel("Frecuencia [Hz]")
ax.set_ylabel("Indicador [dB]")
twin = ax.twinx()
twin.bar(fi.frequency, fi.f4, width=fi.frequency * 0.2, alpha=0.25,
         color="#2ca02c", label="F4 (no uniformidad)")
twin.set_ylabel("No uniformidad del campo F4")
lines, labels = ax.get_legend_handles_labels()
tlines, tlabels = twin.get_legend_handles_labels()
ax.legend(lines + tlines, labels + tlabels)
plt.show()
```

</details>

### El margen sobre el índice residual

Los dos canales de cualquier sonda y analizador real nunca están
perfectamente emparejados en fase. Alimenta ambos canales con la *misma*
señal (el ensayo de intensidad residual de IEC 61043): la intensidad
verdadera es exactamente cero y, aun así, el desajuste indica una pequeña
intensidad falsa. La distancia entre el nivel de presión y ese nivel de
intensidad falsa es el **índice presión-intensidad residual** $\delta_{pI0}$, el
suelo de error de fase del instrumento expresado como índice; IEC 61043
clasifica sondas y procesadores (clase 1 / clase 2) sobre todo por él.

En campo, el índice medido $\delta_{pI} = L_p - L_I$ dice cuánto sobresale el
nivel
de presión respecto al del flujo neto, y el error sistemático de la
estimación de intensidad está acotado por el margen entre ambos índices:

$$
\varepsilon = 10 \log_{10}\!\left( 1 \pm 10^{(\delta_{pI} - \delta_{pI0})/10} \right)
$$

Un margen de 10 dB mantiene el sesgo dentro de unos 0,5 dB y uno de 7 dB
dentro de aproximadamente 1 dB; son precisamente los factores de sesgo $K$
de ISO 9614, y la **capacidad dinámica** $L_\mathrm{d} = \delta_{pI0} - K$ es el mayor
índice de campo que el instrumento puede tolerar para un grado de precisión
dado. Léelo como un presupuesto: cada decibelio que sube el $\delta_{pI}$ del
campo consume un decibelio de margen, y cuando $\delta_{pI}$ alcanza
$\delta_{pI0}$ la lectura es puro
error de fase, de cualquier signo. Por eso el índice presión-intensidad, y
no la calidad de los micrófonos, es el que acota la exactitud alcanzable de
toda medida de intensidad.

### Medir el índice residual, y comprobar la sonda

$\delta_{pI0}$ es el número sobre el que descansan todos los criterios de esta
página y de la
[página de barrido](/phonometry/es/devices/emission/sound-power-intensity/)
entera, y la biblioteca no lo calcula: se mide, una vez por cadena
sonda-espaciador-analizador, en el banco.

**El ensayo de intensidad residual (apartado 10.2 de IEC 61043).** El
dispositivo de ensayo es un pequeño acoplador que presenta *el mismo* campo
sonoro a las dos cápsulas en todo o parte del rango de 45 Hz a 7,1 kHz, excitado
con ruido rosa o blanco, y que aplica la presión a los dos micrófonos al mismo
nivel dentro de **±0,1 dB** al menos de 45 Hz a 1 kHz, con una diferencia de fase
acotada entre puertos. Como la intensidad verdadera en ese campo es exactamente
cero, lo que indique el instrumento es su propio error de fase, y $\delta_{pI0}$
se lee banda a banda como el nivel de presión menos ese nivel de intensidad
indicado. De *qué* hay en el acoplador se siguen dos consecuencias: el índice
pertenece a la sonda, al espaciador montado y al analizador **juntos**, así que
hay que volver a medirlo cada vez que cambie el espaciador; y es una propiedad de
la cadena, no una especificación de los micrófonos.

**Antes de cada serie (apartado 14).** Deja calentar el instrumento lo que diga
el fabricante. En modo de presión acústica, aplica un calibrador acústico a los
dos micrófonos, por turnos o a la vez, y ajusta hasta la indicación correcta
dentro de **±0,1 dB en los dos canales** — el apartado 6.2.1 de ISO 9614-2 pide
aquí un calibrador IEC 60942 de clase 0 o de clase 1. Después aplica otra vez el
dispositivo de intensidad residual y confirma que $\delta_{pI0}$ sigue cumpliendo
el requisito de clase en el rango que cubre el dispositivo, con la compensación
de fase del fabricante aplicada y, preferiblemente, **a un nivel próximo al de
uso**.

**In situ (apartado 6.2.2 de ISO 9614-2): el ensayo de inversión de la sonda.**
Es la única comprobación que no necesita banco y la que caza el error que ningún
banco puede ver. Coloca la sonda sobre la superficie de medición, con el eje
normal, en una posición donde la intensidad supere la media de la superficie;
registra $I_\mathrm{n}$ en todas las bandas. Gira la sonda **180° alrededor de un eje
normal al eje de medición**, dejando el centro acústico en el mismo sitio — lo
que en la práctica significa montarla en un trípode en vez de sostenerla a mano
— y mide otra vez. Para que el sistema de medición sea aceptable, en la banda de
nivel máximo **los dos valores de $I_\mathrm{n}$ deben tener signos opuestos y los dos
niveles de intensidad deben diferir menos de 1,5 dB**. Los dos modos de fallo se
leen como diagnóstico: signos iguales significan que los canales están cruzados
o que uno está invertido, y una diferencia de más de 1,5 dB significa que la
sonda está perturbando su propio campo o que los dos canales no están
emparejados. El apartado 10.5 c) hace que el resultado forme parte del informe
de ensayo.

Ese signo merece leerse también en el uso normal, no solo en la comprobación. Una
intensidad neta negativa en parte de una superficie envolvente significa que
entra más potencia por ese trozo de la que sale — de lo más normal en la cara a
la sombra de una máquina que está junto a otra más ruidosa, y completamente
carente de sentido si los canales están cruzados.

### Clasificar el instrumento: tabla 2 de IEC 61043

$\delta_{pI0}$ no es solo un número al que restar $K$; es aquello por lo que
IEC 61043 clasifica el hardware. La tabla 2 de la norma fija un $\delta_{pI0}$
**mínimo** en cada banda de tercio de octava de 50 Hz a 6,3 kHz, por separado
para una **sonda**, un **procesador** y un **instrumento completo**, en
clase 1 y clase 2, impreso para la separación nominal entre micrófonos de
25 mm. La nota 1 reescala toda la tabla para cualquier otro espaciador con
$+10\log_{10}(x/25)$, con $x$ en milímetros: los mismos 3 dB por duplicación a los
que llegaba el apartado anterior a partir de la física.

`intensity_class_compliance` compara un espectro de $\delta_{pI0}$ medido con
ambas
máscaras banda a banda y devuelve un `IntensityInstrumentComplianceResult` que
lleva la clase que la cadena cumple realmente: la clase más laxa que superan
todas las bandas, o `None` cuando alguna banda no supera ninguna de las dos.

```python
from phonometry import metrology

# Las frecuencias centrales sobre las que se define la tabla 2, y el índice
# residual medido de la cadena: un valor por banda, tomado con el espaciador que
# se montará en campo. Sustituye el marcador por tu propio ensayo residual.
freqs, _, _ = metrology.residual_index_limits("instrument", spacing=0.012)
measured_delta_pi0 = [11.0, 11.9, 11.2, 10.0, 13.2, 15.9, 17.0, 18.0,
                      19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 24.0, 24.0,
                      24.0, 24.0, 24.0, 24.0, 24.0, 24.0]   # dB, 22 bandas

res = metrology.intensity_class_compliance(measured_delta_pi0, freqs,
                                           device="instrument", spacing=0.012)
print(res.overall_class)          # 2: una banda no llega al mínimo de clase 1
print(res.binding_margin())       # menor margen por banda hasta esa clase [dB]
print(res.failing_bands(1))       # las bandas que le cuestan la clase 1 [Hz]
res.plot()                        # δpI0 medido sobre las dos máscaras de la tabla 2
res.report("verificacion.pdf")    # ficha de verificación de una página (PDF)
```

*Ambas máscaras de la tabla 2 bajan $10\log_{10}(12/25) = -3{,}2\ \text{dB}$ por el
espaciador
de 12 mm. El índice medido sube 10 dB por década en baja frecuencia, paralelo
al requisito, porque un desfase entre canales constante en grados compra
exactamente esa pendiente; se aplana por encima de 1 kHz, donde el desfase de
una cadena real empieza a crecer con la frecuencia. Una resonancia de
ventilación en torno a 100 Hz cuesta 4 dB y hace caer esa única banda por
debajo del mínimo de clase 1, así que toda la cadena se clasifica como
clase 2.*

<details>
<summary>Ver el código de esta figura</summary>

```python

from phonometry import metrology

# Un instrumento completo con el espaciador habitual de 12 mm. El índice medido
# se modela a partir de la física que hay tras la tabla 2: un desfase residual
# φs se lee como δpI0 = 10 lg(kd/φs), de modo que un desfase constante en
# grados ya sube 10 dB por década y, por encima de 1 kHz, el desfase de una
# cadena real crece con la frecuencia y el índice se aplana.
spacing = 0.012
freqs, _, _ = metrology.residual_index_limits("instrument", spacing=spacing)
phase_mismatch = 0.05 * np.maximum(1.0, freqs / 1000.0)          # grados
measured = metrology.residual_index_from_phase_mismatch(phase_mismatch, freqs,
                                                        spacing)
measured = measured - 4.0 * np.exp(-((np.log(freqs / 100.0) / 0.25) ** 2))

res = metrology.intensity_class_compliance(measured, freqs, spacing=spacing)
res.plot()
plt.show()
```

</details>

Con ello llegan dos reglas complementarias de la norma. El apartado 6.1 fija
el rango de frecuencias que acredita una clase: de 45 Hz a 7,1 kHz en tercios
de octava, que la clase 1 exige y la clase 2 también puede emplear, o de
45 Hz a 5,6 kHz en octavas, que se ofrece a la clase 2 como alternativa. Un
veredicto calculado sobre menos bandas se marca con `range_limited` para que
no pueda leerse como una declaración de rango completo. La traducción
UNE-EN 61043:1999 recoge solo la alternativa en octavas para la clase 2 y
omite la de tercios de octava; la biblioteca sigue el texto EN/CEI (véase el
[registro de erratas](https://github.com/jmrplens/phonometry/blob/main/docs/ERRATA.md)). El apartado 8
combina componentes suministrados por separado:
`instrument_class_from_components(probe_class, processor_class)` devuelve 1
solo cuando ambos son de clase 1, y 2 para cualquier otra combinación.

La ficha de ejemplo se regenera con `make reports` y se mantiene renderizada en
el repositorio; pulsa la vista previa para abrir el PDF.

### Leer `δpI0` como un error de fase

El requisito es en realidad un requisito de emparejamiento de fase
disfrazado. En una onda plana que se propaga axialmente la diferencia de fase
*verdadera* entre los dos puntos es $kd$, de modo que una intensidad residual
producida por un desfase entre canales $\varphi_s$ da

$$
\delta_{pI0} = 10 \log_{10}\!\left( \frac{k d}{\varphi_s} \right)
$$

y las dos conversiones funcionan en ambos sentidos:

```python
from phonometry import metrology

# 20 dB de índice residual a 1 kHz con un espaciador de 25 mm:
phi = metrology.phase_mismatch_from_residual_index(20.0, 1000.0, 0.025)
print(round(float(phi), 2))     # 0.26 grados, una centésima de kd

# Y a la inversa, para una cadena con los canales emparejados a 0,05°:
print(round(float(metrology.residual_index_from_phase_mismatch(
    0.05, 1000.0, 0.012)), 1))  # 24.0 dB
```

Por eso el extremo de baja frecuencia de la tabla 2 sube 1 dB por banda de
tercio de octava y después se aplana: por debajo del codo la norma pide un
emparejamiento de fase *constante*, y por encima un índice constante. El codo
está en 250 Hz para las tres columnas de clase 1 y para el procesador de
clase 2, y en 630 Hz para la sonda de clase 2 y el instrumento completo de
clase 2, que es además donde la tabla deja de avanzar en decibelios enteros
(el instrumento pasa por 14 dB a 315 Hz, 14,5 dB a 400 Hz y 15 dB a 500 Hz).
También por eso una décima de grado de desfase entre canales es
una especificación exigente, y por eso una sonda debe verificarse con el
espaciador con el que realmente se va a usar.

## Elegir la sonda

Antes de tomar ningún dato hay dos decisiones: dónde se puede colocar la
superficie de medición y qué espaciador se monta en la sonda.

### Campos reactivos cerca de la fuente

Cerca de una fuente el campo se vuelve **reactivo**: la presión y la
velocidad de partícula tienden a la cuadratura, así que una presión grande
transporta poco flujo neto. Para una fuente pequeña la componente en
cuadratura crece como $1/(kr)$; a 100 Hz y 0,25 m de la fuente ya es
aproximadamente el doble de la activa, y $\delta_{pI}$ sube igual que en la onda
estacionaria de la figura de dos paneles del principio de esta página. Lo
mismo ocurre entre una máquina y una
superficie reflectante rígida, y en cámaras reverberantes donde el campo difuso
eleva la presión sin transportar energía hacia fuera. Por eso ISO 9614-1
mantiene la superficie de medición a más de 0,5 m de la fuente en promedio, y
por eso, cuando un barrido no cumple el criterio de capacidad dinámica,
alejar la superficie o añadir absorción a la sala suele bajar $F_2$ por
debajo de $L_\mathrm{d}$ con menos coste que un hardware mejor.

### Elegir el espaciador

El espaciador fija los dos extremos de la banda utilizable, en sentidos
opuestos:

- **El extremo alto es geometría.** La diferencia finita subestima el
  gradiente en el factor $\sin(k\Delta r)/(k\Delta r)$, así que el techo escala
  como $1/\Delta r$: `max_valid_frequency` $\approx 0{,}1\,c/\Delta r$
  mantiene el sesgo dentro de unos 0,3 dB,
  lo que da aproximadamente 5,7 kHz con un espaciador de 6 mm, 2,9 kHz con
  12 mm y 690 Hz con 50 mm (`bias_correct=True` deshace el sesgo conocido
  algo más allá).
- **El extremo bajo es fase.** Una onda progresiva introduce solo
  $360\,f\,\Delta r/c$ grados de fase verdadera a lo largo del espaciador,
  0,8° a 63 Hz con 12 mm, mientras el desajuste entre canales permanece fijo.
  Bajar la frecuencia encoge la señal, no el error, así que el margen sobre
  $\delta_{pI0}$ se desploma en baja frecuencia. Un espaciador mayor recupera
  ese margen: los requisitos de índice residual de IEC 61043 escalan como
  $10\log_{10}(\Delta r/25\ \text{mm})$, de modo que doblar el espaciador aporta
  3 dB de margen en baja frecuencia.

*Los dos límites se cierran desde lados opuestos. El panel superior es
geometría: la `max_valid_frequency` de cada espaciador está exactamente donde su
propia curva de sesgo cruza los −0,3 dB. El panel inferior es el presupuesto de
fase: el requisito se mueve con el espaciador según
$10\log_{10}(\Delta r/25\ \text{mm})$, así que una sonda de 50 mm parte con 3 dB
de ventaja sobre una de 25 mm y con 9 dB sobre una de 6 mm. Donde los dos
paneles dejan utilizable un espaciador está la banda en la que se le puede
creer.*

<details>
<summary>Mostrar el código de esta figura</summary>

```python

# El sesgo sale de la propia sound_intensity: bias_correction es el factor
# compensador (k dr)/sin(k dr), así que el sesgo es su inverso en dB.
fs, c = 48000, 343.0
rng = np.random.default_rng(61043)
x = rng.standard_normal(fs)
espectro, bins = np.fft.rfft(x), np.fft.rfftfreq(fs, 1 / fs)

fig, (axs, axi) = plt.subplots(2, 1, sharex=True)
for dr in (0.006, 0.012, 0.050):
    p2 = np.fft.irfft(espectro * np.exp(-2j * np.pi * bins * dr / c), fs)
    res = emission.sound_intensity(x, p2, fs, dr, fraction=3,
                                   limits=[20.0, 12500.0])
    utiles = res.frequency < c / (4.0 * dr)      # descartar las bandas saturadas
    axs.semilogx(res.frequency[utiles],
                 -10.0 * np.log10(res.bias_correction[utiles]),
                 label=f"{dr * 1000:.0f} mm")
    axs.axvline(res.max_valid_frequency, linestyle=":")
    axi.semilogx(res.frequency,
                 np.full(res.frequency.shape, 10.0 * np.log10(dr / 0.025)))
axs.axhline(-0.3, linestyle="--")
axs.set(ylabel="Sesgo [dB]", ylim=(-2.4, 0.35))
axi.set(xlabel="Frecuencia [Hz]", ylabel="Margen de δpI0 re 25 mm [dB]")
axs.legend()
plt.show()
```

</details>

Ningún espaciador cubre por sí solo todo el rango de audio: el de 6 mm sirve
para el trabajo en alta frecuencia, el de 50 mm para la baja frecuencia y el
habitual de 12 mm cubre la banda media. Las mediciones de banda ancha se
realizan dos veces con dos espaciadores y se combinan los resultados por
banda; sea cual sea el espaciador montado, verifica $\delta_{pI0}$ con ese
espaciador
instalado, porque el índice pertenece a la cadena
sonda-espaciador-analizador, no a los micrófonos por sí solos.

## Parámetros de `sound_intensity()`

| Parámetro | Tipo | Unidades | Rango / valor por defecto | Notas |
| :--- | :--- | :--- | :--- | :--- |
| `p1`, `p2` | arrays 1D | Pa | misma longitud | Primero el micrófono más cercano a la fuente; invertirlos cambia el signo |
| `fs` | int | Hz | > 0 | |
| `spacing` | float | m | > 0 | Separación entre micrófonos $\Delta r$ (típ. 6/12/50 mm) |
| `rho` | float | kg/m³ | por defecto `1.204` | Densidad del aire |
| `c` | float | m/s | por defecto `343.0` | Velocidad del sonido (estimaciones de sesgo/validez) |
| `fraction` | int, opcional | — | `1`, `3` o `None` (por defecto) | Integración en bandas de octava/tercio de octava |
| `limits` | lista, opcional | Hz | por defecto el rango de bandas de la biblioteca | Límites del análisis por bandas |
| `bias_correct` | bool | — | defecto `False` | Aplica la corrección por bin $(k\Delta r)/\sin(k\Delta r)$ (IEC 61043 §7.3) antes de sumar, para que los totales de banda/banda ancha dejen de subestimar cuando $f \to$ `max_valid_frequency`; los bins pasado el primer nulo se dejan sin corregir. El factor `bias_correction` por banda se da en ambos casos |

Consulta [Teoría](/phonometry/es/reference/theory/signal-analysis/) para las derivaciones y
[Calibración](/phonometry/es/signals/metrology/calibration/) para el escalado absoluto de
los dos canales.

## Qué cubre esta guía

IEC 61043:1993 (EN 61043:1994) para el estimador de intensidad por espectro
cruzado de dos micrófonos de `sound_intensity`, la corrección de sesgo por
diferencias finitas y su límite de ancho de banda útil (apartado 7.3, tabla
3), el índice residual de presión-intensidad $\delta_{pI0}$ como el suelo de
error de fase del instrumento, y la clasificación del instrumento construida
sobre él: los mínimos por banda de la tabla 2 para sondas, procesadores e
instrumentos con la regla de separación de la nota 1, los rangos de frecuencia
del apartado 6.1 y la regla de combinación de componentes del apartado 8
(`intensity_class_compliance`, `residual_index_limits`,
`instrument_class_from_components`), además de la conversión entre
$\delta_{pI0}$ y desfase en ambos sentidos. ISO 9614-1:1993 para los
indicadores de campo del Anexo A $F_1$ a $F_4$
(`temporal_variability_indicator`, `field_indicators`) con el límite de la
tabla B.3 sobre $F_1$, y el criterio de capacidad dinámica del Anexo B
(`dynamic_capability_index`).

La propia determinación de potencia acústica de ISO 9614-1, apartados 8 y 9,
que suma las potencias parciales $I_i \cdot S_i$ de los puntos de medida
discretos hasta $L_W$, no está implementada como función aquí:
`sound_intensity` y `field_indicators` informan de la intensidad y la calidad
de campo, no de una potencia sumada. Las vías de barrido que sí calculan $L_W$
a partir de la intensidad (ISO 9614-2 e ISO 9614-3) están en la guía de
[potencia acústica por barrido de
intensidad](/phonometry/es/devices/emission/sound-power-intensity/). El propio
*ensayo* de intensidad residual de IEC 61043 tampoco lo realiza la biblioteca:
$\delta_{pI0}$ es un valor que quien mide obtiene en su propia cadena
sonda-analizador, con el espaciador que va a montar, y aporta — el
procedimiento está en *Medir el índice residual*, más arriba, y lo que
phonometry hace con el número es clasificarlo frente a la tabla 2. La
comprobación previa al uso del apartado 14 y el ensayo de inversión de la
sonda de ISO 9614-2 son igualmente procedimientos, no funciones.

## Véase también

- [Potencia acústica por barrido de intensidad](/phonometry/es/devices/emission/sound-power-intensity/) — las vías de ISO 9614-2/-3 que consumen $\delta_{pI}$, los indicadores de campo y la capacidad dinámica.
- [Potencia acústica](/phonometry/es/devices/emission/sound-power/) — la elección entre las vías de intensidad, de presión y de cámara reverberante.
- [Potencia acústica a partir de la vibración](/phonometry/es/devices/emission/vibration-sound-power/) — el factor de radiación de ISO/TS 7849-2 necesita una potencia medida por intensidad.
- [Calibración](/phonometry/es/signals/metrology/calibration/) — el escalado absoluto de los dos canales que el estimador da por supuesto.
- [Teoría: análisis de señal](/phonometry/es/reference/theory/signal-analysis/) — la derivación por espectro cruzado que hay detrás de $I(f) = -\mathrm{Im}\{G_{12}\}/(2\pi f \rho_0 \Delta r)$.
- Referencia de la API: [`emission.intensity`](/phonometry/es/reference/api/power/intensity/).
- Teoría: [Intensidad acústica (IEC 61043)](/phonometry/es/reference/theory/signal-analysis/#intensidad-acústica-iec-61043): la aproximación en diferencias finitas que hay detrás de una sonda p-p y los errores que comete.
