Ir al contenido

Verificación de clase de filtros (IEC 61260-1)

Normas aplicables: IEC 61260ANSI S1.11

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, 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) 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, y las cinco arquitecturas con sus respuestas comparadas son la Galería de arquitecturas de filtro; la misma maquinaria aplicada a las ponderaciones frecuenciales es la sección 6 de Ponderación frecuencial.

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

Sección titulada «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) e informa de la clase por banda con su margen en dB:

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 en un banco diezmado
print(result["bands"][0])
# {'freq': 12.589254117941678, 'class': 1, 'checked_to_omega': 3.8127755266765493, 'margin_class1_db': 0.3999999999999595, 'margin_class2_db': 0.5999999999999595}

Hasta dónde de la máscara llega realmente el veredicto. checked_to_omega es la frecuencia normalizada más alta a la que se evaluó esa banda, y en un banco multitasa es el propio Nyquist diezmado de la banda, no el final de la máscara de la Tabla 1. En el banco de arriba va de 3,81 a 1,20, así que el requisito de banda atenuada lejana — al menos 70 dB para la clase 1 más allá de aproximadamente — no queda demostrado sobre el filtro de banda en absoluto. Se da por satisfecho gracias al paso bajo antialiasing que precede al diezmado, que eliminó esa energía 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 diezmado. Cuando un documento exija la máscara completa sobre el propio filtro de banda, diseña el mismo banco con design=filters.FilterDesign(resample=False): sus bandas graves se evalúan entonces hasta del orden de en vez de 4. range_limited sigue valiendo True incluso así, porque el borde superior de la banda más alta sigue acercándose a Nyquist; esa banda es la que el indicador está advirtiendo una vez que el diezmado queda fuera de la escena.

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 cuyo margen no es negativo.

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 informan todos clase 1 con exactamente +0,400 dB. 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 , los mismos límites que usan el verificador y la figura de abajo.

Respuesta Butterworth serpenteando entre las regiones prohibidas de la máscara de clase 1 de IEC 61260-1Respuesta Butterworth serpenteando entre las regiones prohibidas de la máscara de clase 1 de IEC 61260-1

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.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
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()

Con parámetros por defecto (orden 6), Butterworth cumple clase 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 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.

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

Sección titulada «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:

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"])
Corredores de aceptación anidados en la banda de paso para las clases 0, 1 y 2 de IEC 61260:1995 con la respuesta Butterworth de orden 6 dentro del corredor de clase 0 más estrechoCorredores de aceptación anidados en la banda de paso para las clases 0, 1 y 2 de IEC 61260:1995 con la respuesta Butterworth de orden 6 dentro del corredor de clase 0 más estrecho

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.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
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()

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.

    Niveles en tercios de octava de un tono de 1 kHz a 100 dB SPL sobre un fondo de ruido rosa cuyos niveles de banda rondan los 22 dB, analizados con bancos de orden 6 y de orden 10. La banda de 1 kHz lee 100 dB, las bandas vecinas caen bruscamente y por debajo de unos 500 Hz los niveles medidos se aplanan sobre una falda situada entre 65 y 70 dB por debajo del tono, muy por encima del nivel de fondo real dibujado con línea de puntos; por encima de unos 8 kHz la falda ya ha caído por debajo del ruido y los niveles medidos se juntan con él. El banco de orden 10 baja la falda de forma visible en el lado agudo del tonoNiveles en tercios de octava de un tono de 1 kHz a 100 dB SPL sobre un fondo de ruido rosa cuyos niveles de banda rondan los 22 dB, analizados con bancos de orden 6 y de orden 10. La banda de 1 kHz lee 100 dB, las bandas vecinas caen bruscamente y por debajo de unos 500 Hz los niveles medidos se aplanan sobre una falda situada entre 65 y 70 dB por debajo del tono, muy por encima del nivel de fondo real dibujado con línea de puntos; por encima de unos 8 kHz la falda ya ha caído por debajo del ruido y los niveles medidos se juntan con él. El banco de orden 10 baja la falda de forma visible en el lado agudo del tono

    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, el banco Butterworth de orden 6 por defecto de la biblioteca cumple la clase 1 con un margen vinculante de +0,400 dB: ese es el techo, y el apartado 1 explica por qué. 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:

ArquitecturaMejor clase (orden 6, fs 48 kHz, edition="1995")Por qué
butter (por defecto)0Banda de paso máximamente plana, caída monótona; encaja en la máscara
cheby21Banda de paso plana pero la relación de la máscara limita en clase 1
cheby1El rizado de banda de paso viola el límite de planitud
ellipRizado en banda de paso y atenuada
besselRetardo de grupo plano a costa de una caída lenta

Bajo la edición de 2014 esa misma ordenación se lee 1 / 1 / — / — / —: cheby2 se junta con Butterworth en lo más alto porque ya no existe la clase 0 para separarlos.

