<!-- canonical: https://docs.jmrp.io/phonometry/es/signals/metrology/comparison-calibration/ -->
Source: https://docs.jmrp.io/phonometry/es/signals/metrology/comparison-calibration/

Un micrófono patrón de trabajo no se calibra por reciprocidad. Se coloca junto
a un micrófono de referencia cuya sensibilidad ya se conoce, o en su lugar,
los dos se exponen a la misma presión acústica, y el cociente de sus
tensiones de salida traslada a él la sensibilidad de la referencia. La
IEC 61094-5 lo hace en un **campo de presión**, en un acoplador o en un
soporte posicionador; la IEC 61094-8 lo hace en un **campo libre**, en una
cámara anecoica o tras una ventana temporal. El Anexo D de la primera parte
escribe el modelo una sola vez para las dos,

$$
M_\mathrm{test} = M_\mathrm{ref}\,\frac{R_V}{R_P},
\qquad
L_\mathrm{test} = L_\mathrm{ref} + 20\lg R_V - 20\lg R_P + \sum_j C_j
$$

donde $R_V$ es el cociente de las tensiones de salida del micrófono en ensayo
y del de referencia, $R_P$ el de las presiones acústicas efectivas que actúan
sobre ellos, que el procedimiento reduce a la unidad, y $C_j$ las
correcciones que pide cada parte. `metrology.comparison_calibration` calcula la
forma de la derecha, en niveles de sensibilidad en dB re 1 V/Pa.

Esta página recorre una calibración en presión de un WS2P frente a un LS2P y
una calibración en campo libre de un WS2F, con sus balances, y después el
procesado con ventana temporal del Anexo B de la IEC 61094-8, la fase de la
sensibilidad, el efecto de las impedancias acústicas distintas (apartados
7.4 y 7.5 de la IEC 61094-5) con el aire entre dos micrófonos por el
circuito al que remite la parte, la corrección de micrófonos de distinto
diámetro por el modelo al que remite (6.5) y la validación de un soporte o
un acoplador (6.7); las lecturas son sintéticas, construidas a partir de
sensibilidades que la página conoce, así que cada paso se puede comprobar
frente a ellas.

*Una calibración en presión por excitación simultánea (izquierda) y una
calibración en campo libre por sustitución (derecha), con el propio `.plot()`
de los resultados.*

## 1. Cómo se hace la medida

Las dos partes dan dos maneras de exponer los micrófonos a la misma presión
acústica. Con **excitación simultánea** están en el campo a la vez, cada uno
leído en su propio canal de medida; en un acoplador o en un soporte
posicionador quedan enfrentados a aproximadamente 1 mm, una fracción pequeña
de la longitud de onda hasta 20 kHz (apartado 5.1.2). Con **excitación
secuencial** ocupan el mismo sitio por turnos: o el cambio de micrófono no
altera apreciablemente la presión acústica, o cualquier cambio se detecta y
se corrige, por ejemplo con un micrófono monitor cerca de la fuente
(apartado 5.1.3; apartados 5.2, 6.5 y A.2 de la IEC 61094-8).

| Requisito | Valor | Apartado |
| :--- | :--- | :--- |
| Condiciones de referencia | 23,0 °C, 101,325 kPa, 50 % de humedad relativa | 61094-5 y 61094-8, 4 |
| Simultánea, en acoplador o soporte | Diafragmas a aproximadamente 1 mm; los micrófonos se intercambian y la medición se repite, y el resultado sale de las dos | 61094-5, 5.1.2 |
| Secuencial | El cambio de micrófono no altera apreciablemente la presión acústica, o cualquier cambio se detecta y se corrige, por ejemplo con un micrófono monitor; el monitor, cuando se usa, detecta los cambios en la posición de ensayo | 61094-5, 5.1.3; 61094-8, 5.2, 6.5 |
| Ancho de banda de análisis | 1/6 de octava o más estrecho mantiene el error por debajo de 0,01 dB; líneas FFT mucho más estrechas pueden mostrar ondas estacionarias | 61094-5, NOTA de 5.1.1 |
| Tensión de salida | En circuito abierto, por tensión de inserción o con un preamplificador de alta impedancia; el método se declara en el certificado | 61094-5, 5.2 |
| Fuente en campo libre | De 70 dB a 80 dB en el micrófono suelen bastar; ondas planas progresivas sobre el micrófono | 61094-8, 6.3 |
| Montaje en campo libre | Sobre una varilla semiinfinita del diámetro del micrófono; referencias LS1P sin su rejilla | 61094-8, 6.4, 6.7 |
| Incertidumbre declarada | Expandida, con $k = 2$, a cada frecuencia | 61094-5, 7.9; 61094-8, 8.8 |

## 2. Una calibración en presión por excitación simultánea

En un acoplador los dos micrófonos se leen en dos canales cuyas ganancias
nunca son exactamente iguales, y los dos puertos de un acoplador nunca ven
del todo la misma presión. El Anexo C elimina las dos cosas. Con la
referencia como micrófono 1 en el canal 1, la diferencia de lectura entre
canales es la Fórmula (C.1); tras el intercambio es la Fórmula (C.2); y su
diferencia deja solo los dos niveles de sensibilidad,

$$
L_\mathrm{C12} = (L_1 + L_\mathrm{m1} + L_\mathrm{d1} + L_\mathrm{WA})
- (L_2 + L_\mathrm{m2} + L_\mathrm{d1} + L_\mathrm{WB}),
\qquad
L_1 - L_2 = \tfrac12\,(L_\mathrm{C12} - L_\mathrm{C21})
\tag{C.3}
$$

así que $20\lg R_V = -\tfrac12(L_\mathrm{C12} - L_\mathrm{C21})$. Aquí los
canales difieren en 0,55 dB, el puerto A oye hasta 0,13 dB más que el B, y
cada lectura se repite tres veces con algo de ruido:

```python

from phonometry import metrology

f = metrology.exact_frequencies(250, 20000, fraction=3)   # 20 tercios de octava exactos
x = f / 1000
l_ref = -38.0 + 0.04 * np.log10(x) - 0.25 * (x / 20) ** 2   # el certificado del LS2P, dB re 1 V/Pa
l_true = -38.6 + 0.08 * np.log10(x) + 0.2 * (x / 12) ** 2 - 0.5 * (x / 20) ** 4   # el WS2P: desconocido

gain_1, gain_2 = 0.35, -0.20      # los dos canales de medida, dB
field_a = 0.03 * np.sqrt(x)       # el puerto A del acoplador oye de 0.015 dB a 0.13 dB más
rng = np.random.default_rng(61094)
noise = rng.normal(0.0, 0.004, (2, 3, f.size))   # tres repeticiones de cada lectura
l_c12 = (l_ref + gain_1) - (l_true + gain_2) + field_a + noise[0]   # referencia en el canal 1
l_c21 = (l_true + gain_1) - (l_ref + gain_2) + field_a + noise[1]   # intercambiados

c = metrology.simultaneous_comparison(f, l_ref, l_c12, l_c21)
print(c.determinations, c.sensitivity_level_db[[2, 8, 19]].round(2))   # 3 [-38.63 -38.58 -38.44]
print(np.abs(c.sensitivity_level_db - l_true).max().round(3))           # 0.003
```

Ni las ganancias ni la asimetría llegan al resultado; lo que queda, 0,003 dB
como mucho, es el ruido de tres repeticiones. El apartado 5.1.2 hace del
intercambio un requisito en un acoplador o un soporte, así que una
calibración en presión sin `interchanged_channel_difference_db` se rechaza.
El texto pide «the mean of the two ratios», y el Anexo C la toma en
decibelios: la media de las dos diferencias de nivel, que es la media
geométrica de los cocientes y la única en la que las ganancias se anulan
exactamente. Los dos cocientes leídos antes y después del intercambio
distan aquí de 1,1 dB a 1,4 dB, el doble de la diferencia entre canales y
entre puertos, y su media aritmética quedaría de 0,018 dB a 0,027 dB alta.

**El ambiente.** La sensibilidad de un micrófono depende de la presión
estática, de la temperatura y, en algunos micrófonos, de la humedad. Cuando
la referencia y el micrófono en ensayo son modelos distintos, la sensibilidad
de la referencia se tiene que corregir a las condiciones del ensayo
(apartado 6.6); en campo libre, la IEC 61094-8 pide esa corrección sean
cuales sean los modelos (apartado 7.6). Ninguna de las dos partes imprime una
fórmula.
`metrology.environmental_sensitivity_correction` toma la de primer orden, un
coeficiente por una desviación para cada condición, con los coeficientes en
las unidades en que los da el Anexo D de la IEC 61094-2:

$$
C_\mathrm{env} = \delta_p\,(p_s - p_{s,0}) + \delta_t\,(t - t_0)
+ \delta_H\,(H - H_0)
$$

