<!-- canonical: https://docs.jmrp.io/phonometry/es/signals/filters/filter-compliance/ -->
Source: https://docs.jmrp.io/phonometry/es/signals/filters/filter-compliance/

Un banco de filtros solo se convierte en instrumento de medida cuando sus
bandas se han demostrado frente a una especificación. IEC 61260-1:2014
escribe esa especificación como una **máscara de aceptación**: un corredor
de atenuación relativa alrededor de cada frecuencia central, estrecho en la
banda de paso y convertido en una exigencia de atenuación mínima lejos de la
banda, con un corredor por cada clase de prestaciones. Un banco «es clase 1»
cuando todas sus bandas se mantienen dentro del corredor de clase 1 en todas
las frecuencias normalizadas, y el margen en decibelios dice por cuánto.

Esta página es la mitad de verificación del tema del filtrado en octavas: la
máscara de 2014 y el veredicto por banda, los dos requisitos que la Parte 2 de
la serie calcula a partir de la misma respuesta (el ancho de banda efectivo y
la suma de las salidas adyacentes) y el ensayo de barrido del funcionamiento
invariante en el tiempo, la **clase 0** más estricta que mantienen vivas las
máscaras retiradas de IEC 61260:1995 y ANSI S1.11-2004, una lectura de lo que
aporta de verdad una clase en una medición (error en la banda de paso, fuga en
la banda atenuada, balance de incertidumbre), los ensayos periódicos que un
laboratorio le hace a un instrumento y cómo se califican sus resultados, y la
ficha acreditada de una página que convierte el veredicto en documento. La mitad
de diseño, las matemáticas de banda y la referencia de parámetros, es
[Bancos de filtros](/phonometry/es/signals/filters/filter-banks/), y las cinco
arquitecturas con sus respuestas comparadas son la
[Galería de arquitecturas de filtro](/phonometry/es/signals/filters/filter-gallery/);
la misma maquinaria aplicada a las ponderaciones frecuenciales es la
sección 6 de [Ponderación frecuencial](/phonometry/es/signals/levels/weighting/).

## 1. Verificar la clase frente a IEC 61260-1:2014

`verify_filter_class` comprueba cada banda de un banco contra los límites de
aceptación de **IEC 61260-1:2014** (Tabla 1, con el mapeo de los puntos de
quiebre a cada fracción de octava y la interpolación logarítmica de la norma)
y, para la edición de 2014, contra el ancho de banda efectivo y la suma de las
salidas tal como los calcula IEC 61260-2:2016 (apartado 1b). Informa de la
clase por banda con sus márgenes en dB:

```python
from phonometry import filters

bank = filters.OctaveFilterBank(fs=48000, fraction=3, order=6)
result = filters.verify_filter_class(bank)
print(result.overall_class)          # 1
print(result.range_limited)          # True: sus bandas altas llegan a Nyquist
print(result.requirements)
# ('relative_attenuation', 'effective_bandwidth', 'summation')
band = result.bands[0]
print(band["freq"], band["class"], band["checked_to_omega"])
# 12.589254117941678 1 1906.3877633382747
print(band["margin_class1_db"], band["bandwidth_margin_class1_db"])
# 0.39999977486865645 0.35126579320766144
```

*La banda de 1 kHz de un banco como el de arriba, a lo largo de la comprobación:
su atenuación relativa en cada punto de quiebre de la Tabla 1, llevado a tercio
de octava, frente a los límites de clase 1 y clase 2, y el menor margen decide
la clase. La comprobación recorre cada banda hasta la mitad de la frecuencia de
muestreo de entrada, 24 veces la frecuencia central de esta banda a 48 kHz,
sobre la respuesta que la banda tiene a esa frecuencia, así que una banda
diezmada se califica también sobre las imágenes que su diezmado pliega sobre
ella. La caja de la derecha es lo que el apartado 1b calcula además
sobre el diseño, los ensayos de IEC 61260-2 que no necesitan espécimen; la
columna discontinua de debajo es lo que un laboratorio le hace a un
instrumento, y el apartado 3b califica los resultados de ensayo periódico que
devuelve.*

**Hasta dónde de la máscara llega realmente el veredicto.**
`checked_to_omega` es la frecuencia normalizada $\Omega = f/f_\mathrm{m}$ más alta a la
que se evaluó esa banda: la mitad de la frecuencia de muestreo de entrada, la
frecuencia más alta que contiene una entrada muestreada, dividida por la
frecuencia central de la banda. Una banda que el banco diezma también se evalúa
hasta ahí, no solo hasta la frecuencia de Nyquist de su frecuencia diezmada
(véase más abajo). Todas las bandas del banco de arriba se evalúan por encima
del final de la máscara de la Tabla 1 (al menos 70 dB para la clase 1 desde
$\Omega \approx 5{,}39$, la fila de octava $G^4$ llevada a tercio de octava)
salvo las de lo alto: desde 5 kHz, la frecuencia de Nyquist de 24 kHz queda
por debajo de $5{,}39\,f_\mathrm{m}$, y la banda de 20 kHz solo se evalúa
hasta $\Omega = 1{,}20$. Ahí el requisito de banda atenuada lejana no queda
demostrado *sobre el filtro de banda* en absoluto. Se da por satisfecho porque
una señal muestreada no lleva energía por encima de su frecuencia de Nyquist:
el filtro antialiasing de la cadena de captura la eliminó antes de que la banda
llegara a verla. `range_limited` es el indicador de que se ha usado ese
argumento, y aquí vale `True`.

Conviene decirlo tal cual en un informe: el veredicto acredita la máscara hasta
`checked_to_omega`, y el resto es un argumento sobre la cadena de captura. El
indicador solo se desactiva cuando la mitad de la frecuencia de muestreo de
entrada queda más allá del final de la máscara para cada banda. El banco de
tercios de octava del apartado 1b, de 125 Hz a 4 kHz a 48 kHz, no está
limitado en rango; el banco de octavas del mismo rango sí, porque sus bandas de
2 kHz y 4 kHz, filtradas a la frecuencia completa, solo se evalúan hasta
$\Omega \approx 12$ y 6, por debajo del $G^4 = 15{,}85$ donde termina la
máscara de octava. Cuando un documento exija la máscara completa sobre cada
filtro de banda, baja el techo del banco o sube `fs`: diseñar el banco con
`design=filters.FilterDesign(resample=False)` no cambia nada aquí, porque las
bandas que se quedan cortas ya corren a la frecuencia completa.

