Les filtres IIR peuvent être implémentés sous forme directe 1 ou 2 . Mais comment décidez-vous du formulaire à utiliser? Quels sont les avantages et les inconvénients de chacun?
Les filtres IIR peuvent être implémentés sous forme directe 1 ou 2 . Mais comment décidez-vous du formulaire à utiliser? Quels sont les avantages et les inconvénients de chacun?
Réponses:
Tout d'abord, un peu de Wikipédia sur la mise en œuvre de Direct Form I et II .
La forme directe I nécessite plus de mémoire, mais est une stratégie un peu plus simple et est moins susceptible d'avoir des problèmes d'arrondi et de résonance.
La forme directe II nécessite moins de mémoire, mais elle a le potentiel d'interactions inhabituelles, de plus grands nombres et plus d'erreurs d'arrondi. Une grande partie de cela peut être réduite en cascadant des filtres plus petits, en particulier des filtres de second ordre.
Un peu daté mais peut mériter une réponse plus complète, d'autant plus que Direct Form II peut vous causer beaucoup de problèmes. Tout d'abord, il n'y a pas de solution unique et le meilleur choix dépend de votre application et de vos contraintes spécifiques. Ce que vous pouvez considérer, c'est
Donc, en résumé, le formulaire transposé II est le plus souvent le meilleur choix. Dans certains scénarios à virgule fixe, surtout s'il y a des problèmes de bruit importants, la forme directe I est meilleure car elle peut être plus facilement augmentée avec des choses comme la mise en forme du spectre d'erreur, etc.
À moins que vous ne travailliez avec un système très pauvre en ressources ou que vous ayez des exigences extrêmes, peu importe dans la pratique si vous choisissez la forme directe I ou II. Par exemple, si vous faites des choses sur un PC ou un smartphone, cela n'a vraiment pas d'importance. Personnellement, je préfère le formulaire I.
Le vrai problème est normalement MIPS et si vous prévoyez de faire une implémentation à virgule fixe, les choses deviennent plus compliquées. Par exemple, sur ARM, votre filtre IIR consommera beaucoup plus de MIPS si les coefficients et les états du filtre sont à 32 bits. 32 bits dans les états et les coefficients est une exigence si vous devez par exemple implémenter un filtre passe-bas avec une fréquence de coupure très basse. Dans ces cas, vous pouvez utiliser un type de filtre différent, comme par exemple un filtre à variable d'état.
Outre les différences techniques telles que la précision numérique, il y a aussi le problème de la stabilité. Lorsque les filtres numériques ont des paires pôle / zéro proches les unes des autres, la réponse en fréquence peut devenir instable à divers endroits (approchant généralement Nyquist ou approchant zéro).
Lorsque les filtres IIR sont utilisés pour des applications musicales, le choix de la réalisation peut avoir un effet profond sur la stabilité du filtre lorsque les paramètres du filtre sont modulés en temps réel (par exemple, faire varier la fréquence de coupure sur un filtre passe-bas).
J'ai une application open source qui vous permet d'écouter les différences, tout en variant les paramètres temporels tels que la fréquence de coupure ou le gain de crête, de chacune des réalisations suivantes:
Le projet est ici:
En plus des commentaires ci-dessus sur la mémoire, MIPS, le bruit et la stabilité; il y a un autre facteur qui est généralement négligé. Ce facteur est la capacité de réinitialisation; qui se trouve être très important dans la plupart de mes situations.
Avec une implémentation Direct Form II, il n'y a pas d'états pour les sorties retardées, donc si vous "réinitialisez" un filtre Direct Form II pour dire "5", sa sortie initiale ne sera pas 5. Je trouve que c'est tout à fait contraire -intuitif qui a provoqué une grande frustration lors de l'utilisation de Simulink. Pour cette raison, j'utilise presque toujours une implémentation Direct Form I. Malheureusement, Simulink ne prend en charge Direct Form I que si vous avez la boîte à outils DSP, et même dans ce cas, il ne vous permet toujours pas de définir les conditions initiales à partir d'un signal d'entrée.