Los coeficientes son los del propio micrófono, y por eso son obligatorios: el
Anexo D de la IEC 61094-2 sitúa el coeficiente de presión estática a baja
frecuencia de los micrófonos LS2P entre −0,003 dB/kPa y −0,008 dB/kPa y el de
temperatura dentro de ±0,005 dB/K, y los dos varían con la frecuencia y de un
micrófono a otro. El apartado 6.5.3 de esa misma parte no observa influencia
de la humedad en un micrófono patrón de laboratorio, así que ese coeficiente
vale 0 por defecto.

```python
env = metrology.environmental_sensitivity_correction(
    f,
    static_pressure_kpa=99.2,        # el laboratorio durante el ensayo
    temperature_c=21.5,
    relative_humidity_percent=45.0,
    static_pressure_coefficient_db_per_kpa=-0.005,   # los coeficientes propios del LS2P
    temperature_coefficient_db_per_k=0.002,
)   # desde los 101.325 kPa, 23.0 °C y 50 % de su certificado
print(env.correction_db[0].round(4))   # 0.0076
```

Pasada como `reference_environment=`, la corrección se suma al nivel de la
referencia; pasada como `test_environment=`, la corrección propia del
micrófono en ensayo se resta del resultado, lo que lo refiere a las
condiciones de referencia del apartado 4 cuando se conocen coeficientes
fiables.

## 3. El balance de incertidumbre del Anexo D

La Tabla D.1 es un balance resuelto para un montaje como este, un WS2P de
baja sensibilidad frente a un LS2P en el acoplador de la Figura A.1 con tres
repeticiones, a 2 kHz. Ese acoplador sirve para frecuencias de hasta 10 kHz
(apartado A.1); por encima, un WS2 va en el soporte del apartado A.2 y de la
Figura A.3, que llega a 20 kHz. Siete de las ocho filas declaran un valor y
cómo se lee: el certificado de la referencia da ±0,05 dB con $k = 2$; la
capacidad, la no linealidad, la impedancia, la deriva y el redondeo son
semiamplitudes de distribuciones rectangulares; y la tensión de polarización
de (200,0 ± 0,2) V da una semiamplitud de
$20\lg(200{,}2/200) = 0{,}008\,68$ dB. La fila de la repetibilidad no
declara ningún valor, solo que se obtuvo de las incertidumbres típicas de un
gran número de mediciones similares, e imprime 0,025 dB como incertidumbre
típica. `metrology.IEC61094_5_TABLE_D1` guarda cada fila con su valor
declarado, su divisor y la incertidumbre típica que imprime, y las siete que
declaran un valor lo reproducen.
`metrology.comparison_uncertainty_budget` las combina con
`metrology.combine_uncertainty`, cada componente con un coeficiente de
sensibilidad de 1 en el modelo en niveles, y multiplica por $k = 2$:

```python
d1 = {
    "reference": 0.025, "capacitance": 0.006, "non_linearity": 0.017,
    "impedance": 0.003, "polarizing_voltage": 0.005, "repeatability": 0.025,
    "drift": 0.017, "rounding": 0.003,
}   # Tabla D.1, incertidumbres típicas a 2 kHz
b = metrology.comparison_uncertainty_budget(d1, frequency_hz=2000)
print(round(b.combined_uncertainty_db, 4), round(b.expanded_uncertainty_db, 3))   # 0.0437 0.087
print(round(b.linear_combined_uncertainty_db, 4))                                  # 0.0436
```

La raíz de la suma de cuadrados de los ocho valores impresos es 0,0437 dB, y
la incertidumbre expandida 0,087 dB. El D.3 imprime **0,040 dB** y
**0,08 dB**, que no son la combinación de sus propias componentes: 0,040 dB es
lo que da la suma dejando fuera una de las dos filas de 0,017 dB. El caso está
en el [registro de erratas](/phonometry/es/reference/errata/). El D.3 advierte
también que un cálculo estricto pasaría cada componente a forma lineal antes
de combinarlas, con un resultado esencialmente igual, y no imprime su valor;
`linear_combined_uncertainty_db` lo hace y da 0,043 614 dB, 0,000 055 dB por
debajo de la combinación en decibelios. La
adopción española, UNE-EN 61094-5:2017, deja en blanco seis de los ocho
valores de la Tabla D.1 e imprime 0,004 dB en el D.3, lo que también está en
el registro.

A otras frecuencias las componentes cambian. El apartado 7.9 estima
aproximadamente 0,1 dB a frecuencias bajas y medias para micrófonos del mismo
diámetro, que sube a unos 0,2 dB a 20 kHz para los WS2P, y los apartados 7.4
y 7.5 señalan la diferencia entre las impedancias acústicas de los
micrófonos como lo que crece. Aquí esa componente sube con la frecuencia, y
la incertidumbre expandida de cada balance pasa a la calibración, que el
gráfico dibuja como una banda:

```python
budgets = [
    metrology.comparison_uncertainty_budget(
        {**d1, "impedance": 0.003 + 0.09 * (fx / 20000) ** 2}, frequency_hz=fx
    )
    for fx in f
]
u = [bb.expanded_uncertainty_db for bb in budgets]
c = metrology.simultaneous_comparison(
    f, l_ref, l_c12, l_c21, reference_environment=env, expanded_uncertainty_db=u
)
print(np.round(u, 3)[[0, 16, 19]])                  # [0.087 0.101 0.205]
print(c.sensitivity_mv_per_pa[[2, 8, 19]].round(2))  # [11.72 11.78 11.98]
c.plot(language="es")
```

*El balance de la Tabla D.1 a 2 kHz (izquierda) y un balance en campo
libre a 8 kHz (derecha).*

## 4. Un micrófono WS3 en el soporte

Un micrófono WS3 es más pequeño que la referencia LS2, y en el soporte de la
Figura A.4 los dos diafragmas quedan enfrentados a 0,5 mm: la presión sobre
el diafragma pequeño no es la media sobre el grande. La Tabla A.1 da las
correcciones que se suman al nivel de sensibilidad del WS3, calculadas para
una referencia LS2aP y un campo con simetría radial y válidas solo para esa
separación, con una incertidumbre expandida de la décima parte de cada
corrección. `metrology.jig_diameter_correction` las lee, y una frecuencia
exacta en base diez se lee como su fila:

```python
j = metrology.jig_diameter_correction()
print(j.correction_db[[0, 9, 13]])          # [-0.004 -0.235 -1.443]
print(j.standard_uncertainty_db[13].round(4))   # 0.0722
```

`j.correction_db` llega a una calibración por `corrections_db=`, con un nombre
propio, y `j.standard_uncertainty_db` a su balance como componente
adicional, el primer caso especial de la Tabla D.1.

*La Tabla A.1 con su incertidumbre expandida del 10 %.*

### Más allá de la Tabla A.1: micrófonos de distinto diámetro

«The effect of a non-uniform pressure distribution over the surface of the
diaphragm will be significantly greater if the test and reference
microphones are of different diameters. A theoretical model which can be
used to apply corrections and assess the uncertainties in this case is given
in the literature (for example [1])» (6.5). Su referencia [1], Barham,
Barrera-Figueroa y Avison (2014), es de donde sale la Tabla A.1. El hueco
entre los diafragmas es un cilindro del radio $a$ de la cavidad frontal de
la referencia y de longitud $L$, cerrado por la referencia en $z = 0$ y
excitado, en un campo con simetría radial, a través de la corona que rodea
al micrófono pequeño en $z = L$. Su presión es una serie de los modos
radiales de la cavidad,

$$
p(r, z) = \sum_n C_n \cosh(\mu_n z)\, J_0(k_n r/a),
\qquad \mu_n^2 = (k_n/a)^2 - (\omega/c)^2,
\qquad J_1(k_n) = 0
$$

y cada micrófono la lee promediada sobre su diafragma con su sensibilidad
radial, la deflexión de una membrana bajo una presión uniforme,
$S(r) = J_0(j_{01}\varpi r/a)/J_0(j_{01}\varpi) - 1$, con $\varpi$ la
frecuencia dividida por la frecuencia de resonancia del diafragma: la
referencia sobre $a$ en su cara, el micrófono en ensayo, con $b$ en lugar
de $a$, sobre su diafragma al otro lado del hueco. La corrección es el cociente de los
dos promedios, $-20\lg\lvert R_P\rvert$.
`metrology.diameter_sound_field_correction` la calcula a partir de la
geometría y de las dos frecuencias de resonancia, con la velocidad del
sonido del aire del Anexo F de la IEC 61094-2:

```python
ws3 = {
    "reference_radius_m": 4.650e-3,        # un LS2: su cavidad frontal y su diafragma
    "test_diaphragm_radius_m": 2.065e-3,   # un WS3: su diafragma
    "test_outer_radius_m": 2.975e-3,       # y su contorno
    "separation_m": 0.5e-3,                # Figura A.4
    "reference_resonance_frequency_hz": 22000,
    "test_resonance_frequency_hz": 100000,
}   # los datos de la Tabla 1 de [1]
model = metrology.diameter_sound_field_correction(j.frequencies_hz, **ws3)
print(round(model.speed_of_sound, 1), model.correction_db[[0, 9, 13]].round(3))   # 345.9 [-0.004 -0.233 -1.434]
print(np.abs(model.correction_db - j.correction_db).max().round(4))               # 0.0093
```

Con el aire de referencia del apartado 4, el modelo queda a menos de
0,0093 dB de todas las filas de la Tabla A.1, dentro de los 0,144 dB que la
NOTA da como incertidumbre expandida de la mayor corrección. El artículo no
imprime ninguna velocidad del sonido; a 344,8 m/s el modelo da todas las
filas a la milésima impresa. Tal como se imprimen, las fórmulas del artículo
con sus propios datos no dan su propia tabla: la biblioteca lee la
sensibilidad radial de su Fórmula (4) menos 1 y la corona de su Fórmula (2)
desde el radio exterior del WS3, las dos lecturas que sí la dan (está en el
[registro de erratas](/phonometry/es/reference/errata/)). El A.2 fija la
incertidumbre expandida de la Tabla A.1 en el 10 % de cada corrección,
«which is approximately the change observed by doubling the distance between
the microphones»; `separation_change_db` es ese cambio según el modelo, del
orden que dice el A.2 y por debajo:

```python
print((model.separation_change_db / np.abs(model.correction_db))[[0, 13]].round(3))   # [0.063 0.054]
```

La Tabla A.1 vale para una pareja de micrófonos en la única separación de
la Figura A.4, «the only one for which the corrections specified in Table
A.1 are valid», y en catorce frecuencias. El modelo vale para cualquier
micrófono en ensayo que quepa en la cavidad frontal de su referencia,
cualquier separación y cualquier frecuencia por debajo de las dos
frecuencias de resonancia, donde está definida la sensibilidad radial, que
divide por $J_0(j_{01}\varpi)$:

```python
f12 = metrology.exact_frequencies(1000, 20000, fraction=12)   # cada doceavo de octava
fine = metrology.diameter_sound_field_correction(f12, **ws3)
print(f12.size, round(f12[50]), fine.correction_db[50].round(3))   # 53 17783 -1.141
```

`fine.correction_db` llega a una calibración por `corrections_db=`, como la
Tabla A.1. El modelo supone un campo con simetría radial, y por eso el 6.5 y
el A.2 piden una fuente coaxial en campo lejano o un campo difuso.

*El modelo de la referencia [1] para el WS3 en el soporte de la Figura A.4,
con las filas de la Tabla A.1 y la corrección al doble de separación.*

## 5. Una calibración en campo libre por sustitución

El apartado A.2 de la IEC 61094-8 describe el método básico: la referencia se
coloca en un punto del campo libre, después el micrófono en ensayo en su
lugar, cada uno leído frente a un micrófono monitor cerca de la fuente, y «the
quotient of these two gives the ratio of the microphone under test output
voltage to the reference microphone output voltage, corrected for any
variation in the sound pressure generated by the source». Con
$V_\mathrm{ref}$ y $V_\mathrm{mon,1}$ las tensiones de salida de la
referencia y del monitor en la primera lectura, y $V_\mathrm{test}$ y
$V_\mathrm{mon,2}$ las de la segunda, con las dos lecturas del monitor juntas
en un `metrology.MonitorReadings`,

$$
20\lg R_V = 20\lg\frac{V_\mathrm{test}}{V_\mathrm{mon,2}} - 20\lg\frac{V_\mathrm{ref}}{V_\mathrm{mon,1}}
$$

Aquí la referencia es un LS2P calibrado en campo de presión, así que su
sensibilidad en campo libre es su sensibilidad en presión más la diferencia
entre campo libre y presión de la IEC/TS 61094-7 (Tabla 1, apartado 8.2).
Los valores de abajo ocupan el lugar de esa diferencia; tome los suyos de la
especificación o de la calibración del micrófono. Entre las dos lecturas la
fuente deriva 0,25 dB:

```python
ff = metrology.exact_frequencies(500, 20000, fraction=3)
xf = ff / 1000
c_ff = 0.05 * xf**1.3            # la diferencia de campo libre a presión del LS2P: ilustrativa
l_ref_p = -38.0 + 0.04 * np.log10(xf) - 0.25 * (xf / 20) ** 2   # su calibración en presión
l_ws2f = -38.3 + 0.1 * np.log10(xf) - 0.3 * (xf / 20) ** 3      # el WS2F: desconocido
field_1 = 74.0 + 0.05 * np.sin(xf)   # el campo libre mientras está la referencia
field_2 = field_1 + 0.25             # la fuente ha derivado cuando llega el WS2F
monitor = -40.0                      # el micrófono monitor junto a la fuente, dB re 1 V/Pa

def free_field_budget(fx):
    x20 = fx / 20000
    return metrology.comparison_uncertainty_budget(
        {
            "reference": 0.06 + 0.14 * x20,    # calibración en presión e IEC/TS 61094-7
            "source_stability": 0.01,
            "positioning": 0.02,
            "alignment": 0.01 + 0.04 * x20**2,
            "free_field": 0.03 + 0.12 * x20**2,
            "non_linearity": 0.017,
            "rounding": 0.003,
            "repeatability": 0.02,
        },
        frequency_hz=fx,
        field="free_field",
    )

free = metrology.sequential_comparison(
    ff,
    l_ref_p,
    l_ref_p + c_ff + field_1,     # la salida de la referencia, dB re 1 V
    l_ws2f + field_2,             # la salida del WS2F en su lugar
    monitor=metrology.MonitorReadings(
        reference_level_db=monitor + field_1, test_level_db=monitor + field_2
    ),
    field="free_field",
    reference_free_field_difference_db=c_ff,
    expanded_uncertainty_db=[free_field_budget(fx).expanded_uncertainty_db for fx in ff],
)
print(bool(np.abs(free.sensitivity_level_db - l_ws2f).max() < 1e-9))   # True
print(free.expanded_uncertainty_db[[0, 12, 16]].round(2))              # [0.16 0.26 0.51]
```

El monitor elimina la deriva exactamente; sin él el resultado saldría
0,25 dB alto a todas las frecuencias. La Tabla 2 de la IEC 61094-8 enumera
las componentes típicas con el apartado que trata cada una y no imprime
valores: las de arriba son ilustrativas, elegidas para que la incertidumbre
expandida quede cerca de los 0,2 dB que estima el apartado 8.8 a frecuencias
bajas y medias y de los 0,5 dB que estima en el límite superior de
frecuencia de una referencia LS2. `metrology.IEC61094_8_TABLE_2` guarda la
lista, y `metrology.IEC61094_8_TABLE_1` la incertidumbre expandida típica de
cada manera de calibrar la referencia:

```python
row = metrology.IEC61094_8_TABLE_1["primary_pressure"]
print(row.expanded_uncertainty_1khz_db, row.expanded_uncertainty_10khz_db)   # 0.12 0.4
```

## 6. La región de campo libre efectiva de una ventana temporal

Donde la sala no es suficientemente anecoica, una ventana temporal puede
quedarse con el sonido directo y descartar las reflexiones (apartado 6.2.3,
Anexo B). La ventana define la región en la que simula un campo libre: un
esferoide alargado con la fuente y el micrófono en sus focos, a una distancia
$d$, y el diámetro mayor

$$
A = d + \tau c
\tag{B.1}
$$

donde $\tau$ va desde la llegada del sonido al micrófono hasta el final de la
ventana y $c$ es la velocidad del sonido en las condiciones del ensayo, aquí
la del aire húmedo del Anexo F de la IEC 61094-2. Una reflexión desde
cualquier punto de su superficie llega $\tau$ después del sonido directo, así
que toda superficie reflectante tiene que quedar fuera, y también el extremo
lejano de la varilla de montaje:

```python
r = metrology.free_field_region(1.0, 0.005)   # 1 m, una ventana de 5 ms, a 23.0 °C
print(round(r.speed_of_sound, 1), round(r.major_axis_m, 2))     # 345.9 2.73
print(round(r.semi_minor_axis_m, 2), round(r.rod_clearance_m, 2))   # 1.27 0.86
```

Una ventana de 5 ms a 1 m necesita 1,27 m de holgura alrededor del eje a mitad
de camino entre fuente y micrófono, y una varilla que se prolongue más de
0,86 m por detrás del micrófono.

*La región de una ventana de 5 ms a 1 m, con la varilla que tiene que salir de
ella.*