**Una banda diezmada se califica sobre sus imágenes.** Una banda que el banco
diezma por $M$ pasa su entrada por un paso bajo antialiasing, se queda con una
muestra de cada $M$ y filtra a $f_\mathrm{s}/M$, de modo que un tono en
$k\,f_\mathrm{s}/M \pm f$ sale de la banda en $f$: la banda lee imágenes de sí
misma a lo largo de toda la banda de entrada. La IEC 61260-1:2014 5.15 pide a
los filtros antialiasing que esas imágenes queden dentro de los límites de la
Tabla 1, y la Tabla 1 cubre todas las frecuencias. La IEC 61260:1995 4.8 les
pide que la atenuación relativa no supere el mayor de los límites mínimos de la
Tabla 1, y el 5.7 lo ensaya con un tono en la frecuencia de muestreo diezmada
menos la frecuencia central; toda imagen de una banda diezmada cae más allá del
último punto de quiebre de la máscara, donde su mínimo es ese mayor. Así que la
comprobación lee cada banda a la frecuencia de entrada en las dos ediciones: el
filtro antialiasing en la frecuencia de entrada por las secciones de la banda
en la frecuencia sobre la que se pliega. Calificado así, el diezmador que
`scipy.signal.resample_poly` diseña por defecto, una ventana de Kaiser con
$\beta = 5$, dejaba la primera imagen del banco de octavas por defecto 68,9 dB
por debajo a 8, 16 y 32 kHz, sin llegar a los 70 dB de la clase 1, y las
imágenes de todos los demás bancos por defecto entre 70,9 dB y 73,1 dB por
debajo, sin llegar a los 75 dB de la clase 0 de la edición de 1995. Esas
imágenes de 68,9 dB quedan por encima de 1,5 veces la frecuencia central más
alta del banco, fuera del intervalo en el que la IEC 61260-2:2016 7.2.2.2 mide
la atenuación relativa, así que ese veredicto de clase 1 descansa en el 5.15 y
la Tabla 1 de la IEC 61260-1:2014 por sí mismos. Una comprobación que se
detenía en la frecuencia de Nyquist diezmada no veía nada de eso. El banco
diezma e interpola ahora con un filtro de la misma longitud cuya ventana de
Kaiser está dimensionada para una banda atenuada de 120 dB: sus imágenes quedan
al menos 125,4 dB por debajo de 8 kHz a 192 kHz, y su rizado dentro de
cualquier banda baja de $8{,}4\times10^{-3}$ dB a menos de $10^{-5}$ dB. Los
tonos que pasan por el banco leen las imágenes calificadas con una diferencia
de 0,01 dB, a más de 120 dB por debajo.

```python
from phonometry import filters

bank = filters.OctaveFilterBank(fs=16000, fraction=1, limits=[12, 5000])
print([int(m) for m in bank.factor[:4]])   # [22, 11, 5, 2]: bandas diezmadas
result = filters.verify_filter_class(bank)
print(result.requirement_class("relative_attenuation"))   # 1
band = result.bands[0]
print(band["checked_to_omega"] * band["freq"])
# 8000.0: la mitad de la frecuencia de entrada, no los 364 Hz de la diezmada
```

**Qué mide el margen.** Es el mínimo, sobre todas las frecuencias normalizadas
en las que se evaluó la banda, de la distancia al límite más próximo de esa
clase: positivo cuando la respuesta se queda dentro del corredor en todas
partes, y negativo por exactamente la peor violación cuando no. La `class` que
se informa es la clase más estricta para la que ese margen y los márgenes del
apartado 1b no son negativos.

Conviene saber qué restricción manda antes de intentar mejorar el número. Un
Butterworth de planitud máxima es plano en el centro de banda, donde el corredor
de clase 1 es de ±0,4 dB, así que su margen *satura en +0,400 dB* en cuanto la
banda atenuada deja de ser el factor limitante: medido sobre un banco de tercios
de octava a 48 kHz, el orden 2 falla de plano (clase `None`, peor margen de
clase 1 de −27,03 dB) y los órdenes 4, 6, 8 y 10 mantienen todos exactamente
+0,400 dB en la Tabla 1 (el orden 4 pierde luego la clase 1 en la suma del
apartado 1b, y los órdenes 6 a 10 son clase 1 en todo). Subir el orden ayuda, por tanto, solo mientras el margen
es negativo por un motivo de banda atenuada; una vez que un diseño cumple, el
margen queda acotado por la semianchura del corredor de banda de paso y ningún
orden lo moverá. Un margen de +0,400 dB no es un resultado mediocre que haya que
mejorar: es lo mejor que puede informar un diseño conforme frente a esta
máscara.

La propia máscara de aceptación de la Tabla 1 también es pública:
`class_limits(fraction, filter_class, omega)` devuelve los límites
mínimo/máximo de atenuación relativa en frecuencias normalizadas
$\Omega = f/f_\mathrm{m}$,
los mismos límites que usan el verificador y la figura de abajo.

*La respuesta del Butterworth de orden 6 (azul) serpentea entre las regiones
prohibidas: debe atenuar al menos la máscara roja fuera de la banda y no más
que la morada dentro de ella.*

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

```python

from scipy.signal import sosfreqz
from phonometry import filters

fs = 48000
bank = filters.OctaveFilterBank(fs, fraction=1, order=6, limits=[800, 1200])
idx = int(np.argmin(np.abs(np.array(bank.freq) - 1000)))
fm, fsd = bank.freq[idx], fs / bank.factor[idx]
w, h = sosfreqz(bank.sos[idx], worN=2**15, fs=fsd)
att = -20 * np.log10(np.abs(h) + 1e-12)
delta_a = att - np.interp(fm, w, att)     # atenuación relativa

grid = np.logspace(np.log10(0.05), np.log10(8), 2000)
lo1, hi1 = filters.class_limits(1.0, 1, grid)     # atenuación mín/máx de clase 1

fig, ax = plt.subplots(figsize=(9, 5.5))
ax.fill_between(grid, -10, lo1, alpha=0.15, color="tab:red",
                label="Prohibido: atenuación insuficiente")
finite = np.isfinite(hi1)
ax.fill_between(grid[finite], hi1[finite], 90, alpha=0.15, color="tab:purple",
                label="Prohibido: atenuación excesiva")
ax.plot(w / fm, delta_a, label="Butterworth de orden 6")
ax.set(xscale="log", xlim=(0.08, 8), ylim=(-6, 90),
       xlabel="Frecuencia normalizada f / fm",
       ylabel="Atenuación relativa [dB]")
ax.legend()
plt.show()
```

</details>

Con parámetros por defecto (orden 6), **Butterworth cumple la máscara de
clase 1 de la Tabla 1**, y también
lo hace **Chebyshev II**: su valor por defecto de `attenuation` es ahora `72` dB,
superando el límite de clase 1 de 70 dB en la banda atenuada lejana (scipy fija
el suelo de rizado constante de cheby2 en exactamente `attenuation`, así que
cualquier valor $\ge 70\ \text{dB}$ cumple; el valor por defecto de 72 dB
mantiene el mismo margen de banda de paso de +0,400 dB que Butterworth).
Chebyshev I, elíptico y Bessel no cumplen
los límites de clase con orden 6: el rizado de banda de paso (cheby1/ellip) y la
caída lenta (bessel) violan la máscara. La clase 1 es el veredicto más estricto
que puede devolver esta edición; la clase 0, más estricta todavía, que el banco
por defecto también supera, pertenece a la máscara retirada de 1995 y es el
apartado 2. Que un banco entero sea clase 1 depende además de los dos requisitos
del apartado 1b, y los bancos de octavas y de tercios de octava por defecto
también cumplen ahí la clase 1.

