Quels facteurs dois-je prendre en compte lors du choix d'une réalisation de filtre IIR?

16

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?

anasimtiaz
la source
De plus, quelle est la meilleure façon de les implémenter sur GPU.
Royi
2
@Drazick, les GPU sont un tout autre jeu. nécessitant une autre quesiton.
Trevor Boyd Smith

Réponses:

9

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.

PearsonArtPhoto
la source
2
Dans les deux cas, vous devez mettre en cascade les sections de second ordre.
Oliver Charlesworth
1
Donc, en bref, est-ce un compromis mémoire vs erreur d'arrondi?
anasimtiaz
2
Réponse super faible OMI. Techniquement, cela répond à la question ... mais seulement "techniquement". Je voudrais voir du code source dans une langue. Je sais comment mettre en œuvre un filtre FIR qui est facile. Voyons le code source de l'IIF.
Trevor Boyd Smith,
2
Aussi, en termes d'opérations mathématiques effectuées par échantillon, quelle est la meilleure implémentation I ou II?
anasimtiaz
1
je sais faire le filtrage FIR. je sais aussi ce qu'est la forme directe I / II / III / IV. ce que je n'ai pas d'expérience, c'est l'IIF: conception ou implémentation. Mon commentaire initial n'était pas très constructif. J'aurais dû dire "Je comprends ce qu'est la forme directe I-IV, pourriez-vous nous en dire plus sur la façon dont vous concevez / implémentez un filtre IIR?"
Trevor Boyd Smith, le
9

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

  1. Mémoire: Direct Form II et Transposed Form II prennent un peu moins de mémoire d'état que Direct Form I et Transposed Form I mais dans une implémentation en cascade de deuxième ordre, la différence est mineure
  2. MIPS: En termes de nombre de multiplications et d'ajouts, les quatre implémentations sont identiques. Cependant, selon le jeu d'instructions du processeur spécifique, il peut y avoir des différences significatives dans l'efficacité de l'implémentation. Donc "ça dépend".
  3. Propriétés des points fixes: cela fait une énorme différence. Vous devez principalement vous assurer que vos variables d'état ne débordent pas, vous devez donc analyser la fonction de transfert entre les entrées / sorties et les variables d'état. Ici, la forme directe I et la forme transposée II sont clairement gagnantes. Les variables d'état sont liées à + 106 dB ou environ par rapport à l'entrée et à la sortie. Dans la forme II directe par exemple, la fonction de transfert de l'entrée à l'état est donnée uniquement par les pôles. J'ai vu des exemples réels où cela peut en fait dépasser 100 dB de gain. Il s'agit d'un non non absolu pour la mise en œuvre de points fixes.
  4. Bruit: En termes de troncature et d'erreur d'arrondi, toutes les implémentations sont à peu près les mêmes. Le problème de la fonction de transfert de variable d'état mentionné en 3) affecte également cela dans une certaine mesure et j'ai vu des problèmes de bruit audible avec les filtres Direct Form II même lors de l'utilisation de virgule flottante 32 bits.

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.

Hilmar
la source
C'est une réponse beaucoup plus complète et meilleure!
Lorem Ipsum,
2
J'ai compris aujourd'hui - de manière beaucoup plus difficile - pourquoi Direct Form I est un meilleur choix pour mon application. Merci pour une très bonne réponse!
anasimtiaz
1

À 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.

niaren
la source
1

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:

  • Forme directe I
  • Formulaire direct II
  • Forme directe transposée I
  • Formulaire direct transposé II
  • Forme de réseau
  • État variable

Le projet est ici:

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

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

Capture d'écran

Vinnie Falco
la source
1
Vous l'avez posté plusieurs fois, et je suis enclin à appliquer la politique de spam à moins que vos réponses soient réellement adaptées aux questions. Aucun de ces messages ne répond directement aux questions et ne fait également la promotion d'un produit. Modifiez-les pour répondre directement aux questions ou elles seront supprimées.
Phonon
0

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.

Kyle
la source