## 7. Procesado con ventana temporal

Donde la sala no es suficientemente anecoica, el Anexo B se queda con el
sonido directo y descarta las reflexiones: una respuesta al impulso separa
los dos en el tiempo, una ventana se queda con el primero y una transformada
de Fourier da la respuesta en frecuencia del sonido directo solo (B.1.1). La
respuesta al impulso puede venir de una sinusoide por pasos llevada al
dominio del tiempo por la transformada inversa,

$$
H(f) = \int_{-\infty}^{\infty} h(t)\,\mathrm{e}^{-\mathrm{j}2\pi f t}\,\mathrm{d}t,
\qquad
h(t) = \int_{-\infty}^{\infty} H(f)\,\mathrm{e}^{\mathrm{j}2\pi f t}\,\mathrm{d}f
\tag{B.2, B.3}
$$

(`metrology.stepped_sine_impulse_response`), de un barrido o de una secuencia
de longitud máxima (`room.impulse_response`, `room.mls_impulse_response`), o
de un impulso directo. `metrology.time_selective_response` la pondera con una
ventana temporal y evalúa (B.2) a cualquier frecuencia. «In order not to
produce artefacts in the transformed data, the time window normally has
'tapered' edges» (B.1.2); el B.1.3 enumera las ventanas de Hann, Hamming,
Tukey, coseno de Butterworth y gaussiana, y no recomienda la rectangular,
«because it usually leads to spectral leakage». La ventana por defecto es una
de Tukey, plana en el centro con un octavo suavizado en cada borde, una
proporción que eligió la biblioteca, porque ningún apartado la imprime.

Aquí una referencia LS2P y un WS2F ocupan por turnos un punto a 1 m de la
fuente, y una reflexión en el montaje llega por un camino de 1,48 m. El WS2F
la oye fuera del eje, así que no se anula en el cociente de las dos salidas
como el sonido directo: «it cannot be assumed that the reference microphone
and microphone under test will deviate in the same way» (8.5). Cada uno se
mide con una sinusoide por pasos de 0 Hz a 100 kHz en pasos de 50 Hz, más allá de
tres veces la resonancia como pide el B.2.1; los micrófonos son ilustrativos:

```python
c0 = metrology.free_field_region(1.0, 0.005).speed_of_sound   # 345.9 m/s a 23.0 °C
f_step = np.arange(0.0, 100000.0 + 1.0, 50.0)   # de 0 Hz a 100 kHz en pasos de 50 Hz

def mic(fx, level_db, f0, d):   # la sensibilidad de un micrófono, V/Pa: ilustrativa
    return 10 ** (level_db / 20) / (1 - (fx / f0) ** 2 + 1j * d * fx / f0)

direct, rig = 1.0 / c0, 1.48 / c0   # el sonido directo en 1 m, la reflexión en el montaje en 1.48 m

def heard(m, off_axis):   # cada paso: el sonido directo y la reflexión en el montaje
    return m * (
        np.exp(-2j * np.pi * f_step * direct)
        + 0.25 * off_axis * np.exp(-2j * np.pi * f_step * rig)
    )

ir_ref = metrology.stepped_sine_impulse_response(f_step, heard(mic(f_step, -38.0, 22000, 1.1), 1.0))
ir_ws2f = metrology.stepped_sine_impulse_response(
    f_step, heard(mic(f_step, -26.4, 18000, 0.9), 1 / (1 + 1j * f_step / 6000))
)   # el WS2F oye la reflexión fuera del eje
print(ir_ref.duration_s, round(ir_ref.sample_rate_hz))   # 0.02 200050
```

La respuesta al impulso dura el inverso del paso en frecuencia, 20 ms. El
B.2.2 dimensiona el paso según la sala: 120 Hz basta en una cámara anecoica
pequeña «because the primary reflections all occur before 8 ms», unos 30 Hz
en una grande. (El B.2.1 dice que el incremento «will determine the time
domain resolution»; lo que fija es la duración, como dice el B.2.2, y el
[registro de erratas](/phonometry/es/reference/errata/) recoge la frase.)
`ir_ws2f.plot()` dibuja el registro completo:

*La respuesta al impulso del WS2F obtenida con la sinusoide por pasos, todo
su $1/\Delta f$, con `ir_ws2f.plot()`.*

La ventana tiene que acabar antes de que llegue la reflexión. Un punto del
límite de la región de la Fórmula (B.1) refleja por un camino
igual al diámetro mayor $A = d + \tau c$, así que una reflexión cuyo camino es
$L$ queda fuera mientras

$$
\tau \le \frac{L - d}{c}
$$

que da `metrology.reflection_free_window_s`, con la velocidad del sonido del
aire del Anexo F de la IEC 61094-2:

```python
tau = metrology.reflection_free_window_s(1.0, 1.48)
window = {"window_start_s": direct - 0.0005, "window_end_s": direct + tau}
ref = metrology.time_selective_response(ir_ref.impulse_response, ir_ref.sample_rate_hz, **window)
ws2f = metrology.time_selective_response(ir_ws2f.impulse_response, ir_ws2f.sample_rate_hz, **window)
print(round(1000 * tau, 2), round(ref.frequency_resolution_hz))   # 1.39 530
```

Una ventana de 1,89 ms no distingue frecuencias más próximas que 530 Hz, el
límite de baja frecuencia del que avisa el apartado 6.2.3 para las técnicas
con ventana temporal; las frecuencias más bajas necesitan otro método. Los
niveles y las fases a través de la ventana son las dos salidas de una
sustitución:

```python
fw = metrology.exact_frequencies(1900, 20000, fraction=3)   # de 2 kHz a 20 kHz
m_ref = mic(fw, -38.0, 22000, 1.1)   # la sensibilidad en campo libre de la referencia, de su certificado
tsel = metrology.sequential_comparison(
    fw,
    20 * np.log10(np.abs(m_ref)),
    ref.level_db_at(fw),
    ws2f.level_db_at(fw),
    field="free_field",
    phase=metrology.SequentialComparisonPhase(
        reference_sensitivity_phase_deg=np.degrees(np.angle(m_ref)),
        reference_output_phase_deg=ref.phase_deg_at(fw),
        test_output_phase_deg=ws2f.phase_deg_at(fw),
    ),
)
m_ws2f = mic(fw, -26.4, 18000, 0.9)   # lo que la página sabe que es el WS2F
print(tsel.sensitivity_level_db[[0, 6, 10]].round(2))   # [-26.34 -25.46 -26.6 ]
print(bool(np.abs(tsel.sensitivity_level_db - 20 * np.log10(np.abs(m_ws2f))).max() < 1e-4))   # True
record = 20 * np.log10(np.abs(ws2f.record_response_at(fw) / ref.record_response_at(fw)))
print(np.abs(record - 20 * np.log10(np.abs(m_ws2f / m_ref))).max().round(2))   # 1.91
```

A través de la ventana la sensibilidad del WS2F se recupera con un error por
debajo de 0,0001 dB; con el registro completo, reflexión incluida, se iría
hasta 1,91 dB.

*La respuesta al impulso del WS2F con la ventana encima (izquierda), y su
respuesta a través de la ventana y con el registro completo (derecha).*

**El método de impulso directo** (B.6), que el B.6.2 da por «largely
superseded», excita la fuente con un pulso rectangular corto de amplitud $a$.
Su espectro es

$$
X(f) = \frac{2ab\sin(2\pi f b)}{2\pi f b}
\tag{B.10}
$$

cuyo primer cero, $1/(2b)$, «must be approximately an order of magnitude
higher than the upper limit of the frequency range of interest». La fórmula y
su primer cero son los de un pulso que dura $2b$, aunque el texto llama a $b$
la duración (está en el [registro de erratas](/phonometry/es/reference/errata/));
`metrology.rectangular_pulse` toma la duración completa $T = 2b$:

```python
T = metrology.rectangular_pulse_duration_s(20000)   # un primer cero diez veces 20 kHz
pulse = metrology.rectangular_pulse(T, amplitude_v=10.0)
print(T, pulse.half_duration_s, round(pulse.first_zero_hz))   # 5e-06 2.5e-06 200000
print(pulse.level_db_at([20000.0]).round(2))                  # [-0.14]
```

Las respuestas a varios pulsos, promediadas en sincronía
(`signals.time_synchronous_average`; el B.6.2 cuenta con $10\lg n$ dB de
relación señal a ruido con $n$ de ellos), van a `time_selective_response` con
`excitation=pulse`, que divide por el espectro del pulso, como un pulso que
empieza al principio del registro.

*La Fórmula (B.10) para un pulso de 5 µs: 0,14 dB por debajo a 20 kHz y el
primer cero a 200 kHz.*

## 8. La fase de la sensibilidad