## 1b. Ancho de banda efectivo y suma de las salidas (IEC 61260-2)

La Tabla 1 juzga una banda frecuencia a frecuencia. IEC 61260-1:2014 añade dos
requisitos que juzgan una banda, y un juego de bandas, como un todo, e
IEC 61260-2:2016 dice cómo los calcula un laboratorio de ensayo de tipo a partir
de la misma atenuación relativa. Ninguno necesita más que la respuesta
diseñada, así que para la edición de 2014 `verify_filter_class` califica los
dos, y la `class` de una banda es la clase más estricta que cumple en los tres.

**Ancho de banda efectivo (5.12).** Ante un sonido de banda ancha, un analizador
de bandas informa de la potencia que deja pasar su banda, así que lo que cuenta
es su anchura en potencia. El ancho de banda efectivo normalizado es la
Fórmula (13) de IEC 61260-1,

$$
B_\mathrm{e} = \int_0^\infty \frac{1}{\Omega}\,10^{-0{,}1\,\Delta A(\Omega)}\,\mathrm{d}\Omega ,
$$

y su desviación respecto al ancho de banda de una banda ideal,
$B_\mathrm{r} = (1/b)\ln G$, es $\Delta B = 10\lg(B_\mathrm{e}/B_\mathrm{r})$,
dentro de ±0,4 dB para la clase 1 y ±0,6 dB para la clase 2 (5.12.2). Una banda
con $\Delta B = +0{,}05$ dB lee el ruido rosa 0,05 dB alto. El verificador
evalúa la integral como recomienda el 7.2.3.2 de IEC 61260-2: la regla del
trapecio de su Fórmula (2) sobre las frecuencias de ensayo de su Fórmula (1),

$$
\Omega_i = G^{i/(bS)} ,
$$

con $S$ de al menos 24 frecuencias por ancho de banda (`points_per_bandwidth`,
24 por defecto), llevada hasta el punto de quiebre más externo de la Tabla 1,
donde una banda de clase 1 está al menos 70 dB por debajo.

**Suma de las señales de salida (5.16).** Un tono entre dos frecuencias
centrales tiene que salir del juego con su potencia, repartida entre las bandas
que lo ven, sin perderla ni añadirla. La Fórmula (3) de IEC 61260-2 suma en
energía la atenuación relativa de la banda $j$ y de sus dos vecinas en las
frecuencias de ensayo de dentro de la banda $j$ ($|i| \le \lfloor S/2 \rfloor$):

$$
\Delta P_j = 10\lg\left[10^{-0{,}1\,\Delta A_{j-1}} + 10^{-0{,}1\,\Delta A_j} + 10^{-0{,}1\,\Delta A_{j+1}}\right]
$$

y el resultado tiene que quedar entre −1,8 dB y +0,8 dB para la clase 1, y entre
−3,8 dB y +1,8 dB para la clase 2. Las dos bandas de los extremos, con vecina a
un solo lado, quedan fuera (7.2.4.4), así que el requisito solo se califica en
un banco de tres bandas o más, y `result.requirements` dice si se calificó. La
Fórmula (3) impresa y el texto de 7.2.4.3 y de 5.16 toman la diferencia en
sentidos opuestos, lo que con unos límites tan asimétricos no es el mismo
ensayo; el verificador aplica los límites a la fórmula tal como está impresa,
como indica el 7.2.4.5, y el
[registro de erratas](/phonometry/es/reference/errata/) recoge el conflicto.

```python
from phonometry import filters

third = filters.verify_filter_class(
    filters.OctaveFilterBank(48000, fraction=3, order=6, limits=[125, 4000]))
print(third.overall_class)                                  # 1

octave = filters.verify_filter_class(
    filters.OctaveFilterBank(48000, fraction=1, order=6, limits=[125, 4000]))
print(octave.requirement_class("relative_attenuation"))     # 1
print(octave.requirement_class("effective_bandwidth"))      # 1
print(octave.requirement_class("summation"))                # 1
print(round(octave.binding_margin_db("summation", 1), 2))   # 0.64
print(octave.overall_class)                                 # 1
```

*La Fórmula (3) de IEC 61260-2 en cada banda interior de los dos bancos por
defecto, dibujada por `result.plot(requirement="summation")`. Los dos bancos
devuelven la potencia de un tono con menos de 0,16 dB de diferencia: la suma se
queda a unas centésimas de decibelio de 0 dB en el centro de cada banda y sube
poco más de una décima de decibelio justo dentro de sus bordes, donde dos
bandas vecinas se reparten el tono.*

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

```python

from phonometry import filters

octave = filters.verify_filter_class(
    filters.OctaveFilterBank(48000, fraction=1, order=6, limits=[125, 4000]))
third = filters.verify_filter_class(
    filters.OctaveFilterBank(48000, fraction=3, order=6, limits=[125, 4000]))
fig, (ax_oct, ax_third) = plt.subplots(1, 2, figsize=(13, 6.2), sharey=True)
octave.plot(ax=ax_oct, requirement="summation", language="es")
third.plot(ax=ax_third, requirement="summation", language="es")
ax_oct.set_title("Banco de octava, diezmado: clase 1 en §5.16")
ax_third.set_title("Banco de tercio de octava: clase 1 en §5.16")
ax_third.set_ylabel("")
plt.show()
```

</details>

