¿Existen formularios de implementación estándar para filtros Butterworth ajustables?

17

Una de las formas estándar de implementar un filtro de Butterworth es con una cascada de secciones de segundo orden, cada una correspondiente a un par de polos complejos conjugados. Para un filtro de cuarto orden, por ejemplo, habría dos secciones de segundo orden. Si consideramos cómo cambian las ubicaciones de los polos para un filtro de paso bajo en el plano z a medida que el corte está diseñado para cerca de 0hz a cerca de Nyquist, el camino "barrido" por cada par de polos corresponde a un par de arcos dentro del círculo unitario , como se ilustra en la siguiente figura [para filtros de cuarto orden]:

Posiciones de poste del plano Z para filtros de paso bajo Butterworth de cuarto orden

Dado el tiempo que llevan estos filtros, y dado el hecho de que estos "arcos" corresponden a líneas rectas en el plano s, es lógico que alguien haya desarrollado una forma de implementación con un único parámetro que pueda barrer los polos a lo largo de los arcos en "tiempo de ejecución" [en oposición al "tiempo de diseño"]. Sin embargo, todavía no me he encontrado con algo así.

Es relativamente sencillo encontrar varias formas de hacer esto, especialmente dentro de segmentos del rango, y con la voluntad de arrojarle un poco de cálculo adicional. Lo que me pregunto es lo siguiente:

¿Existe alguna forma estándar de implementar un filtro Butterworth [digital] sintonizable de un orden dado que 1) tenga propiedades óptimas (por ejemplo, eficiencia, robustez) y 2) cubra todo el rango?

¿O es realmente un problema tan fácil que nadie se molesta en hablarlo? Si ese es el caso, parece que aparecería en los programas de diseño de filtros junto a las opciones para diseños "estáticos".

Encontré esto: un filtro Butterworth de múltiples propósitos con frecuencia de corte variable , pero al principio Google no parece haber mucha información sobre lo que contiene.

Actualización (re: respuestas)

Solo para ser un poco más claro:

  • Estoy buscando un "meta-diseño" con un parámetro (digamos de [0,1]) que ajustará automáticamente el corte de DC a Nyquist (mientras mantiene la ganancia normalizada) para usar en un sistema que varía con el tiempo. Algo así como este resonador de dos polos , excepto con las limitaciones de Butterworth. La idea es que calcular el parámetro sería más eficiente que seguir el típico procedimiento de diseño fuera de línea en tiempo de ejecución.
  • Ni siquiera estoy buscando cómo diseñar un "meta-filtro" (es decir, hacer los cálculos con variables en lugar de números), me pregunto si hay opciones para formularios de implementación estándar [no obvio], porque, digamos, el enfoque directo que corresponde al caso estático termina teniendo problemas numéricos en el caso variable en el tiempo.
  • Tal vez no haya problemas, y el enfoque directo es lo que se usa en la práctica. Eso seria genial. Mi preocupación es que no he visto este tema mencionado explícitamente en ninguna de las fuentes que he consultado, pero tal vez me haya perdido algo realmente obvio, así que lo pregunto.
  • En el proceso de agregar más detalles aquí, me encontré con un tratamiento general de estructuras biquad paramétricas, que es casi lo que estoy buscando (y tiene algunas referencias agradables).

Actualización 2

Estoy buscando respuestas como la que puse en mi segundo comentario a Jason R, de la siguiente manera:

"Oh, sí, quieres usar la parametrización III-2b de la tesis de tal y tal, en forma de celosía de estado intermitente porque resuelve tal y tal caso de borde mientras usa el número mínimo de multiplicaciones".

Tal vez no exista nada de eso, pero mi pregunta es si existe, y si es así, ¿qué es o dónde puedo encontrarlo?

Bote

Basado en una referencia a la "forma canónica del observador" dada por Tim Wescott en el hilo de comp.dsp en la respuesta de Jason R , decidí asumir que podría tener que comenzar a investigar en la literatura de sistemas de control, así que intenté buscar "espacio de estado" de butterworth , y resultó el siguiente, muy genial, tratamiento de diseño / implementación, no solo paramétrico de Butterworth, sino también de Chebyshev y filtros elípticos:

Sophocles J. Orfanidis, "Diseño de ecualizador paramétrico digital de alto orden", J. Audio Eng. Soc., Vol. 53, págs. 1026-1046, noviembre de 2005.

Me llevará un poco de tiempo profundizar, pero según lo que he leído hasta ahora, me sorprendería mucho si no es lo que estoy buscando. Le doy este a Jason R por la referencia comp.dsp que me llevó al artículo de Orfanidis. Su respuesta también es una buena descripción práctica del diseño de filtros Butterworth.

Datageist
fuente

Respuestas:

10