Las dos partes llevan la fase junto con el módulo: el apartado 5.1.1 de la
IEC 61094-5 calcula «the sensitivity (both modulus and phase) of the test
microphone», y el apartado 5.1 de la IEC 61094-8, «both the modulus and phase
of the free-field sensitivity of the microphone under test». El D.2 vale para los cocientes complejos, así que la fase
sigue al nivel término a término, y el intercambio del Anexo C anula los
desfases de los dos canales y del acoplador como la (C.3) anula sus
ganancias:

$$
\varphi_\mathrm{test} = \varphi_\mathrm{ref} + \arg R_V - \arg R_P,
\qquad
\varphi_\mathrm{ref} - \varphi_\mathrm{test} = \tfrac12\left(\Phi_\mathrm{C12} - \Phi_\mathrm{C21}\right)
$$

con $\Phi_\mathrm{C12}$ la fase de la lectura del canal 1 respecto a la del
canal 2. Ninguna de las dos partes imprime esta forma; es la (C.3) escrita
para el cociente complejo. La calibración en presión del apartado 2, con la
fase de cada lectura:

```python
phi_ref = np.degrees(np.angle(1 / (1 - (f / 22000) ** 2 + 1.1j * f / 22000)))   # el certificado del LS2P: ilustrativo
phi_true = np.degrees(np.angle(1 / (1 - (f / 18000) ** 2 + 0.9j * f / 18000)))   # el WS2P: desconocido
shift_1, shift_2 = 1.5 * x, -0.8 * x   # los desfases de los dos canales, en grados
late_a = 0.4 * x                       # el puerto A oye el campo más tarde, en grados
jitter = np.random.default_rng(5).normal(0.0, 0.02, (2, 3, f.size))
p12 = (phi_ref + shift_1) - (phi_true + shift_2) + late_a + jitter[0]   # referencia en el canal 1
p21 = (phi_true + shift_1) - (phi_ref + shift_2) + late_a + jitter[1]   # intercambiados
cp = metrology.simultaneous_comparison(
    f, l_ref, l_c12, l_c21,
    phase=metrology.SimultaneousComparisonPhase(
        reference_sensitivity_phase_deg=phi_ref,
        channel_phase_difference_deg=p12,
        interchanged_channel_phase_difference_deg=p21,
    ),
)
print(cp.sensitivity_phase_deg[[2, 8, 16, 19]].round(1))   # [  -1.1   -4.6  -35.9 -102.9]
print(np.abs(cp.sensitivity_phase_deg - phi_true).max().round(3))   # 0.016
```

La diferencia de las dos lecturas es el doble de la diferencia de fase de
los micrófonos, así que se lleva a una vuelta antes de dividirla por dos: el
resultado es único mientras difieran en menos de 90°. Los datos de fase van
juntos, aquí en un `metrology.SimultaneousComparisonPhase`. En una
calibración secuencial van en un `metrology.SequentialComparisonPhase`, las
fases de las dos salidas se leen frente a las del monitor, que van con sus
niveles en su `metrology.MonitorReadings`, o frente a la señal que excita la
fuente, y su cociente es $\arg R_V$. En campo
libre, «determination of the phase of the free-field sensitivity requires the
definition of consistent reference phases at the acoustic centres of the
microphones» (apartado 5.1 de la IEC 61094-8). El apartado 7.3 sitúa los
centros «at the measurement points»; en una sustitución secuencial cada uno
va por turnos al mismo punto, donde $\arg R_P$ es 0, y un retardo común a
las dos lecturas, como el tiempo de viaje desde la fuente del apartado 7, se
anula en su cociente.

*La fase del WS2P con el intercambio (izquierda) y la del WS2F a través de
la ventana del apartado 7 (derecha), con `.plot(quantity="phase")`.*

## 9. Micrófonos de distinta impedancia acústica

«Differences in the acoustic impedance between the test and reference
microphones can cause the sound pressure at the test and reference
microphones to differ» (7.4), sobre todo cuando un micrófono de presión y uno
de campo libre se encuentran por encima de 10 kHz, «because of differing
volume velocities at the diaphragms» (7.5). Ninguno de los dos apartados
imprime un modelo: el 7.4 remite a la bibliografía, y el 7.5 pide estimar el
error y sumarlo al balance cuando no hay una referencia de impedancia
parecida. `metrology.impedance_pressure_ratio` escribe el efecto para dos
circuitos con el volumen equivalente de cada micrófono, que el
apartado 6.2.2 de la IEC 61094-1 define como
$V_\mathrm{e} = \kappa_\mathrm{r} p_{s,\mathrm{r}} / (\mathrm{j}\omega
Z_\mathrm{a})$ con $\kappa_\mathrm{r} = 1{,}40$:

$$
R_P = \frac{V_x + V_\mathrm{e,ref}}{V_x + V_\mathrm{e,test}}
$$

En un acoplador cerrado pequeño frente a la longitud de onda, la fuente
excita la suma de las admitancias del gas y de cada micrófono que hay en él,
la Fórmula (3) de la IEC 61094-2, así que poner el micrófono en ensayo en el
lugar de la referencia cambia la presión en el cociente de las dos sumas,
siendo $V_x$ el resto de la carga: el gas, la fuente, un monitor. En la
excitación simultánea, la Tabla D.1 pone «the acoustical impedance of the
microphone [...] in series with that of the air in the space between the two
microphones», de modo que los dos «see slightly different pressures [...]
(see 7.4 and [2])»: cada diafragma recibe la presión de una fuente común detrás de la
misma impedancia en serie, y $V_x$ es el volumen equivalente de esa
impedancia, que da el circuito de [2] (más abajo).
`metrology.ReciprocityMicrophone`, el micrófono de
[la calibración por reciprocidad](/phonometry/es/signals/metrology/reciprocity-calibration/),
guarda los parámetros concentrados del E.4 de la IEC 61094-2, el volumen a
baja frecuencia, la frecuencia de resonancia y el factor de pérdidas, y su
`complex_equivalent_volume_m3` da $V_\mathrm{e}$ a partir de ellos. Su
cociente con el volumen a baja frecuencia no contiene $\kappa_\mathrm{r}$,
así que con los 10 mm³ que la Tabla 3 de la IEC 61094-1 da a un LS2P,
$V_\mathrm{e}$ es el volumen del apartado 6.2.2 con su 1,40. El E.4
considera esa representación «of sufficient accuracy» hasta «about 1,3 times
the resonance frequency of the microphone»: 20,8 kHz para el WS2F de abajo,
así que el ejemplo queda dentro. La cavidad frontal que también guarda el
micrófono entra en la impedancia de transferencia de un acoplador, no en
$V_\mathrm{e}$.

```python
fi = metrology.exact_frequencies(1000, 20000, fraction=3)
front = {"front_cavity_volume_m3": 34e-9, "front_cavity_depth_m": 0.5e-3,
         "front_cavity_diameter_m": 9.3e-3}   # la de un LS2aP (Tabla C.1 de la IEC 61094-2)
lumped_ls2p = metrology.ReciprocityMicrophone(
    equivalent_volume_m3=10e-9, resonance_frequency_hz=22000, loss_factor=1.1, **front
)   # un LS2P: 10 mm³ (Tabla 3 de la IEC 61094-1); la resonancia y las pérdidas: ilustrativas
lumped_ws2f = metrology.ReciprocityMicrophone(
    equivalent_volume_m3=30e-9, resonance_frequency_hz=16000, loss_factor=0.5, **front
)   # un WS2F más flexible: ilustrativo
rp = metrology.impedance_pressure_ratio(
    fi,
    reference_equivalent_volume_m3=lumped_ls2p.complex_equivalent_volume_m3(fi),
    test_equivalent_volume_m3=lumped_ws2f.complex_equivalent_volume_m3(fi),
    coupling_equivalent_volume_m3=600e-9,   # el gas, la fuente y el monitor del acoplador: ilustrativos
)
print(rp.level_difference_db[[0, 10, 13]].round(3))      # [-0.281 -0.421  0.37 ]
print(rp.standard_uncertainty_db[[0, 10, 13]].round(3))  # [0.163 0.243 0.213]
```

Un monitor que «shall accurately sense changes in the sound pressure at the
test/reference microphone position» (5.1.3) elimina este cociente. Sin él,
`rp.level_difference_db` y `rp.phase_difference_deg` van a la comparación
como `pressure_level_difference_db` y como el `pressure_phase_difference_deg`
de sus datos de fase. Cuando
el cociente se estima en lugar de corregirse, `rp.standard_uncertainty_db` es
la componente `"impedance"` del balance: la diferencia de nivel leída como la
semiamplitud de una distribución rectangular, como la Tabla D.1 lee sus
0,005 dB a 2 kHz, «equivalent to a standard uncertainty of 0,005/√3 dB =
0,003 dB». La misma fila avisa justo de esta pareja: «When microphones have
significantly differing impedances (for example WS2F microphone compared
against LS2P at frequencies above 10 kHz), the measurement uncertainty can
be considerably larger and should be established experimentally.» Por
encima de 10 kHz el valor de aquí es la estimación del modelo, no ese
experimento; donde el cociente cruza los 0 dB, cerca de 16 kHz, no da casi
nada.