**Por qué el banco diezma una banda solo hasta dieciséis veces su borde
superior.** La suma es el requisito que un diseño multitasa pone en riesgo.
Cerca de su propia frecuencia de Nyquist, la transformada bilineal dobla una
banda: justo dentro de su borde superior de banda atenúa menos que la misma
banda diseñada lejos de Nyquist, y por encima de ese borde cae con más
pendiente. Justo por debajo de un borde superior de banda, la banda y su vecina
de arriba dejan pasar entonces más que la potencia del tono; justo por encima de
un borde inferior de banda, la vecina de abajo ya ha caído y se pierde
potencia. Un banco de octavas (Butterworth, orden 6, 48 kHz) diezmado hasta que
la frecuencia de Nyquist de procesado de cada banda es solo 1,25 veces su borde
superior de banda suma sus salidas adyacentes de −1,16 dB a +0,94 dB respecto a
la entrada: más allá de los +0,8 dB de la clase 1, un banco de clase 2. El
doblez se reduce con el cuadrado de esa razón: mueve la suma de una banda de
octava 0,074 dB con una razón de cuatro, 0,018 dB con ocho y 0,005 dB con
dieciséis, y la de una banda de tercio de octava 0,002 dB con dieciséis. Por
eso el banco deja de diezmar una banda mientras su frecuencia de Nyquist de
procesado sigue siendo al menos dieciséis veces su borde superior de banda, y
sus bancos diezmados suman lo mismo que los mismos bancos diseñados a la
frecuencia completa (`design=filters.FilterDesign(resample=False)`): clase 1 en
todos los requisitos a 44,1, 48 y 96 kHz. En todo su rango por defecto a
48 kHz, el banco de octavas suma de −0,06 dB a +0,69 dB, diezmado o no, con el
máximo en la banda de 8 kHz, vecina de la de 16 kHz, que corre a la frecuencia
completa cerca de la frecuencia de Nyquist de 24 kHz: clase 1 con 0,11 dB de
margen. El banco de tercios de octava suma de −0,25 dB a +0,76 dB, ambos en su
banda de 16 kHz, un margen de 0,04 dB, y el banco de octavas Chebyshev II
diezmado de −0,08 dB a +0,64 dB. Nada de esto es un artefacto de calificar
funciones de transferencia: tonos pasados por el propio banco, con sus filtros
de diezmado, leen las sumas de la Fórmula (3) con una diferencia de menos de
0,01 dB.

## 1c. Funcionamiento invariante en el tiempo (5.14)

Un banco multitasa no filtra un tono igual caiga donde caiga respecto al
diezmado, y una función de transferencia no puede mostrarlo. El apartado 5.14 de
IEC 61260-1:2014 lo ensaya en cambio sobre el filtro en marcha: una sinusoide de
amplitud constante cuya frecuencia sube una década en 2 s a 5 s, y la salida
promediada en el tiempo de cada banda tiene que quedar dentro de ±0,4 dB
(clase 1) o ±0,6 dB (clase 2) del nivel de la Fórmula (17),

$$
L_\mathrm{c} = L_\mathrm{in} - A_\mathrm{ref} + 10\lg\left[\frac{T_\mathrm{sweep}}{T_\mathrm{avg}}\,\frac{\lg(f_2/f_1)}{\lg(f_\mathrm{end}/f_\mathrm{start})}\right]
$$

la salida de una banda ideal del mismo ancho de banda. `swept_band_level` es esa
fórmula (107,97 dB en el ejemplo que desarrolla el Anexo B de IEC 61260-2 y -3),
y `swept_level_uncertainty` su incertidumbre típica a partir de las
incertidumbres del barrido (Anexo A). `verify_time_invariance` ejecuta sobre un
banco el ensayo del 7.4 de IEC 61260-2: el barrido de las Fórmulas (A.3) y (A.4)
pasa por cada banda exactamente como `OctaveFilterBank.filter` procesa una
señal, diezmado polifásico incluido, a 2 s y a 5 s por década.

```python
from phonometry import filters

bank = filters.OctaveFilterBank(48000, fraction=3, order=6, limits=[25, 10000])
swept = filters.verify_time_invariance(bank)
print(swept.overall_class)                       # 1
print(round(swept.worst_deviation_db, 3))        # 0.056
print(swept.seconds_per_decade)                  # (2.0, 5.0)
print(round(filters.swept_band_level(
    127.0, fraction=3, sweep_duration_s=30, averaging_time_s=30,
    start_frequency_hz=0.01, end_frequency_hz=1e6), 2))   # 107.97
```

*Todas las bandas del banco de tercios de octava diezmado leen unos +0,05 dB a
las dos velocidades de barrido. Es su desviación del ancho de banda efectivo del
apartado 1b, que es lo que el Anexo G de IEC 61260-1 dice que tiene que leer una
banda que se comporta como su función de transferencia (G.2.8); un diezmado que
replegara energía dentro de una banda leería más, y las dos velocidades se
separarían.*

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

```python

from phonometry import filters

bank = filters.OctaveFilterBank(48000, fraction=3, order=6, limits=[25, 10000])
filters.verify_time_invariance(bank).plot(language="es")
plt.show()
```

</details>

## 2. Clase 0 (IEC 61260:1995 / ANSI S1.11-2004)

La clase de prestaciones más estricta, la **clase 0**, la definió la edición
anterior **IEC 61260:1995** y su gemela estadounidense **ANSI S1.11-2004**
(ambas retiradas/sustituidas pero aún referenciadas para instrumentos de
laboratorio); IEC 61260-1:2014 la eliminó. Sus máscaras de clase 1/2 difieren
ligeramente de la edición de 2014, así que se selecciona con un conmutador `edition` en
lugar de mezclarse con la máscara de 2014:

```python
from phonometry import filters

fs = 48000
bank = filters.OctaveFilterBank(fs, fraction=1, order=6, limits=[800, 1200])

result = filters.verify_filter_class(bank, edition="1995")   # clases 0, 1, 2
print(result.overall_class)          # 0  (el Butterworth por defecto la supera)
print(result.bands[0]["margin_class0_db"])
```

La edición de 1995 se califica en todos sus apartados sobre la función de
transferencia, no solo en la Tabla 1. Su **respuesta integrada del filtro**
(4.5) es el cociente que la edición de 2014 llama desviación del ancho de banda
efectivo, $\Delta B = 10\lg(B_\mathrm{e}/B_\mathrm{r})$, construido a su
manera: la ecuación (14) integra $10^{-0{,}1\,\Delta A}$ sobre $f/f_\mathrm{m}$
sin el peso $1/\Omega$, por la regla del trapecio de la ecuación (16) sobre al
menos $5S$ frecuencias de ensayo a cada lado (5.4.2), con $S$ subida desde los
24 pedidos en pasos de 12 hasta que la respuesta de todas las bandas se lee
igual a la décima de decibelio más cercana con $S$ y con $S + 12$ (5.3.3; el
`points_per_bandwidth` del resultado dice dónde se detuvo, y la suma se recorre
también con ella), frente a la referencia
$B_\mathrm{r} = G^{1/(2b)} - G^{-1/(2b)}$ de la ecuación (9), y el 4.5.3 la
limita a ±0,15 dB, ±0,3 dB y ±0,5 dB para las clases 0, 1 y 2. Su **suma de las
señales de salida** (4.9) es la ecuación (19), una banda y sus dos vecinas
sumadas en energía, limitada a ±1,0 dB para la clase 0, +1,0 dB y −2,0 dB para
la clase 1 y +2,0 dB y −4,0 dB para la clase 2, y recorrida, como pide el
5.8.4, desde la frecuencia central más baja hasta la más alta: las bandas de
los extremos se leen en la mitad que mira al juego, donde la vecina que le
falta al juego no aporta nada. El banco Butterworth por defecto cumple la
clase 0 en los tres:

