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?
filters
infinite-impulse-response
anasimtiaz
fuente
fuente
Respuestas:
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.
fuente
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
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.
fuente
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.
fuente
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:
El proyecto está aquí:
https://github.com/vinniefalco/DSPFiltersDemo.git
https://github.com/vinniefalco/DSPFilters.git
fuente
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.
fuente