*Un WS2F en el lugar de un LS2P en un acoplador cerrado: el nivel de $R_P$
con su semiamplitud leída como incertidumbre típica (izquierda), que por
encima de 10 kHz la Tabla D.1 pide establecer experimentalmente, y su fase
(derecha).*

### El aire entre los dos micrófonos

La fila «Microphone impedance» de la Tabla D.1 remite la excitación
simultánea a su referencia [2], Jarvis (1996), NPL Report CIRA(EXT) 010. Su
Apéndice B modela un acoplador simétrico como una escalera desde una fuente
en su centro: a cada lado una masa $Z_L$, la compliancia $Z_c$ de la mitad
del volumen de ese lado, una segunda $Z_L$ y el micrófono, para un tubo de
longitud $L$ y radio $r$,

$$
Z_c = \frac{\kappa p_0}{\mathrm{j}\omega V/2},
\qquad
Z_L = \frac{\mathrm{j}\omega}{3}\,\frac{\rho L/4}{\pi r^2},
\qquad V = \pi r^2 L
$$

Visto desde cada diafragma, el centro de la escalera es una presión común a
los dos detrás de una sola impedancia,

$$
Z_x = Z_L + \frac{Z_L Z_c}{Z_L + Z_c}
$$

así que cada diafragma recibe $p\,Z_\mathrm{a}/(Z_\mathrm{a} + Z_x)$, el
divisor de arriba, y el cociente de los dos es el que imprime el Apéndice B.
`metrology.air_gap_series_impedance_pa_s_m3` da $Z_x$ para un acoplador de
longitud y radio conocidos, con el aire de las condiciones que se le den. El
ejemplo del Apéndice B es un LS2P frente a un WS2P de alta sensibilidad en un
tubo de 2 mm de largo y 12,7 mm de diámetro, cada micrófono una resistencia,
una masa y una compliancia en serie:

```python
fj = np.arange(100.0, 20000.0 + 1.0, 100.0)   # las frecuencias del Apéndice B
w = 2 * np.pi * fj

def z_mic(r, c, m):   # Z_m = r + j w m + 1/(j w c), Apéndice B
    return r + 1j * w * m + 1 / (1j * w * c)

def v_e(z):           # el volumen equivalente del apartado 6.2.2 de la IEC 61094-1
    return 1.40 * 101325 / (1j * w * z)

z_x = metrology.air_gap_series_impedance_pa_s_m3(fj, gap_length_m=2e-3, gap_radius_m=6.35e-3)
gap = metrology.impedance_pressure_ratio(
    fj,
    reference_equivalent_volume_m3=v_e(z_mic(330e6, 48e-15, 1210)),   # el LS2P del Apéndice B
    test_equivalent_volume_m3=v_e(z_mic(7e7, 2.6e-13, 820)),           # su WS2P de alta sensibilidad
    coupling_impedance_pa_s_m3=z_x,
)
print(gap.level_difference_db[[69, 199]].round(4))   # [ 0.0064 -0.025 ]
print(gap.phase_difference_deg[124].round(3))         # -0.158
```

El WS2P oye 0,0064 dB más que el LS2P a 7 kHz y 0,025 dB menos a 20 kHz, y
va retrasado respecto a él hasta 0,158° a 12,5 kHz. El Apéndice B dibuja las
mismas curvas para $P_1/P_2$, el LS2P re el WS2P, o sea al revés, con su
densidad del aire de 1,21 kg/m³; con esa densidad el informe de conformidad
las reproduce. En el escaneo publicado, su impedancia del LS2P no muestra
la unidad imaginaria en el término de masa, donde queda un hueco en blanco;
la del segundo micrófono sí la lleva, y la gráfica la necesita (está en el
[registro de erratas](/phonometry/es/reference/errata/)).

*El aire entre un LS2P y un WS2P de alta sensibilidad en serie con cada uno,
por el circuito de la referencia [2]: el nivel de $R_P$ con su semiamplitud
leída como incertidumbre típica (izquierda), y su fase (derecha).*

## 10. La comparación en campo difuso de la IEC 61183

El método en campo difuso del apartado 5 de la IEC 61183 es una comparación
secuencial sin monitor: un sonómetro y un sonómetro de referencia leen por
turnos en las mismas posiciones de una cámara reverberante, y la diferencia
de sus lecturas se suma al nivel de sensibilidad en campo difuso de la
referencia. La biblioteca lo calcula con el mismo modelo, así que los dos no
pueden separarse:

```python
d = metrology.diffuse_field_sensitivity(
    [1000.0, 2000.0], [94.3, 94.6], [94.0, 94.1],
    reference_random_incidence_level_db=[-26.0, -26.2],
)
s = metrology.sequential_comparison([1000.0, 2000.0], [-26.0, -26.2], [94.0, 94.1], [94.3, 94.6])
print(d.diffuse_field_level_db, s.sensitivity_level_db)   # [-25.7 -25.7] [-25.7 -25.7]
```

## 11. Validar un soporte o un acoplador

«Calibrations performed in any particular jig or coupler shall be validated
by comparison with calibrations performed in other jigs and couplers and
alternative sound sources. A separate validation is necessary for each
different type of microphone. If the test microphone is a laboratory
standard microphone, then the jig or coupler can be validated by comparing
a comparison calibration with a reciprocity calibration. For some
microphones, it can be necessary to use more than one jig and/or coupler to
cover a full frequency range with low uncertainty» (6.7).
`metrology.verify_jig_or_coupler` pone una calibración hecha en el soporte o
el acoplador junto a otra calibración del mismo micrófono, una comparación
hecha en otro sitio o, para un micrófono patrón de laboratorio, la
`ReciprocityCalibration` de [la calibración por
reciprocidad](/phonometry/es/signals/metrology/reciprocity-calibration/) con
el índice de ese micrófono, y las compara en las frecuencias que comparten.
El apartado no imprime ningún criterio. La biblioteca lee «validated» como
que las dos coincidan dentro de la incertidumbre expandida de su diferencia,
que para dos calibraciones independientes es la raíz de la suma de los
cuadrados de las dos,

$$
\lvert L_\mathrm{cal} - L_\mathrm{val} \rvert \le U_\Delta =
\sqrt{U_\mathrm{cal}^2 + U_\mathrm{val}^2}
$$

Dos calibraciones que comparten una componente están correlacionadas, y la
parte que comparten sale de $U_\Delta$ (más abajo).

Aquí el soporte del A.2 se valida frente al acoplador del A.1 para el WS2P
del primer ejemplo, usando el acoplador hasta los 10 kHz para los que está
pensado. Cerca de 6,3 kHz el soporte tiene una onda estacionaria junto a los
micrófonos, la anomalía que Barham et al. encontraron a esa frecuencia en
una caja de ensayo, y el campo se mueve entre la lectura y el intercambio,
así que la (C.3) ya no la cancela:

```python
fv = f[6:]   # el soporte del A.2, de 1 kHz a 20 kHz
mode = 0.5 * np.exp(-(((fv / 1000 - 6.3) / 0.6) ** 2))   # el campo se mueve cerca de 6,3 kHz
jitter = np.random.default_rng(42).normal(0.0, 0.01, (2, 3, fv.size))
j12 = (l_ref[6:] + gain_1) - (l_true[6:] + gain_2) + field_a[6:] + mode + jitter[0]
j21 = (l_true[6:] + gain_1) - (l_ref[6:] + gain_2) + field_a[6:] + jitter[1]
jig = metrology.simultaneous_comparison(fv, l_ref[6:], j12, j21, expanded_uncertainty_db=u[6:])
coupler = metrology.simultaneous_comparison(
    f[:17], l_ref[:17], l_c12[:, :17], l_c21[:, :17], expanded_uncertainty_db=u[:17]
)   # el acoplador del A.1, hasta 10 kHz
check = metrology.verify_jig_or_coupler(jig, coupler)
print(check.passes, check.failing_frequencies_hz.round())    # False [6310.]
print(check.unvalidated_frequencies_hz.round())              # [12589. 15849. 19953.]
print(check.difference_db[8].round(3), check.expanded_uncertainty_db[8].round(3))   # -0.247 0.128
```

El soporte coincide con el acoplador en todas las frecuencias que comparten
salvo 6,3 kHz, donde difieren en 0,247 dB frente a 0,128 dB, y por encima de
10 kHz no queda validado en absoluto, porque el acoplador no llega: otra
disposición tiene que validarlo ahí, como permite el 6.7.
`check.normalised_difference` es la diferencia en unidades de su
incertidumbre expandida, -1,93 a 6,3 kHz.