```python
bank = filters.OctaveFilterBank(fs, fraction=1, order=6, limits=[125, 4000])
result = filters.verify_filter_class(bank, edition="1995")
print({r: result.requirement_class(r) for r in result.requirements})
# {'relative_attenuation': 0, 'effective_bandwidth': 0, 'summation': 0}
print(max(b["bandwidth_deviation_db"] for b in result.bands))   # unos +0,05 dB
print(result.points_per_bandwidth)   # 36: el 5.3.3 subió S desde 24
```

Dos defectos de la edición impresa están en el
[registro de erratas](/phonometry/es/reference/errata/): la constante de
normalización del 3.15 lleva un factor diez de más, y el texto del 4.9 y del
5.8.3 toma la diferencia de la suma en el sentido contrario a la ecuación (19),
que la biblioteca sigue como indica el 5.8.5.

*El corredor de clase 0 (±0,15 dB en el centro de banda) es el más estrecho; la
clase 1 (±0,3 dB) y la clase 2 (±0,5 dB) son progresivamente más anchas. El
Butterworth de orden 6 serpentea dentro de la clase 0 en toda la banda de paso.*

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

```python

from scipy.signal import sosfreqz
from phonometry import filters

fs = 48000
bank = filters.OctaveFilterBank(fs, fraction=1, order=6, limits=[800, 1200])
idx = int(np.argmin(np.abs(np.array(bank.freq) - 1000)))
fm, fsd = bank.freq[idx], fs / bank.factor[idx]
w, h = sosfreqz(bank.sos[idx], worN=2**15, fs=fsd)
att = -20 * np.log10(np.abs(h) + 1e-12)
delta_a = att - np.interp(fm, w, att)

# Solo banda de paso: fuera de los bordes el límite máximo es +inf.
g = 10 ** (3 / 10)
grid = np.linspace(g ** -0.5, g ** 0.5, 1500)
pb = (w / fm >= g ** -0.5) & (w / fm <= g ** 0.5)

fig, ax = plt.subplots(figsize=(9, 5.5))
for cls in (2, 1, 0):            # corredores anidados, clase 0 el más estrecho
    lo, hi = filters.class_limits(1.0, cls, grid, edition="1995")
    ax.plot(grid, hi, label=f"Corredor de clase {cls}")
    ax.plot(grid, lo, color=ax.lines[-1].get_color())
ax.plot(w[pb] / fm, delta_a[pb], "k", lw=2, label="Butterworth de orden 6")
ax.set(xscale="log", xlim=(g ** -0.5, g ** 0.5), ylim=(-0.7, 6),
       xlabel="Frecuencia normalizada f / fm",
       ylabel="Atenuación relativa [dB]")
ax.legend()
plt.show()
```

</details>

## 3. Qué significa físicamente una clase

Las máscaras son cotas de error en el peor caso de una *medición*, no
valoraciones abstractas:

- **En la banda de paso** el corredor acota cuánto puede desviarse la lectura
  del contenido dentro de banda: un banco de clase 1 lee un tono de centro de
  banda a ±0,4 dB de su nivel verdadero y uno de clase 2 a ±0,6 dB (Tabla 1 de
  IEC 61260-1:2014; las máscaras de la Tabla 1 de IEC 61260:1995, más
  estrictas, permitían ±0,3 dB para la clase 1, ±0,5 dB para la clase 2 y
  ±0,15 dB para la clase 0). Hacia los bordes el corredor se
  ensancha, lo que es la admisión honesta de que un tono situado exactamente
  en un borde es genuinamente ambiguo entre dos bandas (ambas lo leen unos
  3 dB por debajo).
- **En la banda atenuada** la máscara de atenuación mínima acota la fuga del
  resto del espectro: lejos de la banda, la clase 1 exige al menos 70 dB de
  atenuación relativa (la razón por la que el valor por defecto de `cheby2`
  es 72 dB). En términos de energía, un tono fuera de banda tiene que ser
  unos 70 dB más fuerte que el contenido propio de la banda para duplicar su
  lectura de energía (+3 dB). La consecuencia práctica: al medir bandas muy
  por debajo de un tono dominante, la lectura toca fondo en la falda de fuga
  unos 70 dB por debajo, y una arquitectura más abrupta (o mayor orden) es la
  única forma de empujar ese suelo más abajo.

  

  *Cómo se ve la última frase convertida en medida. Toda banda cuyo nivel se
  apoya en la falda está informando del rechazo del filtro al tono de 1 kHz, no
  del sonido presente en esa banda: la línea de puntos es lo que hay realmente.
  La comprobación no tiene ningún misterio en cuanto la buscas: sube el orden y
  las bandas que están midiendo el filtro se mueven, mientras que las bandas que
  están midiendo el sonido no.*
- **Para el balance de incertidumbre**, la clase es la contribución del filtro a la
  incertidumbre de la medición: un banco de clase 1 añade hasta unas décimas
  de dB a un nivel de banda, comparable a los demás términos de tolerancia de
  un sonómetro de clase 1, y por eso las cadenas con calidad de instrumento
  especifican la clase de cada etapa en lugar de una única cifra global.

**¿Qué arquitectura alcanza qué clase?** Bajo la edición de 2014, cuyas únicas
clases son la 1 y la 2, los bancos Butterworth de orden 6 de octavas y de
tercios de octava por defecto de la biblioteca **cumplen la clase 1** en todos
los requisitos, con un margen de +0,400 dB en la Tabla 1 (el techo, y el
apartado 1 explica por qué) y la suma del apartado 1b también dentro de la
clase 1. Frente a la máscara más estricta de 1995 / ANSI S1.11-2004
(`edition="1995"`) ese mismo valor por defecto alcanza la **clase 0**; la
configuración que verifica la batería de conformidad a esa clase es el banco
de *bandas de octava* a 48 kHz, así que vuelve a ejecutar
`verify_filter_class(bank, edition="1995")` por tu cuenta antes de escribir
clase 0 en un documento para cualquier otra fracción o frecuencia de muestreo.
Escribir «clase 0 según IEC 61260-1:2014» es una afirmación contra una clase que
esa edición no define.

La tabla indica la mejor clase que alcanza cada arquitectura con orden 6 y
fs 48 kHz bajo la máscara de 1995; las arquitecturas distintas de Butterworth se
quedan por debajo porque cambian la máscara IEC por otra propiedad
*por construcción*:

| Arquitectura | Mejor clase (orden 6, fs 48 kHz, `edition="1995"`) | Por qué |
| :--- | :---: | :--- |
| `butter` (por defecto) | **0** | Banda de paso máximamente plana, caída monótona; encaja en la máscara |
| `cheby2` | 1 | Banda de paso plana pero la relación de la máscara limita en clase 1 |
| `cheby1` | — | El rizado de banda de paso viola el límite de planitud |
| `ellip` | — | Rizado en banda de paso y atenuada |
| `bessel` | — | Retardo de grupo plano a costa de una caída lenta |

