¿Qué factores debo considerar al elegir una realización de filtro IIR?

16

Los filtros IIR pueden implementarse como forma directa 1 o 2 . Pero, ¿cómo decides qué forma usar? ¿Cuáles son los pros y los contras de cada uno?

anasimtiaz
fuente
Además, cuál es la mejor manera de implementarlos en la GPU.
Royi
2
@Drazick, las GPU son un juego completamente diferente. requiriendo otra pregunta.
Trevor Boyd Smith

Respuestas:

9

En primer lugar, un poco de wikipedia sobre la implementación directa de formularios I y II .

La forma directa I requiere más memoria, pero es una estrategia algo más simple y es menos probable que tenga problemas de redondeo y resonancia.

La forma directa II requiere menos memoria, pero tiene el potencial de interacciones inusuales, números más grandes y más errores de redondeo. Gran parte de esto puede reducirse en cascada con filtros más pequeños, especialmente filtros de segundo orden.

PearsonArtPhoto
fuente
2
En cualquier caso, debería estar en cascada de secciones de segundo orden.
Oliver Charlesworth
1
Entonces, en resumen, ¿es el intercambio de memoria vs error de redondeo?
anasimtiaz
2
Súper débil respuesta IMO. Técnicamente responde la pregunta ... pero solo "técnicamente". Me gustaría ver un código fuente en un idioma. Sé cómo implementar un filtro FIR que sea fácil. Veamos el código fuente IIR.
Trevor Boyd Smith
2
Además, en términos de operaciones matemáticas realizadas por muestra, ¿cuál es una mejor implementación I o II?
anasimtiaz
1
Sé cómo hacer el filtrado FIR. También sé qué es la forma directa I / II / III / IV. lo que no tengo experiencia es IIR: diseño o implementación. Mi comentario original no fue muy constructivo. Debería haber dicho "Entiendo lo que es la forma directa I-IV, ¿podría hablar más sobre cómo diseñar / implementar un filtro IIR?"
Trevor Boyd Smith
9

Un poco anticuado, pero puede merecer una respuesta más completa, especialmente porque Direct Form II puede meterte en muchos problemas. En primer lugar, no existe una "talla única" y la mejor opción depende de su aplicación y limitaciones específicas. Lo que puedes considerar es

  1. Memoria: el Formulario directo II y el Formulario transpuesto II requieren un poco menos de memoria de estado que el Formulario directo I y el Formulario transpuesto I, pero en una implementación de sección de segundo orden en cascada la diferencia es menor
  2. MIPS: en términos de número de multiplicaciones y adiciones, las cuatro implementaciones son las mismas. Sin embargo, dependiendo del conjunto de instrucciones del procesador específico, puede haber diferencias significativas en la eficiencia de implementación. Entonces "depende".
  3. Propiedades de punto fijo: esto hace una gran diferencia. Principalmente, debe asegurarse de que sus variables de estado no se desborden, por lo que debe analizar la función de transferencia entre las entradas / salidas y las variables de estado. Aquí Direct Form I y Transposed Form II son los claros ganadores. Las variables de estado están vinculadas a + 106dB o alrededor de entrada y salida. En la Forma II directa, por ejemplo, la función de transferencia de entrada a estado viene dada únicamente por los polos. He visto ejemplos del mundo real en los que esto puede superar los 100 dB de ganancia. Este es un absoluto no no para la implementación de punto fijo.
  4. Ruido: en términos de truncamiento y error de redondeo, todas las implementaciones son más o menos las mismas. El problema de la función de transferencia de variable de estado mencionado en 3) también afecta esto en cierta medida y he visto problemas de ruido audible con los filtros Direct Form II incluso cuando se utiliza el punto flotante de 32 bits.

Entonces, en resumen, el Formulario Transpuesto II es, con frecuencia, la mejor opción. En algunos escenarios de punto fijo, especialmente si hay problemas de ruido significativos, Direct Form I es mejor, ya que puede aumentarse más fácilmente con cosas como Error Spectrum Shaping, etc.

Hilmar
fuente
¡Esta es una respuesta mucho más completa y mejor!
Lorem Ipsum
2
Hoy descubrí, de una manera mucho más difícil, por qué Direct Form I es una mejor opción para mi solicitud. Gracias por una muy buena respuesta!
anasimtiaz
1

A menos que trabaje con un sistema con muy pocos recursos o tenga requisitos extremos, en la práctica realmente no importa si elige la forma directa I o II. Por ejemplo, si estás haciendo cosas en una PC o un teléfono inteligente, realmente no importa. Personalmente, prefiero el Formulario I.

El problema real es normalmente MIPS y si planea hacer una implementación de punto fijo, las cosas se vuelven más complicadas. Por ejemplo, en ARM, su filtro IIR consumirá mucho más MIPS si ambos coeficientes y estados de filtro son de 32 bits. Se requieren 32 bits en estados y coeficientes si necesita implementar, por ejemplo, un filtro de paso bajo con una frecuencia de corte muy baja. En esos casos, puede usar un tipo diferente de filtro, como por ejemplo un filtro de estado variable.

niaren
fuente
1

Además de las diferencias técnicas como la precisión numérica, también existe el problema de la estabilidad. Cuando los filtros digitales tienen pares polo / cero cerca uno del otro, la respuesta de frecuencia puede volverse inestable en varios lugares (por lo general, se acerca a Nyquist o se acerca a cero).

Cuando los filtros IIR se usan para aplicaciones musicales, la elección de la realización puede tener un profundo efecto en la estabilidad del filtro cuando los parámetros del filtro se modulan en tiempo real (por ejemplo, variando la frecuencia de corte en un filtro de paso bajo).

Tengo una aplicación de código abierto que le permite escuchar las diferencias, mientras que parámetros que varían en el tiempo, como la frecuencia de corte o la ganancia máxima, de cada una de las siguientes realizaciones:

  • Formulario directo I
  • Formulario directo II
  • Formulario directo transpuesto I
  • Formulario directo transpuesto II
  • Formulario de celosía
  • Variable de estado

El proyecto está aquí:

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

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

Captura de pantalla

Vinnie Falco
fuente
1
Has publicado esto varias veces, y estoy dispuesto a hacer cumplir la política de spam a menos que tus respuestas estén realmente adaptadas a las preguntas. Ninguna de estas publicaciones responde preguntas directamente, y también promociona un producto. Edítelos para responder directamente a las preguntas o se eliminarán.
Phonon
0

Además de los comentarios anteriores sobre memoria, MIPS, ruido y estabilidad; Hay otro factor que comúnmente se pasa por alto. Este factor es la capacidad de reinicio; lo cual es muy importante en la mayoría de mis situaciones.

Con una implementación Direct Form II, no hay estados para las salidas retrasadas, por lo tanto, si "restablece" un filtro Direct Form II para decir "5", su salida inicial no será 5. Considero que esto es bastante contrario. -intuitivo que ha causado cierta frustración al usar Simulink. Por esta razón, casi siempre uso una implementación de Formulario directo I. Desafortunadamente, Simulink solo admite Direct Form I si tiene la caja de herramientas DSP, e incluso así no le permite establecer las condiciones iniciales de una señal de entrada.

Kyle
fuente