### Calibraciones que comparten una referencia

Las dos calibraciones toman aquí el mismo LS2P como referencia, así que la
primera fila de la Tabla D.1, la calibración de esa referencia (0,025 dB,
los «±0,05 dB with a coverage factor of k = 2» de su certificado), está en
los dos balances. El error que lleve esa calibración mueve juntos los dos
niveles de sensibilidad y se cancela en su diferencia, mientras que la raíz
de la suma de cuadrados lo cuenta dos veces. En los términos de la GUM, dos
niveles que dependen cada uno de una magnitud común con una sensibilidad de
1 tienen su varianza como covarianza (JCGM 100:2008 F.1.2.3, Fórmula (F.2),
cuyos coeficientes de sensibilidad valen entonces 1 los dos), y la ley de propagación
para magnitudes de entrada correlacionadas (5.2.2, Fórmula (13)) da para la
diferencia

$$
u_\Delta^2 = u_\mathrm{cal}^2 + u_\mathrm{val}^2 - 2u_\mathrm{sh}^2
$$

con $u_\mathrm{sh}$ la incertidumbre típica de lo que comparten las dos.
`shared_standard_uncertainty_db` la recibe, un valor o uno por frecuencia de
la calibración, y la banda pasa a ser, con el $k = 2$ del 7.9,

$$
U_\Delta = \sqrt{U_\mathrm{cal}^2 + U_\mathrm{val}^2 - 2(k\,u_\mathrm{sh})^2}
$$

```python
shared = metrology.verify_jig_or_coupler(jig, coupler, shared_standard_uncertainty_db=0.025)
print(shared.passes, shared.failing_frequencies_hz.round())                                # False [6310.]
print(shared.expanded_uncertainty_db[8].round(3), shared.normalised_difference[8].round(2))   # 0.106 -2.32
print(shared.correlation_coefficient[8].round(2))                                           # 0.31
```

La banda se estrecha de 0,124 dB a 0,101 dB en las frecuencias bajas y de
0,128 dB a 0,106 dB a 6,3 kHz, donde las dos calibraciones están
correlacionadas con un coeficiente de 0,31, la varianza de la referencia
entre el producto de sus incertidumbres típicas (Fórmula (14)). El
veredicto no cambia aquí: el soporte sigue fallando sólo a 6,3 kHz, ahora
por 2,32 veces la incertidumbre de la diferencia. Un par que coincide dentro
de la raíz de la suma de cuadrados puede fallar una vez quitada la parte
compartida. Qué componentes comparten las dos lo dice el laboratorio: la
calibración de una referencia que usan las dos, su deriva desde entonces (la
fila «Drift in reference microphone sensitivity since last calibration»,
0,017 dB) para dos calibraciones hechas cerca en el tiempo, una cadena de
medida por la que pasan las dos. Sólo cabe aquí un componente que entra en
los dos niveles con el mismo signo y el mismo tamaño. Una calibración por
reciprocidad hecha en el mismo juego de tres micrófonos que la de la
referencia no es ese caso: en la Fórmula (7) de IEC 61094-2:2009 (folio 12)
las impedancias de transferencia eléctrica de los dos pares que pasan por
el tercer micrófono están en el numerador de la sensibilidad de un
micrófono y en el denominador de la del otro, así que esas medidas entran
en los dos niveles con signos opuestos. Su covarianza es negativa y
ensancha la incertidumbre de la diferencia por encima de la raíz de la suma
de cuadrados, algo que `shared_standard_uncertainty_db` no puede expresar;
ahí sólo se pueden dar los factores comunes a los dos niveles con el mismo
signo. Una parte compartida mayor que la incertidumbre típica de cualquiera
de las dos calibraciones se rechaza, porque no se puede compartir más que el
total.

*El soporte frente al acoplador: la diferencia de las dos calibraciones
dentro de la incertidumbre expandida de la diferencia una vez quitada la
referencia que comparten, a puntos alrededor la raíz de la suma de
cuadrados de dos calibraciones independientes, la única frecuencia en la
que el soporte falla y, en trazos, las tres por encima de 10 kHz a las que
el acoplador no llega.*

El apartado no imprime ni un criterio ni un ejemplo, así que el informe de
conformidad comprueba el veredicto frente a su propia definición. Jarvis y
Watkins (1997), NPL Report CIRA(EXT) 022, que compararon calibraciones en
soporte de micrófonos patrón de trabajo en el NPL con calibraciones por
reciprocidad de los mismos micrófonos, tampoco imprimen un criterio
numérico: sus figuras 6 y 7 (folio 4) dibujan las diferencias, y el texto
las juzga frente a «the typical repeatability» de las medidas (folio 2), una
desviación típica dibujada como banda en la figura 7 y nunca impresa como
número, sin ningún número frente al que comprobar un criterio. Las
diferencias residuales «of less than 0.1 dB» del folio 5 dan un resultado,
no fijan una prueba, y el informe no dice nada sobre lo que comparten las
dos calibraciones. La parte compartida sí tiene números
impresos, en la GUM: dos objetos calibrados frente al mismo patrón, de
incertidumbre típica relativa $10^{-4}$, están correlacionados con
coeficientes de aproximadamente 0,5, 0,990 y 1,000 para comparaciones de
$100 \times 10^{-6}$, $10 \times 10^{-6}$ y $1 \times 10^{-6}$ (F.1.2.3,
Ejemplo 2). El informe de conformidad comprueba `correlation_coefficient`
frente a ellos, y la diferencia de dos calibraciones con el balance de la
Tabla D.1 frente a las siete filas que quedan una vez cancelada la de la
referencia.

<details>
<summary>Mostrar el código de estas figuras</summary>

```python

fig, (ax_pressure, ax_free) = plt.subplots(1, 2, figsize=(13.5, 5.6))
c.plot(ax_pressure, language="es")
free.plot(ax_free, language="es")
fig.tight_layout()

fig, (ax_d1, ax_ff) = plt.subplots(1, 2, figsize=(13.5, 5.6))
b.plot(ax_d1, language="es")
free_field_budget(8000).plot(ax_ff, language="es")
fig.tight_layout()

fig, ax = plt.subplots(figsize=(10, 6))
j.plot(ax, language="es")
fig.tight_layout()

fig, ax = plt.subplots(figsize=(10, 6))
fine.plot(ax, marker="none", language="es")
ax.plot(j.frequencies_hz, j.correction_db, ls="none", marker="D", label="Tabla A.1")
ax.legend()
fig.tight_layout()

fig, ax = plt.subplots(figsize=(10, 6))
r.plot(ax, language="es")
fig.tight_layout()

fig, ax = plt.subplots(figsize=(10, 6))
ir_ws2f.plot(ax, language="es")
fig.tight_layout()

fig, (ax_time, ax_response) = plt.subplots(1, 2, figsize=(13.5, 5.6))
ws2f.plot(ax_time, language="es")
ax_time.set_xlim(1000 * (direct - 0.0015), 1000 * (direct + 0.0035))
ws2f.plot(ax_response, quantity="response", frequencies_hz=np.geomspace(1000, 40000, 300), language="es")
fig.tight_layout()

fig, ax = plt.subplots(figsize=(10, 6))
pulse.plot(ax, upper_frequency_hz=20000, language="es")
fig.tight_layout()

fig, (ax_pressure, ax_free) = plt.subplots(1, 2, figsize=(13.5, 5.6))
cp.plot(ax_pressure, quantity="phase", language="es")
tsel.plot(ax_free, quantity="phase", language="es")
fig.tight_layout()

fig, (ax_level, ax_phase) = plt.subplots(1, 2, figsize=(13.5, 5.6))
rp.plot(ax_level, language="es")
rp.plot(ax_phase, quantity="phase", language="es")
fig.tight_layout()

fig, (ax_level, ax_phase) = plt.subplots(1, 2, figsize=(13.5, 5.6))
gap.plot(ax_level, marker="none", language="es")
gap.plot(ax_phase, quantity="phase", marker="none", language="es")
fig.tight_layout()

fig, ax = plt.subplots(figsize=(10, 6))
shared.plot(ax, language="es")
fig.tight_layout()
plt.show()
```

</details>

## Qué cubre esta guía