Bajo la edición de 2014 esa misma columna se lee 1, 1 y sin clase para las
otras tres: `cheby2` se junta con Butterworth en lo más alto porque ya no existe
la clase 0 para separarlos. Es el banco de una sola banda de la figura de abajo;
un banco de varias bandas añade la suma del apartado 1b, y los bancos de
octavas Butterworth y Chebyshev II diezmados también cumplen en ella la
clase 1.

*Los veredictos de la tabla, dibujados. Chebyshev I y el elíptico asoman por
encima del límite justo por dentro de los bordes de banda, donde vive su rizado;
Bessel se sale a lo largo de la falda, porque nunca cae lo bastante rápido. Las
muestras en rojo son las que `verify_filter_class` anotó en contra del diseño, y
esto es exactamente lo que dibuja `verify_filter_class(bank).plot()` para un
banco tuyo. Ojo a un detalle: la gráfica sombrea el corredor de la clase a la
que más se acercó cada diseño, así que los tres paneles que fallan muestran el
corredor de clase 2.*

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

```python

# `filters` es el import de los fragmentos anteriores.
fs = 48000
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
for ax, ftype in zip(axes.ravel(), ("butter", "cheby1", "ellip", "bessel")):
    bank = filters.OctaveFilterBank(
        fs, fraction=1, order=6, limits=[800, 1200],
        design=filters.FilterDesign(filter_type=ftype))
    result = filters.verify_filter_class(bank)
    result.plot(ax=ax, language="es")
    ax.set_title(f"{ftype}: overall_class = {result.overall_class}")
plt.tight_layout()
plt.show()
```

</details>

Así que el valor por defecto sensato es el habitual (Butterworth de orden 6),
mientras que las arquitecturas alternativas son opciones deliberadas cuyo
propósito (caída más abrupta, fase lineal) va en contra de la máscara de clase.
Fuera de estos ajustes (`fraction` muy alto o bandas cercanas a Nyquist), vuelve
a ejecutar `verify_filter_class` para confirmar la clase que necesitas.

## 3b. Verificar un instrumento, no un diseño

`verify_filter_class` responde a una pregunta sobre un *diseño*: si esta función
de transferencia cabe en la máscara. Un laboratorio responde a otra pregunta
distinta, sobre un *equipo en una fecha*, y los dos veredictos no son
intercambiables.

El recorrido completo de la Tabla 1 pertenece al **ensayo de tipo**
(IEC 61260-2:2016), que un modelo de juego de filtros supera una sola vez, sobre
especímenes, en un clima declarado y tras los ensayos de inmunidad. Lo que en él
es aritmética sobre una respuesta, el ancho de banda efectivo, la suma y el
ensayo de barrido, son los apartados 1b y 1c; el resto necesita el equipo. Lo
que recibe de verdad un instrumento en servicio es el **ensayo periódico** de
IEC 61260-3:2016, y es más estrecho a propósito: se mide la atenuación relativa
en la frecuencia central exacta de cada filtro del juego, por la entrada
eléctrica y en el rango de nivel de referencia, o bien, si los filtros son
invariantes en el tiempo, la desviación del ancho de banda efectivo obtenida
con un único barrido exponencial sobre todo el juego; la atenuación relativa de
tres filtros escogidos, uno bajo, uno medio y uno alto, en las frecuencias
normalizadas del apartado 13 ($k$ de $-7$ a $7$, hasta donde alcance el rango
de frecuencias del juego); el rango lineal de funcionamiento con su control de
rango de nivel y su comportamiento ante sobrecarga; y el límite inferior de ese
rango, todo bajo condiciones ambientales declaradas y con equipos de ensayo
trazables. Por eso un certificado lleva una fecha, una temperatura y una lista
de números de serie, y por eso no dice nada de las partes de la máscara que no
recorrió.

Lo que sí se hereda merece constar en un informe: el veredicto de clase de esta
página lo heredan todas las medidas hechas con los filtros de la biblioteca, y
una cadena de hardware añade un veredicto propio. Nombra los dos. El régimen
equivalente para los *sonómetros* (los ensayos periódicos de IEC 61672-3, y la
IEC 60942 para el calibrador) está en
[Ensayos periódicos de un sonómetro](/phonometry/es/signals/metrology/sound-level-meter-periodic-tests/)
y [Calibración y dBFS](/phonometry/es/signals/metrology/calibration/).

**Calificar un ensayo periódico.** Los ensayos los hace el laboratorio; el
veredicto sobre lo que midió es aritmética, y lo hace `verify_filter_periodic`.
Cada resultado entra con la incertidumbre expandida del laboratorio, y cada uno
se juzga con la regla de conformidad del IEC TC 29
(`metrology.verify_conformance`): la desviación dentro de sus límites de
aceptación y la incertidumbre dentro del máximo que el Anexo B de
IEC 61260-1:2014 permite para ese ensayo. Apartado por apartado:

| Apartado | Qué midió el laboratorio | Límites de aceptación | $U$ máxima (Anexo B) |
| :--- | :--- | :--- | :--- |
| 10.2 | atenuación relativa de cada filtro en su frecuencia central exacta | ±0,4 dB clase 1, ±0,6 dB clase 2 | 0,20 dB, o 0,30 dB pasada una $\Delta A$ de 2 dB |
| 10.3 | o, filtros invariantes en el tiempo, $\Delta B$ con un único barrido | ±0,4 dB clase 1, ±0,6 dB clase 2 | 0,20 dB |
| 11.7 | linealidad de nivel en el rango de referencia | ±0,5 dB clase 1, ±0,6 dB clase 2 hasta 40 dB por debajo del límite superior; ±0,7 dB y ±0,9 dB más allá | 0,20 dB hasta 40 dB, 0,35 dB más allá |
| 11.9 | linealidad de nivel en cada otro rango, 30 dB por debajo de su límite superior | como 11.7 | como 11.7 |
| 13 | atenuación relativa de tres filtros en hasta 15 $\Omega_k$ | Tabla 1 de IEC 61260-3 | 0,20, 0,30 o 0,50 dB según $\Delta A$ llegue a 2 dB, a 40 dB o más |

Las quince frecuencias del apartado 13 salen de las Fórmulas (1) y (2) de
IEC 61260-3 para cualquier designador de ancho de banda,
`periodic_test_frequencies(b)`, y su Tabla 1 es
`PERIODIC_TEST_ATTENUATION_LIMITS_DB`, con las filas de banda atenuada sin
máximo. Un laboratorio deja fuera las frecuencias que caen fuera del rango del
juego (13.4) escribiendo NaN en su lugar.