No estoy seguro exactamente de lo que estás buscando. Como notó en su pregunta, las funciones de transferencia de la familia de filtros Butterworth se comprenden bien y se calculan analíticamente fácilmente. Es bastante simple implementar una estructura de filtro de Butterworth que se pueda ajustar por orden de filtro y frecuencia de corte:

  1. Según el orden de filtro seleccionado, la frecuencia de corte y la frecuencia de muestreo, calcule las ubicaciones de los polos para el filtro prototipo analógico Butterworth. Como los filtros de Butterworth no tienen ceros, la función de transferencia está determinada por las ubicaciones de los polos (y la ganancia de CC).

  2. Usando la transformación bilineal , asigne las ubicaciones de los polos del prototipo analógico a sus ubicaciones correspondientes en su realización digital del filtro.

  3. Nuevamente, el filtro digital se define por las ubicaciones de los polos que se encuentran en el paso 2. Divida el filtro en secciones de segundo orden agrupando los polos en pares.

Eso es. Como dije, es sencillo diseñar mediante programación un filtro de Butterworth utilizando los parámetros que pueda necesitar; Ninguna de las operaciones es terriblemente complicada de implementar.

Editar: no estoy muy seguro de qué resultado final estás buscando. Creo que, en cambio, está más interesado en cómo implementar filtros IIR con coeficientes que varían con el tiempo, no necesariamente específicos de un filtro Butterworth. Supongo que su objetivo es minimizar los artefactos al cambiar la frecuencia de corte del filtro; esto fue cubierto en una discusión sobre el grupo de noticias comp.dsp a principios de este año. Si bien no estoy seguro de cuáles son sus casos de uso o requisitos para esta estructura de filtro, hay varias formas de realizar el cambio.

Sé que dijo que le gustaría que su filtro tuviera un único parámetro que defina la frecuencia de corte, pero el hecho es que su estructura sintonizable debe tener una forma de traducir la frecuencia de corte a los coeficientes requeridos (o en el caso de Butterworth, solo el ubicaciones de postes). El proceso que describí anteriormente es apropiado para generar las ubicaciones de los polos en función de la frecuencia de muestreo normalizada deseada.

Potencialmente, podría simplificar el proceso de cálculo de ubicación de polos analizando la geometría de las ubicaciones de polos del filtro digital en el plano z. El filtro analógico de Butterworth tiene polos que se encuentran en un semicírculo en la mitad izquierda del plano s; la transformación bilineal mapea este semicírculo en el patrón de aspecto elíptico que ilustraste en la descripción de tu pregunta. Usando este patrón conocido en los polos analógicos del filtro Butterworth, la función de mapeo de la transformada bilineal y algo de álgebra, es posible que pueda encontrar una expresión relativamente simple para las ubicaciones de los polos del filtro digital, lo que le da un filtro más directo. acción de sintonización.

Jason R
fuente
Jason, no estoy buscando cómo diseñar una especificación de Butterworth dada, estoy buscando un "meta-diseño". Actualizaré la pregunta con un poco más de detalle.
Datageist
1
Re: Editar. El proceso que describió en el último párrafo es exactamente cómo lo abordaría: me pregunto si esto realmente se ha cubierto en alguna parte. En otras palabras, cosas como: "Oh, sí, desea utilizar la parametrización III-2b de la tesis de tal y tal, en forma de red de estado intermitente porque resuelve el caso de tal y tal borde mientras utiliza el número mínimo de multiplicaciones. "
Datageist
1
Pequeño comentario quisquilloso: en el plano Z, el filtro BW tiene ceros. Para los filtros de paso bajo están todos en -1 y para los filtros de paso alto están en +1.
Hilmar
s±ss0 0
2

Sí, hay formularios de implementación estándar para Butterworth y casi cualquier otra respuesta de filtro. Todos están completamente implementados en mi biblioteca de filtros de código abierto IIR. Aquí hay un fragmento de código que produce los pares polo / cero para un filtro de grado arbitrario de Butterworth:

void AnalogLowPass::design (int numPoles)
{
  if (m_numPoles != numPoles)
  {
    m_numPoles = numPoles;

    reset ();

    const double n2 = 2 * numPoles;
    const int pairs = numPoles / 2;
    for (int i = 0; i < pairs; ++i)
    {
      complex_t c = std::polar (1., doublePi_2 + (2 * i + 1) * doublePi / n2);
      addPoleZeroConjugatePairs (c, infinity());
    }

    if (numPoles & 1)
      add (-1, infinity());
  }
}

Como puede ver, la posición de los polos se calcula subdividiendo el plano s en segmentos iguales de "pares".

Se proporciona un código adecuado para todos los tipos comunes de respuestas de filtro: Chebyshev, Elliptic, Legendre, incluidas las versiones de estante de cada uno.

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

Captura de pantalla

Vinnie Falco
fuente
La biblioteca DSPFilters aborda directamente el caso de uso contemplado por la pregunta original, utilizando una ecuación parametrizada para calcular pares polo / cero de un filtro digital en tiempo de ejecución. Enmendaré la respuesta para incluir también un fragmento de código fuente.
Vinnie Falco el