Cuatro paneles, cada uno con la banda de octava de 1 kHz de un banco de orden 6 dibujada sobre el corredor de aceptación de IEC 61260-1, con las muestras fuera de tolerancia marcadas en rojo. Butterworth enhebra limpiamente el corredor de clase 1 e informa overall_class 1. Chebyshev I se sale del corredor en dos rachas cortas justo por dentro de cada borde de banda, donde está su rizado de banda de paso, e informa None. El elíptico hace lo mismo en los dos bordes e informa None. Bessel se sale del corredor a lo largo de toda la falda inferior porque cae demasiado despacio, e informa NoneCuatro paneles, cada uno con la banda de octava de 1 kHz de un banco de orden 6 dibujada sobre el corredor de aceptación de IEC 61260-1, con las muestras fuera de tolerancia marcadas en rojo. Butterworth enhebra limpiamente el corredor de clase 1 e informa overall_class 1. Chebyshev I se sale del corredor en dos rachas cortas justo por dentro de cada borde de banda, donde está su rizado de banda de paso, e informa None. El elíptico hace lo mismo en los dos bordes e informa None. Bessel se sale del corredor a lo largo de toda la falda inferior porque cae demasiado despacio, e informa None

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 filter_class_compliance(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.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
# `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.filter_class_compliance(bank)
result.plot(ax=ax, language="es")
ax.set_title(f"{ftype}: overall_class = {result.overall_class}")
plt.tight_layout()
plt.show()

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.

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. 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, junto con la desviación del ancho de banda efectivo obtenida en un ensayo con barrido de frecuencia, 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 Calibración y dBFS.

filter_class_compliance(bank) envuelve la misma verificación en 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, 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").

from phonometry import (
OctaveFilterBank,
ReportMetadata,
filter_class_compliance,
)
bank = OctaveFilterBank(fs=48000, fraction=1, order=6, limits=[125, 4000])
result = filter_class_compliance(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.

Informe de ejemplo de conformidad de clase de filtro IEC 61260-1 (PDF)

Ficha de conformidad de clase de filtro de una página: una cabecera de metadatos, una tabla de clasificación por bandas con la clase alcanzada y el margen vinculante de cada banda de octava, la atenuación relativa medida de la banda de peor margen superpuesta sobre el corredor de aceptación verde de clase 1, el resultado encuadrado Class 1 - COMPLIES (margin +0.40 dB) y un veredicto CUMPLE frente a la clase 1 exigida.

Descargar el informe (PDF)

Ficha de conformidad de clase de filtro (FilterComplianceResult.report), clase alcanzada con el margen vinculante en dB y la atenuación relativa medida sobre el corredor de la Tabla 1.

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ó, de modo que un banco de orden 6 puede certificarse a clase 0:

bank = OctaveFilterBank(fs=48000, fraction=1, order=6, limits=[250, 4000])
result = filter_class_compliance(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
Informe de ejemplo de conformidad de clase 0 IEC 61260:1995 (PDF)

Ficha de conformidad de clase de filtro de una página bajo la edición de 1995: una tabla de clasificación por bandas con cada banda de octava alcanzando la clase 0, la atenuación relativa medida superpuesta sobre el corredor de aceptación verde de clase 0, el resultado encuadrado Class 0 - COMPLIES (margin +0.15 dB) y un veredicto CUMPLE frente a la clase 0 exigida.

Descargar el informe (PDF)

La clase 0 la conserva la edición IEC 61260:1995 / ANSI S1.11-2004 (edition='1995'); la edición de 2014 solo mantiene las clases 1 y 2.
  • Cubierto

    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 máscara de clase 0 de la edición retirada IEC 61260:1995 / ANSI S1.11-2004, accesible con edition="1995"; y la ficha acreditada de una página de filter_class_compliance().report(), con su veredicto opcional CUMPLE/NO CUMPLE frente a required_class, en inglés y en español.

  • No cubierto

    Los ensayos de conformidad de IEC 61260-1 sobre el filtro físico (recuperación de sobrecarga, linealidad del filtro, influencias ambientales) se aplican a filtros analógicos y digitales de hardware y no están implementados: verify_filter_class comprueba la respuesta digital diseñada frente a la Tabla 1, no un instrumento. Esos ensayos pertenecen a la IEC 61260-2:2016 (ensayo de tipo) y a la IEC 61260-3:2016 (ensayos periódicos), que el apartado 3b resume y que esta página no ejecuta. Cerca de Nyquist la transformada bilineal deforma el eje de frecuencia y el banco no lo corrige, así que la máscara de banda atenuada más allá del Nyquist de procesado se informa como range_limited en lugar de verificarse: mantén el borde de banda superior holgadamente por debajo de Nyquist o sube fs.

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

Sección titulada «¿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.

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

Sección titulada «¿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 la configuración que verifica el informe de conformidad, el banco de bandas de octava a 48 kHz. Bajo IEC 61260-1:2014 ese mismo banco es clase 1: 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ó.