```python
from phonometry import filters

omega = filters.periodic_test_frequencies(3)
print(round(float(omega[8]), 5))                          # 1.02667, Tabla C.1
print(filters.PERIODIC_TEST_ATTENUATION_LIMITS_DB[1][7])  # (70.0, inf)

row = [76.0, 63.0, 45.0, 20.0, 0.8, 0.3, 0.1, 0.0, 0.1, 0.2, 0.7, 19.0, 44.0, 63.0, 77.0]
row_u = [0.4, 0.4, 0.4, 0.25, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.25, 0.4, 0.4, 0.4]
record = filters.FilterPeriodicMeasurements(
    midband_attenuations_db=[0.12, -0.05, 0.08, 0.02, -0.1, 0.15],
    midband_uncertainties_db=[0.15] * 6,
    linearity_deviations_db=[0.0, 0.1, 0.2, -0.3, 0.4],
    linearity_levels_below_upper_db=[0.0, 10.0, 20.0, 45.0, 55.0],
    linearity_uncertainties_db=[0.12, 0.12, 0.25, 0.2, 0.3],
    relative_attenuations_db=[row, [x + 0.2 for x in row], row],
    relative_attenuation_uncertainties_db=[row_u, row_u, row_u],
)
verdict = filters.verify_filter_periodic(1, record, fraction=3)
print(verdict.passes)       # False
print(verdict.unusable)     # (('11.7', '20 dB below the upper boundary'),)
print(verdict.failed)       # ()
```

Todas las desviaciones de ese registro están dentro de sus límites, y el
veredicto sigue sin ser un aprobado: una lectura de linealidad se tomó con
0,25 dB de incertidumbre expandida donde el Anexo B admite 0,20 dB, y el 5.3 de
IEC 61260-3 prohíbe usarla. `verdict.statement` lo dice con las palabras de la
norma, y en cuanto todos los resultados son utilizables pasa a ser la
declaración que prescribe el Capítulo 14: la 14 k) cuando la aprobación de
modelo es pública (`pattern_approval_public=True`), la 14 l) si no, con la
salvedad del 1.5 de que de los ensayos periódicos solos no se sigue ninguna
conclusión general sobre IEC 61260-1.

Un aprobado también exige que los ensayos cubran lo que la norma les pide: el
11.3 y el 13.1 miden tres filtros, y el 13.4 mide cada uno en todas las
frecuencias de ensayo por encima de 0,5 veces la frecuencia central más baja
del juego y por debajo de 1,5 veces la más alta. Con las frecuencias centrales
del juego (`set_midband_frequencies_hz`), de los tres filtros ensayados
(`tested_midband_frequencies_hz`) y del filtro de cada resultado de linealidad
(`linearity_midband_frequencies_hz`), el veredicto los cuenta, y
`verdict.incomplete` enumera cada carencia, incluido un NaN donde el 13.4 pide
una medida; retiene el aprobado igual que un apartado sin medir. Un registro
sin ellas no se puede comprobar en cobertura: `verdict.coverage_checked` es
`False`, y una declaración de aprobado termina diciendo que la cobertura no se
comprobó. Una atenuación de centro de banda del 10.2 toma su máximo del
Anexo B de lo que se midió, como hace el apartado 13: un filtro que se ha
desviado más de 2 dB en su frecuencia central admite 0,30 dB, y por eso no
supera el ensayo en lugar de quedar no utilizable.

*`verdict.plot()`: el margen de cada resultado a su límite más próximo con su
incertidumbre expandida, apartado por apartado. El círculo hueco es el único
resultado que el 5.3 deja inutilizable, y él solo frena el veredicto.*

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

```python

# `verdict` es el resultado del fragmento anterior.
verdict.plot(language="es")
plt.show()
```

</details>

Lo que el calificador periódico deja al informe del laboratorio: el ruido
propio del Capítulo 12, para el que el Anexo B no fija incertidumbre máxima, la
indicación de sobrecarga de 11.5 y 11.8, y las observaciones de los Capítulos 4
y 6 a 8 (inspección previa, condiciones ambientales, el manual) no se
califican; anótalas junto al veredicto.

## 4. La ficha de conformidad (`.report()`)

`verify_filter_class(bank)` devuelve un objeto de resultado que expone
`.plot()` y `.report()`, de modo que el veredicto del ensayo de tipo puede
renderizarse como una ficha acreditada de una página. La
ficha lista la clase alcanzada por cada banda y su margen vinculante sobre todos
los requisitos calificados, tabula los requisitos de los apartados 1 y 1b con
la clase, el margen vinculante y el intervalo de cada uno, superpone
la atenuación relativa medida de la banda de peor margen sobre el corredor de la
clase y encuadra el resultado global de conformidad. Pasa un `required_class` en
el `ReportMetadata` para añadir una fila de veredicto CUMPLE/NO CUMPLE (un banco
«cumple la clase N» cuando su clase alcanzada es al menos igual de estricta, es
decir, un índice de clase N o inferior). La ficha se genera en inglés por
defecto; pasa `language="es"` para una ficha en español (cadenas fijas
traducidas y coma como separador decimal), p. ej.
`result.report("iec61260_es.pdf", language="es")`.

El ejemplo es el banco de octavas diezmado de 125 Hz a 4 kHz, la configuración
que el apartado 1b muestra como clase 1 en todos los requisitos:

```python
from phonometry import ReportMetadata, filters

bank = filters.OctaveFilterBank(fs=48000, fraction=1, order=6, limits=[125, 4000])
result = filters.verify_filter_class(bank)   # overall_class == 1
result.plot(language="es")   # la banda de peor margen sobre su corredor de clase

result.report(
    "iec61260.pdf",
    metadata=ReportMetadata(
        specimen="Banco de filtros de octava (1/1)",
        measurement_standard="IEC 61260-1:2014",
        required_class=1,                # se exige clase 1 (o más estricta)
    ),
)                                        # -> Class 1 - COMPLIES, PASS
```

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

Pasar `edition="1995"` verifica contra la máscara más antigua de IEC 61260:1995 /
ANSI S1.11-2004, que conserva la **clase 0** más estricta que la edición de 2014
eliminó, junto con la respuesta integrada del filtro del 4.5.3 y la suma del
4.9, de modo que un banco de orden 6 puede certificarse a clase 0 en los tres,
y la ficha recoge cada uno bajo su apartado de 1995:

```python
bank = filters.OctaveFilterBank(fs=48000, fraction=1, order=6, limits=[250, 4000])
result = filters.verify_filter_class(bank, edition="1995")   # overall_class == 0
result.plot(language="es")   # el corredor de clase 0 de la edición de 1995
result.report("iec61260_1995.pdf",
              metadata=ReportMetadata(measurement_standard="IEC 61260:1995",
                                      required_class=0))   # -> Class 0 - COMPLIES
```

## Qué cubre esta guía