**IEC 61094-5:2016 e IEC 61094-8:2012, los cálculos:** el modelo en niveles
del D.2; la excitación simultánea con el intercambio del Anexo C (Fórmulas
(C.1) a (C.3)), obligatoria en una calibración en presión, y sin él en una en
campo libre (apartado 5.3); la excitación secuencial frente a un micrófono
monitor (5.1.3 de la 61094-5, A.2 de la 61094-8); la media entre las
determinaciones; la diferencia de campo libre a presión de la referencia en
una calibración en campo libre (Tabla 1, apartado 8.2); las correcciones del
WS3 de la Tabla A.1 con su incertidumbre; los balances de la Tabla D.1 y
de la Tabla 2 sobre la GUM con $k = 2$ (7.9, D.2, D.3, 8.8), y la combinación
en forma lineal que menciona el D.3; las Tablas A.1, D.1, 1 y 2 como datos
publicados; y la región de campo libre efectiva de la Fórmula (B.1), con la
velocidad del sonido del Anexo F de la IEC 61094-2, y la ventana más larga
que admite para una reflexión. La fase de la sensibilidad (5.1.1 de la
61094-5, 5.1 de la 61094-8) con el intercambio y con los cocientes frente al
monitor. **El Anexo B de la IEC 61094-8:** la ventana temporal del B.1.3
(Tukey, Hann, Hamming, y la rectangular que no recomienda) con los bordes
suavizados del B.1.2, la Fórmula (B.2) a través de ella, la sinusoide por
pasos del B.2 por la Fórmula (B.3) y el pulso
rectangular del método de impulso directo (B.6, Fórmula (B.10)). **Los
apartados 7.4 y 7.5 de la IEC 61094-5:** el cociente de presiones de
micrófonos de distinta impedancia acústica en un acoplador cerrado (Fórmula
(3) de la IEC 61094-2), con el volumen equivalente concentrado del E.4 de la
IEC 61094-2 y del 6.2.2 de la IEC 61094-1, y en serie con el aire entre dos
micrófonos, cuya impedancia es la del circuito del Apéndice B de la
referencia [2] de la parte, Jarvis (1996), con el cociente que imprime y los
extremos de su gráfica reproducidos. **El apartado 6.5 de la IEC 61094-5:**
la corrección de un micrófono en ensayo más pequeño que su referencia por el
modelo de la referencia [1] de la parte, Barham et al. (2014), para
cualquier geometría y separación, con su cambio al doblar la separación que
nombra el A.2; reproduce todas las filas de la Tabla A.1 a partir de los
datos de la tabla 1 del artículo. **El apartado 6.7 de la IEC 61094-5:** la
comparación de una calibración hecha en un soporte o un acoplador con otra
del mismo micrófono, por comparación en otro sitio o por reciprocidad, en las
frecuencias que comparten, con la parte de su incertidumbre que comparten
las dos quitada de la incertidumbre de la diferencia por la ley de
propagación de la GUM para magnitudes de entrada correlacionadas
(JCGM 100:2008 5.2.2 y F.1.2.3), de la que se reproducen los coeficientes
de correlación del Ejemplo 2 del F.1.2.3. La comparación del apartado 5 de la IEC 61183 se
calcula con el mismo modelo. La Tabla D.1 y la Tabla A.1 se reproducen.

**La corrección ambiental.** Los apartados 6.6 y 7.6 piden corregir la
referencia a las condiciones del ensayo, o el resultado a las condiciones de
referencia, y no imprimen ninguna fórmula; la suma de primer orden de un
coeficiente por una desviación para cada condición es la lectura de esta
biblioteca, con los coeficientes propios del micrófono. **La media de los dos
cocientes** del apartado 5.1.2 se toma en decibelios, como hace el Anexo C.
**El factor de cobertura de las correcciones del WS3.** El apartado A.2, la
NOTA de la Tabla A.1 y el caso especial de la Tabla D.1 dan su incertidumbre
expandida como el 10 % de cada corrección sin factor de cobertura; se lee con
el $k = 2$ con que los apartados 7.9 y D.2 informan de toda incertidumbre
expandida, así que la incertidumbre típica es el 5 % de la corrección.
**La fase.** Ninguna de las dos partes imprime una forma en fase de la (C.3)
ni de los cocientes frente al monitor; son las formas en nivel escritas para
el cociente complejo que el apartado 5.1.1 llama la sensibilidad «both
modulus and phase», con la semidiferencia del intercambio tomada en una
vuelta. **El cociente de impedancias.** Los apartados 7.4 y 7.5 dejan el
modelo a la bibliografía. El acoplador es la Fórmula (3) impresa de la
IEC 61094-2; para la excitación simultánea, el divisor, cada diafragma
detrás de la misma impedancia en serie desde una fuente común, es el
circuito del Apéndice B de Jarvis (1996) visto desde cada micrófono, leído
con la unidad imaginaria que el término de masa de su primer micrófono ha
perdido en el escaneo publicado. La incertidumbre típica lee la diferencia de nivel como una
semiamplitud, como hace esa fila; por encima de 10 kHz, para un WS2F frente
a un LS2P, la fila pide establecerla experimentalmente. **El modelo del
apartado 6.5.** Tal como se imprimen, las fórmulas de Barham et al. (2014)
con sus propios datos no dan su propia tabla 2; la biblioteca lee la
sensibilidad radial de la fórmula (4) menos 1 y la corona de la fórmula (2)
desde el radio exterior, que sí la dan, a una velocidad del sonido que el
artículo no imprime. Su incertidumbre la estima quien lo usa: el modelo da
el cambio al doblar la separación que el A.2 nombra como aproximadamente el
10 % de la Tabla A.1. **La validación del apartado 6.7.** El apartado no
imprime ningún criterio, y Jarvis y Watkins (1997), que compararon
calibraciones en soporte con calibraciones por reciprocidad, tampoco
imprimen uno numérico: juzgan las diferencias de palabra frente a una
desviación típica de repetibilidad dibujada en su figura 7; la coincidencia
dentro de la incertidumbre expandida de la diferencia, la raíz de la suma de
cuadrados de las dos menos la parte que comparten, es la lectura de esta
biblioteca, y el informe de conformidad la comprueba frente a su propia
definición. Qué componentes comparten dos calibraciones lo da quien llama, y
sólo se puede dar uno que entre en los dos niveles con el mismo signo y el
mismo tamaño. **La Fórmula (B.10)** se
lee como el espectro de un pulso que dura $2b$, como dicen la fórmula y su
primer cero y no el texto.

Las mediciones en sí, y la elección de los montajes frente a los que se
valida un soporte o un acoplador, para cada tipo de micrófono (6.7). Los
barridos, las secuencias de
longitud máxima y el ruido aleatorio del B.3 al B.5 son
`room.impulse_response`, `room.mls_impulse_response` y
`electroacoustics.transfer_function`, y el promedio síncrono del B.6.2 es
`signals.time_synchronous_average`, en sus propias páginas; la cualificación
del campo libre según la ISO 26101 está en
[su propia página](/phonometry/es/devices/emission/free-field-qualification/).
Los valores de la IEC/TS 61094-7, que aquí son entradas; la calibración por
reciprocidad de la referencia (IEC 61094-2, -3) es el objeto de
[Calibrar un micrófono por reciprocidad](/phonometry/es/signals/metrology/reciprocity-calibration/). El segundo caso especial
de la Tabla D.1, un micrófono calibrado como sistema con su preamplificador
(0,002 dB, y para la tensión de polarización y la capacidad, dependiente de
la frecuencia y menos de 0,02 dB por encima de 200 Hz), no se guarda como
dato; un balance que lo necesite lo toma por `additional_components`. Una
covarianza que ensancha la incertidumbre de la diferencia, como la de dos
micrófonos del mismo juego de reciprocidad a través de los pares con el
tercero (Fórmula (7) de IEC 61094-2:2009), no la toma
`verify_jig_or_coupler`.

## Véase también

- [Calibrar un micrófono por reciprocidad](/phonometry/es/signals/metrology/reciprocity-calibration/):
  la IEC 61094-2 y la IEC 61094-3, que calibran el micrófono patrón de
  laboratorio que una comparación toma como referencia.
- [Correcciones de campo libre de un sonómetro](/phonometry/es/signals/metrology/free-field-corrections/):
  la IEC 62585, que compara un sonómetro con una referencia LS2P de la misma
  manera.
- [Incidencia aleatoria y campo difuso](/phonometry/es/signals/metrology/random-incidence/):
  la IEC 61183, cuyo método en campo difuso es una comparación con el mismo
  modelo.
- [Incertidumbre de medida](/phonometry/es/signals/metrology/gum-uncertainty/):
  la ley de propagación de la GUM con que se combinan los balances.
- [Aire húmedo](/phonometry/es/fluids/humid-air/): el aire del Anexo F de la
  IEC 61094-2 cuya velocidad del sonido fija la región de campo libre.
- [Calibración y dBFS](/phonometry/es/signals/metrology/calibration/): el tono
  del calibrador que convierte una grabación en pascales una vez que se conoce
  la sensibilidad del micrófono.
- Referencia de la API: [`metrology.comparison_calibration`](/phonometry/es/reference/api/metrology/comparison-calibration/).