Los límites de aceptación de clase 1 y clase 2 de la Tabla 1 de IEC
61260-1:2014 (con el mapeo de los puntos de quiebre a cada fracción de octava
y la interpolación logarítmica de la norma), comprobados banda a banda por
`verify_filter_class` y publicados como máscara por `class_limits`; la
desviación del ancho de banda efectivo (5.12) y la suma de las señales de
salida (5.16), calificadas por la misma llamada tal como las calcula
IEC 61260-2:2016 (Fórmulas (1) a (3)); el ensayo de barrido del funcionamiento
invariante en el tiempo (5.14, 7.4 de IEC 61260-2) ejecutado sobre el banco por
`verify_time_invariance`, con la Fórmula (17) y su incertidumbre del Anexo A; la
máscara de clase 0 de la edición retirada IEC 61260:1995 / ANSI S1.11-2004,
accesible con `edition="1995"`, con la respuesta integrada del filtro (4.5.3) y
la suma de las señales de salida (4.9) de esa edición; cada banda calificada a
la frecuencia de entrada del banco hasta su mitad, con las imágenes que lee
una banda diezmada (IEC 61260-1:2014 5.15, IEC 61260:1995 4.8); la calificación apartado por apartado de los
resultados de ensayo periódico IEC 61260-3:2016 de un laboratorio con
`verify_filter_periodic`, con sus frecuencias de ensayo, su Tabla 1 y la
declaración del Capítulo 14; y la ficha acreditada de una página de
`verify_filter_class().report()`, con su veredicto opcional CUMPLE/NO
CUMPLE frente a `required_class`, en inglés y en español.

Los propios ensayos sobre un filtro físico: los especímenes y los ensayos de
clima, inmunidad, sobrecarga y linealidad de IEC 61260-2 y las mediciones de
IEC 61260-3 los hace un laboratorio, y `verify_filter_periodic` califica los
números que devuelve sin producirlos. De ellos, el ruido propio del
Capítulo 12 de IEC 61260-3 y las indicaciones de sobrecarga de 11.5 y 11.8 no se
califican, ni, en la edición de 1995, los requisitos que responde un
instrumento físico (linealidad, funcionamiento en tiempo real, entorno). Cerca
de Nyquist la transformada bilineal deforma el eje de frecuencia y el banco no
lo corrige, y por encima de la mitad de la frecuencia de entrada un banco
digital no tiene frecuencia a la que responder, así que la máscara de banda
atenuada más allá se informa como `range_limited` en lugar de verificarse:
mantén el borde de banda superior holgadamente por debajo de Nyquist o sube
`fs`.

## Véase también

- [Bancos de filtros](/phonometry/es/signals/filters/filter-banks/): las matemáticas
  de banda y las arquitecturas cuya clase se verifica aquí.
- [Ponderación frecuencial](/phonometry/es/signals/levels/weighting/): la
  verificación complementaria de las curvas A, C y Z frente a las tablas de
  tolerancia de IEC 61672-1, con las curvas G, B, D y AU tratadas en
  [Ponderaciones especiales](/phonometry/es/signals/levels/special-weightings/).
- [Sonómetro](/phonometry/es/signals/sound-level-meter/): la cadena de
  instrumento a cuya etapa de espectro se aplica esta clase.
- [Informe de conformidad](https://github.com/jmrplens/phonometry/blob/main/docs/CONFORMANCE.md):
  las configuraciones verificadas detrás de las afirmaciones de clase de esta
  página.
- Referencia de la API:
  [`filters.compliance`](/phonometry/es/reference/api/filters/compliance/),
  [`filters.time_invariance`](/phonometry/es/reference/api/filters/time-invariance/)
  y [`filters.periodic_tests`](/phonometry/es/reference/api/filters/periodic-tests/).
- Teoría: [Frecuencias de banda de octava](/phonometry/es/reference/theory/signal-analysis/#frecuencias-de-banda-de-octava-ansi-s111--iec-61260): las definiciones de bordes de banda alrededor de las cuales se traza la máscara de IEC 61260-1.

## Respuestas rápidas

### ¿Qué arquitectura de filtro cumple la clase 1 de IEC 61260-1 con los ajustes por defecto?

Con el orden 6 por defecto, Butterworth cumple la clase 1 de los límites de
aceptación de la Tabla 1 de IEC 61260-1:2014, y también Chebyshev II: su
`attenuation` por defecto de 72 dB supera el límite de clase 1 de 70 dB en
la banda atenuada lejana. Chebyshev I, elíptico y Bessel no la cumplen: el rizado
de banda de paso (cheby1, ellip) y la caída lenta (bessel) violan la
máscara. `verify_filter_class` informa de la clase alcanzada por banda, en la
Tabla 1 y también en los requisitos de ancho de banda efectivo y de suma.

### ¿Es clase 1 el banco de octavas por defecto según IEC 61260-1:2014?

Sí, en todos los requisitos que se le califican: la máscara de la Tabla 1, el
ancho de banda efectivo (5.12) y la suma de las señales de salida (5.16). El
banco Butterworth de octavas diezmado suma las salidas adyacentes entre
−0,06 dB y +0,69 dB respecto a la entrada en su rango por defecto a 48 kHz,
dentro de los −1,8 dB y +0,8 dB de la clase 1 con 0,11 dB de margen, igual que
el mismo banco diseñado a la frecuencia completa con
`FilterDesign(resample=False)`: el banco diezma una banda solo hasta donde su
frecuencia de Nyquist de procesado sigue siendo al menos dieciséis veces su
borde superior de banda, y ahí el diezmado mueve la suma como mucho 0,005 dB.
El banco de tercios de octava también es clase 1 en todos los requisitos, con
0,04 dB de margen en la suma.

### ¿Qué es la clase 0 y qué norma la define?

La clase 0 es la clase de prestaciones más estricta, definida por IEC
61260:1995 y su gemela estadounidense ANSI S1.11-2004 y eliminada por IEC
61260-1:2014. Su corredor de banda de paso admite solo ±0,15 dB en el
centro de banda, frente a ±0,3 dB para la clase 1 en las máscaras de 1995.
Sigue accesible con `edition="1995"`, y el banco Butterworth de orden 6 por
defecto cumple la clase 0 en las configuraciones que verifica el informe de
conformidad, los bancos de octava y de tercio de octava a 48 kHz, en la
Tabla 1, en la respuesta integrada del filtro del 4.5.3 y en la suma del 4.9,
con sus imágenes calificadas también. Bajo IEC 61260-1:2014 ese
mismo banco es clase 1, en la máscara de la Tabla 1 y en el ancho de banda
efectivo y la suma del 5.12 y el 5.16: la edición de 2014 no define ninguna
clase 0, así que una afirmación de clase 0 tiene que citar la máscara de
1995 / ANSI S1.11-2004 frente a la que se midió.
